Documentation Source Text

Hex Artifact Content
Login

Artifact f050d1517a9b34205ddbefed7d37f3e0e58952c1:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 7b 57 49 54 48 20 63 6c 61 75  .    {{WITH clau
03d0: 73 65 7d 20 77 69 74 68 63 6c 61 75 73 65 7d 0a  se} withclause}.
03e0: 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d      {comment com
03f0: 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c 41  ment}.    {EXPLA
0400: 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20 20  IN explain}.    
0410: 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72  {expression expr
0420: 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54 52  }.    {{BEGIN TR
0430: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
0440: 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43 4f  action}.    {{CO
0450: 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e  MMIT TRANSACTION
0460: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f  } transaction CO
0470: 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44 20  MMIT}.    {{END 
0480: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
0490: 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54 7d  nsaction COMMIT}
04a0: 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20  .    {{ROLLBACK 
04b0: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
04c0: 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41 43  nsaction ROLLBAC
04d0: 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49 4e  K}.    {SAVEPOIN
04e0: 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20 20  T savepoint}.   
04f0: 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45 50   {{RELEASE SAVEP
0500: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
0510: 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20 7b  SAVEPOINT}.    {
0520: 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68 74  PRAGMA pragma.ht
0530: 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f 4e  ml}.    {{ON CON
0540: 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f  FLICT clause} co
0550: 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43 52  nflict}.    {{CR
0560: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
0570: 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52 4f  eview}.    {{DRO
0580: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
0590: 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20 54  }.    {{CREATE T
05a0: 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72  RIGGER} createtr
05b0: 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52 4f  igger}.    {{DRO
05c0: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
05d0: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41 54  rigger}.    {{AT
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
05f0: 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45 54  ttach}.    {{DET
0600: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
0610: 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45 49  tach}.      {REI
0620: 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20  NDEX reindex}.  
0630: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
0640: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20   altertable}.   
0650: 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c   {{ANALYZE} anal
0660: 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58  yze}.    {{INDEX
0670: 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
0680: 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74  }.    {{aggregat
0690: 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e functions} agg
06a0: 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20  func aggfunc}.  
06b0: 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f    {{core functio
06c0: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72  ns} corefunc cor
06d0: 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74  efunc}.    {{dat
06e0: 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
06f0: 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64  ions} datefunc d
0700: 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65  atefunc}.    {ke
0710: 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20  ywords keywords 
0720: 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a  {SQL keywords}}.
0730: 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f 73    }.  set lang_s
0740: 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78  ection_break [ex
0750: 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c  pr {([llength $l
0760: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
0770: 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61  ]+2)/3}].  forea
0780: 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73  ch {section} [ls
0790: 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69  ort -index 0 -di
07a0: 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73  ctionary $lang_s
07b0: 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20  ection_list] {. 
07c0: 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c   foreach {s_titl
07d0: 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73  e s_tag s_kw} $s
07e0: 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b  ection {}.  if {
07f0: 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20  $s_kw == ""} {. 
0800: 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74     set s_kw $s_t
0810: 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24  itle.  }.  if {$
0820: 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68  s_tag=="pragma.h
0830: 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  tml"} {.    set 
0840: 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65  url $s_tag.  } e
0850: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72  lse {.    set ur
0860: 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74  l lang_$s_tag.ht
0870: 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f  ml.  }.  hd_reso
0880: 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77  lve "<li>\[$s_kw
0890: 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e  |$s_title\]</li>
08a0: 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20  ".  incr i.  if 
08b0: 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69  {$i==$lang_secti
08c0: 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d  on_break || $i==
08d0: 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f  2*$lang_section_
08e0: 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f  break} {.    hd_
08f0: 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e  puts "</ul></td>
0900: 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
0910: 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c  \"><ul>".  }.}.<
0920: 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e  /tcl>.</ul></td>
0930: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  </tr></table>..<
0940: 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20  p>^The routines 
0950: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0960: 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33  _v2()], [sqlite3
0970: 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71  _prepare()],.[sq
0980: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
0990: 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  )], [sqlite3_pre
09a0: 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a 5b  pare16_v2()], .[
09b0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 2c  sqlite3_exec()],
09c0: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67 65   and [sqlite3_ge
09d0: 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65 70  t_table()] accep
09e0: 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  t.an SQL stateme
09f0: 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d  nt list (sql-stm
0a00: 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69 73  t-list) which is
0a10: 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70   a semicolon-sep
0a20: 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20 73  arated.list of s
0a30: 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a  tatements.</p>..
0a40: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
0a50: 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74  am sql-stmt-list
0a60: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20  </tcl>..<p>Each 
0a70: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  SQL statement in
0a80: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6c   the statement l
0a90: 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ist is an instan
0aa0: 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77  ce of the.follow
0ab0: 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ing:</p>..<tcl>B
0ac0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
0ad0: 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63  -stmt</tcl>..<tc
0ae0: 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72  l>.proc Operator
0af0: 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75   {name} {.  retu
0b00: 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  rn "<font color=
0b10: 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67  \"#2c2cf0\"><big
0b20: 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f  >$name</big></fo
0b30: 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74  nt>".}.proc Nont
0b40: 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b  erminal {name} {
0b50: 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66  .  return "<i><f
0b60: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33  ont color=\"#ff3
0b70: 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e  434\">$name</fon
0b80: 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b  t></i>".}.proc K
0b90: 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a  eyword {name} {.
0ba0: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0bb0: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0bc0: 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a  ">$name</font>".
0bd0: 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b  }.proc Example {
0be0: 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74  text} {.  hd_put
0bf0: 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  s "<blockquote><
0c00: 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c  pre>$text</pre><
0c10: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a  /blockquote>".}.
0c20: 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e  .proc Section {n
0c30: 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72  ame label keywor
0c40: 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44  ds} {.  global D
0c50: 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61  OC.  hd_close_ma
0c60: 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69  in.  hd_open_mai
0c70: 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74  n lang_$label.ht
0c80: 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20 22  ml.  hd_header "
0c90: 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61 6e  SQLite Query Lan
0ca0: 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24 44  guage: $name" $D
0cb0: 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e  OC/pages/lang.in
0cc0: 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f  .  eval hd_keywo
0cd0: 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20  rds $keywords.  
0ce0: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b 65  if {[lsearch $ke
0cf0: 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d 3d  ywords $name] ==
0d00: 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68 20   -1 && [lsearch 
0d10: 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d 65  $keywords *$name
0d20: 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65  ] == -1} {.    e
0d30: 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  val hd_keywords 
0d40: 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20  { $name }.  }.  
0d50: 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c 69  hd_puts {<h1 ali
0d60: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c 20  gn="center">SQL 
0d70: 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79  As Understood By
0d80: 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20 20   SQLite</h1>}.  
0d90: 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20 68  hd_puts {<p><a h
0da0: 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e  ref="lang.html">
0db0: 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a 20  [Top]</a></p>}. 
0dc0: 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24 6e   hd_puts "<h2>$n
0dd0: 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23 23  ame</h2>".}..###
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e20: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
0e30: 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c  tion {ALTER TABL
0e40: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b  E} altertable {{
0e50: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a 41  ALTER TABLE} {*A
0e60: 4c 54 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  LTER}}..Recursiv
0e70: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
0e80: 6c 74 65 72 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  lter-table-stmt.
0e90: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 53 51 4c 69 74  </tcl>..<p>SQLit
0ea0: 65 20 73 75 70 70 6f 72 74 73 20 61 20 6c 69 6d  e supports a lim
0eb0: 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20 41  ited subset of A
0ec0: 4c 54 45 52 20 54 41 42 4c 45 2e 0a 54 68 65 20  LTER TABLE..The 
0ed0: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
0ee0: 61 6e 64 20 69 6e 20 53 51 4c 69 74 65 20 61 6c  and in SQLite al
0ef0: 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74 6f  lows the user to
0f00: 20 72 65 6e 61 6d 65 20 61 20 74 61 62 6c 65 0a   rename a table.
0f10: 6f 72 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  or to add a new 
0f20: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
0f30: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 3c 2f 70  sting table..</p
0f40: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f50: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 69 73  AME TO syntax is
0f60: 20 75 73 65 64 20 74 6f 20 72 65 6e 61 6d 65 20   used to rename 
0f70: 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  the table identi
0f80: 66 69 65 64 20 62 79 20 0a 3c 69 3e 26 23 39 31  fied by .<i>&#91
0f90: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26  ;database-name.&
0fa0: 23 39 33 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  #93;table-name</
0fb0: 69 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62  i> to <i>new-tab
0fc0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54  le-name</i>.)^.T
0fd0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e  his command .can
0fe0: 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d  not be used to m
0ff0: 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65 74 77  ove a table betw
1000: 65 65 6e 20 61 74 74 61 63 68 65 64 20 64 61 74  een attached dat
1010: 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20  abases, only to 
1020: 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20  rename .a table 
1030: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
1040: 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
1050: 70 3e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  p> ^If the table
1060: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68   being renamed h
1070: 61 73 20 74 72 69 67 67 65 72 73 20 6f 72 20 69  as triggers or i
1080: 6e 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65  ndices, then the
1090: 73 65 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68  se remain.attach
10a0: 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ed to the table 
10b0: 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
10c0: 6e 20 72 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77  n renamed.  ^How
10d0: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
10e0: 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66 69  re.any view defi
10f0: 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74  nitions, or stat
1100: 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20  ements executed 
1110: 62 79 20 74 72 69 67 67 65 72 73 20 74 68 61 74  by triggers that
1120: 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74 61   refer to.the ta
1130: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1140: 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74  d, these are not
1150: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d   automatically m
1160: 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65 20 74  odified to use t
1170: 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d  he new.table nam
1180: 65 2e 20 49 66 20 74 68 69 73 20 69 73 20 72 65  e. If this is re
1190: 71 75 69 72 65 64 2c 20 74 68 65 20 74 72 69 67  quired, the trig
11a0: 67 65 72 73 20 6f 72 20 76 69 65 77 20 64 65 66  gers or view def
11b0: 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62 65  initions must be
11c0: 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63  .dropped and rec
11d0: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
11e0: 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d 65  e new table name
11f0: 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a   by hand..</p>..
1200: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62  <blockquote><tab
1210: 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63 65  le border="1" ce
1220: 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 3e 0a  llpadding="10">.
1230: 3c 74 72 3e 3c 74 64 3e 0a 3c 65 6d 3e 49 6d 70  <tr><td>.<em>Imp
1240: 6f 72 74 61 6e 74 20 4e 6f 74 65 3a 3c 2f 65 6d  ortant Note:</em
1250: 3e 0a 54 68 65 20 27 41 4c 54 45 52 20 54 41 42  >.The 'ALTER TAB
1260: 4c 45 20 2e 2e 2e 20 52 45 4e 41 4d 45 20 54 4f  LE ... RENAME TO
1270: 20 2e 2e 2e 27 20 63 6f 6d 6d 61 6e 64 20 64 6f   ...' command do
1280: 65 73 20 6e 6f 74 20 75 70 64 61 74 65 20 61 63  es not update ac
1290: 74 69 6f 6e 0a 73 74 61 74 65 6d 65 6e 74 73 20  tion.statements 
12a0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
12b0: 6f 72 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  or SELECT statem
12c0: 65 6e 74 73 20 77 69 74 68 69 6e 20 76 69 65 77  ents within view
12d0: 73 2e 0a 49 66 20 74 68 65 20 74 61 62 6c 65 20  s..If the table 
12e0: 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 69 73  being renamed is
12f0: 20 72 65 66 65 72 65 6e 63 65 64 20 66 72 6f 6d   referenced from
1300: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1310: 20 6f 72 20 76 69 65 77 73 2c 0a 74 68 65 6e 20   or views,.then 
1320: 74 68 6f 73 65 20 74 72 69 67 67 65 72 73 20 61  those triggers a
1330: 6e 64 20 76 69 65 77 73 20 6d 75 73 74 20 62 65  nd views must be
1340: 20 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63   dropped and rec
1350: 72 65 61 74 65 64 20 73 65 70 61 72 61 74 65 6c  reated separatel
1360: 79 0a 62 79 20 74 68 65 20 61 70 70 6c 69 63 61  y.by the applica
1370: 74 69 6f 6e 2e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e  tion..</td></tr>
1380: 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
1390: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 49 66 20 5b  quote>..<p>^If [
13a0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
13b0: 74 72 61 69 6e 74 73 5d 20 61 72 65 20 0a 5b 66  traints] are .[f
13c0: 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61 67  oreign_keys prag
13d0: 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20 77 68  ma | enabled] wh
13e0: 65 6e 20 61 20 74 61 62 6c 65 20 69 73 20 72 65  en a table is re
13f0: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 61 6e 79 0a  named, then any.
1400: 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61  [foreign-key-cla
1410: 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45 53  use | REFERENCES
1420: 20 63 6c 61 75 73 65 73 5d 20 69 6e 20 61 6e 79   clauses] in any
1430: 20 74 61 62 6c 65 20 28 65 69 74 68 65 72 20 74   table (either t
1440: 68 65 0a 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he.table being r
1450: 65 6e 61 6d 65 64 20 6f 72 20 73 6f 6d 65 20 6f  enamed or some o
1460: 74 68 65 72 20 74 61 62 6c 65 29 0a 74 68 61 74  ther table).that
1470: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 74 61   refer to the ta
1480: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1490: 64 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 74  d are modified t
14a0: 6f 20 72 65 66 65 72 20 0a 74 6f 20 74 68 65 20  o refer .to the 
14b0: 72 65 6e 61 6d 65 64 20 74 61 62 6c 65 20 62 79  renamed table by
14c0: 20 69 74 73 20 6e 65 77 20 6e 61 6d 65 2e 0a 0a   its new name...
14d0: 3c 70 3e 20 5e 54 68 65 20 41 44 44 20 43 4f 4c  <p> ^The ADD COL
14e0: 55 4d 4e 20 73 79 6e 74 61 78 0a 69 73 20 75 73  UMN syntax.is us
14f0: 65 64 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  ed to add a new 
1500: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
1510: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 54 68  sting table..^Th
1520: 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20  e new column is 
1530: 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64 20  always appended 
1540: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
1550: 65 20 6c 69 73 74 20 6f 66 20 65 78 69 73 74 69  e list of existi
1560: 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20  ng columns..The 
1570: 5b 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c  [column-def] rul
1580: 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 68  e defines the ch
1590: 61 72 61 63 74 65 72 69 73 74 69 63 73 20 6f 66  aracteristics of
15a0: 20 74 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e   the new column.
15b0: 0a 5e 28 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  .^(The new colum
15c0: 6e 20 6d 61 79 20 74 61 6b 65 20 61 6e 79 20 6f  n may take any o
15d0: 66 20 74 68 65 20 66 6f 72 6d 73 20 70 65 72 6d  f the forms perm
15e0: 69 73 73 69 62 6c 65 20 69 6e 20 61 20 5b 43 52  issible in a [CR
15f0: 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
1600: 65 6d 65 6e 74 2c 20 77 69 74 68 20 74 68 65 20  ement, with the 
1610: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69  following restri
1620: 63 74 69 6f 6e 73 3a 29 5e 0a 3c 75 6c 3e 0a 3c  ctions:)^.<ul>.<
1630: 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d  li>^The column m
1640: 61 79 20 6e 6f 74 20 68 61 76 65 20 61 20 50 52  ay not have a PR
1650: 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 55 4e 49  IMARY KEY or UNI
1660: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 3c  QUE constraint.<
1670: 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f  /li>.<li>^The co
1680: 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76  lumn may not hav
1690: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
16a0: 65 20 6f 66 20 43 55 52 52 45 4e 54 5f 54 49 4d  e of CURRENT_TIM
16b0: 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c  E, CURRENT_DATE,
16c0: 20 0a 20 20 20 20 43 55 52 52 45 4e 54 5f 54 49   .    CURRENT_TI
16d0: 4d 45 53 54 41 4d 50 2c 20 6f 72 20 61 6e 20 65  MESTAMP, or an e
16e0: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 70 61 72  xpression in par
16f0: 65 6e 74 68 65 73 65 73 2e 3c 2f 6c 69 3e 0a 3c  entheses.</li>.<
1700: 6c 69 3e 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c  li>^If a NOT NUL
1710: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  L constraint is 
1720: 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
1730: 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20  the column must 
1740: 68 61 76 65 20 61 0a 20 20 20 20 64 65 66 61 75  have a.    defau
1750: 6c 74 20 76 61 6c 75 65 20 6f 74 68 65 72 20 74  lt value other t
1760: 68 61 6e 20 4e 55 4c 4c 2e 0a 3c 6c 69 3e 5e 49  han NULL..<li>^I
1770: 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  f [foreign key c
1780: 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20  onstraints] are 
1790: 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72  [foreign_keys pr
17a0: 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20  agma | enabled] 
17b0: 61 6e 64 0a 20 20 20 20 61 20 63 6f 6c 75 6d 6e  and.    a column
17c0: 20 77 69 74 68 20 61 20 5b 66 6f 72 65 69 67 6e   with a [foreign
17d0: 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52 45  -key-clause | RE
17e0: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 5d  FERENCES clause]
17f0: 0a 20 20 20 20 69 73 20 61 64 64 65 64 2c 20 74  .    is added, t
1800: 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68  he column must h
1810: 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 76 61  ave a default va
1820: 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a 3c 2f 75  lue of NULL..</u
1830: 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 61 6c 73  l>..<p>^Note als
1840: 6f 20 74 68 61 74 20 77 68 65 6e 20 61 64 64 69  o that when addi
1850: 6e 67 20 61 20 5b 43 48 45 43 4b 20 63 6f 6e 73  ng a [CHECK cons
1860: 74 72 61 69 6e 74 5d 2c 20 74 68 65 20 43 48 45  traint], the CHE
1870: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 0a 69 73  CK constraint.is
1880: 20 6e 6f 74 20 74 65 73 74 65 64 20 61 67 61 69   not tested agai
1890: 6e 73 74 20 70 72 65 65 78 69 73 74 69 6e 67 20  nst preexisting 
18a0: 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c  rows of the tabl
18b0: 65 2e 0a 5e 54 68 69 73 20 63 61 6e 20 72 65 73  e..^This can res
18c0: 75 6c 74 20 69 6e 20 61 20 74 61 62 6c 65 20 74  ult in a table t
18d0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 64 61 74  hat contains dat
18e0: 61 20 74 68 61 74 0a 69 73 20 69 6e 20 76 69 6f  a that.is in vio
18f0: 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 43 48  lation of the CH
1900: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ECK constraint. 
1910: 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   Future versions
1920: 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68 74   of SQLite might
1930: 0a 63 68 61 6e 67 65 20 74 6f 20 76 61 6c 69 64  .change to valid
1940: 61 74 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  ate CHECK constr
1950: 61 69 6e 74 73 20 61 73 20 74 68 65 79 20 61 72  aints as they ar
1960: 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  e added.</p>..<p
1970: 3e 20 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20  > The execution 
1980: 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54 45  time of the ALTE
1990: 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  R TABLE command 
19a0: 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6f  is independent o
19b0: 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  f.the amount of 
19c0: 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62 6c  data in the tabl
19d0: 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54 41  e.  The ALTER TA
19e0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73  BLE command runs
19f0: 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20 61   as quickly.on a
1a00: 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20 6d   table with 10 m
1a10: 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20 69  illion rows as i
1a20: 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62 6c  t does on a tabl
1a30: 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c 2f  e with 1 row..</
1a40: 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44 44  p>..<p>After ADD
1a50: 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65 6e   COLUMN has been
1a60: 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62 61   run on a databa
1a70: 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61 73  se, that databas
1a80: 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72 65  e will not.be re
1a90: 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74 65  adable by SQLite
1aa0: 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20 61   version 3.1.3 a
1ab0: 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a  nd earlier.</p>.
1ac0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
1ad0: 74 20 6f 74 68 65 72 61 6c 74 65 72 3c 2f 74 63  t otheralter</tc
1ae0: 6c 3e 0a 3c 68 33 3e 4d 61 6b 69 6e 67 20 4f 74  l>.<h3>Making Ot
1af0: 68 65 72 20 4b 69 6e 64 73 20 4f 66 20 54 61 62  her Kinds Of Tab
1b00: 6c 65 20 53 63 68 65 6d 61 20 43 68 61 6e 67 65  le Schema Change
1b10: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 54 68 65 20  s</h3>..<p> The 
1b20: 6f 6e 6c 79 20 73 63 68 65 6d 61 20 61 6c 74 65  only schema alte
1b30: 72 69 6e 67 20 63 6f 6d 6d 61 6e 64 73 20 64 69  ring commands di
1b40: 72 65 63 74 6c 79 20 73 75 70 70 6f 72 74 65 64  rectly supported
1b50: 20 62 79 20 53 51 4c 69 74 65 20 61 72 65 20 74   by SQLite are t
1b60: 68 65 0a 22 72 65 6e 61 6d 65 20 74 61 62 6c 65  he."rename table
1b70: 22 20 61 6e 64 20 22 61 64 64 20 63 6f 6c 75 6d  " and "add colum
1b80: 6e 22 20 63 6f 6d 6d 61 6e 64 73 20 73 68 6f 77  n" commands show
1b90: 6e 20 61 62 6f 76 65 2e 20 20 48 6f 77 65 76 65  n above.  Howeve
1ba0: 72 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  r, applications.
1bb0: 63 61 6e 20 6d 61 6b 65 20 6f 74 68 65 72 20 61  can make other a
1bc0: 72 62 69 74 72 61 72 79 20 63 68 61 6e 67 65 73  rbitrary changes
1bd0: 20 74 6f 20 74 68 65 20 66 6f 72 6d 61 74 20 6f   to the format o
1be0: 66 20 61 20 74 61 62 6c 65 20 75 73 69 6e 67 20  f a table using 
1bf0: 61 20 73 69 6d 70 6c 65 0a 73 65 71 75 65 6e 63  a simple.sequenc
1c00: 65 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e  e of operations.
1c10: 0a 54 68 65 20 73 74 65 70 73 20 74 6f 20 6d 61  .The steps to ma
1c20: 6b 65 20 61 72 62 69 74 72 61 72 79 20 63 68 61  ke arbitrary cha
1c30: 6e 67 65 73 20 74 6f 20 74 68 65 20 73 63 68 65  nges to the sche
1c40: 6d 61 20 64 65 73 69 67 6e 20 6f 66 20 73 6f 6d  ma design of som
1c50: 65 20 74 61 62 6c 65 20 58 0a 61 72 65 20 61 73  e table X.are as
1c60: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a   follows:..<ol>.
1c70: 3c 6c 69 3e 3c 70 3e 0a 52 65 6d 65 6d 62 65 72  <li><p>.Remember
1c80: 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61   the format of a
1c90: 6c 6c 20 69 6e 64 65 78 65 73 20 61 6e 64 20 74  ll indexes and t
1ca0: 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
1cb0: 65 64 20 77 69 74 68 20 74 61 62 6c 65 20 58 2e  ed with table X.
1cc0: 0a 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f  .This informatio
1cd0: 6e 20 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64  n will be needed
1ce0: 20 69 6e 20 73 74 65 70 20 37 20 62 65 6c 6f 77   in step 7 below
1cf0: 2e 20 20 4f 6e 65 20 77 61 79 20 74 6f 20 64 6f  .  One way to do
1d00: 20 74 68 69 73 20 69 73 0a 74 6f 20 72 75 6e 20   this is.to run 
1d10: 61 20 71 75 65 72 79 20 6c 69 6b 65 20 74 68 65  a query like the
1d20: 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 53 45 4c 45   following:.SELE
1d30: 43 54 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f  CT type, sql FRO
1d40: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1d50: 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d 65 3d 27  WHERE tbl_name='
1d60: 58 27 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65  X'...<li><p>.Use
1d70: 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20   [CREATE TABLE] 
1d80: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 61 20 6e  to construct a n
1d90: 65 77 20 74 61 62 6c 65 20 22 6e 65 77 5f 58 22  ew table "new_X"
1da0: 20 74 68 61 74 20 69 73 20 69 6e 20 74 68 65 20   that is in the 
1db0: 64 65 73 69 72 65 64 0a 72 65 76 69 73 65 64 20  desired.revised 
1dc0: 66 6f 72 6d 61 74 20 6f 66 20 74 61 62 6c 65 20  format of table 
1dd0: 58 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  X.  Make sure th
1de0: 61 74 20 74 68 65 20 6e 61 6d 65 20 22 6e 65 77  at the name "new
1df0: 5f 58 22 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6c  _X" does not col
1e00: 6c 69 64 65 0a 77 69 74 68 20 61 6e 79 20 65 78  lide.with any ex
1e10: 69 73 74 69 6e 67 20 74 61 62 6c 65 20 6e 61 6d  isting table nam
1e20: 65 2c 20 6f 66 20 63 6f 75 72 73 65 2e 0a 0a 3c  e, of course...<
1e30: 6c 69 3e 3c 70 3e 0a 54 72 61 6e 73 66 65 72 20  li><p>.Transfer 
1e40: 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 58 20 69  content from X i
1e50: 6e 74 6f 20 6e 65 77 5f 58 20 75 73 69 6e 67 20  nto new_X using 
1e60: 61 20 73 74 61 74 65 6d 65 6e 74 0a 6c 69 6b 65  a statement.like
1e70: 3a 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6e 65  : INSERT INTO ne
1e80: 77 5f 58 20 53 45 4c 45 43 54 20 2e 2e 2e 20 46  w_X SELECT ... F
1e90: 52 4f 4d 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ROM X...<li><p>.
1ea0: 49 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  If foreign key c
1eb0: 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 65  onstraints are e
1ec0: 6e 61 62 6c 65 64 2c 0a 64 69 73 61 62 6c 65 20  nabled,.disable 
1ed0: 74 68 65 6d 20 75 73 69 6e 67 20 5b 50 52 41 47  them using [PRAG
1ee0: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20  MA foreign_keys 
1ef0: 7c 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e  | PRAGMA foreign
1f00: 5f 6b 65 79 73 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69  _keys=OFF]...<li
1f10: 3e 3c 70 3e 0a 44 72 6f 70 20 74 68 65 20 6f 6c  ><p>.Drop the ol
1f20: 64 20 74 61 62 6c 65 20 58 3a 20 20 5b 44 52 4f  d table X:  [DRO
1f30: 50 20 54 41 42 4c 45 20 7c 20 44 52 4f 50 20 54  P TABLE | DROP T
1f40: 41 42 4c 45 20 58 5d 2e 0a 0a 3c 6c 69 3e 3c 70  ABLE X]...<li><p
1f50: 3e 0a 43 68 61 6e 67 65 20 74 68 65 20 6e 61 6d  >.Change the nam
1f60: 65 20 6f 66 20 6e 65 77 5f 58 20 74 6f 20 58 20  e of new_X to X 
1f70: 75 73 69 6e 67 3a 20 41 4c 54 45 52 20 54 41 42  using: ALTER TAB
1f80: 4c 45 20 6e 65 77 5f 58 20 52 45 4e 41 4d 45 20  LE new_X RENAME 
1f90: 54 4f 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55  TO X...<li><p>.U
1fa0: 73 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58  se [CREATE INDEX
1fb0: 5d 20 61 6e 64 20 5b 43 52 45 41 54 45 20 54 52  ] and [CREATE TR
1fc0: 49 47 47 45 52 5d 20 74 6f 20 72 65 63 6f 6e 73  IGGER] to recons
1fd0: 74 72 75 63 74 20 69 6e 64 65 78 65 73 20 61 6e  truct indexes an
1fe0: 64 20 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63  d triggers.assoc
1ff0: 69 61 74 65 64 20 77 69 74 68 20 74 61 62 6c 65  iated with table
2000: 20 58 2e 20 20 50 65 72 68 61 70 73 20 75 73 65   X.  Perhaps use
2010: 20 74 68 65 20 6f 6c 64 20 66 6f 72 6d 61 74 20   the old format 
2020: 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 73 20  of the triggers 
2030: 61 6e 64 0a 69 6e 64 65 78 65 73 20 73 61 76 65  and.indexes save
2040: 64 20 66 72 6f 6d 20 73 74 65 70 20 31 20 61 62  d from step 1 ab
2050: 6f 76 65 20 61 73 20 61 20 67 75 69 64 65 2c 20  ove as a guide, 
2060: 6d 61 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 61  making changes a
2070: 73 20 61 70 70 72 6f 70 72 69 61 74 65 0a 66 6f  s appropriate.fo
2080: 72 20 74 68 65 20 61 6c 74 65 72 61 74 69 6f 6e  r the alteration
2090: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f  ...<li><p>.If fo
20a0: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
20b0: 61 69 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69  aints were origi
20c0: 6e 61 6c 6c 79 20 65 6e 61 62 6c 65 64 20 28 70  nally enabled (p
20d0: 72 69 6f 72 20 74 6f 0a 73 74 65 70 20 34 29 20  rior to.step 4) 
20e0: 74 68 65 6e 20 72 75 6e 20 5b 50 52 41 47 4d 41  then run [PRAGMA
20f0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
2100: 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74 68  ck] to verify th
2110: 61 74 20 74 68 65 20 73 63 68 65 6d 61 0a 63 68  at the schema.ch
2120: 61 6e 67 65 20 64 69 64 20 6e 6f 74 20 62 72 65  ange did not bre
2130: 61 6b 20 61 6e 79 20 66 6f 72 65 69 67 6e 20 6b  ak any foreign k
2140: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  ey constraints, 
2150: 61 6e 64 20 72 75 6e 0a 5b 50 52 41 47 4d 41 20  and run.[PRAGMA 
2160: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 7c 20 50  foreign_keys | P
2170: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
2180: 79 73 3d 4f 4e 5d 20 74 6f 20 72 65 2d 65 6e 61  ys=ON] to re-ena
2190: 62 6c 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a  ble foreign key.
21a0: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 3c 6c  constraints...<l
21b0: 69 3e 3c 70 3e 49 66 20 61 6e 79 20 76 69 65 77  i><p>If any view
21c0: 73 20 72 65 66 65 72 20 74 6f 20 74 61 62 6c 65  s refer to table
21d0: 20 58 20 69 6e 20 61 20 77 61 79 20 74 68 61 74   X in a way that
21e0: 20 69 73 20 61 66 66 65 63 74 65 64 20 62 79 20   is affected by 
21f0: 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67  the.schema chang
2200: 65 2c 20 74 68 65 6e 20 64 72 6f 70 20 74 68 6f  e, then drop tho
2210: 73 65 20 76 69 65 77 73 20 75 73 69 6e 67 20 5b  se views using [
2220: 44 52 4f 50 20 56 49 45 57 5d 20 61 6e 64 20 72  DROP VIEW] and r
2230: 65 63 72 65 61 74 65 20 74 68 65 6d 0a 77 69 74  ecreate them.wit
2240: 68 20 77 68 61 74 65 76 65 72 20 63 68 61 6e 67  h whatever chang
2250: 65 73 20 61 72 65 20 6e 65 63 65 73 73 61 72 79  es are necessary
2260: 20 74 6f 20 61 63 63 6f 6d 6d 6f 64 61 74 65 20   to accommodate 
2270: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
2280: 65 0a 75 73 69 6e 67 20 5b 43 52 45 41 54 45 20  e.using [CREATE 
2290: 56 49 45 57 5d 2e 0a 0a 3c 2f 6f 6c 3e 0a 0a 3c  VIEW]...</ol>..<
22a0: 70 3e 54 68 65 20 70 72 6f 63 65 64 75 72 65 20  p>The procedure 
22b0: 61 62 6f 76 65 20 69 73 20 63 6f 6d 70 6c 65 74  above is complet
22c0: 65 6c 79 20 67 65 6e 65 72 61 6c 20 61 6e 64 20  ely general and 
22d0: 77 69 6c 6c 20 77 6f 72 6b 20 65 76 65 6e 20 69  will work even i
22e0: 66 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61  f the.schema cha
22f0: 6e 67 65 20 63 61 75 73 65 73 20 74 68 65 20 69  nge causes the i
2300: 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 74 6f 72 65  nformation store
2310: 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74  d in the table t
2320: 6f 20 63 68 61 6e 67 65 2e 0a 53 6f 20 74 68 65  o change..So the
2330: 20 66 75 6c 6c 20 70 72 6f 63 65 64 75 72 65 20   full procedure 
2340: 61 62 6f 76 65 20 69 73 20 61 70 70 72 6f 70 72  above is appropr
2350: 69 61 74 65 20 66 6f 72 20 64 72 6f 70 70 69 6e  iate for droppin
2360: 67 20 61 20 63 6f 6c 75 6d 6e 2c 0a 63 68 61 6e  g a column,.chan
2370: 67 69 6e 67 20 74 68 65 20 6f 72 64 65 72 20 6f  ging the order o
2380: 66 20 63 6f 6c 75 6d 6e 73 2c 20 61 64 64 69 6e  f columns, addin
2390: 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20 61 20  g or removing a 
23a0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
23b0: 74 0a 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59  t.or PRIMARY KEY
23c0: 2c 20 61 64 64 69 6e 67 20 43 48 45 43 4b 20 6f  , adding CHECK o
23d0: 72 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72  r FOREIGN KEY or
23e0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
23f0: 61 69 6e 74 73 2c 0a 6f 72 20 63 68 61 6e 67 69  aints,.or changi
2400: 6e 67 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ng the datatype 
2410: 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 2c 20 66 6f  for a column, fo
2420: 72 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65  r example.  Howe
2430: 76 65 72 2c 20 61 20 73 69 6d 70 6c 65 72 0a 61  ver, a simpler.a
2440: 6e 64 20 66 61 73 74 65 72 20 70 72 6f 63 65 64  nd faster proced
2450: 75 72 65 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c  ure can optional
2460: 6c 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 73  ly be used for.s
2470: 6f 6d 65 20 63 68 61 6e 67 65 73 20 74 68 61 74  ome changes that
2480: 20 64 6f 20 6e 6f 20 61 66 66 65 63 74 20 74 68   do no affect th
2490: 65 20 6f 6e 2d 64 69 73 6b 20 63 6f 6e 74 65 6e  e on-disk conten
24a0: 74 20 69 6e 20 61 6e 79 20 77 61 79 2e 0a 54 68  t in any way..Th
24b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 69 6d 70  e following simp
24c0: 6c 65 72 20 70 72 6f 63 65 64 75 72 65 20 69 73  ler procedure is
24d0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
24e0: 20 72 65 6d 6f 76 69 6e 67 0a 43 48 45 43 4b 20   removing.CHECK 
24f0: 6f 72 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f  or FOREIGN KEY o
2500: 72 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  r NOT NULL const
2510: 72 61 69 6e 74 73 2c 0a 72 65 6e 61 6d 69 6e 67  raints,.renaming
2520: 20 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20 61 64 64   columns, or add
2530: 69 6e 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20  ing or removing 
2540: 6f 72 20 63 68 61 6e 67 69 6e 67 20 64 65 66 61  or changing defa
2550: 75 6c 74 20 76 61 6c 75 65 73 20 6f 6e 0a 61 20  ult values on.a 
2560: 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6f 6c 3e 0a 3c 6c  column...<ol>.<l
2570: 69 3e 3c 70 3e 20 52 75 6e 20 5b 50 52 41 47 4d  i><p> Run [PRAGM
2580: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
2590: 5d 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  ] to determine t
25a0: 68 65 20 63 75 72 72 65 6e 74 20 73 63 68 65 6d  he current schem
25b0: 61 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a.version number
25c0: 2e 20 20 54 68 69 73 20 6e 75 6d 62 65 72 20 77  .  This number w
25d0: 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20 66 6f  ill be needed fo
25e0: 72 20 73 74 65 70 20 35 20 62 65 6c 6f 77 2e 0a  r step 5 below..
25f0: 0a 3c 6c 69 3e 3c 70 3e 20 41 63 74 69 76 61 74  .<li><p> Activat
2600: 65 20 73 63 68 65 6d 61 20 65 64 69 74 69 6e 67  e schema editing
2610: 20 75 73 69 6e 67 20 0a 5b 50 52 41 47 4d 41 20   using .[PRAGMA 
2620: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 20  writable_schema 
2630: 7c 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c  | PRAGMA writabl
2640: 65 5f 73 63 68 65 6d 61 3d 4f 4e 5d 2e 0a 0a 3c  e_schema=ON]...<
2650: 6c 69 3e 3c 70 3e 20 52 75 6e 20 61 6e 20 5b 55  li><p> Run an [U
2660: 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  PDATE] statement
2670: 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20 64   to change the d
2680: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 61 62  efinition of tab
2690: 6c 65 20 58 0a 69 6e 20 74 68 65 20 5b 73 71 6c  le X.in the [sql
26a0: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
26b0: 5d 3a 20 0a 55 50 44 41 54 45 20 73 71 6c 69 74  ]: .UPDATE sqlit
26c0: 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73 71 6c  e_master SET sql
26d0: 3d 2e 2e 2e 20 57 48 45 52 45 20 74 79 70 65 3d  =... WHERE type=
26e0: 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65  'table' AND name
26f0: 3d 27 58 27 3b 0a 3c 70 3e 3c 65 6d 3e 43 61 75  ='X';.<p><em>Cau
2700: 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4d 61 6b 69  tion:</em>  Maki
2710: 6e 67 20 61 20 63 68 61 6e 67 65 20 74 6f 20 74  ng a change to t
2720: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
2730: 20 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69 73   table like this
2740: 20 77 69 6c 6c 0a 72 65 6e 64 65 72 20 74 68 65   will.render the
2750: 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
2760: 74 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c 65  t and unreadable
2770: 20 69 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   if the change c
2780: 6f 6e 74 61 69 6e 73 0a 61 20 73 79 6e 74 61 78  ontains.a syntax
2790: 20 65 72 72 6f 72 2e 20 20 49 74 20 69 73 20 73   error.  It is s
27a0: 75 67 67 65 73 74 65 64 20 74 68 61 74 20 63 61  uggested that ca
27b0: 72 65 66 75 6c 20 74 65 73 74 69 6e 67 20 6f 66  reful testing of
27c0: 20 74 68 65 20 55 50 44 41 54 45 0a 73 74 61 74   the UPDATE.stat
27d0: 65 6d 65 6e 74 20 62 65 20 64 6f 6e 65 20 6f 6e  ement be done on
27e0: 20 61 20 73 65 70 61 72 61 74 65 20 62 6c 61 6e   a separate blan
27f0: 6b 20 64 61 74 61 62 61 73 65 20 70 72 69 6f 72  k database prior
2800: 20 74 6f 20 75 73 69 6e 67 20 69 74 20 6f 6e 0a   to using it on.
2810: 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61  a database conta
2820: 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e 74 20  ining important 
2830: 64 61 74 61 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49  data...<li><p> I
2840: 66 20 74 68 65 20 63 68 61 6e 67 65 20 74 6f 20  f the change to 
2850: 74 61 62 6c 65 20 58 20 61 6c 73 6f 20 61 66 66  table X also aff
2860: 65 63 74 73 20 6f 74 68 65 72 20 74 61 62 6c 65  ects other table
2870: 73 20 6f 72 20 69 6e 64 65 78 65 73 20 6f 72 0a  s or indexes or.
2880: 74 72 69 67 67 65 72 73 20 61 72 65 20 76 69 65  triggers are vie
2890: 77 73 20 77 69 74 68 69 6e 20 73 63 68 65 6d 61  ws within schema
28a0: 2c 20 74 68 65 6e 20 72 75 6e 20 5b 55 50 44 41  , then run [UPDA
28b0: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 74  TE] statements t
28c0: 6f 20 6d 6f 64 69 66 79 0a 74 68 6f 73 65 20 6f  o modify.those o
28d0: 74 68 65 72 20 74 61 62 6c 65 73 20 69 6e 64 65  ther tables inde
28e0: 78 65 73 20 61 6e 64 20 76 69 65 77 73 20 74 6f  xes and views to
28f0: 6f 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  o.  For example,
2900: 20 69 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a   if the name of.
2910: 61 20 63 6f 6c 75 6d 6e 20 63 68 61 6e 67 65 73  a column changes
2920: 2c 20 61 6c 6c 20 46 4f 52 45 49 47 4e 20 4b 45  , all FOREIGN KE
2930: 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 74  Y constraints, t
2940: 72 69 67 67 65 72 73 2c 20 69 6e 64 65 78 65 73  riggers, indexes
2950: 2c 20 61 6e 64 0a 76 69 65 77 73 20 74 68 61 74  , and.views that
2960: 20 72 65 66 65 72 20 74 6f 20 74 68 61 74 20 63   refer to that c
2970: 6f 6c 75 6d 6e 20 6d 75 73 74 20 62 65 20 6d 6f  olumn must be mo
2980: 64 69 66 69 65 64 2e 0a 3c 70 3e 3c 65 6d 3e 43  dified..<p><em>C
2990: 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4f 6e  aution:</em>  On
29a0: 63 65 20 61 67 61 69 6e 2c 20 6d 61 6b 69 6e 67  ce again, making
29b0: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
29c0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a 74  sqlite_master .t
29d0: 61 62 6c 65 20 6c 69 6b 65 20 74 68 69 73 20 77  able like this w
29e0: 69 6c 6c 20 72 65 6e 64 65 72 20 74 68 65 20 64  ill render the d
29f0: 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 20  atabase corrupt 
2a00: 61 6e 64 20 75 6e 72 65 61 64 61 62 6c 65 20 69  and unreadable i
2a10: 66 20 74 68 65 20 0a 63 68 61 6e 67 65 20 63 6f  f the .change co
2a20: 6e 74 61 69 6e 73 20 61 6e 20 65 72 72 6f 72 2e  ntains an error.
2a30: 20 20 43 61 72 65 66 75 6c 6c 79 20 74 65 73 74    Carefully test
2a40: 20 6f 66 20 74 68 69 73 20 65 6e 74 69 72 65 20   of this entire 
2a50: 70 72 6f 63 65 64 75 72 65 0a 6f 6e 20 61 20 73  procedure.on a s
2a60: 65 70 61 72 61 74 65 20 74 65 73 74 20 64 61 74  eparate test dat
2a70: 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f 20 75  abase prior to u
2a80: 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64 61 74  sing it on.a dat
2a90: 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67  abase containing
2aa0: 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61 20   important data 
2ab0: 61 6e 64 2f 6f 72 20 6d 61 6b 65 20 62 61 63 6b  and/or make back
2ac0: 75 70 20 63 6f 70 69 65 73 20 6f 66 0a 69 6d 70  up copies of.imp
2ad0: 6f 72 74 61 6e 74 20 64 61 74 61 62 61 73 65 73  ortant databases
2ae0: 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e   prior to runnin
2af0: 67 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  g this procedure
2b00: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 6e 63 72 65  ...<li><p> Incre
2b10: 6d 65 6e 74 20 74 68 65 20 73 63 68 65 6d 61 20  ment the schema 
2b20: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 75  version number u
2b30: 73 69 6e 67 0a 5b 50 52 41 47 4d 41 20 73 63 68  sing.[PRAGMA sch
2b40: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7c 20 50 52  ema_version | PR
2b50: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
2b60: 69 6f 6e 3d 58 5d 20 77 68 65 72 65 20 58 20 69  ion=X] where X i
2b70: 73 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e 20  s one.more than 
2b80: 74 68 65 20 6f 6c 64 20 73 63 68 65 6d 61 20 76  the old schema v
2b90: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
2ba0: 75 6e 64 20 69 6e 20 73 74 65 70 20 32 20 61 62  und in step 2 ab
2bb0: 6f 76 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 44 69  ove...<li><p> Di
2bc0: 73 61 62 6c 65 20 73 63 68 65 6d 61 20 65 64 69  sable schema edi
2bd0: 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50 52 41  ting using .[PRA
2be0: 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
2bf0: 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77 72 69  ema | PRAGMA wri
2c00: 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46  table_schema=OFF
2c10: 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 28 4f 70 74  ]...<li><p> (Opt
2c20: 69 6f 6e 61 6c 29 20 52 75 6e 20 5b 50 52 41 47  ional) Run [PRAG
2c30: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2c40: 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74 68  ck] to verify th
2c50: 61 74 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68  at the.schema ch
2c60: 61 6e 67 65 73 20 64 69 64 20 6e 6f 74 20 64 61  anges did not da
2c70: 6d 61 67 65 20 74 68 65 20 64 61 74 61 62 61 73  mage the databas
2c80: 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 74 20  e..</ol>..<p>It 
2c90: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 68 61  is important tha
2ca0: 74 20 62 6f 74 68 20 6f 66 20 74 68 65 20 61 62  t both of the ab
2cb0: 6f 76 65 20 70 72 6f 63 65 64 75 72 65 73 20 62  ove procedures b
2cc0: 65 20 72 75 6e 20 66 72 6f 6d 20 77 69 74 68 69  e run from withi
2cd0: 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n.a transaction 
2ce0: 74 6f 20 70 72 65 76 65 6e 74 20 6f 74 68 65 72  to prevent other
2cf0: 20 70 72 6f 63 65 73 73 65 73 20 66 72 6f 6d 20   processes from 
2d00: 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 64 61  accessing the da
2d10: 74 61 62 61 73 65 20 66 69 6c 65 0a 77 68 69 6c  tabase file.whil
2d20: 65 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  e the schema cha
2d30: 6e 67 65 20 69 73 20 6f 6e 6c 79 20 70 61 72 74  nge is only part
2d40: 69 61 6c 6c 79 20 63 6f 6d 70 6c 65 74 65 2e 20  ially complete. 
2d50: 20 0a 0a 3c 70 3e 49 66 20 73 6f 6d 65 20 66 75   ..<p>If some fu
2d60: 74 75 72 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  ture version of 
2d70: 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20  SQLite adds new 
2d80: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 61 70 61  ALTER TABLE capa
2d90: 62 69 6c 69 74 69 65 73 2c 20 0a 74 68 6f 73 65  bilities, .those
2da0: 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 77 69   capabilities wi
2db0: 6c 6c 20 76 65 72 79 20 6c 69 6b 65 6c 79 20 75  ll very likely u
2dc0: 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77  se one of the tw
2dd0: 6f 20 70 72 6f 63 65 64 75 72 65 73 0a 6f 75 74  o procedures.out
2de0: 6c 69 6e 65 64 20 61 62 6f 76 65 2e 0a 0a 3c 74  lined above...<t
2df0: 63 6c 3e 0a 23 20 20 4f 6e 65 20 6f 66 20 74 68  cl>.#  One of th
2e00: 65 20 72 65 61 73 6f 6e 73 20 74 68 61 74 0a 23  e reasons that.#
2e10: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
2e20: 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 6f   currently suppo
2e30: 72 74 20 6d 6f 72 65 20 41 4c 54 45 52 20 54 41  rt more ALTER TA
2e40: 42 4c 45 20 63 61 70 61 62 69 6c 69 74 69 65 73  BLE capabilities
2e50: 20 69 73 20 74 68 61 74 0a 23 20 74 68 65 20 70   is that.# the p
2e60: 72 6f 63 65 64 75 72 65 20 73 68 6f 77 6e 20 61  rocedure shown a
2e70: 62 6f 76 65 20 69 73 20 64 69 66 66 69 63 75 6c  bove is difficul
2e80: 74 20 74 6f 20 61 75 74 6f 6d 61 74 65 20 66 6f  t to automate fo
2e90: 72 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73  r an arbitrary s
2ea0: 63 68 65 6d 61 2e 0a 23 20 50 61 72 74 69 63 75  chema..# Particu
2eb0: 6c 61 72 6c 79 20 74 72 6f 75 62 6c 65 73 6f 6d  larly troublesom
2ec0: 65 20 61 72 65 61 73 20 61 72 65 20 69 64 65 6e  e areas are iden
2ed0: 74 69 66 79 69 6e 67 20 61 6c 6c 20 76 69 65 77  tifying all view
2ee0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2ef0: 68 0a 23 20 74 61 62 6c 65 20 58 20 69 6e 20 73  h.# table X in s
2f00: 74 65 70 20 31 20 61 6e 64 20 63 72 65 61 74 69  tep 1 and creati
2f10: 6e 67 20 6e 65 77 20 76 69 65 77 73 20 61 6e 64  ng new views and
2f20: 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20 61   triggers that a
2f30: 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 0a 23 20  re compatible.# 
2f40: 77 69 74 68 20 74 68 65 20 61 6c 74 65 72 65 64  with the altered
2f50: 20 73 63 68 65 6d 61 20 66 6f 72 20 74 61 62 6c   schema for tabl
2f60: 65 20 58 20 69 6e 20 73 74 65 70 20 36 2e 20 20  e X in step 6.  
2f70: 49 74 20 69 73 20 61 20 74 72 69 63 6b 79 20 62  It is a tricky b
2f80: 75 74 20 73 6f 6c 76 61 62 6c 65 0a 23 20 70 72  ut solvable.# pr
2f90: 6f 62 6c 65 6d 20 74 6f 20 63 72 65 61 74 65 20  oblem to create 
2fa0: 63 6f 64 65 20 74 68 61 74 20 77 69 6c 6c 20 70  code that will p
2fb0: 65 72 66 6f 72 6d 20 74 68 65 20 73 74 65 70 73  erform the steps
2fc0: 20 61 62 6f 76 65 20 0a 23 20 66 6f 72 20 22 72   above .# for "r
2fd0: 65 61 73 6f 6e 61 62 6c 65 22 20 73 63 68 65 6d  easonable" schem
2fe0: 61 73 20 63 6f 6d 6d 6f 6e 6c 79 20 66 6f 75 6e  as commonly foun
2ff0: 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20  d in practice.  
3000: 0a 23 20 42 75 74 20 74 68 65 72 65 20 65 78 69  .# But there exi
3010: 73 74 20 6d 61 6c 65 76 6f 6c 65 6e 74 20 73 63  st malevolent sc
3020: 68 65 6d 61 73 20 66 6f 72 20 77 68 69 63 68 0a  hemas for which.
3030: 23 20 74 68 65 73 65 20 73 74 65 70 73 20 61 72  # these steps ar
3040: 65 20 6d 61 64 64 65 6e 69 6e 67 6c 79 20 64 69  e maddeningly di
3050: 66 66 69 63 75 6c 74 20 74 6f 20 64 6f 20 63 6f  fficult to do co
3060: 72 72 65 63 74 6c 79 2e 20 20 52 61 74 68 65 72  rrectly.  Rather
3070: 20 74 68 61 6e 20 63 72 65 61 74 65 0a 23 20 41   than create.# A
3080: 4c 54 45 52 20 54 41 42 4c 45 20 66 65 61 74 75  LTER TABLE featu
3090: 72 65 73 20 74 68 61 74 20 77 6f 72 6b 20 63 6f  res that work co
30a0: 72 72 65 63 74 6c 79 20 39 39 2e 39 25 20 6f 66  rrectly 99.9% of
30b0: 20 74 68 65 20 74 69 6d 65 20 62 75 74 20 70 6f   the time but po
30c0: 73 73 69 62 6c 79 0a 23 20 63 6f 72 72 75 70 74  ssibly.# corrupt
30d0: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 6e 20 74   the schema on t
30e0: 68 65 20 6f 74 68 65 72 20 30 2e 31 25 2c 20 74  he other 0.1%, t
30f0: 68 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f  he SQLite develo
3100: 70 65 72 73 20 68 61 76 65 20 64 65 63 69 64 65  pers have decide
3110: 64 0a 23 20 74 6f 20 70 75 73 68 20 74 68 65 20  d.# to push the 
3120: 70 72 6f 62 6c 65 6d 20 69 6e 74 6f 20 74 68 65  problem into the
3130: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d   application dom
3140: 61 69 6e 2c 20 77 68 65 72 65 20 69 74 20 69 73  ain, where it is
3150: 20 6d 75 63 68 20 65 61 73 69 65 72 0a 23 20 74   much easier.# t
3160: 6f 20 73 6f 6c 76 65 2e 0a 3c 2f 74 63 6c 3e 0a  o solve..</tcl>.
3170: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
3180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31c0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
31d0: 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65  ANALYZE} analyze
31e0: 20 41 4e 41 4c 59 5a 45 0a 0a 52 65 63 75 72 73   ANALYZE..Recurs
31f0: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
3200: 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 0a 3c 2f   analyze-stmt.</
3210: 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41  tcl>..<p> ^The A
3220: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67  NALYZE command g
3230: 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69 63  athers statistic
3240: 73 20 61 62 6f 75 74 20 74 61 62 6c 65 73 20 61  s about tables a
3250: 6e 64 0a 69 6e 64 69 63 65 73 20 61 6e 64 20 73  nd.indices and s
3260: 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 6c 65 63  tores the collec
3270: 74 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ted information.
3280: 69 6e 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62  in [internal tab
3290: 6c 65 73 5d 20 6f 66 20 74 68 65 20 64 61 74 61  les] of the data
32a0: 62 61 73 65 20 77 68 65 72 65 20 74 68 65 20 71  base where the q
32b0: 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63  uery optimizer c
32c0: 61 6e 0a 61 63 63 65 73 73 20 74 68 65 20 69 6e  an.access the in
32d0: 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 75 73  formation and us
32e0: 65 20 69 74 20 74 6f 20 68 65 6c 70 20 6d 61 6b  e it to help mak
32f0: 65 20 62 65 74 74 65 72 20 71 75 65 72 79 20 70  e better query p
3300: 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63 65 73 2e  lanning choices.
3310: 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74  .^If no argument
3320: 73 20 61 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c  s are given, all
3330: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
3340: 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64  ses are.analyzed
3350: 2e 20 20 5e 49 66 20 61 20 64 61 74 61 62 61 73  .  ^If a databas
3360: 65 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e 20  e name is given 
3370: 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2c  as the argument,
3380: 20 74 68 65 6e 20 61 6c 6c 20 74 61 62 6c 65 73   then all tables
3390: 0a 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20  .and indices in 
33a0: 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61 73  that one databas
33b0: 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20  e are analyzed. 
33c0: 20 0a 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65   .^If the argume
33d0: 6e 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61  nt is a table na
33e0: 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  me, then only th
33f0: 61 74 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  at table and the
3400: 0a 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69 61  .indices associa
3410: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74 61  ted with that ta
3420: 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64  ble are analyzed
3430: 2e 20 20 5e 49 66 20 74 68 65 20 61 72 67 75 6d  .  ^If the argum
3440: 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64 65 78 20  ent.is an index 
3450: 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  name, then only 
3460: 74 68 61 74 20 6f 6e 65 20 69 6e 64 65 78 20 69  that one index i
3470: 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a  s analyzed.</p>.
3480: 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66 61 75 6c  .<p> ^The defaul
3490: 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  t implementation
34a0: 20 73 74 6f 72 65 73 20 61 6c 6c 20 73 74 61 74   stores all stat
34b0: 69 73 74 69 63 73 20 69 6e 20 61 20 73 69 6e 67  istics in a sing
34c0: 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20 22  le.table named "
34d0: 5b 73 71 6c 69 74 65 5f 73 74 61 74 31 5d 22 2e  [sqlite_stat1]".
34e0: 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20    ^If SQLite is 
34f0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
3500: 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e.[SQLITE_ENABLE
3510: 5f 53 54 41 54 33 5d 20 6f 70 74 69 6f 6e 20 61  _STAT3] option a
3520: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 5b  nd without the [
3530: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
3540: 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c 20 74 68 65  AT4].option, the
3550: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
3560: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
3570: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
3580: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
3590: 74 61 74 33 5d 2e 0a 20 5e 49 66 20 53 51 4c 69  tat3].. ^If SQLi
35a0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
35b0: 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
35c0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 6f 70  ENABLE_STAT4] op
35d0: 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74  tion, then addit
35e0: 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20  ional histogram 
35f0: 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65  data is.collecte
3600: 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20  d and stored in 
3610: 5b 73 71 6c 69 74 65 5f 73 74 61 74 34 5d 2e 0a  [sqlite_stat4]..
3620: 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Older versions o
3630: 66 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 6d  f SQLite would m
3640: 61 6b 65 20 75 73 65 20 6f 66 20 74 68 65 20 5b  ake use of the [
3650: 73 71 6c 69 74 65 5f 73 74 61 74 32 5d 20 74 61  sqlite_stat2] ta
3660: 62 6c 65 0a 77 68 65 6e 20 63 6f 6d 70 69 6c 65  ble.when compile
3670: 64 20 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45  d with [SQLITE_E
3680: 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 62 75 74  NABLE_STAT2] but
3690: 20 61 6c 6c 20 72 65 63 65 6e 74 20 76 65 72 73   all recent vers
36a0: 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 69  ions of.SQLite i
36b0: 67 6e 6f 72 65 20 74 68 65 20 73 71 6c 69 74 65  gnore the sqlite
36c0: 5f 73 74 61 74 32 20 74 61 62 6c 65 2e 0a 46 75  _stat2 table..Fu
36d0: 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ture enhancement
36e0: 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64 64  s may create.add
36f0: 69 74 69 6f 6e 61 6c 20 5b 69 6e 74 65 72 6e 61  itional [interna
3700: 6c 20 74 61 62 6c 65 73 5d 20 77 69 74 68 20 74  l tables] with t
3710: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61 74  he same name pat
3720: 74 65 72 6e 20 65 78 63 65 70 74 20 77 69 74 68  tern except with
3730: 0a 66 69 6e 61 6c 20 64 69 67 69 74 20 6c 61 72  .final digit lar
3740: 67 65 72 20 74 68 61 6e 20 22 34 22 2e 0a 41 6c  ger than "4"..Al
3750: 6c 20 6f 66 20 74 68 65 73 65 20 74 61 62 6c 65  l of these table
3760: 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65  s are collective
3770: 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61  ly referred to a
3780: 73 20 22 73 74 61 74 69 73 74 69 63 73 20 74 61  s "statistics ta
3790: 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  bles"..</p>..<p>
37a0: 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66   ^The content of
37b0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
37c0: 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75  tables can be qu
37d0: 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c  eried using [SEL
37e0: 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20  ECT].and can be 
37f0: 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 74 68  changed using th
3800: 65 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53  e [DELETE], [INS
3810: 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44 41 54  ERT], and [UPDAT
3820: 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e 28 54  E] commands..^(T
3830: 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20  he [DROP TABLE] 
3840: 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 6f 6e  command works on
3850: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
3860: 65 73 0a 61 73 20 6f 66 20 53 51 4c 69 74 65 20  es.as of SQLite 
3870: 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 29 5e  version 3.7.9.)^
3880: 0a 5e 54 68 65 20 5b 41 4c 54 45 52 20 54 41 42  .^The [ALTER TAB
3890: 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73  LE] command does
38a0: 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 73 74 61   not work on sta
38b0: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 2e 0a  tistics tables..
38c0: 41 70 70 72 6f 70 72 69 61 74 65 20 63 61 72 65  Appropriate care
38d0: 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
38e0: 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74 68  when changing th
38f0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
3900: 20 73 74 61 74 69 73 74 69 63 73 0a 74 61 62 6c   statistics.tabl
3910: 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63 6f  es as invalid co
3920: 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65 20  ntent can cause 
3930: 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63 74  SQLite to select
3940: 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75 65   inefficient.que
3950: 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65 72  ry plans.  Gener
3960: 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20 6f  ally speaking, o
3970: 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d 6f  ne should not mo
3980: 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e 74  dify the content
3990: 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74 69   of.the statisti
39a0: 63 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e 79  cs tables by any
39b0: 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65 72   mechanism other
39c0: 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20 74   than invoking t
39d0: 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61  he.ANALYZE comma
39e0: 6e 64 2e 20 20 0a 53 65 65 20 22 5b 4d 61 6e 75  nd.  .See "[Manu
39f0: 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f 66 20 51 75  al Control Of Qu
3a00: 65 72 79 20 50 6c 61 6e 73 20 55 73 69 6e 67 20  ery Plans Using 
3a10: 53 51 4c 49 54 45 5f 53 54 41 54 20 54 61 62 6c  SQLITE_STAT Tabl
3a20: 65 73 5d 22 20 66 6f 72 0a 66 75 72 74 68 65 72  es]" for.further
3a30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
3a40: 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74 69  >..<p> ^Statisti
3a50: 63 73 20 67 61 74 68 65 72 65 64 20 62 79 20 41  cs gathered by A
3a60: 4e 41 4c 59 5a 45 20 61 72 65 20 6e 6f 74 20 61  NALYZE are not a
3a70: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64  utomatically upd
3a80: 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e 74  ated as.the cont
3a90: 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  ent of the datab
3aa0: 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49 66  ase changes.  If
3ab0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
3ac0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 68 61  the database.cha
3ad0: 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e 74  nges significant
3ae0: 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64 61  ly, or if the da
3af0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
3b00: 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65 20  anges, then one 
3b10: 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20  should.consider 
3b20: 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41 4e  rerunning the AN
3b30: 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  ALYZE command in
3b40: 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65   order to update
3b50: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 2e   the statistics.
3b60: 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 71 75  </p>..<p> The qu
3b70: 65 72 79 20 70 6c 61 6e 6e 65 72 20 6c 6f 61 64  ery planner load
3b80: 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  s the content of
3b90: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
3ba0: 74 61 62 6c 65 73 0a 69 6e 74 6f 20 6d 65 6d 6f  tables.into memo
3bb0: 72 79 20 77 68 65 6e 20 74 68 65 20 73 63 68 65  ry when the sche
3bc0: 6d 61 20 69 73 20 72 65 61 64 2e 20 20 5e 48 65  ma is read.  ^He
3bd0: 6e 63 65 2c 20 77 68 65 6e 20 61 6e 20 61 70 70  nce, when an app
3be0: 6c 69 63 61 74 69 6f 6e 0a 63 68 61 6e 67 65 73  lication.changes
3bf0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
3c00: 74 61 62 6c 65 73 20 64 69 72 65 63 74 6c 79 2c  tables directly,
3c10: 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74   SQLite will not
3c20: 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 6e 6f 74   immediately.not
3c30: 69 63 65 20 74 68 65 20 63 68 61 6e 67 65 73 2e  ice the changes.
3c40: 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e   ^An application
3c50: 0a 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20 71  .can force the q
3c60: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20  uery planner to 
3c70: 72 65 72 65 61 64 20 74 68 65 20 73 74 61 74 69  reread the stati
3c80: 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79 20  stics tables by 
3c90: 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59  running.<b>ANALY
3ca0: 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ZE sqlite_master
3cb0: 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 20  </b>. </p>..<p> 
3cc0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
3cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d10: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
3d20: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d  ATTACH DATABASE}
3d30: 20 61 74 74 61 63 68 20 2a 41 54 54 41 43 48 0a   attach *ATTACH.
3d40: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
3d50: 44 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73  Diagram attach-s
3d60: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
3d70: 5e 54 68 65 20 41 54 54 41 43 48 20 44 41 54 41  ^The ATTACH DATA
3d80: 42 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61  BASE statement a
3d90: 64 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74 61  dds another data
3da0: 62 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74 68  base .file to th
3db0: 65 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61 62  e current [datab
3dc0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e  ase connection].
3dd0: 20 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20   .^The filename 
3de0: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
3df0: 20 74 6f 20 62 65 20 61 74 74 61 63 68 65 64 20   to be attached 
3e00: 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a  is the value of.
3e10: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
3e20: 68 61 74 20 6f 63 63 75 72 73 20 62 65 66 6f 72  hat occurs befor
3e30: 65 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64  e the AS keyword
3e40: 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20  ..^The filename 
3e50: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
3e60: 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d 65  follows the same
3e70: 20 73 65 6d 61 6e 74 69 63 73 20 61 73 20 74 68   semantics as th
3e80: 65 0a 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d  e.filename argum
3e90: 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f  ent to [sqlite3_
3ea0: 6f 70 65 6e 28 29 5d 20 61 6e 64 20 5b 73 71 6c  open()] and [sql
3eb0: 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 3b  ite3_open_v2()];
3ec0: 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61 6d   the.special nam
3ed0: 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 72  e "[:memory:]" r
3ee0: 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 5b 69 6e  esults in an [in
3ef0: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
3f00: 5d 20 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20 73  ] and an.empty s
3f10: 74 72 69 6e 67 20 72 65 73 75 6c 74 73 20 69 6e  tring results in
3f20: 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72 79   a new temporary
3f30: 20 64 61 74 61 62 61 73 65 2e 0a 5e 54 68 65 20   database..^The 
3f40: 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e  filename argumen
3f50: 74 20 63 61 6e 20 62 65 20 61 20 5b 55 52 49 20  t can be a [URI 
3f60: 66 69 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52 49  filename] if URI
3f70: 20 66 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65 73   filename proces
3f80: 73 69 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20 6f  sing.is enable o
3f90: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  n the database c
3fa0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
3fb0: 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
3fc0: 20 69 73 20 66 6f 72 0a 55 52 49 20 66 69 6c 65   is for.URI file
3fd0: 6e 61 6d 65 73 20 74 6f 20 62 65 20 64 69 73 61  names to be disa
3fe0: 62 6c 65 64 2c 20 68 6f 77 65 76 65 72 20 74 68  bled, however th
3ff0: 61 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  at might change 
4000: 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c 65  in a future rele
4010: 61 73 65 0a 6f 66 20 53 51 4c 69 74 65 2c 20 73  ase.of SQLite, s
4020: 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65  o application de
4030: 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64 76  velopers are adv
4040: 69 73 65 64 20 74 6f 20 70 6c 61 6e 20 61 63 63  ised to plan acc
4050: 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 54 68  ordingly...<p>Th
4060: 65 20 6e 61 6d 65 20 74 68 61 74 20 6f 63 63 75  e name that occu
4070: 72 73 20 61 66 74 65 72 20 74 68 65 20 41 53 20  rs after the AS 
4080: 6b 65 79 77 6f 72 64 20 69 73 20 74 68 65 20 6e  keyword is the n
4090: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
40a0: 61 73 65 0a 75 73 65 64 20 69 6e 74 65 72 6e 61  ase.used interna
40b0: 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 0a 5e  lly by SQLite..^
40c0: 54 68 65 20 64 61 74 61 62 61 73 65 2d 6e 61 6d  The database-nam
40d0: 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a 27  es 'main' and .'
40e0: 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20 74  temp' refer to t
40f0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
4100: 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61 73   and the databas
4110: 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d 70  e used for .temp
4120: 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 5e  orary tables.  ^
4130: 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d  The main and tem
4140: 70 20 64 61 74 61 62 61 73 65 73 20 63 61 6e 6e  p databases cann
4150: 6f 74 20 62 65 20 61 74 74 61 63 68 65 64 20 6f  ot be attached o
4160: 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e 0a  r.detached.</p>.
4170: 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20 69 6e  .<p> ^(Tables in
4180: 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
4190: 61 62 61 73 65 20 63 61 6e 20 62 65 20 72 65 66  abase can be ref
41a0: 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20 74  erred to using t
41b0: 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64 61  he syntax .<i>da
41c0: 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62 6c  tabase-name.tabl
41d0: 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e  e-name</i>.)^  ^
41e0: 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  If the name of t
41f0: 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69 71  he table is uniq
4200: 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61 74  ue.across all at
4210: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
4220: 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61 6e   and the main an
4230: 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 73  d temp databases
4240: 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64 61  , then the.<i>da
4250: 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20  tabase-name</i> 
4260: 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 72 65  prefix is not re
4270: 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74 77 6f  quired.  ^If two
4280: 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
4290: 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64 61 74  in.different dat
42a0: 61 62 61 73 65 73 20 68 61 76 65 20 74 68 65 20  abases have the 
42b0: 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74 68  same name and th
42c0: 65 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e  e .<i>database-n
42d0: 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69  ame</i> prefix i
42e0: 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61 20  s not used on a 
42f0: 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 2c  table reference,
4300: 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65 20   then the.table 
4310: 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f 6e  chosen is the on
4320: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
4330: 65 20 74 68 61 74 20 77 61 73 20 6c 65 61 73 74  e that was least
4340: 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63 68   recently attach
4350: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72  ed.</p>..<p>.^Tr
4360: 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f 6c  ansactions invol
4370: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61 74  ving multiple at
4380: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
4390: 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73 73   are atomic,.ass
43a0: 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20 6d  uming that the m
43b0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
43c0: 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22  not "[:memory:]"
43d0: 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72 6e   and the .[journ
43e0: 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74 20  al_mode] is not 
43f0: 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68 65  [WAL].  ^(If the
4400: 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69   main.database i
4410: 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72 20  s ":memory:" or 
4420: 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d  if the journal_m
4430: 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65 6e  ode is WAL, then
4440: 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63   .transactions c
4450: 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74  ontinue to be at
4460: 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63 68  omic within each
4470: 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61   individual.data
4480: 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69  base file. But i
4490: 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75  f the host compu
44a0: 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20 74  ter crashes in t
44b0: 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b  he middle.of a [
44c0: 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77  COMMIT] where tw
44d0: 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61  o or more databa
44e0: 73 65 20 66 69 6c 65 73 20 61 72 65 20 75 70 64  se files are upd
44f0: 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68  ated,.some of th
4500: 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20  ose files might 
4510: 67 65 74 20 74 68 65 20 63 68 61 6e 67 65 73 20  get the changes 
4520: 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67  where others.mig
4530: 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a  ht not.)^.</p>..
4540: 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61 20  <p> ^There is a 
4550: 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67  limit, set using
4560: 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28   [sqlite3_limit(
4570: 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f  )] and .[SQLITE_
4580: 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c  LIMIT_ATTACHED],
4590: 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
45a0: 66 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  f databases that
45b0: 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e   can be.simultan
45c0: 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64 20  eously attached 
45d0: 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61  to a single data
45e0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
45f0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
4600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4640: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
4650: 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53  ion {BEGIN TRANS
4660: 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74  ACTION} transact
4670: 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d  ion {*BEGIN COMM
4680: 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 52 65  IT ROLLBACK}..Re
4690: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
46a0: 67 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d 74 0a  gram begin-stmt.
46b0: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
46c0: 69 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74  iagram commit-st
46d0: 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  mt.RecursiveBubb
46e0: 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61  leDiagram rollba
46f0: 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ck-stmt.</tcl>..
4700: 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65 73 20  <p>.^No changes 
4710: 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
4720: 68 65 20 64 61 74 61 62 61 73 65 20 65 78 63 65  he database exce
4730: 70 74 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  pt within a tran
4740: 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f  saction..^Any co
4750: 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e 67  mmand that chang
4760: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  es the database 
4770: 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79 20  (basically, any 
4780: 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65  SQL command.othe
4790: 72 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d 29  r than [SELECT])
47a0: 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
47b0: 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72 61 6e  lly start a tran
47c0: 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20 69  saction if.one i
47d0: 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e  s not already in
47e0: 20 65 66 66 65 63 74 2e 20 20 5e 41 75 74 6f 6d   effect.  ^Autom
47f0: 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64  atically started
4800: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72   transactions.ar
4810: 65 20 63 6f 6d 6d 69 74 74 65 64 20 77 68 65 6e  e committed when
4820: 20 74 68 65 20 6c 61 73 74 20 71 75 65 72 79 20   the last query 
4830: 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a  finishes..</p>..
4840: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
4850: 73 20 63 61 6e 20 62 65 20 73 74 61 72 74 65 64  s can be started
4860: 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67 20   manually using 
4870: 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e  the BEGIN.comman
4880: 64 2e 20 20 5e 28 53 75 63 68 20 74 72 61 6e 73  d.  ^(Such trans
4890: 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79 20  actions usually 
48a0: 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74 68  persist until th
48b0: 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f 72  e next.COMMIT or
48c0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
48d0: 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73 61  d.  But a transa
48e0: 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f 20  ction will also 
48f0: 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68 65  .ROLLBACK if the
4900: 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   database is clo
4910: 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72 72  sed or if an err
4920: 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74 68  or occurs.and th
4930: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c  e ROLLBACK confl
4940: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
4950: 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63  lgorithm is spec
4960: 69 66 69 65 64 2e 29 5e 0a 53 65 65 20 74 68 65  ified.)^.See the
4970: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
4980: 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49  n the [ON CONFLI
4990: 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20 61  CT].clause for a
49a0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
49b0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
49c0: 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69 63  ROLLBACK.conflic
49d0: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
49e0: 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70  orithm..</p>..<p
49f0: 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43 54 49  >.^END TRANSACTI
4a00: 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  ON is an alias f
4a10: 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a  or COMMIT..</p>.
4a20: 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63 74 69  .<p> ^(Transacti
4a30: 6f 6e 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  ons created usin
4a40: 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54  g BEGIN...COMMIT
4a50: 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a   do not nest.)^.
4a60: 5e 46 6f 72 20 6e 65 73 74 65 64 20 74 72 61 6e  ^For nested tran
4a70: 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20 74 68  sactions, use th
4a80: 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 61 6e  e [SAVEPOINT] an
4a90: 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f 6d 6d  d [RELEASE] comm
4aa0: 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20 53 41  ands..The "TO SA
4ab0: 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61 6d 65 3c  VEPOINT <i>name<
4ac0: 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f 66 20 74  /i>" clause of t
4ad0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
4ae0: 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68 65  and shown.in the
4af0: 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20   syntax diagram 
4b00: 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61 70  above is only ap
4b10: 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b 53 41 56  plicable to [SAV
4b20: 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63 74  EPOINT].transact
4b30: 69 6f 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65 6d  ions.  ^An attem
4b40: 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65  pt to invoke the
4b50: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 77   BEGIN command w
4b60: 69 74 68 69 6e 0a 61 20 74 72 61 6e 73 61 63 74  ithin.a transact
4b70: 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77 69  ion will fail wi
4b80: 74 68 20 61 6e 20 65 72 72 6f 72 2c 20 72 65 67  th an error, reg
4b90: 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
4ba0: 65 72 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69  er.the transacti
4bb0: 6f 6e 20 77 61 73 20 73 74 61 72 74 65 64 20 62  on was started b
4bc0: 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f 72  y [SAVEPOINT] or
4bd0: 20 61 20 70 72 69 6f 72 20 42 45 47 49 4e 2e 0a   a prior BEGIN..
4be0: 5e 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d  ^The COMMIT comm
4bf0: 61 6e 64 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c  and and the ROLL
4c00: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74  BACK command wit
4c10: 68 6f 75 74 20 74 68 65 20 54 4f 20 63 6c 61 75  hout the TO clau
4c20: 73 65 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d 65  se.work the same
4c30: 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20   on [SAVEPOINT] 
4c40: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 73 20  transactions as 
4c50: 74 68 65 79 20 64 6f 20 77 69 74 68 20 74 72 61  they do with tra
4c60: 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61 72 74 65  nsactions.starte
4c70: 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a  d by BEGIN.</p>.
4c80: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
4c90: 74 20 69 6d 6d 65 64 69 61 74 65 20 7b 42 45 47  t immediate {BEG
4ca0: 49 4e 20 49 4d 4d 45 44 49 41 54 45 7d 20 7b 42  IN IMMEDIATE} {B
4cb0: 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 7d 3c  EGIN EXCLUSIVE}<
4cc0: 2f 74 63 6c 3e 0a 3c 70 3e 0a 5e 54 72 61 6e 73  /tcl>.<p>.^Trans
4cd0: 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64  actions can be d
4ce0: 65 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61  eferred, immedia
4cf0: 74 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65  te, or exclusive
4d00: 2e 20 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74  .  .^The default
4d10: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68   transaction beh
4d20: 61 76 69 6f 72 20 69 73 20 64 65 66 65 72 72 65  avior is deferre
4d30: 64 2e 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61  d..^Deferred mea
4d40: 6e 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73  ns that no locks
4d50: 20 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e   are acquired.on
4d60: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
4d70: 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73 65  til the database
4d80: 20 69 73 20 66 69 72 73 74 20 61 63 63 65 73 73   is first access
4d90: 65 64 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20  ed.  ^Thus with 
4da0: 61 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e 73  a.deferred trans
4db0: 61 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49  action, the BEGI
4dc0: 4e 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65  N statement itse
4dd0: 6c 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20  lf does nothing 
4de0: 74 6f 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65  to the.filesyste
4df0: 6d 2e 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e  m.  ^Locks.are n
4e00: 6f 74 20 61 63 71 75 69 72 65 64 20 75 6e 74 69  ot acquired unti
4e10: 6c 20 74 68 65 20 66 69 72 73 74 20 72 65 61 64  l the first read
4e20: 20 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61 74   or write operat
4e30: 69 6f 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74  ion.  ^The first
4e40: 20 72 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20   read.operation 
4e50: 61 67 61 69 6e 73 74 20 61 20 64 61 74 61 62 61  against a databa
4e60: 73 65 20 63 72 65 61 74 65 73 20 61 20 5b 53 48  se creates a [SH
4e70: 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74  ARED] lock and t
4e80: 68 65 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f  he first.write o
4e90: 70 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73  peration creates
4ea0: 20 61 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f   a [RESERVED] lo
4eb0: 63 6b 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74  ck.   ^Because t
4ec0: 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f  he acquisition o
4ed0: 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72  f.locks is defer
4ee0: 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61  red until they a
4ef0: 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73  re needed, it is
4f00: 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
4f10: 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72  nother.thread or
4f20: 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63   process could c
4f30: 72 65 61 74 65 20 61 20 73 65 70 61 72 61 74 65  reate a separate
4f40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
4f50: 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61   write to.the da
4f60: 74 61 62 61 73 65 20 61 66 74 65 72 20 74 68 65  tabase after the
4f70: 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75   BEGIN on the cu
4f80: 72 72 65 6e 74 20 74 68 72 65 61 64 20 68 61 73  rrent thread has
4f90: 20 65 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74   executed..^If t
4fa0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
4fb0: 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65  s immediate, the
4fc0: 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63  n [RESERVED] loc
4fd0: 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64 20  ks.are acquired 
4fe0: 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73  on all databases
4ff0: 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20   as soon as the 
5000: 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73  BEGIN command is
5010: 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f  .executed, witho
5020: 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74  ut waiting for t
5030: 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62  he.database to b
5040: 65 20 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20  e used.  ^After 
5050: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
5060: 45 2c 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61  E, .no other [da
5070: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5080: 6e 5d 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20  n] will be able 
5090: 74 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65 20  to write to the 
50a0: 64 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61  database or.do a
50b0: 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45   BEGIN IMMEDIATE
50c0: 20 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53   or BEGIN EXCLUS
50d0: 49 56 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f  IVE.  ^Other pro
50e0: 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69  cesses can conti
50f0: 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d  nue.to read from
5100: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 68   the database, h
5110: 6f 77 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63  owever.  ^An exc
5120: 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74 69  lusive transacti
5130: 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55  on causes.[EXCLU
5140: 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62  SIVE] locks to b
5150: 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c  e acquired on al
5160: 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41  l databases.  ^A
5170: 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43  fter a BEGIN.EXC
5180: 4c 55 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72  LUSIVE, no other
5190: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
51a0: 63 74 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f  ction] except fo
51b0: 72 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74  r [read_uncommit
51c0: 74 65 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73  ted].connections
51d0: 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f   will be able to
51e0: 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61   read the databa
51f0: 73 65 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20  se and no other 
5200: 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f  connection witho
5210: 75 74 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c  ut.exception wil
5220: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69  l be able to wri
5230: 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  te the database 
5240: 75 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61  until the transa
5250: 63 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74  ction is.complet
5260: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41  e..</p>..<p>.^(A
5270: 6e 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73  n implicit trans
5280: 61 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61  action (a transa
5290: 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74  ction that is st
52a0: 61 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  arted automatica
52b0: 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73  lly,.not a trans
52c0: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62  action started b
52d0: 79 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d  y BEGIN) is comm
52e0: 69 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  itted automatica
52f0: 6c 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73  lly when.the las
5300: 74 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  t active stateme
5310: 6e 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20  nt finishes.  A 
5320: 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68  statement finish
5330: 65 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70  es when its.prep
5340: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
5350: 73 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74  s [sqlite3_reset
5360: 28 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b  () | reset] or.[
5370: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
5380: 28 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e  () | finalized].
5390: 20 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74    An open [sqlit
53a0: 65 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f  e3_blob] used fo
53b0: 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c  r.incremental BL
53c0: 4f 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73  OB I/O counts as
53d0: 20 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73   an unfinished s
53e0: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b  tatement.  The [
53f0: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69  sqlite3_blob].fi
5400: 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 20 69  nishes when it i
5410: 73 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f  s [sqlite3_blob_
5420: 63 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64  close() | closed
5430: 5d 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  ].)^.</p>..<p>.^
5440: 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d  The explicit COM
5450: 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73  MIT command runs
5460: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76   immediately, ev
5470: 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  en if there are.
5480: 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d  pending [SELECT]
5490: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48   statements.  ^H
54a0: 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65  owever, if there
54b0: 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69   are pending.wri
54c0: 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74  te operations, t
54d0: 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  he COMMIT comman
54e0: 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  d.will fail with
54f0: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b   an error code [
5500: 53 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f  SQLITE_BUSY]..</
5510: 70 3e 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65  p>..<p>.^An atte
5520: 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20 43  mpt to execute C
5530: 4f 4d 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f  OMMIT might also
5540: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53   result in an [S
5550: 51 4c 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75  QLITE_BUSY] retu
5560: 72 6e 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e  rn code.if an an
5570: 6f 74 68 65 72 20 74 68 72 65 61 64 20 6f 72 20  other thread or 
5580: 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73  process has a [s
5590: 68 61 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74  hared lock] on t
55a0: 68 65 20 64 61 74 61 62 61 73 65 0a 74 68 61 74  he database.that
55b0: 20 70 72 65 76 65 6e 74 65 64 20 74 68 65 20 64   prevented the d
55c0: 61 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69  atabase from bei
55d0: 6e 67 20 75 70 64 61 74 65 64 2e 20 20 5e 57 68  ng updated.  ^Wh
55e0: 65 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20  en COMMIT fails 
55f0: 69 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65  in this.way, the
5600: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d   transaction rem
5610: 61 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20  ains active and 
5620: 74 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62  the COMMIT can b
5630: 65 20 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a  e retried later.
5640: 61 66 74 65 72 20 74 68 65 20 72 65 61 64 65 72  after the reader
5650: 20 68 61 73 20 68 61 64 20 61 20 63 68 61 6e 63   has had a chanc
5660: 65 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e  e to clear..</p>
5670: 0a 0a 3c 70 3e 0a 49 6e 20 76 65 72 79 20 6f 6c  ..<p>.In very ol
5680: 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  d versions of SQ
5690: 4c 69 74 65 20 28 62 65 66 6f 72 65 20 76 65 72  Lite (before ver
56a0: 73 69 6f 6e 20 33 2e 37 2e 31 31 20 63 69 72 63  sion 3.7.11 circ
56b0: 61 20 32 30 31 32 2d 30 33 2d 32 30 29 0a 74 68  a 2012-03-20).th
56c0: 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20  e ROLLBACK will 
56d0: 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72  fail with an err
56e0: 6f 72 20 63 6f 64 65 20 0a 5b 53 51 4c 49 54 45  or code .[SQLITE
56f0: 5f 42 55 53 59 5d 20 69 66 20 74 68 65 72 65 20  _BUSY] if there 
5700: 61 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20  are any pending 
5710: 71 75 65 72 69 65 73 2e 20 20 5e 49 6e 20 6d 6f  queries.  ^In mo
5720: 72 65 20 72 65 63 65 6e 74 0a 76 65 72 73 69 6f  re recent.versio
5730: 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 74 68  ns of SQLite, th
5740: 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20  e ROLLBACK will 
5750: 70 72 6f 63 65 65 64 20 61 6e 64 20 70 65 6e 64  proceed and pend
5760: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a 77  ing statements.w
5770: 69 6c 6c 20 6f 66 74 65 6e 20 62 65 20 61 62 6f  ill often be abo
5780: 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68  rted, causing th
5790: 65 6d 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  em to return an 
57a0: 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5d 20 6f  [SQLITE_ABORT] o
57b0: 72 0a 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f  r.[SQLITE_ABORT_
57c0: 52 4f 4c 4c 42 41 43 4b 5d 20 65 72 72 6f 72 2e  ROLLBACK] error.
57d0: 0a 5e 49 6e 20 53 51 4c 69 74 65 20 76 65 72 73  .^In SQLite vers
57e0: 69 6f 6e 20 33 2e 38 2e 38 20 61 6e 64 20 6c 61  ion 3.8.8 and la
57f0: 74 65 72 2c 20 61 20 70 65 6e 64 69 6e 67 20 72  ter, a pending r
5800: 65 61 64 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ead will continu
5810: 65 20 66 75 6e 63 74 69 6f 6e 69 6e 67 0a 61 66  e functioning.af
5820: 74 65 72 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  ter the ROLLBACK
5830: 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20   as long as the 
5840: 52 4f 4c 4c 42 41 43 4b 20 64 6f 65 73 20 6e 6f  ROLLBACK does no
5850: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74  t modify the dat
5860: 61 62 61 73 65 0a 73 63 68 65 6d 61 2e 0a 3c 2f  abase.schema..</
5870: 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41 47  p>..<p>.If [PRAG
5880: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d  MA journal_mode]
5890: 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20 28   is set to OFF (
58a0: 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20 74  thus disabling t
58b0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
58c0: 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20 74  nal.file) then t
58d0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
58e0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
58f0: 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  and is undefined
5900: 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 70  ..</p>..<h3>Resp
5910: 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20 57  onse To Errors W
5920: 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63 74  ithin A Transact
5930: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28  ion</h3>..<p> ^(
5940: 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73  If certain kinds
5950: 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72   of errors occur
5960: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
5970: 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73  ction, the.trans
5980: 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61  action may or ma
5990: 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20  y not be rolled 
59a0: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
59b0: 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20  ly.  The.errors 
59c0: 74 68 61 74 20 63 61 6e 20 63 61 75 73 65 20 61  that can cause a
59d0: 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c 6c  n automatic roll
59e0: 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f 70  back include:</p
59f0: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51  >..<ul>.<li> [SQ
5a00: 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74 61  LITE_FULL]: data
5a10: 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75 6c  base or disk ful
5a20: 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49  l.<li> [SQLITE_I
5a30: 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f 20  OERR]: disk I/O 
5a40: 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49  error.<li> [SQLI
5a50: 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62 61  TE_BUSY]: databa
5a60: 73 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e 6f  se in use by ano
5a70: 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c 69  ther process.<li
5a80: 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d  > [SQLITE_NOMEM]
5a90: 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79 0a  : out or memory.
5aa0: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4e 54  <li> [SQLITE_INT
5ab0: 45 52 52 55 50 54 5d 3a 20 70 72 6f 63 65 73 73  ERRUPT]: process
5ac0: 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 69 6e 74  ing [sqlite3_int
5ad0: 65 72 72 75 70 74 7c 69 6e 74 65 72 72 75 70 74  errupt|interrupt
5ae0: 65 64 5d 0a 20 20 20 20 20 62 79 20 61 70 70 6c  ed].     by appl
5af0: 69 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 0a  ication request.
5b00: 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f  </ul>)^..<p>.^Fo
5b10: 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 65  r all of these e
5b20: 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61 74  rrors, SQLite at
5b30: 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20 6a  tempts to undo j
5b40: 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61 74  ust the one stat
5b50: 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f 72  ement.it was wor
5b60: 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61 76  king on and leav
5b70: 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 70  e changes from p
5b80: 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  rior statements 
5b90: 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65 20  within the.same 
5ba0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 61  transaction inta
5bb0: 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  ct and continue 
5bc0: 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61 63  with the transac
5bd0: 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72 2c  tion.  ^However,
5be0: 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   .depending on t
5bf0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
5c00: 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  ng evaluated and
5c10: 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77 68   the point at wh
5c20: 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f 63  ich the.error oc
5c30: 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20 62  curs, it might b
5c40: 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20  e necessary for 
5c50: 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62 61  SQLite to rollba
5c60: 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74 68  ck and.cancel th
5c70: 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  e entire transac
5c80: 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c 69  tion.  ^An appli
5c90: 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20  cation can tell 
5ca0: 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66 20  which.course of 
5cb0: 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f  action SQLite to
5cc0: 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65 0a  ok by using the.
5cd0: 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74  [sqlite3_get_aut
5ce0: 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e  ocommit()] C-lan
5cf0: 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65 2e  guage interface.
5d00: 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72  </p>..<p>It is r
5d10: 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20  ecommended that 
5d20: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65 73  applications res
5d30: 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72 6f  pond to the erro
5d40: 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65 20  rs.listed above 
5d50: 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69 73  by explicitly is
5d60: 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b  suing a ROLLBACK
5d70: 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20 74   command.  ^If t
5d80: 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  he .transaction 
5d90: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
5da0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74   rolled back aut
5db0: 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74 68  omatically.by th
5dc0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
5dd0: 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  , then the ROLLB
5de0: 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  ACK command will
5df0: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65 72   fail with an.er
5e00: 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72 6d  ror, but no harm
5e10: 20 69 73 20 63 61 75 73 65 64 20 62 79 20 74 68   is caused by th
5e20: 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75  is.</p>..<p>Futu
5e30: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
5e40: 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e 64  QLite may extend
5e50: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72 72   the list of err
5e60: 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74 20  ors which.might 
5e70: 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63 20  cause automatic 
5e80: 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c  transaction roll
5e90: 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76 65  back.  Future ve
5ea0: 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65  rsions of.SQLite
5eb0: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 68   might change th
5ec0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
5ed0: 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72  .  In particular
5ee0: 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65 20  , we may.choose 
5ef0: 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65 20  to simplify the 
5f00: 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75 74  interface in fut
5f10: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
5f20: 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69 6e  SQLite by.causin
5f30: 67 20 74 68 65 20 65 72 72 6f 72 73 20 61 62 6f  g the errors abo
5f40: 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20 75  ve to force an u
5f50: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f 6c  nconditional rol
5f60: 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  lback.</p>..<tcl
5f70: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
5f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5fc0: 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45 50  #.Section {SAVEP
5fd0: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
5fe0: 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45 41  {SAVEPOINT RELEA
5ff0: 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  SE}..RecursiveBu
6000: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65  bbleDiagram save
6010: 70 6f 69 6e 74 2d 73 74 6d 74 0a 52 65 63 75 72  point-stmt.Recur
6020: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
6030: 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a 52  m release-stmt.R
6040: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
6050: 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73  agram rollback-s
6060: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
6070: 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20  ^SAVEPOINTs are 
6080: 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61  a method of crea
6090: 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e  ting transaction
60a0: 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42  s, similar to.[B
60b0: 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49  EGIN] and [COMMI
60c0: 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  T], except that 
60d0: 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e  the SAVEPOINT an
60e0: 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  d RELEASE comman
60f0: 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64  ds.are named and
6100: 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c   may be nested.<
6110: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41  /p>..<p> ^The SA
6120: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20  VEPOINT command 
6130: 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72 61  starts a new tra
6140: 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20  nsaction with a 
6150: 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73  name..^The trans
6160: 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65  action names nee
6170: 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e  d not be unique.
6180: 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63  .^(A SAVEPOINT c
6190: 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65 69  an be started ei
61a0: 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f  ther within or o
61b0: 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47  utside of.a [BEG
61c0: 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29  IN]...[COMMIT].)
61d0: 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45  ^  ^(When a SAVE
61e0: 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74  POINT is the out
61f0: 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  er-most savepoin
6200: 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20  t.and it is not 
6210: 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d  within a [BEGIN]
6220: 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e  ...[COMMIT] then
6230: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
6240: 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47   the.same as BEG
6250: 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41 4e  IN DEFERRED TRAN
6260: 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a  SACTION.)^</p>..
6270: 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b  <p>^The ROLLBACK
6280: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65   TO command reve
6290: 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f 66  rts the state of
62a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 61   the database ba
62b0: 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61  ck to what.it wa
62c0: 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65  s just after the
62d0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53   corresponding S
62e0: 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65  AVEPOINT.  ^Note
62f0: 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61   that unlike tha
6300: 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43  t.plain [ROLLBAC
6310: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68  K] command (with
6320: 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f  out the TO keywo
6330: 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rd) the ROLLBACK
6340: 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73   TO command.does
6350: 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20   not cancel the 
6360: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49  transaction.  ^I
6370: 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c  nstead of cancel
6380: 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63  ling the transac
6390: 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41  tion,.the ROLLBA
63a0: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65  CK TO command re
63b0: 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e 73  starts the trans
63c0: 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20  action again at 
63d0: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e  the beginning..^
63e0: 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20  All intervening 
63f0: 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63  SAVEPOINTs are c
6400: 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65 72  anceled, however
6410: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  .</p>..<p>^The R
6420: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69  ELEASE command i
6430: 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54  s like a [COMMIT
6440: 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e  ] for a SAVEPOIN
6450: 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20  T..^The RELEASE 
6460: 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61  command causes a
6470: 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61  ll savepoints ba
6480: 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  ck to and includ
6490: 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65  ing the .most re
64a0: 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77  cent savepoint w
64b0: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
64c0: 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65  ame to be remove
64d0: 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e  d from the .tran
64e0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20  saction stack.  
64f0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20  ^The RELEASE of 
6500: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
6510: 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61  tion.does not ca
6520: 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  use any changes 
6530: 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f  to be written to
6540: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6550: 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65  le; it merely.re
6560: 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73  moves savepoints
6570: 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61   from the transa
6580: 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68  ction stack such
6590: 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c   that it is.no l
65a0: 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74  onger possible t
65b0: 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68  o ROLLBACK TO th
65c0: 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a  ose savepoints..
65d0: 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f  ^If a RELEASE co
65e0: 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74  mmand releases t
65f0: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
6600: 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20  epoint, so.that 
6610: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6620: 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d  stack becomes em
6630: 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53  pty, then RELEAS
6640: 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73  E is the same.as
6650: 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20   [COMMIT]..^The 
6660: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
6670: 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20   may be used to 
6680: 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65  release all save
6690: 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69  points and.commi
66a0: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
66b0: 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74 72  n even if the tr
66c0: 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72  ansaction was or
66d0: 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64  iginally started
66e0: 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20  .by a SAVEPOINT 
66f0: 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20  command instead 
6700: 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  of a [BEGIN] com
6710: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  mand.</p>..<p>^I
6720: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
6730: 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53  name in a RELEAS
6740: 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  E command does n
6750: 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76  ot match any.sav
6760: 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  epoint currently
6770: 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74   in the transact
6780: 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20  ion stack, then 
6790: 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  no savepoints ar
67a0: 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20  e.released, the 
67b0: 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63 68  database is unch
67c0: 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52  anged, and the R
67d0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72  ELEASE command r
67e0: 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e  eturns.an error.
67f0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  </p>..<p>^Note t
6800: 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61  hat an inner tra
6810: 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63  nsaction might c
6820: 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65  ommit (using the
6830: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
6840: 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72  ).but then later
6850: 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75   have its work u
6860: 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42  ndone by a ROLLB
6870: 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20  ACK in an outer 
6880: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20  transaction..^A 
6890: 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72  power failure or
68a0: 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f   program crash o
68b0: 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20  r OS crash will 
68c0: 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d  cause the outer-
68d0: 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e  most.transaction
68e0: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e   to rollback, un
68f0: 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65  doing all change
6900: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
6910: 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74  rred within.that
6920: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
6930: 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73  on, even changes
6940: 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70 6f   that have suppo
6950: 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d  sedly been "comm
6960: 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52 45  itted".by the RE
6970: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  LEASE command.  
6980: 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20  ^Content is not 
6990: 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74  actually committ
69a0: 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a  ed on the disk .
69b0: 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d  until the outerm
69c0: 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ost transaction 
69d0: 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  commits.</p>..<p
69e0: 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72  >There are sever
69f0: 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b  al ways of think
6a00: 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52 45  ing about the RE
6a10: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f  LEASE command:</
6a20: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ul>.<li><p>
6a30: 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65  .Some people vie
6a40: 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68 65  w RELEASE as the
6a50: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43   equivalent of C
6a60: 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45  OMMIT for a SAVE
6a70: 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61  POINT..This is a
6a80: 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69  n acceptable poi
6a90: 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f  nt of view as lo
6aa0: 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62  ng as one rememb
6ab0: 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68 61  ers that the.cha
6ac0: 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62  nges committed b
6ad0: 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73  y an inner trans
6ae0: 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74  action might lat
6af0: 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20  er be undone by 
6b00: 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e  a.rollback in an
6b10: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
6b20: 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  on.</p></li>..<l
6b30: 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69  i><p>.Another vi
6b40: 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73  ew of RELEASE is
6b50: 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73 20   that it merges 
6b60: 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74  a named transact
6b70: 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72  ion into its.par
6b80: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ent transaction,
6b90: 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d   so that the nam
6ba0: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  ed transaction a
6bb0: 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62 65  nd its parent be
6bc0: 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72  come.the same tr
6bd0: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65  ansaction.  Afte
6be0: 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e  r RELEASE, the n
6bf0: 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  amed transaction
6c00: 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a   and its parent.
6c10: 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72  will commit or r
6c20: 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72  ollback together
6c30: 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69 72  , whatever their
6c40: 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f   fate may be..</
6c50: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
6c60: 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68  .One can also th
6c70: 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ink of savepoint
6c80: 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20  s as."marks" in 
6c90: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6ca0: 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68  timeline.  In th
6cb0: 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41 56  is view, the SAV
6cc0: 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63  EPOINT command.c
6cd0: 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72  reates a new mar
6ce0: 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  k, the ROLLBACK 
6cf0: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e  TO command rewin
6d00: 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20  ds the timeline 
6d10: 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20  back.to a point 
6d20: 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20 6e  just after the n
6d30: 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74  amed mark, and t
6d40: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
6d50: 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20  nd.erases marks 
6d60: 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e  from the timelin
6d70: 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c  e without actual
6d80: 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68  ly making any.ch
6d90: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
6da0: 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e  abase..</p></li>
6db0: 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72  .</ul>....<h3>Tr
6dc0: 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e  ansaction Nestin
6dd0: 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70  g Rules</h3>..<p
6de0: 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73  >^The last trans
6df0: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77  action started w
6e00: 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73 74  ill be the first
6e10: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d  .transaction com
6e20: 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64  mitted or rolled
6e30: 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   back.</p>..<p>^
6e40: 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d  The [BEGIN] comm
6e50: 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69  and only works i
6e60: 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  f the transactio
6e70: 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79  n stack is empty
6e80: 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f  , or.in other wo
6e90: 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72 65  rds if there are
6ea0: 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e   no pending tran
6eb0: 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74  sactions.  ^If t
6ec0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73  he transaction.s
6ed0: 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74  tack is not empt
6ee0: 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49  y when the [BEGI
6ef0: 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e  N] command is in
6f00: 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20  voked, then the 
6f10: 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69  command.fails wi
6f20: 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  th an error.</p>
6f30: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49  ..<p>^The [COMMI
6f40: 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69  T] command commi
6f50: 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69  ts all outstandi
6f60: 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ng transactions 
6f70: 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74  and leaves.the t
6f80: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
6f90: 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e   empty.</p>..<p>
6fa0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
6fb0: 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74 68  mand starts with
6fc0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
6fd0: 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65   addition to the
6fe0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
6ff0: 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ck and releases 
7000: 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77  savepoints backw
7010: 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e  ards .in time un
7020: 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20  til it releases 
7030: 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68  a savepoint with
7040: 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65   a matching save
7050: 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69  point-name..^Pri
7060: 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65  or savepoints, e
7070: 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77  ven savepoints w
7080: 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76  ith matching sav
7090: 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72  epoint-names, ar
70a0: 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66  e.unchanged..^If
70b0: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
70c0: 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a  mand causes the.
70d0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
70e0: 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74  k to become empt
70f0: 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41 53  y (if the RELEAS
7100: 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73  E command releas
7110: 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74  es the.outermost
7120: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f   transaction fro
7130: 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68 65  m the stack) the
7140: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
7150: 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a  n commits.</p>..
7160: 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43  <p>^The [ROLLBAC
7170: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f  K] command witho
7180: 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72  ut a TO clause r
7190: 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74  olls backs all t
71a0: 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20  ransactions.and 
71b0: 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e 73  leaves the trans
71c0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70  action stack emp
71d0: 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ty.</p>..<p>^The
71e0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
71f0: 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75  d with a TO clau
7200: 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72  se rolls back tr
7210: 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67  ansactions going
7220: 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69  .backwards in ti
7230: 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d  me back to the m
7240: 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45 50  ost recent SAVEP
7250: 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63  OINT with a matc
7260: 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20  hing name..^The 
7270: 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74  SAVEPOINT with t
7280: 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65  he matching name
7290: 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20   remains on the 
72a0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
72b0: 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62  k,.but all datab
72c0: 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61 74  ase changes that
72d0: 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72 20   occurred after 
72e0: 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77  that SAVEPOINT w
72f0: 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20 72  as created.are r
7300: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66  olled back.  ^If
7310: 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e   the savepoint-n
7320: 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43  ame in a ROLLBAC
7330: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  K TO command doe
7340: 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20  s not.match any 
7350: 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65  SAVEPOINT on the
7360: 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65   stack, then the
7370: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
7380: 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a  d fails with an.
7390: 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73  error and leaves
73a0: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
73b0: 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68 61  e database uncha
73c0: 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  nged.</p>..<tcl>
73d0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
73e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7420: 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74  .Section comment
7430: 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e   comment {commen
7440: 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65  t *comments}..Re
7450: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
7460: 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e  gram comment-syn
7470: 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tax.</tcl>..<p>^
7480: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74  Comments are not
7490: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62   SQL commands, b
74a0: 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74  ut can occur wit
74b0: 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a  hin the text of.
74c0: 53 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73  SQL queries pass
74d0: 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70  ed to [sqlite3_p
74e0: 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64  repare_v2()] and
74f0: 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61   related interfa
7500: 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61  ces..^Comments a
7510: 72 65 20 74 72 65 61 74 65 64 20 61 73 20 77 68  re treated as wh
7520: 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20  itespace by the 
7530: 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74  parser..^Comment
7540: 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77  s can begin anyw
7550: 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20  here whitespace 
7560: 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69  .can be found, i
7570: 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20  ncluding inside 
7580: 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
7590: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
75a0: 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ines..</p>..<p>^
75b0: 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  SQL comments beg
75c0: 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73  in with two cons
75d0: 65 63 75 74 69 76 65 20 22 2d 22 20 63 68 61 72  ecutive "-" char
75e0: 61 63 74 65 72 73 20 28 41 53 43 49 49 20 30 78  acters (ASCII 0x
75f0: 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75  2d).and extend u
7600: 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
7610: 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c  ng the next newl
7620: 69 6e 65 20 63 68 61 72 61 63 74 65 72 20 28 41  ine character (A
7630: 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e  SCII 0x0a).or un
7640: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
7650: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
7660: 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e  comes first.</p>
7670: 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f  ..<p>^C-style co
7680: 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74  mments begin.wit
7690: 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e  h "/*" and exten
76a0: 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c  d up to and incl
76b0: 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22  uding the next "
76c0: 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61  */" character pa
76d0: 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  ir.or until the 
76e0: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
76f0: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
7700: 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63  rst.  ^C-style c
7710: 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e  omments.can span
7720: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
7730: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65   </p>..<p>^Comme
7740: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61  nts can appear a
7750: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
7760: 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e  ce can occur,.in
7770: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
7780: 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69  xpressions and i
7790: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
77a0: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
77b0: 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  ents..^Comments 
77c0: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70  do not nest..</p
77d0: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
77e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7820: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
7830: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20   {CREATE INDEX} 
7840: 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52  createindex {{CR
7850: 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 52 65  EATE INDEX}}..Re
7860: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
7870: 67 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65  gram create-inde
7880: 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  x-stmt.</tcl>..<
7890: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e  p>^The CREATE IN
78a0: 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73  DEX command cons
78b0: 69 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77  ists of the keyw
78c0: 6f 72 64 73 20 22 43 52 45 41 54 45 20 49 4e 44  ords "CREATE IND
78d0: 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20  EX" followed.by 
78e0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
78f0: 6e 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b  new index, the k
7900: 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65  eyword "ON", the
7910: 20 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69   name of a previ
7920: 6f 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61  ously.created ta
7930: 62 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62  ble that is to b
7940: 65 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61  e indexed, and a
7950: 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
7960: 69 73 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66 0a  ist of names of.
7970: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
7980: 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 75 73  able that are us
7990: 65 64 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78  ed for the index
79a0: 20 6b 65 79 2e 0a 49 66 20 74 68 65 20 6f 70 74   key..If the opt
79b0: 69 6f 6e 61 6c 20 57 48 45 52 45 20 63 6c 61 75  ional WHERE clau
79c0: 73 65 20 69 73 20 69 6e 63 6c 75 64 65 64 2c 20  se is included, 
79d0: 74 68 65 6e 20 74 68 65 20 69 6e 64 65 78 20 69  then the index i
79e0: 73 20 61 20 22 5b 70 61 72 74 69 61 6c 20 69 6e  s a "[partial in
79f0: 64 65 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  dex]"..</p>..<tc
7a00: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 64  l>hd_fragment {d
7a10: 65 73 63 69 64 78 7d 20 7b 64 65 73 63 65 6e 64  escidx} {descend
7a20: 69 6e 67 20 69 6e 64 69 63 65 73 7d 20 7b 64 65  ing indices} {de
7a30: 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 7d 20  scending index} 
7a40: 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65  {descending inde
7a50: 78 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45  xes}</tcl>.<p>^E
7a60: 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ach column name 
7a70: 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  can be followed 
7a80: 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 22 41  by one of the "A
7a90: 53 43 22 20 6f 72 20 22 44 45 53 43 22 20 6b 65  SC" or "DESC" ke
7aa0: 79 77 6f 72 64 73 0a 74 6f 20 69 6e 64 69 63 61  ywords.to indica
7ab0: 74 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20  te sort order.  
7ac0: 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20  ^The sort order 
7ad0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
7ae0: 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65 6e 64  e ignored depend
7af0: 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74 61 62  ing.on the datab
7b00: 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2c  ase file format,
7b10: 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63 75 6c   and in particul
7b20: 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61 20 66  ar the [schema f
7b30: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e  ormat number]..^
7b40: 54 68 65 20 22 6c 65 67 61 63 79 22 20 73 63 68  The "legacy" sch
7b50: 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29 20 69  ema format (1) i
7b60: 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72  gnores index.sor
7b70: 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 64  t order.  ^The d
7b80: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20  escending index 
7b90: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 34  schema format (4
7ba0: 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f  ) takes index so
7bb0: 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63  rt order.into ac
7bc0: 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65 72  count.  Only ver
7bd0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
7be0: 33 2e 33 2e 30 20 61 6e 64 20 6c 61 74 65 72 20  3.3.0 and later 
7bf0: 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64 65  are able to unde
7c00: 72 73 74 61 6e 64 0a 74 68 65 20 64 65 73 63 65  rstand.the desce
7c10: 6e 64 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 6d  nding index form
7c20: 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69 62  at. For compatib
7c30: 69 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20 6f  ility, version o
7c40: 66 20 53 51 4c 69 74 65 20 62 65 74 77 65 65 6e  f SQLite between
7c50: 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e 39   3.3.0.and 3.7.9
7c60: 20 75 73 65 20 74 68 65 20 6c 65 67 61 63 79 20   use the legacy 
7c70: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62 79  schema format by
7c80: 20 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20 6e   default.  The n
7c90: 65 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72 6d  ewer schema form
7ca0: 61 74 20 69 73 0a 75 73 65 64 20 62 79 20 64 65  at is.used by de
7cb0: 66 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f 6e  fault in version
7cc0: 20 33 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74 65   3.7.10 and late
7cd0: 72 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f  r..^The [legacy_
7ce0: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67  file_format prag
7cf0: 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20  ma] can be used 
7d00: 74 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74 68  to change set th
7d10: 65 20 73 70 65 63 69 66 69 63 0a 62 65 68 61 76  e specific.behav
7d20: 69 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72 73  ior for any vers
7d30: 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c 2f  ion of SQLite.</
7d40: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c  p>..<p>^The COLL
7d50: 41 54 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f  ATE clause optio
7d60: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20  nally following 
7d70: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  each column name
7d80: 20 64 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c 61   defines a.colla
7d90: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 75 73  ting sequence us
7da0: 65 64 20 66 6f 72 20 74 65 78 74 20 65 6e 74 72  ed for text entr
7db0: 69 65 73 20 69 6e 20 74 68 61 74 20 63 6f 6c 75  ies in that colu
7dc0: 6d 6e 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74  mn..^The default
7dd0: 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65   collating.seque
7de0: 6e 63 65 20 69 73 20 74 68 65 20 63 6f 6c 6c 61  nce is the colla
7df0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65  ting sequence de
7e00: 66 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20 63  fined for that c
7e10: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43 52  olumn in the.[CR
7e20: 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
7e30: 65 6d 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20 6e  ement.  ^Or if n
7e40: 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  o collating sequ
7e50: 65 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69 73  ence is otherwis
7e60: 65 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62  e defined,.the b
7e70: 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63  uilt-in BINARY c
7e80: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
7e90: 65 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  e is used.</p>..
7ea0: 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20  <p>There are no 
7eb0: 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73  arbitrary limits
7ec0: 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
7ed0: 66 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 63  f indices that c
7ee0: 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20 74  an be.attached t
7ef0: 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
7f00: 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20  .  ^(The number 
7f10: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e  of columns in an
7f20: 20 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74   index is .limit
7f30: 65 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  ed to the value 
7f40: 73 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33 5f  set by.[sqlite3_
7f50: 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f 4c  limit]([SQLITE_L
7f60: 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e  IMIT_COLUMN],...
7f70: 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ).)^</p>..<tcl>h
7f80: 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75  d_fragment uniqu
7f90: 65 69 64 78 20 7b 75 6e 69 71 75 65 20 69 6e 64  eidx {unique ind
7fa0: 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66  ex}</tcl>.<p>^If
7fb0: 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77   the UNIQUE keyw
7fc0: 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 74 77  ord appears betw
7fd0: 65 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49  een CREATE and I
7fe0: 4e 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63  NDEX then duplic
7ff0: 61 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65  ate.index entrie
8000: 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  s are not allowe
8010: 64 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74  d.  ^Any attempt
8020: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70   to insert a dup
8030: 6c 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c  licate entry.wil
8040: 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65  l result in an e
8050: 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20  rror.  ^For the 
8060: 70 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71  purposes of uniq
8070: 75 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20  ue indices, all 
8080: 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20  NULL values.are 
8090: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64 69  considered to di
80a0: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c  fferent from all
80b0: 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
80c0: 65 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20  es and are thus 
80d0: 75 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20  unique..This is 
80e0: 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70  one of the two p
80f0: 6f 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65  ossible interpre
8100: 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53  tations of the S
8110: 51 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28  QL-92 standard.(
8120: 74 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20  the language in 
8130: 74 68 65 20 73 74 61 6e 64 61 72 64 20 69 73 20  the standard is 
8140: 61 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69  ambiguous) and i
8150: 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 61  s the interpreta
8160: 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79  tion.followed by
8170: 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53   PostgreSQL, MyS
8180: 51 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e  QL, Firebird, an
8190: 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72  d Oracle.  Infor
81a0: 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66  mix and.Microsof
81b0: 74 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c  t SQL Server fol
81c0: 6c 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e  low the other in
81d0: 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
81e0: 74 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70  the standard.</p
81f0: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70  >..<p>^If the op
8200: 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58  tional IF NOT EX
8210: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
8220: 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68  resent and anoth
8230: 65 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68  er index.with th
8240: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65  e same name alre
8250: 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e  ady exists, then
8260: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65   this command be
8270: 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f  comes a no-op.</
8280: 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20  p>..<p>^Indexes 
8290: 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68  are removed with
82a0: 20 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58   the [DROP INDEX
82b0: 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a  ] command.</p>..
82c0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
82d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8310: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
8320: 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72  REATE TABLE} {cr
8330: 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45  eatetable} {{CRE
8340: 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63  ATE TABLE}}..Rec
8350: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
8360: 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65  ram create-table
8370: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
8380: 3e 54 68 65 20 22 43 52 45 41 54 45 20 54 41 42  >The "CREATE TAB
8390: 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  LE" command is u
83a0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
83b0: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20  new table in an 
83c0: 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65  SQLite .database
83d0: 2e 20 41 20 43 52 45 41 54 45 20 54 41 42 4c 45  . A CREATE TABLE
83e0: 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69   command specifi
83f0: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
8400: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 74   attributes of t
8410: 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c  he.new table:..<
8420: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65  ul>.  <li><p>The
8430: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77   name of the new
8440: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
8450: 70 3e 20 54 68 65 20 64 61 74 61 62 61 73 65 20  p> The database 
8460: 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65 77  in which the new
8470: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
8480: 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65  d. Tables may be
8490: 20 0a 20 20 20 20 20 20 63 72 65 61 74 65 64 20   .      created 
84a0: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
84b0: 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64  base, the temp d
84c0: 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61  atabase, or in a
84d0: 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20 20 20  ny attached.    
84e0: 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c    database...  <
84f0: 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20  li><p> The name 
8500: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
8510: 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20  n the table...  
8520: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c  <li><p> The decl
8530: 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63  ared type of eac
8540: 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
8550: 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  table...  <li><p
8560: 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75  > A default valu
8570: 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20  e or expression 
8580: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
8590: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20  in the table... 
85a0: 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75   <li><p> A defau
85b0: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
85c0: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74  uence to use wit
85d0: 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a  h each column...
85e0: 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e    <li><p> Option
85f0: 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20  ally, a PRIMARY 
8600: 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
8610: 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63  e. Both single c
8620: 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20  olumn and.      
8630: 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74   composite (mult
8640: 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69  iple column) pri
8650: 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20 73 75  mary keys are su
8660: 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e  pported...  <li>
8670: 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c  <p> A set of SQL
8680: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72   constraints for
8690: 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c   each table. SQL
86a0: 69 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49  ite supports UNI
86b0: 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20  QUE, NOT.       
86c0: 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20  NULL, CHECK and 
86d0: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
86e0: 74 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e  traints...  <li>
86f0: 3c 70 3e 20 57 68 65 74 68 65 72 20 74 68 65 20  <p> Whether the 
8700: 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
8710: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
8720: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72  ..</ul>..<p>Ever
8730: 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  y CREATE TABLE s
8740: 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70  tatement must sp
8750: 65 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72  ecify a name for
8760: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a   the new table..
8770: 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20    ^(Table names 
8780: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
8790: 22 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65  "sqlite_" are re
87a0: 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72  served for inter
87b0: 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73  nal use. It.  is
87c0: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74   an error to att
87d0: 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61  empt to create a
87e0: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61   table with a na
87f0: 6d 65 20 74 68 61 74 20 73 74 61 72 74 73 20 77  me that starts w
8800: 69 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e  ith.  "sqlite_".
8810: 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c  )^..<p> ^If a &l
8820: 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26  t;database-name&
8830: 67 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64  gt; is specified
8840: 2c 20 69 74 20 6d 75 73 74 20 62 65 20 65 69 74  , it must be eit
8850: 68 65 72 20 22 6d 61 69 6e 22 2c 20 0a 20 20 22  her "main", .  "
8860: 74 65 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e 61  temp", or the na
8870: 6d 65 20 6f 66 20 61 6e 20 5b 41 54 54 41 43 48  me of an [ATTACH
8880: 20 44 41 54 41 42 41 53 45 7c 61 74 74 61 63 68   DATABASE|attach
8890: 65 64 20 64 61 74 61 62 61 73 65 5d 2e 20 5e 49  ed database]. ^I
88a0: 6e 20 74 68 69 73 20 63 61 73 65 0a 20 20 74 68  n this case.  th
88b0: 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63  e new table is c
88c0: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6e 61  reated in the na
88d0: 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49  med database. ^I
88e0: 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20  f the "TEMP" or 
88f0: 22 54 45 4d 50 4f 52 41 52 59 22 0a 20 20 6b 65  "TEMPORARY".  ke
8900: 79 77 6f 72 64 20 6f 63 63 75 72 73 20 62 65 74  yword occurs bet
8910: 77 65 65 6e 20 74 68 65 20 22 43 52 45 41 54 45  ween the "CREATE
8920: 22 20 61 6e 64 20 22 54 41 42 4c 45 22 20 74 68  " and "TABLE" th
8930: 65 6e 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  en the new table
8940: 20 69 73 0a 20 20 63 72 65 61 74 65 64 20 69 6e   is.  created in
8950: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
8960: 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72  se. ^It is an er
8970: 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62  ror to specify b
8980: 6f 74 68 20 61 20 0a 20 20 26 6c 74 3b 64 61 74  oth a .  &lt;dat
8990: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 61  abase-name&gt; a
89a0: 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72 20 54  nd the TEMP or T
89b0: 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64  EMPORARY keyword
89c0: 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a 20 20 26  , unless the.  &
89d0: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
89e0: 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20  &gt; is "temp". 
89f0: 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20  ^If no database 
8a00: 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
8a10: 64 20 61 6e 64 20 74 68 65 0a 20 20 54 45 4d 50  d and the.  TEMP
8a20: 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20   keyword is not 
8a30: 70 72 65 73 65 6e 74 20 74 68 65 6e 20 74 68 65  present then the
8a40: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
8a50: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 0a 20 20  d in the main.  
8a60: 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 0a 20  database...<p>. 
8a70: 20 5e 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20   ^It is usually 
8a80: 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65  an error to atte
8a90: 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20  mpt to create a 
8aa0: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 20 64  new table in a d
8ab0: 61 74 61 62 61 73 65 20 74 68 61 74 0a 20 20 61  atabase that.  a
8ac0: 6c 72 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20  lready contains 
8ad0: 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f  a table, index o
8ae0: 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61  r view of the sa
8af0: 6d 65 20 6e 61 6d 65 2e 20 5e 48 6f 77 65 76 65  me name. ^Howeve
8b00: 72 2c 20 69 66 20 74 68 65 0a 20 20 22 49 46 20  r, if the.  "IF 
8b10: 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75  NOT EXISTS" clau
8b20: 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  se is specified 
8b30: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43  as part of the C
8b40: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
8b50: 65 6d 65 6e 74 20 61 6e 64 0a 20 20 61 20 74 61  ement and.  a ta
8b60: 62 6c 65 20 6f 72 20 76 69 65 77 20 6f 66 20 74  ble or view of t
8b70: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72  he same name alr
8b80: 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65  eady exists, the
8b90: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
8ba0: 6d 6d 61 6e 64 0a 20 20 73 69 6d 70 6c 79 20 68  mmand.  simply h
8bb0: 61 73 20 6e 6f 20 65 66 66 65 63 74 20 28 61 6e  as no effect (an
8bc0: 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61  d no error messa
8bd0: 67 65 20 69 73 20 72 65 74 75 72 6e 65 64 29 2e  ge is returned).
8be0: 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 73 74   ^An error is st
8bf0: 69 6c 6c 0a 20 20 72 65 74 75 72 6e 65 64 20 69  ill.  returned i
8c00: 66 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 6e  f the table cann
8c10: 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 62 65  ot be created be
8c20: 63 61 75 73 65 20 6f 66 20 61 6e 20 65 78 69 73  cause of an exis
8c30: 74 69 6e 67 20 69 6e 64 65 78 2c 20 65 76 65 6e  ting index, even
8c40: 20 0a 20 20 69 66 20 74 68 65 20 22 49 46 20 4e   .  if the "IF N
8c50: 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75 73  OT EXISTS" claus
8c60: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
8c70: 0a 3c 70 3e 5e 49 74 20 69 73 20 6e 6f 74 20 61  .<p>^It is not a
8c80: 6e 20 65 72 72 6f 72 20 74 6f 20 63 72 65 61 74  n error to creat
8c90: 65 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 68  e a table that h
8ca0: 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
8cb0: 20 61 73 20 61 6e 20 0a 20 20 65 78 69 73 74 69   as an .  existi
8cc0: 6e 67 20 5b 43 52 45 41 54 45 20 54 52 49 47 47  ng [CREATE TRIGG
8cd0: 45 52 7c 74 72 69 67 67 65 72 5d 2e 0a 0a 3c 70  ER|trigger]...<p
8ce0: 3e 5e 54 61 62 6c 65 73 20 61 72 65 20 72 65 6d  >^Tables are rem
8cf0: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  oved using the [
8d00: 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74  DROP TABLE] stat
8d10: 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c 68  ement.  </p>..<h
8d20: 33 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e  3>CREATE TABLE .
8d30: 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 53 74 61  .. AS SELECT Sta
8d40: 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70  tements</h3>..<p
8d50: 3e 5e 28 41 20 22 43 52 45 41 54 45 20 54 41 42  >^(A "CREATE TAB
8d60: 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54  LE ... AS SELECT
8d70: 22 20 73 74 61 74 65 6d 65 6e 74 20 63 72 65 61  " statement crea
8d80: 74 65 73 20 61 6e 64 20 70 6f 70 75 6c 61 74 65  tes and populate
8d90: 73 20 61 20 64 61 74 61 62 61 73 65 0a 74 61 62  s a database.tab
8da0: 6c 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  le based on the 
8db0: 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
8dc0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e  ECT statement.)^
8dd0: 20 5e 28 54 68 65 20 74 61 62 6c 65 20 68 61 73   ^(The table has
8de0: 20 74 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72   the same.number
8df0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74   of columns as t
8e00: 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  he rows returned
8e10: 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
8e20: 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61  tatement. The na
8e30: 6d 65 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d  me of.each colum
8e40: 6e 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  n is the same as
8e50: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
8e60: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63   corresponding c
8e70: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73  olumn in the res
8e80: 75 6c 74 0a 73 65 74 20 6f 66 20 74 68 65 20 53  ult.set of the S
8e90: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
8ea0: 29 5e 20 5e 28 54 68 65 20 64 65 63 6c 61 72 65  )^ ^(The declare
8eb0: 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  d type of each c
8ec0: 6f 6c 75 6d 6e 20 69 73 20 64 65 74 65 72 6d 69  olumn is determi
8ed0: 6e 65 64 0a 62 79 20 74 68 65 20 5b 65 78 70 72  ned.by the [expr
8ee0: 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d  ession affinity]
8ef0: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
8f00: 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nding expression
8f10: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
8f20: 65 74 0a 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et.of the SELECT
8f30: 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 73 20 66   statement, as f
8f40: 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63  ollows:.</p>..<c
8f50: 65 6e 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72  enter><table bor
8f60: 64 65 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68  der=1>.  <tr><th
8f70: 3e 45 78 70 72 65 73 73 69 6f 6e 20 41 66 66 69  >Expression Affi
8f80: 6e 69 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d  nity   <th>Colum
8f90: 6e 20 44 65 63 6c 61 72 65 64 20 54 79 70 65 0a  n Declared Type.
8fa0: 20 20 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20 20    <tr><td>TEXT  
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fc0: 3c 74 64 3e 22 54 45 58 54 22 0a 20 20 3c 74 72  <td>"TEXT".  <tr
8fd0: 3e 3c 74 64 3e 4e 55 4d 45 52 49 43 20 20 20 20  ><td>NUMERIC    
8fe0: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
8ff0: 4e 55 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49  NUM".  <tr><td>I
9000: 4e 54 45 47 45 52 20 20 20 20 20 20 20 20 20 20  NTEGER          
9010: 20 20 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20       <td>"INT". 
9020: 20 3c 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20   <tr><td>REAL   
9030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c                 <
9040: 74 64 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e  td>"REAL".  <tr>
9050: 3c 74 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20 20  <td>NONE        
9060: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 22            <td>""
9070: 20 28 65 6d 70 74 79 20 73 74 72 69 6e 67 29 0a   (empty string).
9080: 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72  </table></center
9090: 3e 29 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c  >)^..<p>^(A tabl
90a0: 65 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  e created using 
90b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20  CREATE TABLE AS 
90c0: 68 61 73 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b  has no PRIMARY K
90d0: 45 59 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72  EY and no.constr
90e0: 61 69 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e  aints of any kin
90f0: 64 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  d. The default v
9100: 61 6c 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  alue of each col
9110: 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65  umn is NULL. The
9120: 20 64 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69   default.collati
9130: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  on sequence for 
9140: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  each column of t
9150: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20  he new table is 
9160: 42 49 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54  BINARY.)^..<p>^T
9170: 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73  ables created us
9180: 69 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c 45  ing CREATE TABLE
9190: 20 41 53 20 61 72 65 20 69 6e 69 74 69 61 6c 6c   AS are initiall
91a0: 79 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68  y populated with
91b0: 20 74 68 65 0a 72 6f 77 73 20 6f 66 20 64 61 74   the.rows of dat
91c0: 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  a returned by th
91d0: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
91e0: 6e 74 2e 20 5e 52 6f 77 73 20 61 72 65 20 61 73  nt. ^Rows are as
91f0: 73 69 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75  signed contiguou
9200: 73 6c 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72  sly.ascending [r
9210: 6f 77 69 64 5d 20 76 61 6c 75 65 73 2c 20 73 74  owid] values, st
9220: 61 72 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69  arting with 1, i
9230: 6e 20 74 68 65 20 5b 6f 72 64 65 72 20 62 79 7c  n the [order by|
9240: 6f 72 64 65 72 5d 20 74 68 61 74 20 74 68 65 79  order] that they
9250: 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79  .are returned by
9260: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
9270: 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ement...<tcl>hd_
9280: 66 72 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63  fragment {tablec
9290: 6f 6c 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64  oldef} {column d
92a0: 65 66 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75  efinition} {colu
92b0: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c  mn definitions}<
92c0: 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e  /tcl>.<h3>Column
92d0: 20 44 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33   Definitions</h3
92e0: 3e 0a 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20  >..<p>Unless it 
92f0: 69 73 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  is a CREATE TABL
9300: 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20  E ... AS SELECT 
9310: 73 74 61 74 65 6d 65 6e 74 2c 20 61 20 43 52 45  statement, a CRE
9320: 41 54 45 20 54 41 42 4c 45 20 69 6e 63 6c 75 64  ATE TABLE includ
9330: 65 73 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b  es.one or more [
9340: 63 6f 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d  column-def|colum
9350: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20  n definitions], 
9360: 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
9370: 77 65 64 20 62 79 20 61 20 6c 69 73 74 20 6f 66  wed by a list of
9380: 0a 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69  .[table-constrai
9390: 6e 74 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72 61  nt|table constra
93a0: 69 6e 74 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c  ints].  Each col
93b0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 63  umn definition c
93c0: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 0a 6e  onsists of the.n
93d0: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ame of the colum
93e0: 6e 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  n, optionally fo
93f0: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 64 65  llowed by the de
9400: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
9410: 68 65 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20  he column,.then 
9420: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69  one or more opti
9430: 6f 6e 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e  onal [column-con
9440: 73 74 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63  straint|column c
9450: 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63  onstraints]. Inc
9460: 6c 75 64 65 64 20 69 6e 0a 74 68 65 20 64 65 66  luded in.the def
9470: 69 6e 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75  inition of "colu
9480: 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 22 20  mn constraints" 
9490: 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
94a0: 20 6f 66 20 74 68 65 20 70 72 65 76 69 6f 75 73   of the previous
94b0: 0a 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20 74  .statement are t
94c0: 68 65 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44  he COLLATE and D
94d0: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 73 2c 20  EFAULT clauses, 
94e0: 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73  even though thes
94f0: 65 20 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79  e are not really
9500: 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20  .constraints in 
9510: 74 68 65 20 73 65 6e 73 65 20 74 68 61 74 20 74  the sense that t
9520: 68 65 79 20 64 6f 20 6e 6f 74 20 72 65 73 74 72  hey do not restr
9530: 69 63 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ict the data tha
9540: 74 20 74 68 65 20 74 61 62 6c 65 20 6d 61 79 0a  t the table may.
9550: 63 6f 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74 68  contain. The oth
9560: 65 72 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d  er constraints -
9570: 20 4e 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b   NOT NULL, CHECK
9580: 2c 20 55 4e 49 51 55 45 2c 20 50 52 49 4d 41 52  , UNIQUE, PRIMAR
9590: 59 20 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49 47  Y KEY and.FOREIG
95a0: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
95b0: 73 20 2d 20 69 6d 70 6f 73 65 20 72 65 73 74 72  s - impose restr
95c0: 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74  ictions on the t
95d0: 61 62 6c 65 73 20 64 61 74 61 2c 20 61 6e 64 20  ables data, and 
95e0: 61 72 65 20 61 72 65 0a 64 65 73 63 72 69 62 65  are are.describe
95f0: 64 20 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61  d under [constra
9600: 69 6e 74 73 7c 53 51 4c 20 44 61 74 61 20 43 6f  ints|SQL Data Co
9610: 6e 73 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77  nstraints] below
9620: 2e 0a 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f  ...<p>^Unlike mo
9630: 73 74 20 53 51 4c 20 64 61 74 61 62 61 73 65 73  st SQL databases
9640: 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
9650: 74 20 72 65 73 74 72 69 63 74 20 74 68 65 20 74  t restrict the t
9660: 79 70 65 20 6f 66 20 64 61 74 61 20 74 68 61 74  ype of data that
9670: 0a 6d 61 79 20 62 65 20 69 6e 73 65 72 74 65 64  .may be inserted
9680: 20 69 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62   into a column b
9690: 61 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75  ased on the colu
96a0: 6d 6e 73 20 64 65 63 6c 61 72 65 64 20 74 79 70  mns declared typ
96b0: 65 2e 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69  e. Instead,.SQLi
96c0: 74 65 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63  te uses [dynamic
96d0: 20 74 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64   typing]. ^The d
96e0: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20  eclared type of 
96f0: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  a column is used
9700: 20 74 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74 68   to.determine th
9710: 65 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20  e [affinity] of 
9720: 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e  the column only.
9730: 0a 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54  ..<p>The DEFAULT
9740: 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
9750: 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  s a default valu
9760: 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65  e to use for the
9770: 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61   column if no.va
9780: 6c 75 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c  lue is explicitl
9790: 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  y provided by th
97a0: 65 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e  e user when doin
97b0: 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e  g an [INSERT]. ^
97c0: 49 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65  If there.is no e
97d0: 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20  xplicit DEFAULT 
97e0: 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
97f0: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
9800: 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nition, then the
9810: 20 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20   .default value 
9820: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  of the column is
9830: 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c   NULL. ^(An expl
9840: 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61  icit DEFAULT cla
9850: 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a  use may specify.
9860: 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  that the default
9870: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
9880: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  a string constan
9890: 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61  t, a blob consta
98a0: 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d  nt, a.signed-num
98b0: 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73  ber, or any cons
98c0: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
98d0: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65  enclosed in pare
98e0: 6e 74 68 65 73 65 73 2e 20 41 0a 64 65 66 61 75  ntheses. A.defau
98f0: 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73  lt value may als
9900: 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  o be one of the 
9910: 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64  special case-ind
9920: 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f 72 64  ependent keyword
9930: 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  s.CURRENT_TIME, 
9940: 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20  CURRENT_DATE or 
9950: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
9960: 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75  P.)^ ^For the pu
9970: 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a 44 45  rposes of the.DE
9980: 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20 61 6e  FAULT clause, an
9990: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63   expression is c
99a0: 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73 74 61  onsidered consta
99b0: 6e 74 20 69 66 20 69 74 20 64 6f 65 73 0a 63 6f  nt if it does.co
99c0: 6e 74 61 69 6e 73 20 6e 6f 20 73 75 62 2d 71 75  ntains no sub-qu
99d0: 65 72 69 65 73 2c 20 63 6f 6c 75 6d 6e 20 6f 72  eries, column or
99e0: 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65   table reference
99f0: 73 2c 20 5b 62 6f 75 6e 64 20 70 61 72 61 6d 65  s, [bound parame
9a00: 74 65 72 73 5d 2c 0a 6f 72 20 73 74 72 69 6e 67  ters],.or string
9a10: 20 6c 69 74 65 72 61 6c 73 20 65 6e 63 6c 6f 73   literals enclos
9a20: 65 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f  ed in double-quo
9a30: 74 65 73 20 69 6e 73 74 65 61 64 20 6f 66 20 73  tes instead of s
9a40: 69 6e 67 6c 65 2d 71 75 6f 74 65 73 2e 0a 0a 3c  ingle-quotes...<
9a50: 70 3e 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20  p>^(Each time a 
9a60: 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20  row is inserted 
9a70: 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  into the table b
9a80: 79 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  y an INSERT stat
9a90: 65 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73  ement that .does
9aa0: 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70   not provide exp
9ab0: 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72  licit values for
9ac0: 20 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d   all table colum
9ad0: 6e 73 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  ns the values st
9ae0: 6f 72 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20  ored in.the new 
9af0: 72 6f 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e  row are determin
9b00: 65 64 20 62 79 20 74 68 65 69 72 20 64 65 66 61  ed by their defa
9b10: 75 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73  ult values)^, as
9b20: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a   follows:..<ul>.
9b30: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
9b40: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9b50: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  f the column is 
9b60: 61 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c  a constant NULL,
9b70: 20 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20   text, blob or. 
9b80: 20 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72     signed-number
9b90: 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61   value, then tha
9ba0: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
9bb0: 64 69 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20  directly in the 
9bc0: 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e  new row...  <li>
9bd0: 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75  <p>^If the defau
9be0: 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f  lt value of a co
9bf0: 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
9c00: 73 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68  ssion in parenth
9c10: 65 73 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74  eses, then.    t
9c20: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
9c30: 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
9c40: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73  for each row ins
9c50: 65 72 74 65 64 20 61 6e 64 20 74 68 65 20 72 65  erted and the re
9c60: 73 75 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69  sults.    used i
9c70: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a  n the new row...
9c80: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
9c90: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9ca0: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55  f a column is CU
9cb0: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
9cc0: 45 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20  ENT_DATE or.    
9cd0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
9ce0: 50 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  P, then the valu
9cf0: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65  e used in the ne
9d00: 77 20 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a  w row is a text.
9d10: 20 20 20 20 72 65 70 72 65 73 65 6e 74 61 74 69      representati
9d20: 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  on of the curren
9d30: 74 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f  t UTC date and/o
9d40: 72 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52  r time. ^For CUR
9d50: 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20  RENT_TIME, the. 
9d60: 20 20 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65     format of the
9d70: 20 76 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d   value is "HH:MM
9d80: 3a 53 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45  :SS". ^For CURRE
9d90: 4e 54 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d  NT_DATE, "YYYY-M
9da0: 4d 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20  M-DD". ^The.    
9db0: 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45  format for CURRE
9dc0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20  NT_TIMESTAMP is 
9dd0: 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  "YYYY-MM-DD HH:M
9de0: 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  M:SS"..</ul>..<p
9df0: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
9e00: 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
9e10: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f  he name of a [co
9e20: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
9e30: 5d 20 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20  ] to use as.the 
9e40: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
9e50: 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74  n sequence for t
9e60: 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e  he column. ^If n
9e70: 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  o COLLATE clause
9e80: 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
9e90: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
9ea0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
9eb0: 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e   [BINARY]...<p>^
9ec0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
9ed0: 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65  lumns in a table
9ee0: 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74   is limited by t
9ef0: 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43  he [SQLITE_MAX_C
9f00: 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74  OLUMN].compile-t
9f10: 69 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e  ime parameter. ^
9f20: 41 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  A single row of 
9f30: 61 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73  a table cannot s
9f40: 74 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b  tore more than.[
9f50: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
9f60: 48 5d 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  H] bytes of data
9f70: 2e 20 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65  . ^Both of these
9f80: 20 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c   limits can be l
9f90: 6f 77 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d  owered at.runtim
9fa0: 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  e using the [sql
9fb0: 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f  ite3_limit()] C/
9fc0: 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  C++ interface.</
9fd0: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
9fe0: 6d 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74  ment {constraint
9ff0: 73 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d  s} {constraints}
a000: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44  </tcl>.<h3>SQL D
a010: 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c  ata Constraints<
a020: 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /h3>..<tcl>hd_fr
a030: 61 67 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f  agment primkeyco
a040: 6e 73 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59  nst {PRIMARY KEY
a050: 7d 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63  } {PRIMARY KEY c
a060: 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e  onstraint}</tcl>
a070: 0a 3c 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20  .<p>^Each table 
a080: 69 6e 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61  in SQLite may ha
a090: 76 65 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c  ve at most one <
a0a0: 62 3e 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62  b>PRIMARY KEY</b
a0b0: 3e 2e 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79  >. ^If the.  key
a0c0: 77 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45  words PRIMARY KE
a0d0: 59 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  Y are added to a
a0e0: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
a0f0: 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69  on, then the pri
a100: 6d 61 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74  mary key.  for t
a110: 68 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74  he table consist
a120: 73 20 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65  s of that single
a130: 20 63 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66   column. ^Or, if
a140: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
a150: 6c 61 75 73 65 20 0a 20 20 69 73 20 73 70 65 63  lause .  is spec
a160: 69 66 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c  ified as a [tabl
a170: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74  e-constraint], t
a180: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
a190: 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
a1a0: 0a 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  .  consists of t
a1b0: 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d  he list of colum
a1c0: 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ns specified as 
a1d0: 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d  part of the PRIM
a1e0: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a  ARY KEY clause..
a1f0: 20 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 72    ^An error is r
a200: 61 69 73 65 64 20 69 66 20 6d 6f 72 65 20 74 68  aised if more th
a210: 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b  an one PRIMARY K
a220: 45 59 20 63 6c 61 75 73 65 20 61 70 70 65 61 72  EY clause appear
a230: 73 20 69 6e 20 61 0a 20 20 43 52 45 41 54 45 20  s in a.  CREATE 
a240: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
a250: 20 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b    ^The PRIMARY K
a260: 45 59 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66  EY is optional f
a270: 6f 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  or ordinary tabl
a280: 65 73 0a 20 20 62 75 74 20 69 73 20 72 65 71 75  es.  but is requ
a290: 69 72 65 64 20 66 6f 72 20 5b 57 49 54 48 4f 55  ired for [WITHOU
a2a0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e  T ROWID] tables.
a2b0: 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20  ..<p>If a table 
a2c0: 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  has a single col
a2d0: 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 20  umn primary key 
a2e0: 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64  and the declared
a2f0: 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20 20   type of that.  
a300: 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47  column is "INTEG
a310: 45 52 22 20 61 6e 64 20 74 68 65 20 74 61 62 6c  ER" and the tabl
a320: 65 20 69 73 20 6e 6f 74 20 61 20 5b 57 49 54 48  e is not a [WITH
a330: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
a340: 2c 0a 20 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  ,.  then the col
a350: 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73 20  umn is known as 
a360: 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an [INTEGER PRIM
a370: 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65 20  ARY KEY]..  See 
a380: 62 65 6c 6f 77 20 66 6f 72 20 61 20 64 65 73 63  below for a desc
a390: 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ription of the s
a3a0: 70 65 63 69 61 6c 20 70 72 6f 70 65 72 74 69 65  pecial propertie
a3b0: 73 20 61 6e 64 20 62 65 68 61 76 69 6f 72 73 0a  s and behaviors.
a3c0: 20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74    associated wit
a3d0: 68 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52  h an [INTEGER PR
a3e0: 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e  IMARY KEY]...<p>
a3f0: 5e 45 61 63 68 20 72 6f 77 20 69 6e 20 61 20 74  ^Each row in a t
a400: 61 62 6c 65 20 77 69 74 68 20 61 20 70 72 69 6d  able with a prim
a410: 61 72 79 20 6b 65 79 20 6d 75 73 74 20 68 61 76  ary key must hav
a420: 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69  e a unique combi
a430: 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75  nation.  of valu
a440: 65 73 20 69 6e 20 69 74 73 20 70 72 69 6d 61 72  es in its primar
a450: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e  y key columns. ^
a460: 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
a470: 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 0a   of determining.
a480: 20 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73    the uniqueness
a490: 20 6f 66 20 70 72 69 6d 61 72 79 20 6b 65 79 20   of primary key 
a4a0: 76 61 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61 6c  values, NULL val
a4b0: 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
a4c0: 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ed distinct from
a4d0: 0a 20 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c  .  all other val
a4e0: 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f  ues, including o
a4f0: 74 68 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66 20  ther NULLs. ^If 
a500: 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b  an [INSERT] or [
a510: 55 50 44 41 54 45 5d 0a 20 20 73 74 61 74 65 6d  UPDATE].  statem
a520: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
a530: 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65  modify the table
a540: 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61 74   content so that
a550: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77   two or more row
a560: 73 0a 20 20 68 61 76 65 20 69 64 65 6e 74 69 63  s.  have identic
a570: 61 6c 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76  al primary key v
a580: 61 6c 75 65 73 2c 20 74 68 61 74 20 69 73 20 61  alues, that is a
a590: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
a5a0: 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 20 41 63 63 6f  ation...<p> Acco
a5b0: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 53 51 4c  rding to the SQL
a5c0: 20 73 74 61 6e 64 61 72 64 2c 20 50 52 49 4d 41   standard, PRIMA
a5d0: 52 59 20 4b 45 59 20 73 68 6f 75 6c 64 20 61 6c  RY KEY should al
a5e0: 77 61 79 73 20 69 6d 70 6c 79 20 4e 4f 54 20 4e  ways imply NOT N
a5f0: 55 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74 75 6e 61  ULL..  Unfortuna
a600: 74 65 6c 79 2c 20 64 75 65 20 74 6f 20 61 20 62  tely, due to a b
a610: 75 67 20 69 6e 20 73 6f 6d 65 20 65 61 72 6c 79  ug in some early
a620: 20 76 65 72 73 69 6f 6e 73 2c 20 74 68 69 73 20   versions, this 
a630: 69 73 20 6e 6f 74 20 74 68 65 0a 20 20 63 61 73  is not the.  cas
a640: 65 20 69 6e 20 53 51 4c 69 74 65 2e 20 5e 55 6e  e in SQLite. ^Un
a650: 6c 65 73 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  less the column 
a660: 69 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50  is an [INTEGER P
a670: 52 49 4d 41 52 59 20 4b 45 59 5d 20 6f 72 0a 20  RIMARY KEY] or. 
a680: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 61 20   the table is a 
a690: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
a6a0: 74 61 62 6c 65 20 6f 72 20 74 68 65 20 63 6f 6c  table or the col
a6b0: 75 6d 6e 20 69 73 20 64 65 63 6c 61 72 65 64 20  umn is declared 
a6c0: 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69  NOT NULL,.  SQLi
a6d0: 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76  te allows NULL v
a6e0: 61 6c 75 65 73 20 69 6e 20 61 20 50 52 49 4d 41  alues in a PRIMA
a6f0: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20  RY KEY column.  
a700: 53 51 4c 69 74 65 20 63 6f 75 6c 64 20 62 65 20  SQLite could be 
a710: 66 69 78 65 64 20 74 6f 0a 20 20 63 6f 6e 66 6f  fixed to.  confo
a720: 72 6d 20 74 6f 20 74 68 65 20 73 74 61 6e 64 61  rm to the standa
a730: 72 64 2c 20 62 75 74 20 64 6f 69 6e 67 20 73 6f  rd, but doing so
a740: 20 6d 69 67 68 74 20 62 72 65 61 6b 20 6c 65 67   might break leg
a750: 61 63 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  acy applications
a760: 2e 0a 20 20 48 65 6e 63 65 2c 20 69 74 20 68 61  ..  Hence, it ha
a770: 73 20 62 65 65 6e 20 64 65 63 69 64 65 64 20 74  s been decided t
a780: 6f 20 6d 65 72 65 6c 79 20 64 6f 63 75 6d 65 6e  o merely documen
a790: 74 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20  t the fact that 
a7a0: 53 51 4c 69 74 65 0a 20 20 61 6c 6c 6f 77 69 6e  SQLite.  allowin
a7b0: 67 20 4e 55 4c 4c 73 20 69 6e 20 6d 6f 73 74 20  g NULLs in most 
a7c0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
a7d0: 6d 6e 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  mns...<tcl>hd_fr
a7e0: 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e  agment uniquecon
a7f0: 73 74 20 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69  st {UNIQUE} {uni
a800: 71 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 7d 20  que constraint} 
a810: 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69  {UNIQUE constrai
a820: 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20  nt}</tcl>.<p>^A 
a830: 3c 62 3e 55 4e 49 51 55 45 3c 2f 62 3e 20 63 6f  <b>UNIQUE</b> co
a840: 6e 73 74 72 61 69 6e 74 20 69 73 20 73 69 6d 69  nstraint is simi
a850: 6c 61 72 20 74 6f 20 61 20 50 52 49 4d 41 52 59  lar to a PRIMARY
a860: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c   KEY constraint,
a870: 20 65 78 63 65 70 74 0a 20 20 74 68 61 74 20 61   except.  that a
a880: 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d 61   single table ma
a890: 79 20 68 61 76 65 20 61 6e 79 20 6e 75 6d 62 65  y have any numbe
a8a0: 72 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73  r of UNIQUE cons
a8b0: 74 72 61 69 6e 74 73 2e 20 5e 46 6f 72 20 65 61  traints. ^For ea
a8c0: 63 68 0a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73  ch.  UNIQUE cons
a8d0: 74 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74 61  traint on the ta
a8e0: 62 6c 65 2c 20 65 61 63 68 20 72 6f 77 20 6d 75  ble, each row mu
a8f0: 73 74 20 63 6f 6e 74 61 69 6e 20 61 20 75 6e 69  st contain a uni
a900: 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a  que combination.
a910: 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74    of values in t
a920: 68 65 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74  he columns ident
a930: 69 66 69 65 64 20 62 79 20 74 68 65 20 55 4e 49  ified by the UNI
a940: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  QUE constraint. 
a950: 0a 20 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70  .  ^For the purp
a960: 6f 73 65 73 20 6f 66 20 55 4e 49 51 55 45 20 63  oses of UNIQUE c
a970: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 4e 55 4c 4c  onstraints, NULL
a980: 20 76 61 6c 75 65 73 0a 20 20 61 72 65 20 63 6f   values.  are co
a990: 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63  nsidered distinc
a9a0: 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72  t from all other
a9b0: 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69   values, includi
a9c0: 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e 0a  ng other NULLs..
a9d0: 0a 3c 70 3e 5e 49 6e 20 6d 6f 73 74 20 63 61 73  .<p>^In most cas
a9e0: 65 73 2c 20 55 4e 49 51 55 45 20 61 6e 64 20 50  es, UNIQUE and P
a9f0: 52 49 4d 41 52 59 20 4b 45 59 0a 20 20 63 6f 6e  RIMARY KEY.  con
aa00: 73 74 72 61 69 6e 74 73 20 61 72 65 20 69 6d 70  straints are imp
aa10: 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 72 65 61  lemented by crea
aa20: 74 69 6e 67 20 61 20 75 6e 69 71 75 65 20 69 6e  ting a unique in
aa30: 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62  dex in the datab
aa40: 61 73 65 2e 0a 20 20 28 54 68 65 20 65 78 63 65  ase..  (The exce
aa50: 70 74 69 6f 6e 73 20 61 72 65 20 5b 49 4e 54 45  ptions are [INTE
aa60: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
aa70: 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59   and PRIMARY KEY
aa80: 73 20 6f 6e 20 0a 20 20 5b 57 49 54 48 4f 55 54  s on .  [WITHOUT
aa90: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 29   ROWID] tables.)
aaa0: 0a 20 20 48 65 6e 63 65 2c 20 74 68 65 20 66 6f  .  Hence, the fo
aab0: 6c 6c 6f 77 69 6e 67 20 73 63 68 65 6d 61 73 20  llowing schemas 
aac0: 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71  are logically eq
aad0: 75 69 76 61 6c 65 6e 74 3a 0a 0a 20 20 3c 6f 6c  uivalent:..  <ol
aae0: 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54  >.  <li><p>CREAT
aaf0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20  E TABLE t1(a, b 
ab00: 55 4e 49 51 55 45 29 3b 0a 20 20 3c 6c 69 3e 3c  UNIQUE);.  <li><
ab10: 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  p>CREATE TABLE t
ab20: 31 28 61 2c 20 62 20 50 52 49 4d 41 52 59 20 4b  1(a, b PRIMARY K
ab30: 45 59 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52  EY);.  <li><p>CR
ab40: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
ab50: 20 62 29 3b 3c 62 72 3e 0a 20 20 20 20 20 20 20   b);<br>.       
ab60: 20 20 43 52 45 41 54 45 20 55 4e 49 51 55 45 20    CREATE UNIQUE 
ab70: 49 4e 44 45 58 20 74 31 62 20 4f 4e 20 74 31 28  INDEX t1b ON t1(
ab80: 62 29 3b 0a 20 20 3c 2f 6f 6c 3e 0a 0a 3c 74 63  b);.  </ol>..<tc
ab90: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63  l>hd_fragment {c
aba0: 6b 63 6f 6e 73 74 7d 20 7b 43 48 45 43 4b 7d 20  kconst} {CHECK} 
abb0: 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e  {CHECK constrain
abc0: 74 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72  t} {CHECK constr
abd0: 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  aints}</tcl>.<p>
abe0: 5e 28 41 20 3c 62 3e 43 48 45 43 4b 3c 2f 62 3e  ^(A <b>CHECK</b>
abf0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20   constraint may 
ac00: 62 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  be attached to a
ac10: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
ac20: 6f 6e 20 6f 72 0a 20 20 73 70 65 63 69 66 69 65  on or.  specifie
ac30: 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e  d as a table con
ac40: 73 74 72 61 69 6e 74 2e 20 49 6e 20 70 72 61 63  straint. In prac
ac50: 74 69 63 65 20 69 74 20 6d 61 6b 65 73 20 6e 6f  tice it makes no
ac60: 20 64 69 66 66 65 72 65 6e 63 65 2e 29 5e 20 5e   difference.)^ ^
ac70: 28 45 61 63 68 0a 20 20 74 69 6d 65 20 61 20 6e  (Each.  time a n
ac80: 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74  ew row is insert
ac90: 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ed into the tabl
aca0: 65 20 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67  e or an existing
acb0: 20 72 6f 77 20 69 73 20 75 70 64 61 74 65 64 2c   row is updated,
acc0: 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  .  the expressio
acd0: 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
ace0: 68 20 65 61 63 68 20 43 48 45 43 4b 20 63 6f 6e  h each CHECK con
acf0: 73 74 72 61 69 6e 74 20 69 73 20 65 76 61 6c 75  straint is evalu
ad00: 61 74 65 64 20 61 6e 64 0a 20 20 63 61 73 74 20  ated and.  cast 
ad10: 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c  to a NUMERIC val
ad20: 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ue in the same w
ad30: 61 79 20 61 73 20 61 20 5b 43 41 53 54 20 65 78  ay as a [CAST ex
ad40: 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68  pression]. If th
ad50: 65 20 0a 20 20 72 65 73 75 6c 74 20 69 73 20 7a  e .  result is z
ad60: 65 72 6f 20 28 69 6e 74 65 67 65 72 20 76 61 6c  ero (integer val
ad70: 75 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c  ue 0 or real val
ad80: 75 65 20 30 2e 30 29 2c 20 74 68 65 6e 20 61 20  ue 0.0), then a 
ad90: 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 76 69 6f  constraint.  vio
ada0: 6c 61 74 69 6f 6e 20 68 61 73 20 6f 63 63 75 72  lation has occur
adb0: 72 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 43  red.)^ ^If the C
adc0: 48 45 43 4b 20 65 78 70 72 65 73 73 69 6f 6e 20  HECK expression 
add0: 65 76 61 6c 75 61 74 65 73 20 74 6f 20 4e 55 4c  evaluates to NUL
ade0: 4c 2c 20 6f 72 0a 20 20 61 6e 79 20 6f 74 68 65  L, or.  any othe
adf0: 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75 65  r non-zero value
ae00: 2c 20 69 74 20 69 73 20 6e 6f 74 20 61 20 63 6f  , it is not a co
ae10: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
ae20: 6f 6e 2e 0a 20 20 5e 54 68 65 20 65 78 70 72 65  on..  ^The expre
ae30: 73 73 69 6f 6e 20 6f 66 20 61 20 43 48 45 43 4b  ssion of a CHECK
ae40: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20   constraint may 
ae50: 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 73 75  not contain a su
ae60: 62 71 75 65 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64  bquery...<tcl>hd
ae70: 5f 66 72 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75  _fragment {notnu
ae80: 6c 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55  llconst} {NOT NU
ae90: 4c 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f  LL} {NOT NULL co
aea0: 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a  nstraint}</tcl>.
aeb0: 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c  <p>^A <b>NOT NUL
aec0: 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74  L</b> constraint
aed0: 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 61 74 74   may only be att
aee0: 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d  ached to a colum
aef0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 0a 20 20  n definition,.  
af00: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73  not specified as
af10: 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61   a table constra
af20: 69 6e 74 2e 20 20 4e 6f 74 20 73 75 72 70 72 69  int.  Not surpri
af30: 73 69 6e 67 6c 79 2c 20 5e 28 61 20 4e 4f 54 20  singly, ^(a NOT 
af40: 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74 72 61 69 6e  NULL.  constrain
af50: 74 20 64 69 63 74 61 74 65 73 20 74 68 61 74 20  t dictates that 
af60: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 63  the associated c
af70: 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f  olumn may not co
af80: 6e 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c  ntain a NULL val
af90: 75 65 2e 0a 20 20 41 74 74 65 6d 70 74 69 6e 67  ue..  Attempting
afa0: 20 74 6f 20 73 65 74 20 74 68 65 20 63 6f 6c 75   to set the colu
afb0: 6d 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  mn value to NULL
afc0: 20 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67 20   when inserting 
afd0: 61 20 6e 65 77 20 72 6f 77 20 6f 72 0a 20 20 75  a new row or.  u
afe0: 70 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73 74  pdating an exist
aff0: 69 6e 67 20 6f 6e 65 20 63 61 75 73 65 73 20 61  ing one causes a
b000: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
b010: 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61  ation.)^..<p>Exa
b020: 63 74 6c 79 20 68 6f 77 20 61 20 63 6f 6e 73 74  ctly how a const
b030: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
b040: 69 73 20 64 65 61 6c 74 20 77 69 74 68 20 69 73  is dealt with is
b050: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
b060: 68 65 0a 20 20 5b 63 6f 6e 66 6c 69 63 74 20 63  he.  [conflict c
b070: 6c 61 75 73 65 7c 63 6f 6e 73 74 72 61 69 6e 74  lause|constraint
b080: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
b090: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 2e  tion algorithm].
b0a0: 20 45 61 63 68 20 0a 20 20 50 52 49 4d 41 52 59   Each .  PRIMARY
b0b0: 20 4b 45 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f   KEY, UNIQUE, NO
b0c0: 54 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b  T NULL and CHECK
b0d0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 68 61 73 20   constraint has 
b0e0: 61 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  a default confli
b0f0: 63 74 0a 20 20 72 65 73 6f 6c 75 74 69 6f 6e 20  ct.  resolution 
b100: 61 6c 67 6f 72 69 74 68 6d 2e 20 5e 50 52 49 4d  algorithm. ^PRIM
b110: 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 20  ARY KEY, UNIQUE 
b120: 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  and NOT NULL con
b130: 73 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65 0a  straints may be.
b140: 20 20 65 78 70 6c 69 63 69 74 6c 79 20 61 73 73    explicitly ass
b150: 69 67 6e 65 64 20 61 20 64 65 66 61 75 6c 74 20  igned a default 
b160: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
b170: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 62 79  ion algorithm by
b180: 20 69 6e 63 6c 75 64 69 6e 67 0a 20 20 61 20 5b   including.  a [
b190: 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d  conflict-clause]
b1a0: 20 69 6e 20 74 68 65 69 72 20 64 65 66 69 6e 69   in their defini
b1b0: 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69 66 20 61  tions. ^Or, if a
b1c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66 69   constraint defi
b1d0: 6e 69 74 69 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f  nition.  does no
b1e0: 74 20 69 6e 63 6c 75 64 65 20 61 20 5b 63 6f 6e  t include a [con
b1f0: 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 6f 72  flict-clause] or
b200: 20 69 74 20 69 73 20 61 20 43 48 45 43 4b 20 63   it is a CHECK c
b210: 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 64  onstraint, the d
b220: 65 66 61 75 6c 74 0a 20 20 63 6f 6e 66 6c 69 63  efault.  conflic
b230: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
b240: 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e  orithm is ABORT.
b250: 20 5e 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73   ^Different cons
b260: 74 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74  traints within t
b270: 68 65 0a 20 20 73 61 6d 65 20 74 61 62 6c 65 20  he.  same table 
b280: 6d 61 79 20 68 61 76 65 20 64 69 66 66 65 72 65  may have differe
b290: 6e 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c  nt default confl
b2a0: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
b2b0: 6c 67 6f 72 69 74 68 6d 73 2e 20 53 65 65 0a 20  lgorithms. See. 
b2c0: 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74   the section tit
b2d0: 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  led [ON CONFLICT
b2e0: 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  ] for additional
b2f0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c   information...<
b300: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
b310: 72 6f 77 69 64 20 7b 49 4e 54 45 47 45 52 20 50  rowid {INTEGER P
b320: 52 49 4d 41 52 59 20 4b 45 59 7d 20 52 4f 57 49  RIMARY KEY} ROWI
b330: 44 20 72 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68  D rowid</tcl>.<h
b340: 33 3e 52 4f 57 49 44 73 20 61 6e 64 20 74 68 65  3>ROWIDs and the
b350: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
b360: 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45   KEY</h3>..<p>^E
b370: 78 63 65 70 74 20 66 6f 72 20 5b 57 49 54 48 4f  xcept for [WITHO
b380: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73  UT ROWID] tables
b390: 2c 20 61 6c 6c 20 72 6f 77 73 20 77 69 74 68 69  , all rows withi
b3a0: 6e 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 0a  n SQLite tables.
b3b0: 68 61 76 65 20 61 20 36 34 2d 62 69 74 20 73 69  have a 64-bit si
b3c0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65 79  gned integer key
b3d0: 20 74 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69   that uniquely i
b3e0: 64 65 6e 74 69 66 69 65 73 20 74 68 65 20 72 6f  dentifies the ro
b3f0: 77 20 77 69 74 68 69 6e 20 69 74 73 20 74 61 62  w within its tab
b400: 6c 65 2e 0a 54 68 69 73 20 69 6e 74 65 67 65 72  le..This integer
b410: 20 69 73 20 75 73 75 61 6c 6c 79 0a 63 61 6c 6c   is usually.call
b420: 65 64 20 74 68 65 20 22 72 6f 77 69 64 22 2e 20  ed the "rowid". 
b430: 5e 54 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65  ^The rowid value
b440: 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
b450: 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68   using one of th
b460: 65 20 73 70 65 63 69 61 6c 0a 63 61 73 65 2d 69  e special.case-i
b470: 6e 64 65 70 65 6e 64 65 6e 74 20 6e 61 6d 65 73  ndependent names
b480: 20 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 2c   "rowid", "oid",
b490: 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 20 69 6e   or "_rowid_" in
b4a0: 20 70 6c 61 63 65 20 6f 66 20 61 20 63 6f 6c 75   place of a colu
b4b0: 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20 61 20 74  mn name..^If a t
b4c0: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  able contains a 
b4d0: 75 73 65 72 20 64 65 66 69 6e 65 64 20 63 6f 6c  user defined col
b4e0: 75 6d 6e 20 6e 61 6d 65 64 20 22 72 6f 77 69 64  umn named "rowid
b4f0: 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f  ", "oid" or "_ro
b500: 77 69 64 5f 22 2c 0a 74 68 65 6e 20 74 68 61 74  wid_",.then that
b510: 20 6e 61 6d 65 20 61 6c 77 61 79 73 20 72 65 66   name always ref
b520: 65 72 73 20 74 68 65 20 65 78 70 6c 69 63 69 74  ers the explicit
b530: 6c 79 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75  ly declared colu
b540: 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  mn and cannot be
b550: 20 75 73 65 64 0a 74 6f 20 72 65 74 72 69 65 76   used.to retriev
b560: 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 6f  e the integer ro
b570: 77 69 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54  wid value...<p>T
b580: 68 65 20 72 6f 77 69 64 20 28 61 6e 64 20 22 6f  he rowid (and "o
b590: 69 64 22 20 61 6e 64 20 22 5f 72 6f 77 69 64 5f  id" and "_rowid_
b5a0: 22 29 20 69 73 20 6f 6d 69 74 74 65 64 20 69 6e  ") is omitted in
b5b0: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
b5c0: 20 74 61 62 6c 65 73 2e 0a 57 49 54 48 4f 55 54   tables..WITHOUT
b5d0: 20 52 4f 57 49 44 20 74 61 62 6c 65 73 20 61 72   ROWID tables ar
b5e0: 65 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65  e only available
b5f0: 20 69 6e 20 53 51 4c 69 74 65 20 5b 76 65 72 73   in SQLite [vers
b600: 69 6f 6e 20 33 2e 38 2e 32 5d 20 61 6e 64 20 6c  ion 3.8.2] and l
b610: 61 74 65 72 2e 0a 41 20 74 61 62 6c 65 20 74 68  ater..A table th
b620: 61 74 20 6c 61 63 6b 73 20 74 68 65 20 57 49 54  at lacks the WIT
b630: 48 4f 55 54 20 52 4f 57 49 44 20 63 6c 61 75 73  HOUT ROWID claus
b640: 65 20 69 73 20 63 61 6c 6c 65 64 20 61 20 22 72  e is called a "r
b650: 6f 77 69 64 20 74 61 62 6c 65 22 2e 0a 0a 3c 70  owid table"...<p
b660: 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20 72 6f  >The data for ro
b670: 77 69 64 20 74 61 62 6c 65 73 20 69 73 20 73 74  wid tables is st
b680: 6f 72 65 64 20 61 73 20 61 20 42 2d 54 72 65 65  ored as a B-Tree
b690: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
b6a0: 69 6e 69 6e 67 0a 6f 6e 65 20 65 6e 74 72 79 20  ining.one entry 
b6b0: 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 20 72  for each table r
b6c0: 6f 77 2c 20 75 73 69 6e 67 20 74 68 65 20 72 6f  ow, using the ro
b6d0: 77 69 64 20 76 61 6c 75 65 20 61 73 20 74 68 65  wid value as the
b6e0: 20 6b 65 79 2e 20 54 68 69 73 20 6d 65 61 6e 73   key. This means
b6f0: 20 74 68 61 74 0a 72 65 74 72 69 65 76 69 6e 67   that.retrieving
b700: 20 6f 72 20 73 6f 72 74 69 6e 67 20 72 65 63 6f   or sorting reco
b710: 72 64 73 20 62 79 20 72 6f 77 69 64 20 69 73 20  rds by rowid is 
b720: 66 61 73 74 2e 20 53 65 61 72 63 68 69 6e 67 20  fast. Searching 
b730: 66 6f 72 20 61 20 72 65 63 6f 72 64 20 77 69 74  for a record wit
b740: 68 20 61 0a 73 70 65 63 69 66 69 63 20 72 6f 77  h a.specific row
b750: 69 64 2c 20 6f 72 20 66 6f 72 20 61 6c 6c 20 72  id, or for all r
b760: 65 63 6f 72 64 73 20 77 69 74 68 20 72 6f 77 69  ecords with rowi
b770: 64 73 20 77 69 74 68 69 6e 20 61 20 73 70 65 63  ds within a spec
b780: 69 66 69 65 64 20 72 61 6e 67 65 20 69 73 0a 61  ified range is.a
b790: 72 6f 75 6e 64 20 74 77 69 63 65 20 61 73 20 66  round twice as f
b7a0: 61 73 74 20 61 73 20 61 20 73 69 6d 69 6c 61 72  ast as a similar
b7b0: 20 73 65 61 72 63 68 20 6d 61 64 65 20 62 79 20   search made by 
b7c0: 73 70 65 63 69 66 79 69 6e 67 20 61 6e 79 20 6f  specifying any o
b7d0: 74 68 65 72 20 50 52 49 4d 41 52 59 0a 4b 45 59  ther PRIMARY.KEY
b7e0: 20 6f 72 20 69 6e 64 65 78 65 64 20 76 61 6c 75   or indexed valu
b7f0: 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68 20 6f 6e  e...<p> ^With on
b800: 65 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 74 65  e exception note
b810: 64 20 62 65 6c 6f 77 2c 20 69 66 20 61 20 72 6f  d below, if a ro
b820: 77 69 64 20 74 61 62 6c 65 20 68 61 73 20 61 20  wid table has a 
b830: 70 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61 74  primary key that
b840: 20 63 6f 6e 73 69 73 74 73 0a 6f 66 20 61 20 73   consists.of a s
b850: 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64  ingle column and
b860: 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79   the declared ty
b870: 70 65 20 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d  pe of that colum
b880: 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22 20 69  n is "INTEGER" i
b890: 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20 6f 66  n any mixture of
b8a0: 0a 75 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72  .upper and lower
b8b0: 20 63 61 73 65 2c 20 74 68 65 6e 20 74 68 65 20   case, then the 
b8c0: 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73 20 61  column becomes a
b8d0: 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
b8e0: 72 6f 77 69 64 2e 20 53 75 63 68 20 61 0a 63 6f  rowid. Such a.co
b8f0: 6c 75 6d 6e 20 69 73 20 75 73 75 61 6c 6c 79 20  lumn is usually 
b900: 72 65 66 65 72 72 65 64 20 74 6f 20 61 73 20 61  referred to as a
b910: 6e 20 22 69 6e 74 65 67 65 72 20 70 72 69 6d 61  n "integer prima
b920: 72 79 20 6b 65 79 22 2e 20 41 20 50 52 49 4d 41  ry key". A PRIMA
b930: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a 6f 6e  RY KEY column.on
b940: 6c 79 20 62 65 63 6f 6d 65 73 20 61 6e 20 69 6e  ly becomes an in
b950: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
b960: 79 20 69 66 20 74 68 65 20 64 65 63 6c 61 72 65  y if the declare
b970: 64 20 74 79 70 65 20 6e 61 6d 65 20 69 73 20 65  d type name is e
b980: 78 61 63 74 6c 79 0a 22 49 4e 54 45 47 45 52 22  xactly."INTEGER"
b990: 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74 65 67 65  .  ^Other intege
b9a0: 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c 69 6b  r type names lik
b9b0: 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49 47 49  e "INT" or "BIGI
b9c0: 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20 49 4e  NT" or "SHORT IN
b9d0: 54 45 47 45 52 22 0a 6f 72 20 22 55 4e 53 49 47  TEGER".or "UNSIG
b9e0: 4e 45 44 20 49 4e 54 45 47 45 52 22 20 63 61 75  NED INTEGER" cau
b9f0: 73 65 73 20 74 68 65 20 70 72 69 6d 61 72 79 20  ses the primary 
ba00: 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  key column to be
ba10: 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64 69 6e  have as an ordin
ba20: 61 72 79 0a 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  ary.table column
ba30: 20 77 69 74 68 20 69 6e 74 65 67 65 72 20 5b 61   with integer [a
ba40: 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61 20 75  ffinity] and a u
ba50: 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74  nique index, not
ba60: 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
ba70: 0a 74 68 65 20 72 6f 77 69 64 2e 0a 0a 3c 70 3e  .the rowid...<p>
ba80: 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 6d   The exception m
ba90: 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65 20 69  entioned above i
baa0: 73 20 74 68 61 74 20 5e 69 66 20 74 68 65 20 64  s that ^if the d
bab0: 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61 20  eclaration of a 
bac0: 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 64 65 63 6c  column with.decl
bad0: 61 72 65 64 20 74 79 70 65 20 22 49 4e 54 45 47  ared type "INTEG
bae0: 45 52 22 20 69 6e 63 6c 75 64 65 73 20 61 6e 20  ER" includes an 
baf0: 22 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53  "PRIMARY KEY DES
bb00: 43 22 20 63 6c 61 75 73 65 2c 20 69 74 20 64 6f  C" clause, it do
bb10: 65 73 20 6e 6f 74 0a 62 65 63 6f 6d 65 20 61 6e  es not.become an
bb20: 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72   alias for the r
bb30: 6f 77 69 64 20 61 6e 64 20 69 73 20 6e 6f 74 20  owid and is not 
bb40: 63 6c 61 73 73 69 66 69 65 64 20 61 73 20 61 6e  classified as an
bb50: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
bb60: 20 6b 65 79 2e 0a 54 68 69 73 20 71 75 69 72 6b   key..This quirk
bb70: 20 69 73 20 6e 6f 74 20 62 79 20 64 65 73 69 67   is not by desig
bb80: 6e 2e 20 49 74 20 69 73 20 64 75 65 20 74 6f 20  n. It is due to 
bb90: 61 20 62 75 67 20 69 6e 20 65 61 72 6c 79 20 76  a bug in early v
bba0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
bbb0: 65 2e 0a 42 75 74 20 66 69 78 69 6e 67 20 74 68  e..But fixing th
bbc0: 65 20 62 75 67 20 63 6f 75 6c 64 20 72 65 73 75  e bug could resu
bbd0: 6c 74 20 69 6e 20 62 61 63 6b 77 61 72 64 73 20  lt in backwards 
bbe0: 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65  incompatibilitie
bbf0: 73 2e 0a 48 65 6e 63 65 2c 20 74 68 65 20 6f 72  s..Hence, the or
bc00: 69 67 69 6e 61 6c 20 62 65 68 61 76 69 6f 72 20  iginal behavior 
bc10: 68 61 73 20 62 65 65 6e 20 72 65 74 61 69 6e 65  has been retaine
bc20: 64 20 28 61 6e 64 20 64 6f 63 75 6d 65 6e 74 65  d (and documente
bc30: 64 29 20 62 65 63 61 75 73 65 20 6f 64 64 0a 62  d) because odd.b
bc40: 65 68 61 76 69 6f 72 20 69 6e 20 61 20 63 6f 72  ehavior in a cor
bc50: 6e 65 72 20 63 61 73 65 20 69 73 20 66 61 72 20  ner case is far 
bc60: 62 65 74 74 65 72 20 74 68 61 6e 20 61 20 63 6f  better than a co
bc70: 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72 65 61  mpatibility brea
bc80: 6b 2e 20 20 54 68 69 73 20 6d 65 61 6e 73 0a 74  k.  This means.t
bc90: 68 61 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77  hat ^(the follow
bca0: 69 6e 67 20 74 68 72 65 65 20 74 61 62 6c 65 20  ing three table 
bcb0: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c  declarations all
bcc0: 20 63 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d   cause the colum
bcd0: 6e 20 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61  n "x" to be an.a
bce0: 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77  lias for the row
bcf0: 69 64 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70  id (an integer p
bd00: 72 69 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75  rimary key):..<u
bd10: 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  l>.<li><tt>CREAT
bd20: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
bd30: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
bd40: 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e  ASC, y, z);</tt>
bd50: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
bd60: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
bd70: 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59  R, y, z, PRIMARY
bd80: 20 4b 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74   KEY(x ASC));</t
bd90: 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  t>.<li><tt>CREAT
bda0: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
bdb0: 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41  GER, y, z, PRIMA
bdc0: 52 59 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b  RY KEY(x DESC));
bdd0: 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  </tt>.</ul>)^..<
bde0: 70 3e 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c  p>But ^(the foll
bdf0: 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f  owing declaratio
be00: 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c  n does not resul
be10: 74 20 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61  t in "x" being a
be20: 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20  n alias for.the 
be30: 72 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  rowid:.<ul>.<li>
be40: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
be50: 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49   t(x INTEGER PRI
be60: 4d 41 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79  MARY KEY DESC, y
be70: 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e  , z);</tt>.</ul>
be80: 29 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61  )^..<p>^Rowid va
be90: 6c 75 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69  lues may be modi
bea0: 66 69 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50  fied using an UP
beb0: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
bec0: 6e 20 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61  n the same.way a
bed0: 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75  s any other colu
bee0: 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69  mn value can, ei
bef0: 74 68 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f  ther using one o
bf00: 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61  f the built-in a
bf10: 6c 69 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c  liases.("rowid",
bf20: 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69   "oid" or "_rowi
bf30: 64 5f 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67  d_") or by using
bf40: 20 61 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65   an alias create
bf50: 64 20 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a  d by an integer.
bf60: 70 72 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69  primary key. ^Si
bf70: 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45  milarly, an INSE
bf80: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  RT statement may
bf90: 20 70 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65   provide a value
bfa0: 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72   to use as the.r
bfb0: 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f  owid for each ro
bfc0: 77 20 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e  w inserted. ^(Un
bfd0: 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69  like normal SQLi
bfe0: 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69  te columns, an i
bff0: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b  nteger primary.k
c000: 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75  ey or rowid colu
c010: 6d 6e 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  mn must contain 
c020: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20  integer values. 
c030: 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
c040: 6b 65 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c  key or rowid.col
c050: 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c  umns are not abl
c060: 65 20 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69  e to hold floati
c070: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c  ng point values,
c080: 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c   strings, BLOBs,
c090: 20 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70   or NULLs.)^..<p
c0a0: 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20 73  >^If an UPDATE s
c0b0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
c0c0: 73 20 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65  s to set an inte
c0d0: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
c0e0: 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a  or rowid column.
c0f0: 74 6f 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f  to a NULL or blo
c100: 62 20 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61  b value, or to a
c110: 20 73 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20   string or real 
c120: 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f  value that canno
c130: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a  t be losslessly.
c140: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
c150: 69 6e 74 65 67 65 72 2c 20 61 20 22 64 61 74 61  integer, a "data
c160: 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65  type mismatch" e
c170: 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20  rror occurs and 
c180: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73  the statement.is
c190: 20 61 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e   aborted. ^If an
c1a0: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
c1b0: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e  t attempts to in
c1c0: 73 65 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75  sert a blob valu
c1d0: 65 2c 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f  e, or a string.o
c1e0: 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61  r real value tha
c1f0: 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73  t cannot be loss
c200: 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
c210: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69   to an integer i
c220: 6e 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70  nto an.integer p
c230: 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f  rimary key or ro
c240: 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64  wid column, a "d
c250: 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68  atatype mismatch
c260: 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61  " error occurs a
c270: 6e 64 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74  nd the.statement
c280: 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70   is aborted...<p
c290: 3e 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73  >^If an INSERT s
c2a0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
c2b0: 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55  s to insert a NU
c2c0: 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20  LL value into a 
c2d0: 72 6f 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72  rowid or.integer
c2e0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
c2f0: 75 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20  umn, the system 
c300: 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67  chooses an integ
c310: 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20  er value to use 
c320: 61 73 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74  as the.rowid aut
c330: 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65  omatically. A de
c340: 74 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69  tailed descripti
c350: 6f 6e 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69  on of how this i
c360: 73 20 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64  s done is provid
c370: 65 64 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f  ed.<a href="auto
c380: 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61  inc.html">separa
c390: 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  tely</a>.</p>..<
c3a0: 70 3e 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20  p>^(The [parent 
c3b0: 6b 65 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69  key] of a [forei
c3c0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
c3d0: 74 5d 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  t] is not allowe
c3e0: 64 20 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77  d to.use the row
c3f0: 69 64 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20  id.  The parent 
c400: 6b 65 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61  key must used na
c410: 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79  med columns only
c420: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  .)^</p>..<tcl>.#
c430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c470: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
c480: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52  ction {CREATE TR
c490: 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69  IGGER} createtri
c4a0: 67 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52  gger {{CREATE TR
c4b0: 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69  IGGER}}..Recursi
c4c0: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
c4d0: 63 72 65 61 74 65 2d 74 72 69 67 67 65 72 2d 73  create-trigger-s
c4e0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
c4f0: 54 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  The CREATE TRIGG
c500: 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ER statement is 
c510: 75 73 65 64 20 74 6f 20 61 64 64 20 74 72 69 67  used to add trig
c520: 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74  gers to the .dat
c530: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 54  abase schema. ^T
c540: 72 69 67 67 65 72 73 20 61 72 65 20 64 61 74 61  riggers are data
c550: 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20  base operations 
c560: 0a 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61  .that are automa
c570: 74 69 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65  tically performe
c580: 64 20 77 68 65 6e 20 61 20 73 70 65 63 69 66 69  d when a specifi
c590: 65 64 20 64 61 74 61 62 61 73 65 20 65 76 65 6e  ed database even
c5a0: 74 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a  t.occurs.  </p>.
c5b0: 0a 3c 70 3e 5e 41 20 74 72 69 67 67 65 72 20 6d  .<p>^A trigger m
c5c0: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
c5d0: 74 6f 20 66 69 72 65 20 77 68 65 6e 65 76 65 72  to fire whenever
c5e0: 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e   a [DELETE], [IN
c5f0: 53 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54  SERT],.or [UPDAT
c600: 45 5d 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c  E] of a.particul
c610: 61 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  ar database tabl
c620: 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65  e occurs, or whe
c630: 6e 65 76 65 72 20 61 6e 20 5b 55 50 44 41 54 45  never an [UPDATE
c640: 5d 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f  ] occurs on.on o
c650: 6e 65 20 6f 72 20 6d 6f 72 65 20 73 70 65 63 69  ne or more speci
c660: 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  fied columns of 
c670: 61 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  a table.</p>..<p
c680: 3e 5e 41 74 20 74 68 69 73 20 74 69 6d 65 20 53  >^At this time S
c690: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f  QLite supports o
c6a0: 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57  nly FOR EACH ROW
c6b0: 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46   triggers, not F
c6c0: 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e  OR EACH.STATEMEN
c6d0: 54 20 74 72 69 67 67 65 72 73 2e 20 5e 48 65 6e  T triggers. ^Hen
c6e0: 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70  ce explicitly sp
c6f0: 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43  ecifying FOR EAC
c700: 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61  H ROW is optiona
c710: 6c 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f 57  l..^FOR EACH ROW
c720: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
c730: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
c740: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
c750: 65 20 74 72 69 67 67 65 72 0a 6d 61 79 20 62 65  e trigger.may be
c760: 20 65 78 65 63 75 74 65 64 20 28 64 65 70 65 6e   executed (depen
c770: 64 69 6e 67 20 6f 6e 20 74 68 65 20 57 48 45 4e  ding on the WHEN
c780: 20 63 6c 61 75 73 65 29 20 66 6f 72 20 65 61 63   clause) for eac
c790: 68 20 64 61 74 61 62 61 73 65 20 72 6f 77 20 62  h database row b
c7a0: 65 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20 75  eing.inserted, u
c7b0: 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65  pdated or delete
c7c0: 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
c7d0: 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74  nt causing the t
c7e0: 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2e 3c  rigger to fire.<
c7f0: 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20 74  /p>..<p>^(Both t
c800: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61  he WHEN clause a
c810: 6e 64 20 74 68 65 20 74 72 69 67 67 65 72 20 61  nd the trigger a
c820: 63 74 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73  ctions may acces
c830: 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74  s elements of .t
c840: 68 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73  he row being ins
c850: 65 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f  erted, deleted o
c860: 72 20 75 70 64 61 74 65 64 20 75 73 69 6e 67 20  r updated using 
c870: 72 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68  references of th
c880: 65 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e  e form ."NEW.<i>
c890: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22  column-name</i>"
c8a0: 20 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c   and "OLD.<i>col
c8b0: 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77  umn-name</i>", w
c8c0: 68 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e  here.<i>column-n
c8d0: 61 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e  ame</i> is the n
c8e0: 61 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ame of a column 
c8f0: 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74  from the table t
c900: 68 61 74 20 74 68 65 20 74 72 69 67 67 65 72 0a  hat the trigger.
c910: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
c920: 74 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64 20  th.)^ ^(OLD and 
c930: 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 6d  NEW references m
c940: 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
c950: 69 6e 20 74 72 69 67 67 65 72 73 20 6f 6e 0a 65  in triggers on.e
c960: 76 65 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20  vents for which 
c970: 74 68 65 79 20 61 72 65 20 72 65 6c 65 76 61 6e  they are relevan
c980: 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  t, as follows:</
c990: 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
c9a0: 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
c9b0: 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  10>.<tr>.<td val
c9c0: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
c9d0: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
c9e0: 30 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c  0><i>INSERT</i><
c9f0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
ca00: 22 74 6f 70 22 3e 4e 45 57 20 72 65 66 65 72 65  "top">NEW refere
ca10: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
ca20: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
ca30: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
ca40: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
ca50: 64 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54  dth=120><i>UPDAT
ca60: 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76  E</i></td>.<td v
ca70: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20  align="top">NEW 
ca80: 61 6e 64 20 4f 4c 44 20 72 65 66 65 72 65 6e 63  and OLD referenc
ca90: 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64  es are valid</td
caa0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
cab0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
cac0: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
cad0: 68 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c  h=120><i>DELETE<
cae0: 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  /i></td>.<td val
caf0: 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65  ign="top">OLD re
cb00: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
cb10: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f  id</td>.</tr>.</
cb20: 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c  table>.</p>)^..<
cb30: 70 3e 5e 49 66 20 61 20 57 48 45 4e 20 63 6c 61  p>^If a WHEN cla
cb40: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
cb50: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
cb60: 6e 74 73 20 73 70 65 63 69 66 69 65 64 0a 61 72  nts specified.ar
cb70: 65 20 6f 6e 6c 79 20 65 78 65 63 75 74 65 64 20  e only executed 
cb80: 66 6f 72 20 72 6f 77 73 20 66 6f 72 20 77 68 69  for rows for whi
cb90: 63 68 20 74 68 65 20 57 48 45 4e 0a 63 6c 61 75  ch the WHEN.clau
cba0: 73 65 20 69 73 20 74 72 75 65 2e 20 5e 49 66 20  se is true. ^If 
cbb0: 6e 6f 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69  no WHEN clause i
cbc0: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20  s supplied, the 
cbd0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 61  SQL statements.a
cbe0: 72 65 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  re executed for 
cbf0: 61 6c 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c  all rows.</p>..<
cc00: 70 3e 5e 54 68 65 20 42 45 46 4f 52 45 20 6f 72  p>^The BEFORE or
cc10: 20 41 46 54 45 52 20 6b 65 79 77 6f 72 64 20 64   AFTER keyword d
cc20: 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74  etermines when t
cc30: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
cc40: 6e 73 0a 77 69 6c 6c 20 62 65 20 65 78 65 63 75  ns.will be execu
cc50: 74 65 64 20 72 65 6c 61 74 69 76 65 20 74 6f 20  ted relative to 
cc60: 74 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d  the insertion, m
cc70: 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f 72 20 72  odification or r
cc80: 65 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61 73  emoval of the.as
cc90: 73 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70  sociated row.</p
cca0: 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f  >..<p>^An [ON CO
ccb0: 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 6d  NFLICT] clause m
ccc0: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
ccd0: 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 5b 55  as part of an [U
cce0: 50 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52  PDATE] or [INSER
ccf0: 54 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  T].action within
cd00: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 74 68 65   the body of the
cd10: 20 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65 76   trigger..^Howev
cd20: 65 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e  er if an [ON CON
cd30: 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69 73  FLICT] clause is
cd40: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
cd50: 72 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74 65  rt of .the state
cd60: 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65  ment causing the
cd70: 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65   trigger to fire
cd80: 2c 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74 20  , then conflict 
cd90: 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20  handling.policy 
cda0: 6f 66 20 74 68 65 20 6f 75 74 65 72 20 73 74 61  of the outer sta
cdb0: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 69  tement is used i
cdc0: 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  nstead.</p>..<p>
cdd0: 5e 54 72 69 67 67 65 72 73 20 61 72 65 20 61 75  ^Triggers are au
cde0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52 4f  tomatically [DRO
cdf0: 50 20 54 52 49 47 47 45 52 20 7c 20 64 72 6f 70  P TRIGGER | drop
ce00: 70 65 64 5d 0a 77 68 65 6e 20 74 68 65 20 74 61  ped].when the ta
ce10: 62 6c 65 20 74 68 61 74 20 74 68 65 79 20 61 72  ble that they ar
ce20: 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69  e .associated wi
ce30: 74 68 20 28 74 68 65 20 3c 69 3e 74 61 62 6c 65  th (the <i>table
ce40: 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65 29  -name</i> table)
ce50: 20 69 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c 45   is .[DROP TABLE
ce60: 20 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e 48   | dropped].  ^H
ce70: 6f 77 65 76 65 72 20 69 66 20 74 68 65 20 74 72  owever if the tr
ce80: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65  igger actions re
ce90: 66 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61  ference.other ta
cea0: 62 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67 65  bles, the trigge
ceb0: 72 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64  r is not dropped
cec0: 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20   or modified if 
ced0: 74 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c  those other.tabl
cee0: 65 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42  es are [DROP TAB
cef0: 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72  LE | dropped] or
cf00: 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20   [ALTER TABLE | 
cf10: 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a  modified].</p>..
cf20: 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65  <p>^Triggers are
cf30: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
cf40: 68 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52  he [DROP TRIGGER
cf50: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  ] statement.</p>
cf60: 0a 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73  ..<h3>Syntax Res
cf70: 74 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44  trictions On UPD
cf80: 41 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64  ATE, DELETE, and
cf90: 20 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e   INSERT Statemen
cfa0: 74 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72  ts Within.    Tr
cfb0: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
cfc0: 5e 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b  ^The [UPDATE], [
cfd0: 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e  DELETE], and [IN
cfe0: 53 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73  SERT].statements
cff0: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
d000: 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a   do not support.
d010: 74 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20  the full syntax 
d020: 66 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44  for [UPDATE], [D
d030: 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53  ELETE], and [INS
d040: 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  ERT] statements.
d050: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a    The following.
d060: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70  restrictions app
d070: 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  ly:</p>..<ul>.<l
d080: 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61  i><p>.  ^(The na
d090: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
d0a0: 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69  to be modified i
d0b0: 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b  n an [UPDATE], [
d0c0: 44 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53  DELETE], or [INS
d0d0: 45 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74  ERT].  statement
d0e0: 20 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75   must be an unqu
d0f0: 61 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61  alified table na
d100: 6d 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  me.  In other wo
d110: 72 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20  rds, one must.  
d120: 75 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62  use just "<i>tab
d130: 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20  lename</i>" not 
d140: 22 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e  "<i>database</i>
d150: 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65  <b>.</b><i>table
d160: 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e  name</i>".  when
d170: 20 73 70 65 63 69 66 79 69 6e 67 20 74 68 65 20   specifying the 
d180: 74 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74  table.)^  ^The t
d190: 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66  able to be modif
d1a0: 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69  ied must exist i
d1b0: 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74  n the.  same dat
d1c0: 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
d1d0: 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
d1e0: 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
d1f0: 69 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c  is attached..  <
d200: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
d210: 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54  >.  ^The "INSERT
d220: 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f   INTO <i>table</
d230: 69 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  i> DEFAULT VALUE
d240: 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b  S" form of the [
d250: 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e  INSERT] statemen
d260: 74 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  t.  is not suppo
d270: 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  rted..  </p></li
d280: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68  >..<li><p>.  ^Th
d290: 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
d2a0: 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
d2b0: 75 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  uses are not sup
d2c0: 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41  ported for [UPDA
d2d0: 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54  TE] and.  [DELET
d2e0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  E] statements.. 
d2f0: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
d300: 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45  <p>.  ^(The ORDE
d310: 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
d320: 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54  lauses on [UPDAT
d330: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
d340: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e  statements are n
d350: 6f 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20  ot.  supported. 
d360: 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
d370: 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d  MIT are not norm
d380: 61 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66  ally supported f
d390: 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20  or [UPDATE] or. 
d3a0: 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79   [DELETE] in any
d3b0: 20 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e   context but can
d3c0: 20 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20   be enabled for 
d3d0: 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d  top-level statem
d3e0: 65 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65  ents.  using the
d3f0: 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
d400: 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
d410: 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  MIT] compile-tim
d420: 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76  e option.  Howev
d430: 65 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69  er,.  that compi
d440: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f  le-time option o
d450: 6e 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74  nly applies to t
d460: 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45  op-level [UPDATE
d470: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20  ] and [DELETE]. 
d480: 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74   statements, not
d490: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
d4a0: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
d4b0: 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
d4c0: 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  s.)^.  </p></li>
d4d0: 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  .</ul>..<tcl>hd_
d4e0: 66 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64  fragment instead
d4f0: 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53  _of_trigger {INS
d500: 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41  TEAD OF} {INSTEA
d510: 44 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74  D OF trigger}</t
d520: 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20  cl>.<h3>INSTEAD 
d530: 4f 46 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e  OF triggers</h3>
d540: 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d  ..<p>^Triggers m
d550: 61 79 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e  ay be created on
d560: 20 5b 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c   [views], as wel
d570: 6c 20 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61  l as ordinary ta
d580: 62 6c 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79  bles, by.specify
d590: 69 6e 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69  ing INSTEAD OF i
d5a0: 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49  n the CREATE TRI
d5b0: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20  GGER statement. 
d5c0: 0a 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  .^If one or more
d5d0: 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44   ON INSERT, ON D
d5e0: 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41  ELETE.or ON UPDA
d5f0: 54 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20  TE triggers are 
d600: 64 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65  defined on a vie
d610: 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f  w, then it is no
d620: 74 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78  t an.error to ex
d630: 65 63 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c  ecute an INSERT,
d640: 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
d650: 45 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74  E statement on t
d660: 68 65 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63  he view, .respec
d670: 74 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61  tively.  ^Instea
d680: 64 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20  d,.executing an 
d690: 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f  INSERT, DELETE o
d6a0: 72 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20  r UPDATE on the 
d6b0: 76 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20  view causes the 
d6c0: 61 73 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67  associated.trigg
d6d0: 65 72 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68  ers to fire. ^Th
d6e0: 65 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e  e real tables un
d6f0: 64 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65  derlying the vie
d700: 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69  w are not modifi
d710: 65 64 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69  ed.(except possi
d720: 62 6c 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20  bly explicitly, 
d730: 62 79 20 61 20 74 72 69 67 67 65 72 20 70 72 6f  by a trigger pro
d740: 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  gram).</p>..<p>^
d750: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5b 73  Note that the [s
d760: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
d770: 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74  ] and [sqlite3_t
d780: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20  otal_changes()] 
d790: 69 6e 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f  interfaces.do no
d7a0: 74 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20  t count INSTEAD 
d7b0: 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e  OF trigger firin
d7c0: 67 73 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75  gs, but the.[cou
d7d0: 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d  nt_changes pragm
d7e0: 61 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e  a] does count IN
d7f0: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
d800: 20 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68   firing.</p>..<h
d810: 33 3e 53 6f 6d 65 20 45 78 61 6d 70 6c 65 20 54  3>Some Example T
d820: 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  riggers</h3>..<p
d830: 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68 61 74  >^(Assuming that
d840: 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f 72 64   customer record
d850: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
d860: 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73 22 20  the "customers" 
d870: 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20  table, and.that 
d880: 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20 61 72  order records ar
d890: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
d8a0: 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65 2c 20  "orders" table, 
d8b0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 55 50  the following.UP
d8c0: 44 41 54 45 20 74 72 69 67 67 65 72 0a 65 6e 73  DATE trigger.ens
d8d0: 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73  ures that all as
d8e0: 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73 20  sociated orders 
d8f0: 61 72 65 20 72 65 64 69 72 65 63 74 65 64 20 77  are redirected w
d900: 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63  hen a customer c
d910: 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65  hanges.his or he
d920: 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a  r address:</p>..
d930: 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43  <tcl>Example {.C
d940: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 75 70  REATE TRIGGER up
d950: 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64  date_customer_ad
d960: 64 72 65 73 73 20 55 50 44 41 54 45 20 4f 46 20  dress UPDATE OF 
d970: 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f  address ON custo
d980: 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20  mers .  BEGIN.  
d990: 20 20 55 50 44 41 54 45 20 6f 72 64 65 72 73 20    UPDATE orders 
d9a0: 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65  SET address = ne
d9b0: 77 2e 61 64 64 72 65 73 73 20 57 48 45 52 45 20  w.address WHERE 
d9c0: 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20  customer_name = 
d9d0: 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b  old.name;.  END;
d9e0: 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74  .}</tcl>..<p>Wit
d9f0: 68 20 74 68 69 73 20 74 72 69 67 67 65 72 20 69  h this trigger i
da00: 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74  nstalled, execut
da10: 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ing the statemen
da20: 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61  t:</p>..<tcl>Exa
da30: 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75  mple {.UPDATE cu
da40: 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64 64 72  stomers SET addr
da50: 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74  ess = '1 Main St
da60: 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20  .' WHERE name = 
da70: 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c  'Jack Jones';.}<
da80: 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65 73  /tcl>..<p>causes
da90: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
daa0: 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c  o be automatical
dab0: 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e  ly executed:</p>
dac0: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
dad0: 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53  .UPDATE orders S
dae0: 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20  ET address = '1 
daf0: 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20  Main St.' WHERE 
db00: 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20  customer_name = 
db10: 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c  'Jack Jones';.}<
db20: 2f 74 63 6c 3e 29 5e 0a 0a 3c 70 3e 46 6f 72 20  /tcl>)^..<p>For 
db30: 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 61 6e  an example of an
db40: 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67   INSTEAD OF trig
db50: 67 65 72 2c 20 63 6f 6e 73 69 64 65 72 20 74 68  ger, consider th
db60: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68 65  e following sche
db70: 6d 61 3a 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c  ma:..<tcl>Exampl
db80: 65 20 7b 0a 43 52 45 41 54 45 20 54 41 42 4c 45  e {.CREATE TABLE
db90: 20 63 75 73 74 6f 6d 65 72 28 0a 20 20 63 75 73   customer(.  cus
dba0: 74 5f 69 64 20 49 4e 54 45 47 45 52 20 50 52 49  t_id INTEGER PRI
dbb0: 4d 41 52 59 20 4b 45 59 2c 0a 20 20 63 75 73 74  MARY KEY,.  cust
dbc0: 5f 6e 61 6d 65 20 54 45 58 54 2c 0a 20 20 63 75  _name TEXT,.  cu
dbd0: 73 74 5f 61 64 64 72 20 54 45 58 54 0a 29 3b 0a  st_addr TEXT.);.
dbe0: 43 52 45 41 54 45 20 56 49 45 57 20 63 75 73 74  CREATE VIEW cust
dbf0: 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 41 53 0a  omer_address AS.
dc00: 20 20 20 53 45 4c 45 43 54 20 63 75 73 74 5f 69     SELECT cust_i
dc10: 64 2c 20 63 75 73 74 5f 61 64 64 72 20 46 52 4f  d, cust_addr FRO
dc20: 4d 20 63 75 73 74 6f 6d 65 72 3b 0a 43 52 45 41  M customer;.CREA
dc30: 54 45 20 54 52 49 47 47 45 52 20 63 75 73 74 5f  TE TRIGGER cust_
dc40: 61 64 64 72 5f 63 68 6e 67 0a 49 4e 53 54 45 41  addr_chng.INSTEA
dc50: 44 20 4f 46 20 55 50 44 41 54 45 20 4f 46 20 63  D OF UPDATE OF c
dc60: 75 73 74 5f 61 64 64 72 20 4f 4e 20 63 75 73 74  ust_addr ON cust
dc70: 6f 6d 65 72 5f 61 64 64 72 65 73 73 0a 42 45 47  omer_address.BEG
dc80: 49 4e 0a 20 20 55 50 44 41 54 45 20 63 75 73 74  IN.  UPDATE cust
dc90: 6f 6d 65 72 20 53 45 54 20 63 75 73 74 5f 61 64  omer SET cust_ad
dca0: 64 72 3d 4e 45 57 2e 63 75 73 74 5f 61 64 64 72  dr=NEW.cust_addr
dcb0: 0a 20 20 20 57 48 45 52 45 20 63 75 73 74 5f 69  .   WHERE cust_i
dcc0: 64 3d 4e 45 57 2e 63 75 73 74 5f 69 64 3b 0a 45  d=NEW.cust_id;.E
dcd0: 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ND;.}</tcl>..<p>
dce0: 57 69 74 68 20 74 68 65 20 73 63 68 65 6d 61 20  With the schema 
dcf0: 61 62 6f 76 65 2c 20 61 20 73 74 61 74 65 6d 65  above, a stateme
dd00: 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 3a 3c  nt of the form:<
dd10: 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c  /p>..<tcl>Exampl
dd20: 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f  e {.UPDATE custo
dd30: 6d 65 72 5f 61 64 64 72 65 73 73 20 53 45 54 20  mer_address SET 
dd40: 63 75 73 74 5f 61 64 64 72 3d 24 6e 65 77 5f 61  cust_addr=$new_a
dd50: 64 64 72 65 73 73 20 57 48 45 52 45 20 63 75 73  ddress WHERE cus
dd60: 74 5f 69 64 3d 24 63 75 73 74 5f 69 64 3b 0a 7d  t_id=$cust_id;.}
dd70: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 75 73 65  </tcl>..<p>Cause
dd80: 73 20 74 68 65 20 63 75 73 74 6f 6d 65 72 2e 63  s the customer.c
dd90: 75 73 74 5f 61 64 64 72 20 66 69 65 6c 64 20 74  ust_addr field t
dda0: 6f 20 62 65 20 75 70 64 61 74 65 64 20 66 6f 72  o be updated for
ddb0: 20 61 20 73 70 65 63 69 66 69 63 0a 63 75 73 74   a specific.cust
ddc0: 6f 6d 65 72 20 65 6e 74 72 79 20 74 68 61 74 20  omer entry that 
ddd0: 68 61 73 20 63 75 73 74 6f 6d 65 72 2e 63 75 73  has customer.cus
dde0: 74 5f 69 64 20 65 71 75 61 6c 20 74 6f 20 74 68  t_id equal to th
ddf0: 65 20 24 63 75 73 74 5f 69 64 20 70 61 72 61 6d  e $cust_id param
de00: 65 74 65 72 2e 0a 4e 6f 74 65 20 68 6f 77 20 74  eter..Note how t
de10: 68 65 20 76 61 6c 75 65 73 20 61 73 73 69 67 6e  he values assign
de20: 65 64 20 74 6f 20 74 68 65 20 76 69 65 77 20 61  ed to the view a
de30: 72 65 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c  re made availabl
de40: 65 20 61 73 20 66 69 65 6c 64 0a 69 6e 20 74 68  e as field.in th
de50: 65 20 73 70 65 63 69 61 6c 20 22 4e 45 57 22 20  e special "NEW" 
de60: 74 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65  table within the
de70: 20 74 72 69 67 67 65 72 20 62 6f 64 79 2e 3c 2f   trigger body.</
de80: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
de90: 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72  ment undef_befor
dea0: 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46  e {undefined BEF
deb0: 4f 52 45 20 74 72 69 67 67 65 72 20 62 65 68 61  ORE trigger beha
dec0: 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  vior}</tcl>.<h3>
ded0: 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20  Cautions On The 
dee0: 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72  Use Of BEFORE tr
def0: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
df00: 49 66 20 61 20 42 45 46 4f 52 45 20 55 50 44 41  If a BEFORE UPDA
df10: 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c  TE or BEFORE DEL
df20: 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69  ETE trigger modi
df30: 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  fies or deletes 
df40: 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74  a row.that was t
df50: 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70 64 61  o have been upda
df60: 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20  ted or deleted, 
df70: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
df80: 6f 66 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  of the subsequen
df90: 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65  t.update or dele
dfa0: 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  te operation is 
dfb0: 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74  undefined.  Furt
dfc0: 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45  hermore, if a BE
dfd0: 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64  FORE trigger.mod
dfe0: 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73  ifies or deletes
dff0: 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20   a row, then it 
e000: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65  is undefined whe
e010: 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45  ther or not AFTE
e020: 52 20 74 72 69 67 67 65 72 73 0a 74 68 61 74 20  R triggers.that 
e030: 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72  would have other
e040: 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73  wise run on thos
e050: 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66  e rows will in f
e060: 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c  act run..</p>..<
e070: 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e  p>The value of N
e080: 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65  EW.rowid is unde
e090: 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52  fined in a BEFOR
e0a0: 45 20 49 4e 53 45 52 54 20 74 72 69 67 67 65 72  E INSERT trigger
e0b0: 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f   in which.the ro
e0c0: 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69  wid is not expli
e0d0: 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20  citly set to an 
e0e0: 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70  integer.</p>..<p
e0f0: 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68 65 20  >Because of the 
e100: 62 65 68 61 76 69 6f 72 73 20 64 65 73 63 72 69  behaviors descri
e110: 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72  bed above, progr
e120: 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75  ammers are encou
e130: 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20  raged to.prefer 
e140: 41 46 54 45 52 20 74 72 69 67 67 65 72 73 20 6f  AFTER triggers o
e150: 76 65 72 20 42 45 46 4f 52 45 20 74 72 69 67 67  ver BEFORE trigg
e160: 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ers.</p>..<tcl>h
e170: 64 5f 66 72 61 67 6d 65 6e 74 20 72 61 69 73 65  d_fragment raise
e180: 20 7b 52 41 49 53 45 20 66 75 6e 63 74 69 6f 6e   {RAISE function
e190: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
e1a0: 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e  RAISE() function
e1b0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70  </h3>..<p>^(A sp
e1c0: 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63 74 69  ecial SQL functi
e1d0: 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79 20 62  on RAISE() may b
e1e0: 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61 20  e used within a 
e1f0: 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c  trigger-program,
e200: 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f 6c 6c  )^.with the foll
e210: 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e  owing syntax</p>
e220: 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69   ..<tcl>BubbleDi
e230: 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63  agram raise-func
e240: 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tion</tcl>..<p>^
e250: 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52 41 49  (When one of RAI
e260: 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e 29  SE(ROLLBACK,...)
e270: 2c 20 52 41 49 53 45 28 41 42 4f 52 54 2c 2e 2e  , RAISE(ABORT,..
e280: 2e 29 20 6f 72 20 52 41 49 53 45 28 46 41 49 4c  .) or RAISE(FAIL
e290: 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65 64 20  ,...).is called 
e2a0: 64 75 72 69 6e 67 20 74 72 69 67 67 65 72 2d 70  during trigger-p
e2b0: 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69 6f 6e  rogram.execution
e2c0: 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  , the specified 
e2d0: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 70 72  [ON CONFLICT] pr
e2e0: 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65 72 66  ocessing is perf
e2f0: 6f 72 6d 65 64 0a 74 68 65 20 63 75 72 72 65 6e  ormed.the curren
e300: 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61 74  t query terminat
e310: 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72 20 63  es.)^.An error c
e320: 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43  ode of [SQLITE_C
e330: 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72 65  ONSTRAINT] is re
e340: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61 70  turned to the ap
e350: 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67  plication,.along
e360: 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
e370: 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ied error messag
e380: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  e.</p>..<p>^When
e390: 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20 69   RAISE(IGNORE) i
e3a0: 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72 65  s called, the re
e3b0: 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 63  mainder of the c
e3c0: 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20 70  urrent trigger p
e3d0: 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61 74  rogram,.the stat
e3e0: 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65  ement that cause
e3f0: 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  d the trigger pr
e400: 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65  ogram to execute
e410: 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71 75   and any subsequ
e420: 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72 6f 67  ent.trigger prog
e430: 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c 64 20  rams that would 
e440: 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74  have been execut
e450: 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65 64  ed are abandoned
e460: 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a 63  . ^No database.c
e470: 68 61 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c 65  hanges are rolle
e480: 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65  d back.  ^If the
e490: 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
e4a0: 63 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67  caused the trigg
e4b0: 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65 78  er program.to ex
e4c0: 65 63 75 74 65 20 69 73 20 69 74 73 65 6c 66 20  ecute is itself 
e4d0: 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
e4e0: 72 20 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e 20  r program, then 
e4f0: 74 68 61 74 20 74 72 69 67 67 65 72 20 70 72 6f  that trigger pro
e500: 67 72 61 6d 0a 72 65 73 75 6d 65 73 20 65 78 65  gram.resumes exe
e510: 63 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62 65  cution at the be
e520: 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e  ginning of the n
e530: 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a  ext step..</p>..
e540: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
e550: 20 74 65 6d 70 74 72 69 67 20 7b 54 45 4d 50 20   temptrig {TEMP 
e560: 74 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f 6e 2d  triggers on non-
e570: 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f 74 63  TEMP tables}</tc
e580: 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72 69 67  l>.<h3>TEMP Trig
e590: 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45 4d 50  gers on Non-TEMP
e5a0: 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70   Tables</h3>..<p
e5b0: 3e 5e 28 41 20 74 72 69 67 67 65 72 20 6e 6f 72  >^(A trigger nor
e5c0: 6d 61 6c 6c 79 20 65 78 69 73 74 73 20 69 6e 20  mally exists in 
e5d0: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
e5e0: 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6e  e as the table n
e5f0: 61 6d 65 64 0a 61 66 74 65 72 20 74 68 65 20 22  amed.after the "
e600: 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e 20 74  ON" keyword in t
e610: 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45  he CREATE TRIGGE
e620: 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 45 78  R statement.  Ex
e630: 63 65 70 74 2c 20 69 74 20 69 73 0a 70 6f 73 73  cept, it is.poss
e640: 69 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20 61  ible to create a
e650: 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 6f 6e   TEMP TRIGGER on
e660: 20 61 20 74 61 62 6c 65 20 69 6e 20 61 6e 6f 74   a table in anot
e670: 68 65 72 20 64 61 74 61 62 61 73 65 2e 29 5e 20  her database.)^ 
e680: 20 0a 53 75 63 68 20 61 20 74 72 69 67 67 65 72   .Such a trigger
e690: 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72 65 20   will only fire 
e6a0: 77 68 65 6e 20 63 68 61 6e 67 65 73 0a 61 72 65  when changes.are
e6b0: 20 6d 61 64 65 20 74 6f 20 74 68 65 20 74 61 72   made to the tar
e6c0: 67 65 74 20 74 61 62 6c 65 20 62 79 20 74 68 65  get table by the
e6d0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 68 61   application tha
e6e0: 74 20 64 65 66 69 6e 65 64 20 74 68 65 20 74 72  t defined the tr
e6f0: 69 67 67 65 72 2e 0a 4f 74 68 65 72 20 61 70 70  igger..Other app
e700: 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  lications that m
e710: 6f 64 69 66 79 20 74 68 65 20 64 61 74 61 62 61  odify the databa
e720: 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 61  se will not be a
e730: 62 6c 65 20 74 6f 20 73 65 65 20 74 68 65 0a 54  ble to see the.T
e740: 45 4d 50 20 74 72 69 67 67 65 72 20 61 6e 64 20  EMP trigger and 
e750: 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72 75 6e  hence cannot run
e760: 20 74 68 65 20 74 72 69 67 67 65 72 2e 3c 2f 70   the trigger.</p
e770: 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66 69 6e  >..<p>When defin
e780: 69 6e 67 20 61 20 54 45 4d 50 20 74 72 69 67 67  ing a TEMP trigg
e790: 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45 4d 50  er on a non-TEMP
e7a0: 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20 69 6d   table, it is im
e7b0: 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65 63 69  portant to.speci
e7c0: 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20  fy the database 
e7d0: 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f 6e 2d  holding the non-
e7e0: 54 45 4d 50 20 74 61 62 6c 65 2e 20 20 46 6f 72  TEMP table.  For
e7f0: 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74 68 65   example,.in the
e800: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
e810: 6d 65 6e 74 2c 20 69 74 20 69 73 20 69 6d 70 6f  ment, it is impo
e820: 72 74 61 6e 74 20 74 6f 20 73 61 79 20 22 6d 61  rtant to say "ma
e830: 69 6e 2e 74 61 62 31 22 20 69 6e 73 74 65 61 64  in.tab1" instead
e840: 0a 6f 66 20 6a 75 73 74 20 22 74 61 62 31 22 3a  .of just "tab1":
e850: 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
e860: 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
e870: 45 4d 50 20 54 52 49 47 47 45 52 20 65 78 31 20  EMP TRIGGER ex1 
e880: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
e890: 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61 62 31  <b>main.</b>tab1
e8a0: 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70 72 65   BEGIN ....</pre
e8b0: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
e8c0: 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f 20 73 70  <p>Failure to sp
e8d0: 65 63 69 66 79 20 74 68 65 20 64 61 74 61 62 61  ecify the databa
e8e0: 73 65 20 6e 61 6d 65 20 6f 6e 20 74 68 65 20 74  se name on the t
e8f0: 61 72 67 65 74 20 74 61 62 6c 65 20 63 6f 75 6c  arget table coul
e900: 64 20 72 65 73 75 6c 74 0a 69 6e 20 74 68 65 20  d result.in the 
e910: 54 45 4d 50 20 74 72 69 67 67 65 72 20 62 65 69  TEMP trigger bei
e920: 6e 67 20 72 65 61 74 74 61 63 68 65 64 20 74 6f  ng reattached to
e930: 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 74 68   a table with th
e940: 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e 0a 61  e same name in.a
e950: 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20  nother database 
e960: 77 68 65 6e 65 76 65 72 20 61 6e 79 20 73 63 68  whenever any sch
e970: 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63 75 72  ema change occur
e980: 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  s.</p>..<tcl>.##
e990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
e9e0: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49  ction {CREATE VI
e9f0: 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d  EW} {createview}
ea00: 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20   {{CREATE VIEW} 
ea10: 76 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a 52 65  view *views}..Re
ea20: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
ea30: 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69 65 77  gram create-view
ea40: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
ea50: 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56 49 45  >^The CREATE VIE
ea60: 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e  W command assign
ea70: 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70 72  s a name to a pr
ea80: 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53 45 4c  e-packaged .[SEL
ea90: 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT] statement. 
eaa0: 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65 77 20  .^Once the view 
eab0: 69 73 20 63 72 65 61 74 65 64 2c 20 69 74 20 63  is created, it c
eac0: 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 74 68  an be used in th
ead0: 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66  e FROM clause.of
eae0: 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45 43 54   another [SELECT
eaf0: 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  ] in place of a 
eb00: 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e  table name..</p>
eb10: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54 45  ..<p>^If the "TE
eb20: 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52  MP" or "TEMPORAR
eb30: 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72  Y" keyword occur
eb40: 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43 52  s in between "CR
eb50: 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45 57 22  EATE".and "VIEW"
eb60: 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 74   then the view t
eb70: 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20 69  hat is created i
eb80: 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20 74  s only visible t
eb90: 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20 74 68  o the.process th
eba0: 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20 64 61  at opened the da
ebb0: 74 61 62 61 73 65 20 61 6e 64 20 69 73 20 61 75  tabase and is au
ebc0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65  tomatically dele
ebd0: 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61 74  ted when.the dat
ebe0: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 2e  abase is closed.
ebf0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20  </p>..<p> ^If a 
ec00: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
ec10: 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66 69  e&gt; is specifi
ec20: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76 69 65  ed, then the vie
ec30: 77 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  w is created in 
ec40: 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62  .the named datab
ec50: 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65  ase. ^It is an e
ec60: 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20  rror to specify 
ec70: 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61 62  both a &lt;datab
ec80: 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64  ase-name&gt;.and
ec90: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
eca0: 64 20 6f 6e 20 61 20 56 49 45 57 2c 20 75 6e 6c  d on a VIEW, unl
ecb0: 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61 74 61  ess the &lt;data
ecc0: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73  base-name&gt; is
ecd0: 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20   "temp"..^If no 
ece0: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73  database name is
ecf0: 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20   specified, and 
ed00: 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  the TEMP keyword
ed10: 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c   is not present,
ed20: 0a 74 68 65 20 56 49 45 57 20 69 73 20 63 72 65  .the VIEW is cre
ed30: 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e  ated in the main
ed40: 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a   database.</p>..
ed50: 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b  <p>^You cannot [
ed60: 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54  DELETE], [INSERT
ed70: 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 61  ], or [UPDATE] a
ed80: 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73 20 61   view.  ^Views a
ed90: 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e  re read-only .in
eda0: 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77 65 76   SQLite.  ^Howev
edb0: 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73 65  er, in many case
edc0: 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61 6e  s you can use an
edd0: 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  .[INSTEAD OF tri
ede0: 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76 69 65  gger] on the vie
edf0: 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20  w to accomplish 
ee00: 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e  .the same thing.
ee10: 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65 6d    ^Views are rem
ee20: 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65 20 5b  oved .with the [
ee30: 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61  DROP VIEW] comma
ee40: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  nd.</p>..<tcl>.#
ee50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee90: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
eea0: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49  ction {CREATE VI
eeb0: 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b 63 72  RTUAL TABLE} {cr
eec0: 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52 45 41  eatevtab} {{CREA
eed0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
eee0: 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
eef0: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
ef00: 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d  e-virtual-table-
ef10: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
ef20: 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65  A [virtual table
ef30: 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61 63  ] is an interfac
ef40: 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c  e to an external
ef50: 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d 70   storage or comp
ef60: 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20 74  utation.engine t
ef70: 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20 62  hat appears to b
ef80: 65 20 61 20 74 61 62 6c 65 20 62 75 74 20 64 6f  e a table but do
ef90: 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  es not actually 
efa0: 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f  store informatio
efb0: 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  n.in the databas
efc0: 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
efd0: 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75 20  In general, you 
efe0: 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67 20  can do anything 
eff0: 77 69 74 68 20 61 20 5b 76 69 72 74 75 61 6c 20  with a [virtual 
f000: 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61 6e 20  table] that can 
f010: 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20  be done.with an 
f020: 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c 20  ordinary table, 
f030: 65 78 63 65 70 74 20 74 68 61 74 20 5e 79 6f 75  except that ^you
f040: 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 69   cannot create i
f050: 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67 67 65  ndices or trigge
f060: 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20  rs on a.virtual 
f070: 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76 69  table.  ^Some vi
f080: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
f090: 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68  ementations migh
f0a0: 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69 6f  t impose additio
f0b0: 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e 73  nal.restrictions
f0c0: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
f0d0: 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61 62  many virtual tab
f0e0: 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c  les are read-onl
f0f0: 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 26  y.</p>..<p>The &
f100: 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67  lt;module-name&g
f110: 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  t; is the name o
f120: 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  f an object that
f130: 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20   implements.the 
f140: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
f150: 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d  ^The &lt;module-
f160: 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62 65  name&gt; must be
f170: 20 72 65 67 69 73 74 65 72 65 64 20 77 69 74 68   registered with
f180: 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61  .the SQLite data
f190: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
f1a0: 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 63  using.[sqlite3_c
f1b0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d 20  reate_module()] 
f1c0: 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  or [sqlite3_crea
f1d0: 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d 0a  te_module_v2()].
f1e0: 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e 67  prior to issuing
f1f0: 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54   the CREATE VIRT
f200: 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d  UAL TABLE statem
f210: 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c 65  ent..^The module
f220: 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20 6d   takes zero or m
f230: 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61  ore comma-separa
f240: 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a 5e  ted arguments..^
f250: 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 63 61  The arguments ca
f260: 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75 74 20  n be just about 
f270: 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f 6e 67  any text as long
f280: 20 61 73 20 69 74 20 68 61 73 20 62 61 6c 61 6e   as it has balan
f290: 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65 73 2e  ced.parentheses.
f2a0: 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 73    The argument s
f2b0: 79 6e 74 61 78 20 69 73 20 73 75 66 66 69 63 69  yntax is suffici
f2c0: 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20 74 68  ently general th
f2d0: 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e 74 73  at the.arguments
f2e0: 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
f2f0: 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c 75 6d  appear as [colum
f300: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20 69  n definitions] i
f310: 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c 0a  n a traditional.
f320: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
f330: 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c  tatement.  .^SQL
f340: 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20 6d  ite passes the m
f350: 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73 20  odule arguments 
f360: 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65 20  directly.to the 
f370: 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b 78  [xCreate] and [x
f380: 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64 73  Connect] methods
f390: 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   of the module i
f3a0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77 69  mplementation.wi
f3b0: 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 70  thout any interp
f3c0: 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69 73  retation.  It is
f3d0: 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69 6c   the responsibil
f3e0: 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75 6c  ity.of the modul
f3f0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
f400: 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69 6e   to parse and in
f410: 74 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e 20  terpret its own 
f420: 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a  arguments.</p>..
f430: 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74 61  <p>^A virtual ta
f440: 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65 64  ble is destroyed
f450: 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69 6e   using the ordin
f460: 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45 5d  ary.[DROP TABLE]
f470: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
f480: 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56 49  re is no.DROP VI
f490: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
f4a0: 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ement.</p>..<tcl
f4b0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
f4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f500: 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45 20  .Section DELETE 
f510: 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20 2a  delete {DELETE *
f520: 44 45 4c 45 54 45 73 7d 0a 0a 52 65 63 75 72 73  DELETEs}..Recurs
f530: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
f540: 20 64 65 6c 65 74 65 2d 73 74 6d 74 0a 3c 2f 74   delete-stmt.</t
f550: 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45 4c 45  cl>..<p>The DELE
f560: 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76  TE command remov
f570: 65 73 20 72 65 63 6f 72 64 73 20 66 72 6f 6d 20  es records from 
f580: 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  the table identi
f590: 66 69 65 64 20 62 79 20 74 68 65 0a 20 20 20 3c  fied by the.   <
f5a0: 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c  i>qualified-tabl
f5b0: 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 0a 0a 3c 70  e-name</i>. ..<p
f5c0: 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45 20 63  >^If the WHERE c
f5d0: 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70 72 65  lause is not pre
f5e0: 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64  sent, all record
f5f0: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 61  s in the table a
f600: 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e  re deleted..   ^
f610: 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
f620: 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74  e is supplied, t
f630: 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72  hen only those r
f640: 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
f650: 65 0a 20 20 20 72 65 73 75 6c 74 20 6f 66 20 65  e.   result of e
f660: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 57 48  valuating the WH
f670: 45 52 45 20 63 6c 61 75 73 65 20 61 73 20 61 20  ERE clause as a 
f680: 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
f690: 69 6f 6e 7c 0a 20 20 20 62 6f 6f 6c 65 61 6e 20  ion|.   boolean 
f6a0: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 72  expression is tr
f6b0: 75 65 5d 20 61 72 65 20 64 65 6c 65 74 65 64 2e  ue] are deleted.
f6c0: 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f  ..<h3>Restrictio
f6d0: 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53 74 61  ns on DELETE Sta
f6e0: 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43  tements Within C
f6f0: 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68  REATE TRIGGER</h
f700: 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f  3>..<p>The follo
f710: 77 69 6e 67 20 72 65 73 74 72 69 63 74 69 6f 6e  wing restriction
f720: 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c 45 54  s apply to DELET
f730: 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  E statements tha
f740: 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74  t occur within t
f750: 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20 61 20  he.   body of a 
f760: 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
f770: 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c   statement:..<ul
f780: 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20  >.  <li><p>^The 
f790: 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  <i>table-name</i
f7a0: 3e 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  > specified as p
f7b0: 61 72 74 20 6f 66 20 61 20 44 45 4c 45 54 45 20  art of a DELETE 
f7c0: 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69 6e  statement within
f7d0: 0a 20 20 20 20 61 20 74 72 69 67 67 65 72 20 62  .    a trigger b
f7e0: 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e 71 75  ody must be unqu
f7f0: 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e 20 6f  alified.  ^(In o
f800: 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a  ther words, the.
f810: 20 20 20 20 3c 69 3e 64 61 74 61 62 61 73 65 2d      <i>database-
f820: 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e  name</i><b>.</b>
f830: 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20 74   prefix on the t
f840: 61 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e 6f 74  able name is not
f850: 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20 77 69   allowed .    wi
f860: 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e  thin triggers.)^
f870: 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20 74   ^If the table t
f880: 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
f890: 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20  ger is attached 
f8a0: 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20 74 68  is.    not in th
f8b0: 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 2c  e temp database,
f8c0: 20 74 68 65 6e 20 44 45 4c 45 54 45 20 73 74 61   then DELETE sta
f8d0: 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
f8e0: 68 65 20 74 72 69 67 67 65 72 0a 20 20 20 20 62  he trigger.    b
f8f0: 6f 64 79 20 6d 75 73 74 20 6f 70 65 72 61 74 65  ody must operate
f900: 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74 68 69   on tables withi
f910: 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
f920: 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20 74  ase as it. ^If t
f930: 68 65 20 74 61 62 6c 65 0a 20 20 20 20 74 6f 20  he table.    to 
f940: 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
f950: 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73  r is attached is
f960: 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74   in the TEMP dat
f970: 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a  abase, then the.
f980: 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20      unqualified 
f990: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
f9a0: 65 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20  e being deleted 
f9b0: 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74  is resolved in t
f9c0: 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a 20  he same way as. 
f9d0: 20 20 20 69 74 20 69 73 20 66 6f 72 20 61 20 74     it is for a t
f9e0: 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65  op-level stateme
f9f0: 6e 74 20 28 62 79 20 73 65 61 72 63 68 69 6e 67  nt (by searching
fa00: 20 66 69 72 73 74 20 74 68 65 20 54 45 4d 50 20   first the TEMP 
fa10: 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 0a 20  database, then. 
fa20: 20 20 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61     the main data
fa30: 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f  base, then any o
fa40: 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20 69  ther databases i
fa50: 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79  n the order they
fa60: 20 77 65 72 65 0a 20 20 20 20 61 74 74 61 63 68   were.    attach
fa70: 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c 69 3e  ed)..    .  <li>
fa80: 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
fa90: 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58  BY and NOT INDEX
faa0: 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e  ED clauses are n
fab0: 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 44 45  ot allowed on DE
fac0: 4c 45 54 45 0a 20 20 20 20 73 74 61 74 65 6d 65  LETE.    stateme
fad0: 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
fae0: 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e  ers.</p>..  <li>
faf0: 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e  <p>^The LIMIT an
fb00: 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  d ORDER BY claus
fb10: 65 73 20 28 64 65 73 63 72 69 62 65 64 20 62 65  es (described be
fb20: 6c 6f 77 29 20 61 72 65 20 75 6e 73 75 70 70 6f  low) are unsuppo
fb30: 72 74 65 64 20 66 6f 72 0a 20 20 20 20 44 45 4c  rted for.    DEL
fb40: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ETE statements w
fb50: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c  ithin triggers.<
fb60: 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f  /p>.</ul>..<h3>O
fb70: 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e  ptional LIMIT an
fb80: 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  d ORDER BY claus
fb90: 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66  es</h3>..<p>^(If
fba0: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
fbb0: 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b 53 51  led with the [SQ
fbc0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
fbd0: 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
fbe0: 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70  .compile-time op
fbf0: 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 73  tion, then the s
fc00: 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44 45 4c  yntax of the DEL
fc10: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ETE statement is
fc20: 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74 68 65  .extended by the
fc30: 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74   addition of opt
fc40: 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61  ional ORDER BY a
fc50: 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
fc60: 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75  :)^</p>..<tcl>Bu
fc70: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65  bbleDiagram dele
fc80: 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c  te-stmt-limited<
fc90: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20  /tcl>..<p>^If a 
fca0: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
fcb0: 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63 6c 61   has a LIMIT cla
fcc0: 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d  use, the maximum
fcd0: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
fce0: 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 64 65 6c  that.will be del
fcf0: 65 74 65 64 20 69 73 20 66 6f 75 6e 64 20 62 79  eted is found by
fd00: 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
fd10: 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70  accompanying exp
fd20: 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61 73 74  ression and cast
fd30: 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74  ing.it to an int
fd40: 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 49 66 20  eger value. ^If 
fd50: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
fd60: 65 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  e evaluating the
fd70: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 63 61   LIMIT clause.ca
fd80: 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73  nnot be lossless
fd90: 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly converted to 
fda0: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
fdb0: 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  , it is an error
fdc0: 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76 65 20 4c  . ^A .negative L
fdd0: 49 4d 49 54 20 76 61 6c 75 65 20 69 73 20 69 6e  IMIT value is in
fde0: 74 65 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f  terpreted as "no
fdf0: 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20 74 68   limit". ^(If th
fe00: 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
fe10: 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20 61 6e 20  nt .also has an 
fe20: 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74  OFFSET clause, t
fe30: 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61  hen it is simila
fe40: 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e  rly evaluated an
fe50: 64 20 63 61 73 74 20 74 6f 20 61 6e 0a 69 6e 74  d cast to an.int
fe60: 65 67 65 72 20 76 61 6c 75 65 2e 20 41 67 61 69  eger value. Agai
fe70: 6e 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  n, it is an erro
fe80: 72 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 63  r if the value c
fe90: 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
fea0: 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly.converted to
feb0: 20 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e 20 5e   an integer.)^ ^
fec0: 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f  If there is no O
fed0: 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 6f 72  FFSET clause, or
fee0: 20 74 68 65 20 63 61 6c 63 75 6c 61 74 65 64 0a   the calculated.
fef0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 73  integer value is
ff00: 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 20 65   negative, the e
ff10: 66 66 65 63 74 69 76 65 20 4f 46 46 53 45 54 20  ffective OFFSET 
ff20: 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e 0a 0a  value is zero...
ff30: 3c 70 3e 5e 28 49 66 20 74 68 65 20 44 45 4c 45  <p>^(If the DELE
ff40: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
ff50: 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61   an ORDER BY cla
ff60: 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f  use, then all ro
ff70: 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20 0a 62  ws that would .b
ff80: 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68 65  e deleted in the
ff90: 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20   absence of the 
ffa0: 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65  LIMIT clause are
ffb0: 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69 6e   sorted accordin
ffc0: 67 20 74 6f 20 74 68 65 20 0a 4f 52 44 45 52 20  g to the .ORDER 
ffd0: 42 59 2e 20 54 68 65 20 66 69 72 73 74 20 3c 69  BY. The first <i
ffe0: 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77 68 65  >M</i> rows, whe
fff0: 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20 74  re <i>M</i> is t
10000 68 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20 62  he value found b
10010 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y.evaluating the
10020 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 65   OFFSET clause e
10030 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20 73  xpression, are s
10040 6b 69 70 70 65 64 2c 20 61 6e 64 20 74 68 65 20  kipped, and the 
10050 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e 3c  following .<i>N<
10060 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e 4e 3c  /i>, where <i>N<
10070 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75 65  /i> is the value
10080 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78   of the LIMIT ex
10090 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20 64 65  pression, are de
100a0 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74 68 65  leted.)^.^If the
100b0 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  re are less than
100c0 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 72   <i>N</i> rows r
100d0 65 6d 61 69 6e 69 6e 67 20 61 66 74 65 72 20 74  emaining after t
100e0 61 6b 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54  aking the OFFSET
100f0 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61 63 63   clause.into acc
10100 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74 68 65 20  ount, or if the 
10110 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 65 76 61  LIMIT clause eva
10120 6c 75 61 74 65 64 20 74 6f 20 61 20 6e 65 67 61  luated to a nega
10130 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65 6e  tive value, then
10140 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67 20 72   all.remaining r
10150 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 2e  ows are deleted.
10160 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44 45 4c  ..<p>^If the DEL
10170 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ETE statement ha
10180 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c  s no ORDER BY cl
10190 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72  ause, then all r
101a0 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20 62  ows that.would b
101b0 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68 65  e deleted in the
101c0 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20   absence of the 
101d0 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65  LIMIT clause are
101e0 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e   assembled in an
101f0 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64 65 72  .arbitrary order
10200 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e 67   before applying
10210 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f   the LIMIT and O
10220 46 46 53 45 54 20 63 6c 61 75 73 65 73 20 74 6f  FFSET clauses to
10230 20 64 65 74 65 72 6d 69 6e 65 20 0a 74 68 65 20   determine .the 
10240 73 75 62 73 65 74 20 74 68 61 74 20 61 72 65 20  subset that are 
10250 61 63 74 75 61 6c 6c 79 20 64 65 6c 65 74 65 64  actually deleted
10260 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45  ...<p>^(The ORDE
10270 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61  R BY clause on a
10280 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
10290 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74  t is used only t
102a0 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  o determine whic
102b0 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74 68  h.rows fall with
102c0 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54 68  in the LIMIT. Th
102d0 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
102e0 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65   rows are delete
102f0 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61  d is arbitrary.a
10300 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65  nd is not influe
10310 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52 44 45  nced by the ORDE
10320 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a  R BY clause.)^..
10330 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
10340 20 74 72 75 6e 63 61 74 65 6f 70 74 20 7b 74 72   truncateopt {tr
10350 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74  uncate optimizat
10360 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  ion}</tcl>.<h3>T
10370 68 65 20 54 72 75 6e 63 61 74 65 20 4f 70 74 69  he Truncate Opti
10380 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c  mization</h3>..<
10390 70 3e 5e 57 68 65 6e 20 74 68 65 20 57 48 45 52  p>^When the WHER
103a0 45 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  E is omitted fro
103b0 6d 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65  m a DELETE state
103c0 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 74 61 62  ment and the tab
103d0 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65 74 65 64  le.being deleted
103e0 20 68 61 73 20 6e 6f 20 74 72 69 67 67 65 72 73   has no triggers
103f0 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20 61 6e  ,.SQLite uses an
10400 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f   optimization to
10410 20 65 72 61 73 65 20 74 68 65 20 65 6e 74 69 72   erase the entir
10420 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a  e table content.
10430 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
10440 6f 20 76 69 73 69 74 20 65 61 63 68 20 72 6f 77  o visit each row
10450 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
10460 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68 69 73  dividually..This
10470 20 22 74 72 75 6e 63 61 74 65 22 20 6f 70 74 69   "truncate" opti
10480 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74  mization makes t
10490 68 65 20 64 65 6c 65 74 65 20 72 75 6e 20 6d 75  he delete run mu
104a0 63 68 20 66 61 73 74 65 72 2e 0a 50 72 69 6f 72  ch faster..Prior
104b0 20 74 6f 20 53 51 4c 69 74 65 20 5b 76 65 72 73   to SQLite [vers
104c0 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74 68 65 20  ion 3.6.5], the 
104d0 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
104e0 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74  ation.also meant
104f0 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74   that the [sqlit
10500 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e  e3_changes()] an
10510 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  d.[sqlite3_total
10520 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65  _changes()] inte
10530 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65 20 5b  rfaces.and the [
10540 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72  count_changes pr
10550 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61  agma].will not a
10560 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74  ctually return t
10570 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c  he number of del
10580 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54 68 61  eted rows.  .Tha
10590 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62 65  t problem has be
105a0 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66 20 5b  en fixed as of [
105b0 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e 0a  version 3.6.5]..
105c0 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63 61 74  .<p>^The truncat
105d0 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63  e optimization c
105e0 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e 74 6c  an be permanentl
105f0 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 61  y disabled for a
10600 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20 72 65  ll queries.by re
10610 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69 74 65  compiling.SQLite
10620 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54   with the [SQLIT
10630 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54 45 5f  E_OMIT_TRUNCATE_
10640 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f  OPTIMIZATION] co
10650 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69 74 63  mpile-time switc
10660 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74  h.</p>..<p>The t
10670 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
10680 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20 62 65  tion can also be
10690 20 64 69 73 61 62 6c 65 64 20 61 74 20 72 75 6e   disabled at run
106a0 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65 20 5b  time using.the [
106b0 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68  sqlite3_set_auth
106c0 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65 72 66  orizer()] interf
106d0 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61 75 74  ace.  ^If an aut
106e0 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b  horizer callback
106f0 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49 54 45  .returns [SQLITE
10700 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61 6e 20  _IGNORE] for an 
10710 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 5d 20  [SQLITE_DELETE] 
10720 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74 68 65  action code, the
10730 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f 70 65  n.the DELETE ope
10740 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f 63  ration will proc
10750 65 65 64 20 62 75 74 20 74 68 65 20 74 72 75 6e  eed but the trun
10760 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
10770 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61 73 73  n will.be bypass
10780 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69 6c 6c  ed and rows will
10790 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e 65 20   be deleted one 
107a0 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  by one.</p>..<tc
107b0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
107c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
107d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
107e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
107f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10800 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45 54 41  ##.Section {DETA
10810 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65 74  CH DATABASE} det
10820 61 63 68 20 2a 44 45 54 41 43 48 0a 0a 52 65 63  ach *DETACH..Rec
10830 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
10840 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d 74 0a  ram detach-stmt.
10850 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69 73  </tcl>..<p>^This
10860 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61 63   statement detac
10870 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e 61  hes an additiona
10880 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  l database conne
10890 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79  ction previously
108a0 20 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e 67   .attached using
108b0 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73 74   the [ATTACH] st
108c0 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 57 68 65 6e  atement.  .^When
108d0 20 6e 6f 74 20 69 6e 20 5b 73 68 61 72 65 64 20   not in [shared 
108e0 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20 0a 69 74  cache mode], .it
108f0 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20   is possible to 
10900 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64 61  have the same da
10910 74 61 62 61 73 65 20 66 69 6c 65 20 61 74 74 61  tabase file atta
10920 63 68 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69  ched multiple ti
10930 6d 65 73 20 75 73 69 6e 67 20 0a 64 69 66 66 65  mes using .diffe
10940 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e 64 20  rent names, and 
10950 64 65 74 61 63 68 69 6e 67 20 6f 6e 65 20 63 6f  detaching one co
10960 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 66 69  nnection to a fi
10970 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65 20 74 68  le will leave th
10980 65 20 0a 6f 74 68 65 72 73 20 69 6e 74 61 63 74  e .others intact
10990 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68 61 72 65  .</p>.^In [share
109a0 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20 61  d cache mode], a
109b0 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 61 74 74  ttempting to att
109c0 61 63 68 20 74 68 65 20 73 61 6d 65 20 64 61 74  ach the same dat
109d0 61 62 61 73 65 20 66 69 6c 65 20 6d 6f 72 65 0a  abase file more.
109e0 74 68 61 6e 20 6f 6e 63 65 20 72 65 73 75 6c 74  than once result
109f0 73 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 0a 0a  s in an error...
10a00 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65  <p>^This stateme
10a10 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20  nt will fail if 
10a20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68 65  SQLite is in the
10a30 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72 61   middle of a tra
10a40 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a  nsaction.</p>...
10a50 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
10a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10a90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10aa0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
10ab0 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e  OP INDEX} dropin
10ac0 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58  dex {{DROP INDEX
10ad0 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
10ae0 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d  bleDiagram drop-
10af0 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c  index-stmt.</tcl
10b00 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20  >..<p>^The DROP 
10b10 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20  INDEX statement 
10b20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64 65 78  removes an index
10b30 20 61 64 64 65 64 0a 77 69 74 68 20 74 68 65 20   added.with the 
10b40 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73  [CREATE INDEX] s
10b50 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 69  tatement.  The i
10b60 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c 65 74 65  ndex is complete
10b70 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a  ly removed from.
10b80 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65 20 6f  the disk.  The o
10b90 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63 6f 76  nly way to recov
10ba0 65 72 20 74 68 65 20 69 6e 64 65 78 20 69 73 20  er the index is 
10bb0 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65 0a 61  to reenter the.a
10bc0 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52 45 41  ppropriate [CREA
10bd0 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e  TE INDEX] comman
10be0 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
10bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c30 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
10c40 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42 4c 45  tion {DROP TABLE
10c50 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b 44 52  } droptable {{DR
10c60 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75  OP TABLE}}..Recu
10c70 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
10c80 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73 74  am drop-table-st
10c90 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
10ca0 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74  he DROP TABLE st
10cb0 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20  atement removes 
10cc0 61 20 74 61 62 6c 65 20 61 64 64 65 64 20 77 69  a table added wi
10cd0 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54  th the.[CREATE T
10ce0 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
10cf0 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63 69    The name speci
10d00 66 69 65 64 20 69 73 20 74 68 65 0a 74 61 62 6c  fied is the.tabl
10d10 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20 64 72  e name.  ^The dr
10d20 6f 70 70 65 64 20 74 61 62 6c 65 20 69 73 20 63  opped table is c
10d30 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65  ompletely remove
10d40 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
10d50 61 73 65 20 0a 73 63 68 65 6d 61 20 61 6e 64 20  ase .schema and 
10d60 74 68 65 20 64 69 73 6b 20 66 69 6c 65 2e 20 20  the disk file.  
10d70 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f  The table can no
10d80 74 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e 20  t be recovered. 
10d90 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73 20 61   .^All indices a
10da0 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73 73 6f  nd triggers.asso
10db0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
10dc0 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20 64  table are also d
10dd0 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  eleted.</p>..<p>
10de0 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46  ^The optional IF
10df0 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 73   EXISTS clause s
10e00 75 70 70 72 65 73 73 65 73 20 74 68 65 20 65 72  uppresses the er
10e10 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64 20 6e  ror that would n
10e20 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69  ormally.result i
10e30 66 20 74 68 65 20 74 61 62 6c 65 20 64 6f 65 73  f the table does
10e40 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a   not exist.</p>.
10e50 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e  .<p>^If [foreign
10e60 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
10e70 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 20 61  ] are enabled, a
10e80 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d   DROP TABLE comm
10e90 61 6e 64 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a  and performs an.
10ea0 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45 54 45  implicit [DELETE
10eb0 20 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26   | DELETE FROM &
10ec0 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d  lt;tbl&gt;] comm
10ed0 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d 6f 76  and before remov
10ee0 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20 66 72  ing the.table fr
10ef0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
10f00 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69  schema. ^Any tri
10f10 67 67 65 72 73 20 61 74 74 61 63 68 65 64 20 74  ggers attached t
10f20 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 0a  o the table are.
10f30 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68 65  dropped from the
10f40 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
10f50 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d 70 6c   before the impl
10f60 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d  icit DELETE FROM
10f70 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 0a 69 73   &lt;tbl&gt; .is
10f80 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20 74 68   executed, so th
10f90 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20  is cannot cause 
10fa0 61 6e 79 20 74 72 69 67 67 65 72 73 20 74 6f 20  any triggers to 
10fb0 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72 61 73  fire. By contras
10fc0 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20  t, ^an.implicit 
10fd0 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
10fe0 74 62 6c 26 67 74 3b 20 64 6f 65 73 20 63 61 75  tbl&gt; does cau
10ff0 73 65 20 61 6e 79 20 63 6f 6e 66 69 67 75 72 65  se any configure
11000 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 61  d.[foreign key a
11010 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20  ctions] to take 
11020 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74 68 65 20  place. .^If the 
11030 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20  implicit DELETE 
11040 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b  FROM &lt;tbl&gt;
11050 20 65 78 65 63 75 74 65 64 0a 61 73 20 70 61 72   executed.as par
11060 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c  t of a DROP TABL
11070 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74  E command violat
11080 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61 74 65  es any immediate
11090 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
110a0 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72  straints,.an err
110b0 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 61  or is returned a
110c0 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  nd the table is 
110d0 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e 49 66  not dropped. ^If
110e0 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74 20 44   .the implicit D
110f0 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74  ELETE FROM &lt;t
11100 62 6c 26 67 74 3b 20 63 61 75 73 65 73 20 61 6e  bl&gt; causes an
11110 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f 72 65  y .deferred fore
11120 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
11130 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61 74  nts to be violat
11140 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69 6f 6c  ed, and the viol
11150 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69  ations still.exi
11160 73 74 20 77 68 65 6e 20 74 68 65 20 74 72 61 6e  st when the tran
11170 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69  saction is commi
11180 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72 20 69  tted, an error i
11190 73 20 72 65 74 75 72 6e 65 64 20 61 74 20 74 68  s returned at th
111a0 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74  e time.of commit
111b0 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
111c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11200 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
11210 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64  {DROP TRIGGER} d
11220 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44 52 4f  roptrigger {{DRO
11230 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63  P TRIGGER}}..Rec
11240 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
11250 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67 65 72  ram drop-trigger
11260 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
11270 3e 5e 54 68 65 20 44 52 4f 50 20 54 52 49 47 47  >^The DROP TRIGG
11280 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d  ER statement rem
11290 6f 76 65 73 20 61 20 74 72 69 67 67 65 72 20 63  oves a trigger c
112a0 72 65 61 74 65 64 20 62 79 20 74 68 65 20 0a 5b  reated by the .[
112b0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
112c0 73 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63 65  statement. ^Once
112d0 20 72 65 6d 6f 76 65 64 2c 20 74 68 65 20 74 72   removed, the tr
112e0 69 67 67 65 72 20 64 65 66 69 6e 69 74 69 6f 6e  igger definition
112f0 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70 72   is no.longer pr
11300 65 73 65 6e 74 20 69 6e 20 74 68 65 20 73 71 6c  esent in the sql
11310 69 74 65 5f 6d 61 73 74 65 72 20 28 6f 72 20 73  ite_master (or s
11320 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
11330 72 29 20 74 61 62 6c 65 20 61 6e 64 20 69 73 0a  r) table and is.
11340 6e 6f 74 20 66 69 72 65 64 20 62 79 20 61 6e 79  not fired by any
11350 20 73 75 62 73 65 71 75 65 6e 74 20 49 4e 53 45   subsequent INSE
11360 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
11370 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 2e  LETE statements.
11380 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
11390 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74  triggers are aut
113a0 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f 70 70  omatically dropp
113b0 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73 6f  ed when the asso
113c0 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73 0a  ciated table is.
113d0 64 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e 0a  dropped...<tcl>.
113e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
11430 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49 45  ection {DROP VIE
11440 57 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b 44 52  W} dropview {{DR
11450 4f 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63 75 72  OP VIEW}}..Recur
11460 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
11470 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74  m drop-view-stmt
11480 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
11490 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65   DROP VIEW state
114a0 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76  ment removes a v
114b0 69 65 77 20 63 72 65 61 74 65 64 20 62 79 20 74  iew created by t
114c0 68 65 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d  he [CREATE VIEW]
114d0 20 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e   .  statement. ^
114e0 54 68 65 20 76 69 65 77 20 64 65 66 69 6e 69 74  The view definit
114f0 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20 66  ion is removed f
11500 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
11510 20 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20 20   schema, but .  
11520 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 69  no actual data i
11530 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  n the underlying
11540 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20   base tables is 
11550 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28  modified...<p>^(
11560 54 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f 70  The view to drop
11570 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
11580 79 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65 20  y the view-name 
11590 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20  and optional .  
115a0 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 73 70  database-name sp
115b0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
115c0 6f 66 20 74 68 65 20 44 52 4f 50 20 56 49 45 57  of the DROP VIEW
115d0 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73   statement. This
115e0 20 0a 20 20 72 65 66 65 72 65 6e 63 65 20 69 73   .  reference is
115f0 20 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67 20   resolved using 
11600 74 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f  the standard pro
11610 63 65 64 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65  cedure for [obje
11620 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29  ct resolution].)
11630 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65  ^..<p>.  ^If the
11640 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20   specified view 
11650 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20  cannot be found 
11660 61 6e 64 20 74 68 65 20 49 46 20 45 58 49 53 54  and the IF EXIST
11670 53 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20  S clause is not 
11680 0a 20 20 70 72 65 73 65 6e 74 2c 20 69 74 20 69  .  present, it i
11690 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20  s an error. ^If 
116a0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69  the specified vi
116b0 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75  ew cannot be fou
116c0 6e 64 20 61 6e 64 20 61 6e 20 49 46 0a 20 20 45  nd and an IF.  E
116d0 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20  XISTS clause is 
116e0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 44  present in the D
116f0 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65  ROP VIEW stateme
11700 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74 61  nt, then the sta
11710 74 65 6d 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f  tement.  is a no
11720 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  -op....<tcl>.###
11730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11770 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
11780 69 6f 6e 20 7b 44 61 74 61 62 61 73 65 20 4f 62  ion {Database Ob
11790 6a 65 63 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75  ject Name Resolu
117a0 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b  tion} {naming} {
117b0 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74 69  {object resoluti
117c0 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  on}}.</tcl>..<p>
117d0 0a 20 20 49 6e 20 53 51 4c 69 74 65 2c 20 61 20  .  In SQLite, a 
117e0 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20  database object 
117f0 28 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c  (a table, index,
11800 20 74 72 69 67 67 65 72 20 6f 72 20 76 69 65 77   trigger or view
11810 29 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 0a  ) is identified.
11820 20 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66    by the name of
11830 20 74 68 65 20 6f 62 6a 65 63 74 20 61 6e 64 20   the object and 
11840 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
11850 64 61 74 61 62 61 73 65 20 74 68 61 74 20 69 74  database that it
11860 20 72 65 73 69 64 65 73 20 69 6e 2e 20 0a 20 20   resides in. .  
11870 44 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 73  Database objects
11880 20 6d 61 79 20 72 65 73 69 64 65 20 69 6e 20 74   may reside in t
11890 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
118a0 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62  , the temp datab
118b0 61 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20  ase, or in.  an 
118c0 5b 41 54 54 41 43 48 7c 61 74 74 61 63 68 65 64  [ATTACH|attached
118d0 20 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e   database]...<p>
118e0 0a 20 20 54 68 65 20 73 79 6e 74 61 78 20 6f 66  .  The syntax of
118f0 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45   the [DROP TABLE
11900 5d 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c  ], [DROP INDEX],
11910 20 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44   [DROP VIEW], [D
11920 52 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a 20 20  ROP TRIGGER],.  
11930 5b 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45  [REINDEX], [ALTE
11940 52 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e  R TABLE] and man
11950 79 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73  y other commands
11960 20 61 6c 6c 20 70 65 72 6d 69 74 20 74 68 65 20   all permit the 
11970 75 73 65 72 20 74 6f 0a 20 20 73 70 65 63 69 66  user to.  specif
11980 79 20 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a  y a database obj
11990 65 63 74 20 65 69 74 68 65 72 20 62 79 20 69 74  ect either by it
119a0 73 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72  s name alone, or
119b0 20 62 79 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   by a combinatio
119c0 6e 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d 65 20  n of.  its name 
119d0 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of 
119e0 69 74 73 20 64 61 74 61 62 61 73 65 2e 20 5e 28  its database. ^(
119f0 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 69  If no database i
11a00 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
11a10 61 72 74 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a  art.  of the obj
11a20 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20 74  ect reference, t
11a30 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63  hen SQLite searc
11a40 68 65 73 20 74 68 65 20 6d 61 69 6e 2c 20 74 65  hes the main, te
11a50 6d 70 20 61 6e 64 20 61 6c 6c 20 61 74 74 61 63  mp and all attac
11a60 68 65 64 0a 20 20 64 61 74 61 62 61 73 65 73 20  hed.  databases 
11a70 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20 77 69  for an object wi
11a80 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61  th a matching na
11a90 6d 65 2e 20 54 68 65 20 74 65 6d 70 20 64 61 74  me. The temp dat
11aa0 61 62 61 73 65 20 69 73 20 73 65 61 72 63 68 65  abase is searche
11ab0 64 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f  d.  first, follo
11ac0 77 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e 20  wed by the main 
11ad0 64 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77  database, follow
11ae0 65 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  ed all attached 
11af0 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65  databases in the
11b00 0a 20 20 6f 72 64 65 72 20 74 68 61 74 20 74 68  .  order that th
11b10 65 79 20 77 65 72 65 20 61 74 74 61 63 68 65 64  ey were attached
11b20 2e 20 54 68 65 20 72 65 66 65 72 65 6e 63 65 20  . The reference 
11b30 72 65 73 6f 6c 76 65 73 20 74 6f 20 74 68 65 20  resolves to the 
11b40 66 69 72 73 74 20 6d 61 74 63 68 0a 20 20 66 6f  first match.  fo
11b50 75 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70  und.)^ For examp
11b60 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20  le:..<pre>^(.   
11b70 20 20 20 2f 2a 20 41 64 64 20 61 20 74 61 62 6c     /* Add a tabl
11b80 65 20 6e 61 6d 65 64 20 27 74 31 27 20 74 6f 20  e named 't1' to 
11b90 74 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61  the temp, main a
11ba0 6e 64 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  nd an attached d
11bb0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20  atabase */.     
11bc0 20 41 54 54 41 43 48 20 27 66 69 6c 65 2e 64 62   ATTACH 'file.db
11bd0 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20  ' AS aux;.      
11be0 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
11bf0 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45  x, y);.      CRE
11c00 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
11c10 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43  1(x, y);.      C
11c20 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e  REATE TABLE aux.
11c30 74 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20  t1(x, y);..     
11c40 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20   DROP TABLE t1; 
11c50 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20          /* Drop 
11c60 74 61 62 6c 65 20 69 6e 20 74 65 6d 70 20 64 61  table in temp da
11c70 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  tabase */.      
11c80 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20  DROP TABLE t1;  
11c90 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74         /* Drop t
11ca0 61 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64 61 74  able in main dat
11cb0 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44  abase */.      D
11cc0 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20  ROP TABLE t1;   
11cd0 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61        /* Drop ta
11ce0 62 6c 65 20 69 6e 20 61 75 78 20 64 61 74 61 62  ble in aux datab
11cf0 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a  ase */.)^</pre>.
11d00 0a 3c 70 3e 0a 20 20 5e 49 66 20 61 20 64 61 74  .<p>.  ^If a dat
11d10 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73 70  abase name is sp
11d20 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
11d30 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 72 65 66  of an object ref
11d40 65 72 65 6e 63 65 2c 20 69 74 20 6d 75 73 74 20  erence, it must 
11d50 62 65 0a 20 20 65 69 74 68 65 72 20 22 6d 61 69  be.  either "mai
11d60 6e 22 2c 20 6f 72 20 22 74 65 6d 70 22 20 6f 72  n", or "temp" or
11d70 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20   the name of an 
11d80 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
11d90 65 2e 20 5e 4c 69 6b 65 20 6f 74 68 65 72 0a 20  e. ^Like other. 
11da0 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72 73   SQL identifiers
11db0 2c 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 73  , database names
11dc0 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e 73   are case-insens
11dd0 69 74 69 76 65 2e 20 5e 49 66 20 61 20 64 61 74  itive. ^If a dat
11de0 61 62 61 73 65 20 6e 61 6d 65 0a 20 20 69 73 20  abase name.  is 
11df0 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
11e00 6f 6e 6c 79 20 74 68 65 20 6e 61 6d 65 64 20 64  only the named d
11e10 61 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63  atabase is searc
11e20 68 65 64 20 66 6f 72 20 74 68 65 20 6e 61 6d 65  hed for the name
11e30 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20  d object...<p>. 
11e40 20 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72 65 66   Most object ref
11e50 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79  erences may only
11e60 20 72 65 73 6f 6c 76 65 20 74 6f 20 61 20 73 70   resolve to a sp
11e70 65 63 69 66 69 63 20 74 79 70 65 20 6f 66 20 6f  ecific type of o
11e80 62 6a 65 63 74 20 28 66 6f 72 0a 20 20 65 78 61  bject (for.  exa
11e90 6d 70 6c 65 20 61 20 72 65 66 65 72 65 6e 63 65  mple a reference
11ea0 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66   that is part of
11eb0 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74   a DROP TABLE st
11ec0 61 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79  atement may only
11ed0 20 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20   resolve.  to a 
11ee0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f  table object, no
11ef0 74 20 61 6e 20 69 6e 64 65 78 2c 20 74 72 69 67  t an index, trig
11f00 67 65 72 20 6f 72 20 76 69 65 77 29 2e 20 48 6f  ger or view). Ho
11f10 77 65 76 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f  wever in some co
11f20 6e 74 65 78 74 73 20 0a 20 20 28 65 2e 67 2e 20  ntexts .  (e.g. 
11f30 5b 52 45 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62  [REINDEX]) an ob
11f40 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 6d  ject reference m
11f50 61 79 20 62 65 20 72 65 73 6f 6c 76 65 20 74 6f  ay be resolve to
11f60 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74   more than one t
11f70 79 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e  ype.  of object.
11f80 20 5e 57 68 65 6e 20 73 65 61 72 63 68 69 6e 67   ^When searching
11f90 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
11fa0 73 20 66 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62  s for a named ob
11fb0 6a 65 63 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66  ject, objects of
11fc0 0a 20 20 74 79 70 65 73 20 74 68 61 74 20 63 61  .  types that ca
11fd0 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e 20  nnot be used in 
11fe0 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74  the context of t
11ff0 68 65 20 72 65 66 65 72 65 6e 63 65 20 61 72 65  he reference are
12000 20 61 6c 77 61 79 73 20 0a 20 20 69 67 6e 6f 72   always .  ignor
12010 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ed...<tcl>.#####
12020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12060 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
12070 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69  n EXPLAIN explai
12080 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c  n EXPLAIN..Bubbl
12090 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d  eDiagram sql-stm
120a0 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e  t.</tcl>..<p>^An
120b0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 63   SQL statement c
120c0 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62  an be preceded b
120d0 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 45  y the keyword "E
120e0 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74 68  XPLAIN" or.by th
120f0 65 20 70 68 72 61 73 65 20 22 45 58 50 4c 41 49  e phrase "EXPLAI
12100 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20 20  N QUERY PLAN".  
12110 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63 61  ^Either modifica
12120 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 0a  tion causes the.
12130 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  SQL statement to
12140 20 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65   behave as a que
12150 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72 6e  ry and to return
12160 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
12170 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20 73  ut.how the SQL s
12180 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
12190 61 76 65 20 6f 70 65 72 61 74 65 64 20 69 66 20  ave operated if 
121a0 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
121b0 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68 61  ord or.phrase ha
121c0 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c  d been omitted.<
121d0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70  /p>..<p>The outp
121e0 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20  ut from EXPLAIN 
121f0 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45 52  and EXPLAIN QUER
12200 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64  Y PLAN is intend
12210 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74 69  ed for.interacti
12220 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20  ve analysis and 
12230 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20  troubleshooting 
12240 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61 69  only.  The detai
12250 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70 75  ls of the .outpu
12260 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75 62  t format are sub
12270 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 66  ject to change f
12280 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65 20  rom one release 
12290 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68 65  of SQLite to the
122a0 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74 69   next..Applicati
122b0 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75  ons should not u
122c0 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45 58  se EXPLAIN or EX
122d0 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
122e0 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78 61   since.their exa
122f0 63 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 76  ct behavior is v
12300 61 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79  ariable and only
12310 20 70 61 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d   partially docum
12320 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ented.</p>..<p>^
12330 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  When the EXPLAIN
12340 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73   keyword appears
12350 20 62 79 20 69 74 73 65 6c 66 20 69 74 20 63 61   by itself it ca
12360 75 73 65 73 20 74 68 65 20 73 74 61 74 65 6d 65  uses the stateme
12370 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73 20  nt.to behave as 
12380 61 20 71 75 65 72 79 20 74 68 61 74 20 72 65 74  a query that ret
12390 75 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e 63  urns the sequenc
123a0 65 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d  e of .[virtual m
123b0 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69  achine instructi
123c0 6f 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20 68 61  ons] it would ha
123d0 76 65 20 75 73 65 64 20 74 6f 20 65 78 65 63 75  ve used to execu
123e0 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68  te the command h
123f0 61 64 0a 74 68 65 20 45 58 50 4c 41 49 4e 20 6b  ad.the EXPLAIN k
12400 65 79 77 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20  eyword not been 
12410 70 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74  present. ^When t
12420 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  he EXPLAIN QUERY
12430 20 50 4c 41 4e 20 70 68 72 61 73 65 0a 61 70 70   PLAN phrase.app
12440 65 61 72 73 2c 20 74 68 65 20 73 74 61 74 65 6d  ears, the statem
12450 65 6e 74 20 72 65 74 75 72 6e 73 20 68 69 67 68  ent returns high
12460 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69  -level informati
12470 6f 6e 20 72 65 67 61 72 64 69 6e 67 20 74 68 65  on regarding the
12480 20 71 75 65 72 79 0a 70 6c 61 6e 20 74 68 61 74   query.plan that
12490 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   would have been
124a0 20 75 73 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c   used...The EXPL
124b0 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 63  AIN QUERY PLAN c
124c0 6f 6d 6d 61 6e 64 20 69 73 20 64 65 73 63 72 69  ommand is descri
124d0 62 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e  bed in .[explain
124e0 20 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65   query plan|more
124f0 20 64 65 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a   detail here]...
12500 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
12510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12550 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78 70  ####.Section exp
12560 72 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65  ression expr {*e
12570 78 70 72 65 73 73 69 6f 6e 20 7b 65 78 70 72 65  xpression {expre
12580 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a  ssion syntax}}..
12590 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
125a0 69 61 67 72 61 6d 20 65 78 70 72 0a 3c 2f 74 63  iagram expr.</tc
125b0 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63 74  l>..<p>This sect
125c0 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74  ion is different
125d0 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 73   from the others
125e0 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73 65  .  Most other se
125f0 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64  ctions of.this d
12600 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62  ocument talks ab
12610 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61 72  out a particular
12620 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54   SQL command.  T
12630 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65 73  his section does
12640 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74 20  .not talk about 
12650 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d  a standalone com
12660 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20 22  mand but about "
12670 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68 69  expressions" whi
12680 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f  ch are .subcompo
12690 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74  nents of most ot
126a0 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70  her commands.</p
126b0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
126c0 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20 7b 62  ent binaryops {b
126d0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73 7d  inary operators}
126e0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61  </tcl>.<h3>Opera
126f0 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53  tors</h3>.<p>^(S
12700 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61 6e 64  QLite understand
12710 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  s the following 
12720 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73  binary operators
12730 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a  , in order from.
12740 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77 65 73  highest to lowes
12750 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70  t precedence:</p
12760 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
12770 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72  pre>.<font color
12780 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e  ="#2c2cf0"><big>
12790 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b  ||.*    /    %.+
127a0 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20      -.&lt;&lt;  
127b0 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61 6d 70   &gt;&gt;   &amp
127c0 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26  ;    |.&lt;    &
127d0 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20 20 26  lt;=   &gt;    &
127e0 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21  gt;=.=    ==   !
127f0 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c  =   &lt;&gt;   <
12800 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e 4f 54  /big>IS   IS NOT
12810 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20 20 47     IN   LIKE   G
12820 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20 52 45  LOB   MATCH   RE
12830 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f  GEXP.AND   .OR</
12840 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  font>.</pre></bl
12850 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
12860 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e 61 72  ^(Supported unar
12870 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f  y prefix operato
12880 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c 2f 70  rs are these:</p
12890 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
128a0 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72  pre>.<font color
128b0 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e  ="#2c2cf0"><big>
128c0 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20 20 4e  -    +    ~    N
128d0 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a  OT</big></font>.
128e0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
128f0 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  te>)^..<tcl>hd_f
12900 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f  ragment collateo
12910 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  p {COLLATE opera
12920 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  tor}</tcl>.<p>^T
12930 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  he COLLATE opera
12940 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79 20 70  tor is a unary p
12950 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72 20  ostfix.operator 
12960 74 68 61 74 20 61 73 73 69 67 6e 73 20 61 20 5b  that assigns a [
12970 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
12980 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72 65 73  ce] to an expres
12990 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41  sion..^The COLLA
129a0 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61 73 20  TE operator has 
129b0 61 20 68 69 67 68 65 72 20 70 72 65 63 65 64 65  a higher precede
129c0 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72 65 20  nce (binds more 
129d0 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20 61 6e  tightly) than an
129e0 79 0a 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  y.binary operato
129f0 72 20 61 6e 64 20 61 6e 79 20 75 6e 61 72 79 20  r and any unary 
12a00 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 20  prefix operator 
12a10 65 78 63 65 70 74 20 22 7e 22 2e 0a 28 43 4f 4c  except "~"..(COL
12a20 4c 41 54 45 20 61 6e 64 20 22 7e 22 20 61 72 65  LATE and "~" are
12a30 20 61 73 73 6f 63 69 61 74 69 76 65 20 73 6f 20   associative so 
12a40 74 68 65 69 72 20 62 69 6e 64 69 6e 67 20 6f 72  their binding or
12a50 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  der does not mat
12a60 74 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c 61  ter.).^The colla
12a70 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 73 65  ting sequence se
12a80 74 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45  t by the COLLATE
12a90 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 72 72 69   operator overri
12aa0 64 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74 69 6e  des the.collatin
12ab0 67 20 73 65 71 75 65 6e 63 65 20 64 65 74 65 72  g sequence deter
12ac0 6d 69 6e 65 64 20 62 79 20 74 68 65 20 43 4f 4c  mined by the COL
12ad0 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20 61  LATE clause in a
12ae0 20 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64   table.[column d
12af0 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65 20  efinition]..See 
12b00 74 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73  the [collating s
12b10 65 71 75 65 6e 63 65 7c 20 64 65 74 61 69 6c 65  equence| detaile
12b20 64 20 64 69 73 63 75 73 73 69 6f 6e 20 6f 6e 20  d discussion on 
12b30 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
12b40 63 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64 61 74  ces].in the [dat
12b50 61 74 79 70 65 20 7c 20 44 61 74 61 74 79 70 65  atype | Datatype
12b60 20 49 6e 20 53 51 4c 69 74 65 33 5d 20 64 6f 63   In SQLite3] doc
12b70 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69 74 69  ument for additi
12b80 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
12b90 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ..</p>..<tcl>hd_
12ba0 70 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65 20 75  puts ".<p>^The u
12bb0 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 5b 4f  nary operator [O
12bc0 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20 61 20  perator +] is a 
12bd0 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61 6e 20  no-op.  ^It can 
12be0 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20 73 74  be applied.to st
12bf0 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73 2c 20  rings, numbers, 
12c00 62 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20 61 6e  blobs or NULL an
12c10 64 20 69 74 20 61 6c 77 61 79 73 20 72 65 74 75  d it always retu
12c20 72 6e 73 20 61 20 72 65 73 75 6c 74 0a 77 69 74  rns a result.wit
12c30 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  h the same value
12c40 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e 64 2e   as the operand.
12c50 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  </p>"</tcl>..<p>
12c60 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72 65 20  Note that there 
12c70 61 72 65 20 74 77 6f 20 76 61 72 69 61 74 69 6f  are two variatio
12c80 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73  ns of the equals
12c90 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a   and not equals.
12ca0 6f 70 65 72 61 74 6f 72 73 2e 20 20 5e 45 71 75  operators.  ^Equ
12cb0 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74 68 65  als can be eithe
12cc0 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75 74 73  r..<tcl>.hd_puts
12cd0 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f   "[Operator =] o
12ce0 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e  r [Operator ==].
12cf0 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73  .^The non-equals
12d00 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65   operator can be
12d10 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f   either.[Operato
12d20 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74  r !=] or [Operat
12d30 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a  or {&lt;&gt;}]..
12d40 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c  ^The [Operator |
12d50 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73 20 5c  |] operator is \
12d60 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d  "concatenate\" -
12d70 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68   it joins togeth
12d80 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72 69 6e  er.the two strin
12d90 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72 61 6e  gs of its operan
12da0 64 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61 74 6f  ds..^The operato
12db0 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f  r [Operator %] o
12dc0 75 74 70 75 74 73 20 74 68 65 20 76 61 6c 75 65  utputs the value
12dd0 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a 6f 70   of its left .op
12de0 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73  erand modulo its
12df0 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2e 3c   right operand.<
12e00 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 65 73  /p>..<p>^The res
12e10 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e 61 72  ult of any binar
12e20 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20 65 69  y operator is ei
12e30 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63 20 76  ther a numeric v
12e40 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65  alue or .NULL, e
12e50 78 63 65 70 74 20 66 6f 72 20 74 68 65 20 5b 4f  xcept for the [O
12e60 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63  perator ||] conc
12e70 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74  atenation operat
12e80 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79 73 20  or which always 
12e90 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20 65 69  .evaluates to ei
12ea0 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 74  ther NULL or a t
12eb0 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a  ext value.</p>".
12ec0 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 69 73  .hd_fragment {is
12ed0 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65 72 61  isnot} {IS opera
12ee0 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f 70 65  tor} {IS NOT ope
12ef0 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74 73 20  rator}..hd_puts 
12f00 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72 61 74  "<p>^The [Operat
12f10 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72  or IS] and [Oper
12f20 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f  ator {IS NOT}] o
12f30 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a 6c 69  perators work.li
12f40 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20  ke [Operator =] 
12f50 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 21 3d  and [Operator !=
12f60 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20 6f 6e  ] except when on
12f70 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74 68 65  e or both of the
12f80 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55  .operands are NU
12f90 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  LL. ^In this cas
12fa0 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65 72 61  e, if both opera
12fb0 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 68  nds are NULL, th
12fc0 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74  en the.IS operat
12fd0 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  or evaluates to 
12fe0 31 20 28 74 72 75 65 29 20 61 6e 64 20 74 68 65  1 (true) and the
12ff0 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72   IS NOT operator
13000 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20 30 20   evaluates.to 0 
13010 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f 6e 65  (false). ^If one
13020 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
13030 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72 20 69   and the other i
13040 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68 65 0a  s not, then the.
13050 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c  IS operator eval
13060 75 61 74 65 73 20 74 6f 20 30 20 28 66 61 6c 73  uates to 0 (fals
13070 65 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e 4f  e) and the IS NO
13080 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20 31 20  T operator is 1 
13090 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73 20 6e  (true)..^It is n
130a0 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20  ot possible for 
130b0 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f 54 20  an IS or IS NOT 
130c0 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 65 76  expression to ev
130d0 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a  aluate to NULL..
130e0 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70 65 72  ^Operators [Oper
130f0 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70  ator IS] and [Op
13100 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d  erator {IS NOT}]
13110 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 0a   have the same .
13120 70 72 65 63 65 64 65 6e 63 65 20 61 73 20 5b 4f  precedence as [O
13130 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74  perator =]."..<t
13140 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c  cl>hd_fragment l
13150 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c  itvalue {literal
13160 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68   value}</tcl>.<h
13170 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75 65 73  3>Literal Values
13180 20 28 43 6f 6e 73 74 61 6e 74 73 29 3c 2f 68 33   (Constants)</h3
13190 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20  >.<p>.A literal 
131a0 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73  value represents
131b0 20 61 20 63 6f 6e 73 74 61 6e 74 2e 0a 5e 4c 69   a constant..^Li
131c0 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61 79  teral values may
131d0 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66 6c   be integers, fl
131e0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
131f0 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42  bers, strings,.B
13200 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a  LOBs, or NULLs..
13210 3c 70 3e 0a 54 68 65 20 73 79 6e 74 61 78 20 66  <p>.The syntax f
13220 6f 72 20 69 6e 74 65 67 65 72 20 61 6e 64 20 66  or integer and f
13230 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69  loating point li
13240 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69  terals (collecti
13250 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69  vely."numeric li
13260 74 65 72 61 6c 73 22 29 20 69 73 20 73 68 6f 77  terals") is show
13270 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n by the followi
13280 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a  ng diagram:</p>.
13290 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
132a0 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65  ram numeric-lite
132b0 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e  ral</tcl>..<p>.^
132c0 28 49 66 20 61 20 6e 75 6d 65 72 69 63 20 6c 69  (If a numeric li
132d0 74 65 72 61 6c 20 68 61 73 20 61 20 64 65 63 69  teral has a deci
132e0 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20  mal point or an 
132f0 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63  exponentiation.c
13300 6c 61 75 73 65 20 6f 72 20 69 66 20 69 74 73 20  lause or if its 
13310 6d 61 67 6e 69 74 75 64 65 20 69 73 20 6c 65 73  magnitude is les
13320 73 20 74 68 61 6e 20 2d 39 32 32 33 33 37 32 30  s than -92233720
13330 33 36 38 35 34 37 37 35 38 30 38 20 6f 72 0a 67  36854775808 or.g
13340 72 65 61 74 65 72 20 74 68 61 6e 20 39 32 32 33  reater than 9223
13350 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2c  372036854775807,
13360 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 66 6c   then it is a fl
13370 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74  oating point lit
13380 65 72 61 6c 2e 0a 4f 74 68 65 72 77 69 73 65 20  eral..Otherwise 
13390 69 73 20 69 74 20 69 73 20 61 6e 20 20 69 6e 74  is it is an  int
133a0 65 67 65 72 20 6c 69 74 65 72 61 6c 2e 29 5e 0a  eger literal.)^.
133b0 5e 54 68 65 20 22 45 22 20 63 68 61 72 61 63 74  ^The "E" charact
133c0 65 72 20 74 68 61 74 20 62 65 67 69 6e 73 20 74  er that begins t
133d0 68 65 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f  he exponentiatio
133e0 6e 0a 63 6c 61 75 73 65 20 6f 66 20 61 20 66 6c  n.clause of a fl
133f0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74  oating point lit
13400 65 72 61 6c 20 63 61 6e 20 62 65 20 65 69 74 68  eral can be eith
13410 65 72 20 75 70 70 65 72 20 6f 72 20 6c 6f 77 65  er upper or lowe
13420 72 20 63 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e  r case..^(The ".
13430 22 20 63 68 61 72 61 63 74 65 72 20 69 73 20 61  " character is a
13440 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73 20 74  lways used .as t
13450 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
13460 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c 6f 63   even if the loc
13470 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70 65 63  ale setting spec
13480 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a 74 68  ifies "," for.th
13490 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20 75 73  is role - the us
134a0 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74 68 65  e of "," for the
134b0 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77   decimal point w
134c0 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a 73  ould result in.s
134d0 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67 75 69  yntactic ambigui
134e0 74 79 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ty.)^..<tcl>hd_f
134f0 72 61 67 6d 65 6e 74 20 68 65 78 69 6e 74 20 7b  ragment hexint {
13500 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
13510 67 65 72 20 6c 69 74 65 72 61 6c 73 7d 20 7b 68  ger literals} {h
13520 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67  exadecimal integ
13530 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 48  ers}</tcl>.<p>^H
13540 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67  exadecimal integ
13550 65 72 20 6c 69 74 65 72 61 6c 73 20 66 6f 6c 6c  er literals foll
13560 6f 77 20 74 68 65 20 43 2d 6c 61 6e 67 75 61 67  ow the C-languag
13570 65 20 6e 6f 74 61 74 69 6f 6e 20 6f 66 0a 22 30  e notation of."0
13580 78 22 20 6f 72 20 22 30 58 22 20 66 6f 6c 6c 6f  x" or "0X" follo
13590 77 65 64 20 62 79 20 68 65 78 61 64 65 63 69 6d  wed by hexadecim
135a0 61 6c 20 64 69 67 69 74 73 2e 0a 5e 46 6f 72 20  al digits..^For 
135b0 65 78 61 6d 70 6c 65 2c 20 30 78 31 32 33 34 20  example, 0x1234 
135c0 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61  means the same a
135d0 73 20 34 36 36 30 0a 61 6e 64 20 30 78 38 30 30  s 4660.and 0x800
135e0 30 30 30 30 30 30 30 30 30 30 30 30 30 20 6d 65  0000000000000 me
135f0 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  ans the same as 
13600 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
13610 35 38 30 38 2e 0a 20 5e 28 48 65 78 61 64 65 63  5808.. ^(Hexadec
13620 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69 74  imal integer lit
13630 65 72 61 6c 73 20 61 72 65 20 69 6e 74 65 72 70  erals are interp
13640 72 65 74 65 64 20 61 73 20 36 34 2d 62 69 74 0a  reted as 64-bit.
13650 74 77 6f 27 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74  two's-complement
13660 20 69 6e 74 65 67 65 72 73 20 61 6e 64 20 61 72   integers and ar
13670 65 20 74 68 75 73 20 6c 69 6d 69 74 65 64 0a 74  e thus limited.t
13680 6f 20 73 69 78 74 65 65 6e 20 73 69 67 6e 69 66  o sixteen signif
13690 69 63 61 6e 74 20 64 69 67 69 74 73 20 6f 66 20  icant digits of 
136a0 70 72 65 63 69 73 69 6f 6e 2e 29 5e 0a 53 75 70  precision.)^.Sup
136b0 70 6f 72 74 20 66 6f 72 20 68 65 78 61 64 65 63  port for hexadec
136c0 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77 61  imal integers wa
136d0 73 20 61 64 64 65 64 20 74 6f 20 53 51 4c 69 74  s added to SQLit
136e0 65 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 36 2e  e version 3.8.6.
136f0 0a 5e 46 6f 72 20 62 61 63 6b 77 61 72 64 73 20  .^For backwards 
13700 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20 74  compatibility, t
13710 68 65 20 22 30 78 22 20 68 65 78 61 64 65 63 69  he "0x" hexadeci
13720 6d 61 6c 20 69 6e 74 65 67 65 72 0a 6e 6f 74 61  mal integer.nota
13730 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 6e 64  tion is only und
13740 65 72 73 74 6f 6f 64 20 62 79 20 74 68 65 20 53  erstood by the S
13750 51 4c 20 6c 61 6e 67 75 61 67 65 20 70 61 72 73  QL language pars
13760 65 72 2c 20 6e 6f 74 20 62 79 20 74 68 65 0a 74  er, not by the.t
13770 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ype conversions 
13780 72 6f 75 74 69 6e 65 73 2e 0a 5e 28 53 74 72 69  routines..^(Stri
13790 6e 67 20 76 61 72 69 61 62 6c 65 73 20 74 68 61  ng variables tha
137a0 74 0a 63 6f 6e 74 61 69 6e 20 74 65 78 74 20 66  t.contain text f
137b0 6f 72 6d 61 74 74 65 64 20 6c 69 6b 65 20 68 65  ormatted like he
137c0 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
137d0 72 73 20 61 72 65 20 6e 6f 74 0a 69 6e 74 65 72  rs are not.inter
137e0 70 72 65 74 65 64 20 61 73 20 68 65 78 61 64 65  preted as hexade
137f0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77  cimal integers w
13800 68 65 6e 20 63 6f 65 72 63 69 6e 67 20 74 68 65  hen coercing the
13810 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0a 69 6e   string value.in
13820 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 64 75  to an integer du
13830 65 20 74 6f 20 61 20 5b 43 41 53 54 20 65 78 70  e to a [CAST exp
13840 72 65 73 73 69 6f 6e 5d 20 6f 72 20 66 6f 72 20  ression] or for 
13850 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  a [column affini
13860 74 79 5d 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69  ty].transformati
13870 6f 6e 20 6f 72 20 70 72 69 6f 72 20 74 6f 20 70  on or prior to p
13880 65 72 66 6f 72 6d 69 6e 67 20 61 20 6e 75 6d 65  erforming a nume
13890 72 69 63 20 6f 70 65 72 61 74 69 6f 6e 20 6f 72  ric operation or
138a0 20 66 6f 72 0a 61 6e 79 20 6f 74 68 65 72 20 72   for.any other r
138b0 75 6e 2d 74 69 6d 65 20 63 6f 6e 76 65 72 73 69  un-time conversi
138c0 6f 6e 73 2e 29 5e 20 20 5e 28 57 68 65 6e 20 63  ons.)^  ^(When c
138d0 6f 65 72 63 69 6e 67 20 61 0a 73 74 72 69 6e 67  oercing a.string
138e0 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66 6f   value in the fo
138f0 72 6d 61 74 20 6f 66 20 61 20 68 65 78 61 64 65  rmat of a hexade
13900 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 69 6e  cimal integer in
13910 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 76 61  to an integer.va
13920 6c 75 65 2c 20 74 68 65 20 63 6f 6e 76 65 72 73  lue, the convers
13930 69 6f 6e 20 70 72 6f 63 65 73 73 20 73 74 6f 70  ion process stop
13940 73 20 77 68 65 6e 20 74 68 65 20 27 78 27 20 63  s when the 'x' c
13950 68 61 72 61 63 74 65 72 20 69 73 20 73 65 65 6e  haracter is seen
13960 0a 73 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e  .so the resultin
13970 67 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  g integer value 
13980 69 73 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29  is always zero.)
13990 5e 0a 5e 28 53 51 4c 69 74 65 20 6f 6e 6c 79 20  ^.^(SQLite only 
139a0 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65 20  understands the 
139b0 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
139c0 67 65 72 20 6e 6f 74 61 74 69 6f 6e 20 77 68 65  ger notation whe
139d0 6e 20 69 74 0a 61 70 70 65 61 72 73 20 69 6e 20  n it.appears in 
139e0 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
139f0 74 20 74 65 78 74 2c 20 6e 6f 74 20 77 68 65 6e  t text, not when
13a00 20 69 74 20 61 70 70 65 61 72 73 20 61 73 0a 70   it appears as.p
13a10 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  art of the conte
13a20 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  nt of the databa
13a30 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 41 20 73 74  se.)^..<p> ^A st
13a40 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73  ring constant is
13a50 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f   formed by enclo
13a60 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20  sing the.string 
13a70 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73  in single quotes
13a80 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65   (').  ^A single
13a90 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68   quote within th
13aa0 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20  e string can.be 
13ab0 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74 69  encoded by putti
13ac0 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75  ng two single qu
13ad0 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20  otes in a row - 
13ae0 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d  as in Pascal..C-
13af0 73 74 79 6c 65 20 65 73 63 61 70 65 73 20 75 73  style escapes us
13b00 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73  ing the backslas
13b10 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20  h character are 
13b20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62 65  not supported be
13b30 63 61 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e  cause.they are n
13b40 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  ot standard SQL.
13b50 0a 0a 3c 70 3e 20 5e 42 4c 4f 42 20 6c 69 74 65  ..<p> ^BLOB lite
13b60 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20  rals are string 
13b70 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e  literals contain
13b80 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20  ing hexadecimal 
13b90 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65  data and.precede
13ba0 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78  d by a single "x
13bb0 22 20 6f 72 20 22 58 22 20 63 68 61 72 61 63 74  " or "X" charact
13bc0 65 72 2e 20 20 5e 28 45 78 61 6d 70 6c 65 3a 20  er.  ^(Example: 
13bd0 58 27 35 33 35 31 34 43 36 39 37 34 36 35 27 29  X'53514C697465')
13be0 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61  ^..<p>.^A litera
13bf0 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f  l value can also
13c00 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e   be the token "N
13c10 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ULL"..</p>..<tcl
13c20 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72  >hd_fragment var
13c30 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65 72 20  param parameter 
13c40 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e  parameters {boun
13c50 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f  d parameter} {bo
13c60 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 7d 3c  und parameters}<
13c70 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65  /tcl>.<h3>Parame
13c80 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20  ters</h3>.<p>.A 
13c90 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20 22 70  "variable" or "p
13ca0 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a  arameter" token.
13cb0 73 70 65 63 69 66 69 65 73 20 61 20 70 6c 61 63  specifies a plac
13cc0 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65 20 65  eholder in the e
13cd0 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 61 20  xpression for a 
13ce0 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 66  .value that is f
13cf0 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e 74  illed in at runt
13d00 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 73  ime using the.[s
13d10 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
13d20 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e  () | sqlite3_bin
13d30 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20 43  d()] family of C
13d40 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 73 2e  /C++ interfaces.
13d50 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20  .Parameters can 
13d60 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66 6f 72  take several for
13d70 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ms:.</p>..<block
13d80 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c  quote>.<table>.<
13d90 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
13da0 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
13db0 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e  p"><b>?</b><i>NN
13dc0 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  N</i></td><td wi
13dd0 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
13de0 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e 20  td>^(A question 
13df0 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79  mark followed by
13e00 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e   a number <i>NNN
13e10 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f  </i> holds a spo
13e20 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68  t for the.NNN-th
13e30 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e   parameter.  NNN
13e40 20 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e   must be between
13e50 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 4d   1 and [SQLITE_M
13e60 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
13e70 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74  ER].)^.</td>.</t
13e80 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
13e90 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
13ea0 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c  ="top"><b>?</b><
13eb0 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
13ec0 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20  0"></td>.<td>^A 
13ed0 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68  question mark th
13ee0 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  at is not follow
13ef0 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 63  ed by a number c
13f00 72 65 61 74 65 73 20 61 20 70 61 72 61 6d 65 74  reates a paramet
13f10 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62 65 72  er.with a number
13f20 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68 61   one greater tha
13f30 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 61  n the largest pa
13f40 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61  rameter number a
13f50 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e  lready assigned.
13f60 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20  .^If this means 
13f70 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75  the parameter nu
13f80 6d 62 65 72 20 69 73 20 67 72 65 61 74 65 72 20  mber is greater 
13f90 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58  than.[SQLITE_MAX
13fa0 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
13fb0 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  ], it is an erro
13fc0 72 2e 0a 54 68 69 73 20 70 61 72 61 6d 65 74 65  r..This paramete
13fd0 72 20 66 6f 72 6d 61 74 20 69 73 20 70 72 6f 76  r format is prov
13fe0 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69  ided for compati
13ff0 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65  bility with othe
14000 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67 69 6e  r database.engin
14010 65 73 2e 20 20 42 75 74 20 62 65 63 61 75 73 65  es.  But because
14020 20 69 74 20 69 73 20 65 61 73 79 20 74 6f 20 6d   it is easy to m
14030 69 73 63 6f 75 6e 74 20 74 68 65 20 71 75 65 73  iscount the ques
14040 74 69 6f 6e 20 6d 61 72 6b 73 2c 20 74 68 65 0a  tion marks, the.
14050 75 73 65 20 6f 66 20 74 68 69 73 20 70 61 72 61  use of this para
14060 6d 65 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20  meter format is 
14070 64 69 73 63 6f 75 72 61 67 65 64 2e 20 20 50 72  discouraged.  Pr
14080 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e  ogrammers are en
14090 63 6f 75 72 61 67 65 64 0a 74 6f 20 75 73 65 20  couraged.to use 
140a0 6f 6e 65 20 6f 66 20 74 68 65 20 73 79 6d 62 6f  one of the symbo
140b0 6c 69 63 20 66 6f 72 6d 61 74 73 20 62 65 6c 6f  lic formats belo
140c0 77 20 6f 72 20 74 68 65 20 3f 4e 4e 4e 20 66 6f  w or the ?NNN fo
140d0 72 6d 61 74 20 61 62 6f 76 65 20 69 6e 73 74 65  rmat above inste
140e0 61 64 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ad..</td>.</tr>.
140f0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
14100 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
14110 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41  op"><b>:</b><i>A
14120 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  AAA</i></td><td 
14130 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
14140 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f  .<td>^A colon fo
14150 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65  llowed by an ide
14160 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c  ntifier name hol
14170 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20  ds a spot for a 
14180 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  .[sqlite3_bind_p
14190 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e 61  arameter_name|na
141a0 6d 65 64 20 70 61 72 61 6d 65 74 65 72 5d 20 77  med parameter] w
141b0 69 74 68 20 74 68 65 20 6e 61 6d 65 20 3a 41 41  ith the name :AA
141c0 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70 61  AA.  .^(Named pa
141d0 72 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73  rameters are als
141e0 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54 68 65 20  o numbered. The 
141f0 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20  number assigned 
14200 69 73 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74  is one greater t
14210 68 61 6e 0a 74 68 65 20 6c 61 72 67 65 73 74 20  han.the largest 
14220 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
14230 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65   already assigne
14240 64 2e 29 5e 20 5e 49 66 20 74 68 69 73 20 6d 65  d.)^ ^If this me
14250 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74 65  ans the paramete
14260 72 0a 77 6f 75 6c 64 20 62 65 20 61 73 73 69 67  r.would be assig
14270 6e 65 64 20 61 20 6e 75 6d 62 65 72 20 67 72 65  ned a number gre
14280 61 74 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54  ater than [SQLIT
14290 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
142a0 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a 61 6e  UMBER], it is.an
142b0 20 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69 64   error. To avoid
142c0 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20 69   confusion, it i
142d0 73 20 62 65 73 74 20 74 6f 20 61 76 6f 69 64 20  s best to avoid 
142e0 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64  mixing named and
142f0 20 6e 75 6d 62 65 72 65 64 0a 70 61 72 61 6d 65   numbered.parame
14300 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ters.</td>.</tr>
14310 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
14320 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
14330 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e  top"><b>@</b><i>
14340 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  AAAA</i></td><td
14350 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
14360 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20 73  >.<td>^An "at" s
14370 69 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  ign works exactl
14380 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20  y like a colon, 
14390 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
143a0 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70 61 72 61  name of.the para
143b0 6d 65 74 65 72 20 63 72 65 61 74 65 64 20 69 73  meter created is
143c0 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74   @AAAA.</td>.</t
143d0 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
143e0 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
143f0 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c  ="top"><b>$</b><
14400 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c  i>AAAA</i></td><
14410 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
14420 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61  td>.<td>^A dolla
14430 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20  r-sign followed 
14440 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  by an identifier
14450 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73   name also holds
14460 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61   a spot for a na
14470 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69  med.parameter wi
14480 74 68 20 74 68 65 20 6e 61 6d 65 20 24 41 41 41  th the name $AAA
14490 41 2e 20 20 5e 28 54 68 65 20 69 64 65 6e 74 69  A.  ^(The identi
144a0 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68 69  fier name in thi
144b0 73 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c 75  s case can inclu
144c0 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  de.one or more o
144d0 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20 22 3a  ccurrences of ":
144e0 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69 78 20  :" and a suffix 
144f0 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e  enclosed in "(..
14500 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61  .)" containing.a
14510 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e 29  ny text at all.)
14520 5e 20 20 54 68 69 73 20 73 79 6e 74 61 78 20 69  ^  This syntax i
14530 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20  s the form of a 
14540 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e  variable name in
14550 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77   the.[http://www
14560 2e 74 63 6c 2e 74 6b 2f 20 7c 20 54 63 6c 20 70  .tcl.tk/ | Tcl p
14570 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75  rogramming langu
14580 61 67 65 5d 2e 20 20 54 68 65 20 70 72 65 73 65  age].  The prese
14590 6e 63 65 0a 6f 66 20 74 68 69 73 20 73 79 6e 74  nce.of this synt
145a0 61 78 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  ax results from 
145b0 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51  the fact that SQ
145c0 4c 69 74 65 20 69 73 20 72 65 61 6c 6c 79 20 61  Lite is really a
145d0 20 0a 5b 54 63 6c 20 65 78 74 65 6e 73 69 6f 6e   .[Tcl extension
145e0 5d 20 74 68 61 74 20 68 61 73 20 65 73 63 61 70  ] that has escap
145f0 65 64 20 69 6e 74 6f 20 74 68 65 20 77 69 6c 64  ed into the wild
14600 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74  .</td>.</tr>.</t
14610 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  able>.</blockquo
14620 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72 61 6d 65 74  te>..<p>^Paramet
14630 65 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ers that are not
14640 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65 73   assigned values
14650 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f   using.[sqlite3_
14660 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71  bind_blob() | sq
14670 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 61 72  lite3_bind()] ar
14680 65 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55 4c  e treated.as NUL
14690 4c 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65 33  L.  The [sqlite3
146a0 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
146b0 69 6e 64 65 78 28 29 5d 20 69 6e 74 65 72 66 61  index()] interfa
146c0 63 65 20 63 61 6e 20 62 65 20 75 73 65 64 0a 74  ce can be used.t
146d0 6f 20 74 72 61 6e 73 6c 61 74 65 20 61 20 73 79  o translate a sy
146e0 6d 62 6f 6c 69 63 20 70 61 72 61 6d 65 74 65 72  mbolic parameter
146f0 20 6e 61 6d 65 20 69 6e 74 6f 20 69 74 73 20 65   name into its e
14700 71 75 69 76 61 6c 65 6e 74 20 6e 75 6d 65 72 69  quivalent numeri
14710 63 20 69 6e 64 65 78 2e 3c 2f 70 3e 0a 0a 3c 70  c index.</p>..<p
14720 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  >^The maximum pa
14730 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69  rameter number i
14740 73 20 73 65 74 20 61 74 20 63 6f 6d 70 69 6c 65  s set at compile
14750 2d 74 69 6d 65 20 62 79 0a 74 68 65 20 5b 53 51  -time by.the [SQ
14760 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
14770 45 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72 6f 2e  E_NUMBER] macro.
14780 20 20 5e 28 41 6e 20 69 6e 64 69 76 69 64 75 61    ^(An individua
14790 6c 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  l [database conn
147a0 65 63 74 69 6f 6e 5d 0a 44 20 63 61 6e 20 72 65  ection].D can re
147b0 64 75 63 65 20 69 74 73 20 6d 61 78 69 6d 75 6d  duce its maximum
147c0 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
147d0 72 20 62 65 6c 6f 77 20 74 68 65 20 63 6f 6d 70  r below the comp
147e0 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d 75 6d  ile-time maximum
147f0 0a 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69  .using the [sqli
14800 74 65 33 5f 6c 69 6d 69 74 5d 28 44 2c 20 5b 53  te3_limit](D, [S
14810 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49  QLITE_LIMIT_VARI
14820 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 2e 2e 2e  ABLE_NUMBER],...
14830 29 20 69 6e 74 65 72 66 61 63 65 2e 29 5e 0a 3c  ) interface.)^.<
14840 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
14850 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b 45 20  gment like LIKE 
14860 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c 68 33  ESCAPE</tcl>.<h3
14870 3e 54 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c  >The LIKE and GL
14880 4f 42 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33  OB operators</h3
14890 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f  >.<p>^The LIKE o
148a0 70 65 72 61 74 6f 72 20 64 6f 65 73 20 61 20 70  perator does a p
148b0 61 74 74 65 72 6e 20 6d 61 74 63 68 69 6e 67 20  attern matching 
148c0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54 68 65  comparison. ^The
148d0 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68 65 20   operand.to the 
148e0 72 69 67 68 74 20 6f 66 20 74 68 65 20 4c 49 4b  right of the LIK
148f0 45 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 74 61  E operator conta
14900 69 6e 73 20 74 68 65 20 70 61 74 74 65 72 6e 20  ins the pattern 
14910 61 6e 64 20 74 68 65 20 6c 65 66 74 20 68 61 6e  and the left han
14920 64 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61 69  d.operand contai
14930 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 74 6f  ns the string to
14940 20 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20 74   match against t
14950 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74 63  he pattern...<tc
14960 6c 3e 68 64 5f 70 75 74 73 20 22 5e 41 20 70 65  l>hd_puts "^A pe
14970 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c 22  rcent symbol (\"
14980 25 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45  %\") in the LIKE
14990 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73   pattern matches
149a0 20 61 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f 66   any.sequence of
149b0 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68   zero or more ch
149c0 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20  aracters in the 
149d0 73 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75 6e 64  string.  ^An und
149e0 65 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22 29 20  erscore.(\"_\") 
149f0 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
14a00 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 20  ern matches any 
14a10 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
14a20 20 69 6e 20 74 68 65 0a 73 74 72 69 6e 67 2e 20   in the.string. 
14a30 20 5e 28 41 6e 79 20 6f 74 68 65 72 20 63 68 61   ^(Any other cha
14a40 72 61 63 74 65 72 20 6d 61 74 63 68 65 73 20 69  racter matches i
14a50 74 73 65 6c 66 20 6f 72 20 69 74 73 20 6c 6f 77  tself or its low
14a60 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a 65 71  er/upper case.eq
14a70 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e 20 63  uivalent (i.e. c
14a80 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20  ase-insensitive 
14a90 6d 61 74 63 68 69 6e 67 29 2e 29 5e 20 20 28 41  matching).)^  (A
14aa0 20 62 75 67 3a 20 5e 53 51 4c 69 74 65 20 6f 6e   bug: ^SQLite on
14ab0 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75  ly.understands u
14ac0 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20  pper/lower case 
14ad0 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
14ae0 74 65 72 73 20 62 79 20 64 65 66 61 75 6c 74 2e  ters by default.
14af0 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f 70 65 72    ^The.LIKE oper
14b00 61 74 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e  ator is case sen
14b10 73 69 74 69 76 65 20 62 79 20 64 65 66 61 75 6c  sitive by defaul
14b20 74 20 66 6f 72 20 75 6e 69 63 6f 64 65 20 63 68  t for unicode ch
14b30 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 72  aracters that ar
14b40 65 0a 62 65 79 6f 6e 64 20 74 68 65 20 41 53 43  e.beyond the ASC
14b50 49 49 20 72 61 6e 67 65 2e 20 20 46 6f 72 20 65  II range.  For e
14b60 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20 65 78 70  xample,.^the exp
14b70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26 6e  ression <b>'a'&n
14b80 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41  bsp;LIKE&nbsp;'A
14b90 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20 62 75  '</b>.is TRUE bu
14ba0 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e  t <b>'&aelig;'&n
14bb0 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26  bsp;LIKE&nbsp;'&
14bc0 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46  AElig;'</b> is F
14bd0 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74 63 6c 3e  ALSE.)<p>"</tcl>
14be0 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
14bf0 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
14c00 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
14c10 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  then the express
14c20 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ion.following th
14c30 65 20 45 53 43 41 50 45 20 6b 65 79 77 6f 72 64  e ESCAPE keyword
14c40 20 6d 75 73 74 20 65 76 61 6c 75 61 74 65 20 74   must evaluate t
14c50 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 69  o a string consi
14c60 73 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67 6c  sting of.a singl
14c70 65 20 63 68 61 72 61 63 74 65 72 2e 20 5e 54 68  e character. ^Th
14c80 69 73 20 63 68 61 72 61 63 74 65 72 20 6d 61 79  is character may
14c90 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20   be used in the 
14ca0 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a 74 6f 20  LIKE pattern.to 
14cb0 69 6e 63 6c 75 64 65 20 6c 69 74 65 72 61 6c 20  include literal 
14cc0 70 65 72 63 65 6e 74 20 6f 72 20 75 6e 64 65 72  percent or under
14cd0 73 63 6f 72 65 20 63 68 61 72 61 63 74 65 72 73  score characters
14ce0 2e 20 5e 54 68 65 20 65 73 63 61 70 65 0a 63 68  . ^The escape.ch
14cf0 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77 65 64  aracter followed
14d00 20 62 79 20 61 20 70 65 72 63 65 6e 74 20 73 79   by a percent sy
14d10 6d 62 6f 6c 20 28 25 29 2c 20 75 6e 64 65 72 73  mbol (%), unders
14d20 63 6f 72 65 20 28 5f 29 2c 20 6f 72 20 61 20 73  core (_), or a s
14d30 65 63 6f 6e 64 0a 69 6e 73 74 61 6e 63 65 20 6f  econd.instance o
14d40 66 20 74 68 65 20 65 73 63 61 70 65 20 63 68 61  f the escape cha
14d50 72 61 63 74 65 72 20 69 74 73 65 6c 66 20 6d 61  racter itself ma
14d60 74 63 68 65 73 20 61 0a 6c 69 74 65 72 61 6c 20  tches a.literal 
14d70 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20  percent symbol, 
14d80 75 6e 64 65 72 73 63 6f 72 65 2c 20 6f 72 20 61  underscore, or a
14d90 20 73 69 6e 67 6c 65 20 65 73 63 61 70 65 20 63   single escape c
14da0 68 61 72 61 63 74 65 72 2c 0a 72 65 73 70 65 63  haracter,.respec
14db0 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e 54 68 65  tively...<p>^The
14dc0 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70 65 72   infix LIKE oper
14dd0 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e  ator is implemen
14de0 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ted by calling t
14df0 68 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  he.application-d
14e00 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74  efined SQL funct
14e10 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c  ions [like(<i>Y<
14e20 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f  /i>,<i>X</i>)] o
14e30 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e  r.[like(<i>Y</i>
14e40 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f  ,<i>X</i>,<i>Z</
14e50 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  i>)]</a>.</p>..<
14e60 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72  p>^The LIKE oper
14e70 61 74 6f 72 20 63 61 6e 20 62 65 20 6d 61 64 65  ator can be made
14e80 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20   case sensitive 
14e90 75 73 69 6e 67 20 74 68 65 0a 5b 63 61 73 65 5f  using the.[case_
14ea0 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65 20 70  sensitive_like p
14eb0 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63  ragma].</p>..<tc
14ec0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 67 6c  l>hd_fragment gl
14ed0 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70  ob GLOB</tcl>.<p
14ee0 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70 65 72 61  >^The GLOB opera
14ef0 74 6f 72 20 69 73 20 73 69 6d 69 6c 61 72 20 74  tor is similar t
14f00 6f 20 4c 49 4b 45 20 62 75 74 20 75 73 65 73 20  o LIKE but uses 
14f10 74 68 65 20 55 6e 69 78 0a 66 69 6c 65 20 67 6c  the Unix.file gl
14f20 6f 62 62 69 6e 67 20 73 79 6e 74 61 78 20 66 6f  obbing syntax fo
14f30 72 20 69 74 73 20 77 69 6c 64 63 61 72 64 73 2e  r its wildcards.
14f40 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42 20 69 73    ^Also, GLOB is
14f50 20 63 61 73 65 0a 73 65 6e 73 69 74 69 76 65 2c   case.sensitive,
14f60 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20 20 5e   unlike LIKE.  ^
14f70 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20 4c 49  Both GLOB and LI
14f80 4b 45 20 6d 61 79 20 62 65 20 70 72 65 63 65 64  KE may be preced
14f90 65 64 20 62 79 0a 74 68 65 20 4e 4f 54 20 6b 65  ed by.the NOT ke
14fa0 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74 20  yword to invert 
14fb0 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68 65  the sense of the
14fc0 20 74 65 73 74 2e 20 20 5e 54 68 65 20 69 6e 66   test.  ^The inf
14fd0 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74 6f  ix GLOB .operato
14fe0 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  r is implemented
14ff0 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20   by calling the 
15000 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62 28 3c  function.[glob(<
15010 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
15020 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20 6d 6f  )] and can be mo
15030 64 69 66 69 65 64 20 62 79 20 6f 76 65 72 72 69  dified by overri
15040 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63 74 69  ding.that functi
15050 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  on.</p>..<tcl>hd
15060 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65 78 70  _fragment regexp
15070 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a 3c 70   REGEXP</tcl>.<p
15080 3e 5e 54 68 65 20 52 45 47 45 58 50 20 6f 70 65  >^The REGEXP ope
15090 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63 69  rator is a speci
150a0 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68  al syntax for th
150b0 65 20 72 65 67 65 78 70 28 29 0a 75 73 65 72 20  e regexp().user 
150c0 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e 6f 20 72  function.  ^No r
150d0 65 67 65 78 70 28 29 20 75 73 65 72 20 66 75 6e  egexp() user fun
150e0 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ction is defined
150f0 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64 20   by default.and 
15100 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52 45  so use of the RE
15110 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77 69  GEXP operator wi
15120 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73 75  ll normally resu
15130 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20 6d  lt in an.error m
15140 65 73 73 61 67 65 2e 20 20 5e 49 66 20 61 6e 20  essage.  ^If an 
15150 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66  [application-def
15160 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f  ined SQL functio
15170 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67 65 78 70  n] named "regexp
15180 22 0a 69 73 20 61 64 64 65 64 20 61 74 20 72 75  ".is added at ru
15190 6e 2d 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65  n-time, then the
151a0 20 22 3c 69 3e 58 3c 2f 69 3e 20 52 45 47 45 58   "<i>X</i> REGEX
151b0 50 20 3c 69 3e 59 3c 2f 69 3e 22 20 6f 70 65 72  P <i>Y</i>" oper
151c0 61 74 6f 72 20 77 69 6c 6c 0a 62 65 20 69 6d 70  ator will.be imp
151d0 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 61  lemented as a ca
151e0 6c 6c 20 74 6f 20 22 72 65 67 65 78 70 28 3c 69  ll to "regexp(<i
151f0 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29  >Y</i>,<i>X</i>)
15200 22 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ".</p>..<tcl>hd_
15210 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d  fragment match M
15220 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  ATCH</tcl>.<p>^T
15230 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f  he MATCH operato
15240 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73  r is a special s
15250 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d 61  yntax for the ma
15260 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69 6f  tch().applicatio
15270 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
15280 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c  on.  ^The defaul
15290 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69  t match() functi
152a0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
152b0 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63 65  n.raises an exce
152c0 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74  ption and is not
152d0 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20 66   really useful f
152e0 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42 75  or anything..^Bu
152f0 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e  t extensions can
15300 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d 61   override the ma
15310 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  tch() function w
15320 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c  ith more.helpful
15330 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63   logic.</p>..<tc
15340 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 65  l>hd_fragment be
15350 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f 74  tween BETWEEN</t
15360 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54 57  cl>.<h3>The BETW
15370 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33  EEN operator</h3
15380 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57 45  >.<p>^(The BETWE
15390 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 6c  EN operator is l
153a0 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c  ogically equival
153b0 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f 66  ent to a pair of
153c0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22 3c   comparisons.."<
153d0 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57 45  i>x</i> <b>BETWE
153e0 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20  EN</b> <i>y</i> 
153f0 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c  <b>AND</b> <i>z<
15400 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61 6c  /i>" is .equival
15410 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69  ent to ."<i>x</i
15420 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e  ><b>&gt;=</b><i>
15430 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e  y</i> <b>AND</b>
15440 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b   <i>x</i><b>&lt;
15450 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65  =</b><i>z</i>" e
15460 78 63 65 70 74 0a 74 68 61 74 20 77 69 74 68 20  xcept.that with 
15470 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69 3e  BETWEEN, the <i>
15480 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e  x</i> expression
15490 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61 74   is only evaluat
154a0 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65 20  ed once.)^.^The 
154b0 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74 68  precedence of th
154c0 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
154d0 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  or is the same a
154e0 73 20 74 68 65 20 70 72 65 63 65 64 65 6e 63 65  s the precedence
154f0 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c 62  .as operators <b
15500 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 21  >==</b> and <b>!
15510 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b  =</b> and <b>LIK
15520 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70 73  E</b> and groups
15530 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 0a   left to right..
15540 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
15550 74 20 63 61 73 65 20 7b 43 41 53 45 20 65 78 70  t case {CASE exp
15560 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c  ression}</tcl>.<
15570 68 33 3e 54 68 65 20 43 41 53 45 20 65 78 70 72  h3>The CASE expr
15580 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41  ession</h3>.<p>A
15590 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
155a0 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20 73   serves a role s
155b0 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48 45  imilar to IF-THE
155c0 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72 0a  N-ELSE in other.
155d0 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67  programming lang
155e0 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68 65  uages.  ..<p>The
155f0 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65 73   optional expres
15600 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72 73  sion that occurs
15610 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20   in between the 
15620 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e 64  CASE keyword and
15630 20 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e 20   the.first WHEN 
15640 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c 65  keyword is calle
15650 64 20 74 68 65 20 22 62 61 73 65 22 20 65 78 70  d the "base" exp
15660 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65 20  ression. ^There 
15670 61 72 65 20 74 77 6f 20 62 61 73 69 63 20 66 6f  are two basic fo
15680 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45 20  rms.of the CASE 
15690 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f 73  expression: thos
156a0 65 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78  e with a base ex
156b0 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 6f  pression and tho
156c0 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e  se without...<p>
156d0 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 6f  ^In a CASE witho
156e0 75 74 20 61 20 62 61 73 65 20 65 78 70 72 65 73  ut a base expres
156f0 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e 20  sion, each WHEN 
15700 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
15710 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65 20  aluated.and the 
15720 72 65 73 75 6c 74 20 74 72 65 61 74 65 64 20 61  result treated a
15730 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74 61  s a boolean, sta
15740 72 74 69 6e 67 20 77 69 74 68 20 74 68 65 20 6c  rting with the l
15750 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e 74  eftmost and cont
15760 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72 69  inuing.to the ri
15770 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74  ght. ^The result
15780 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
15790 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 65  ression is the e
157a0 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65  valuation of the
157b0 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   THEN.expression
157c0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
157d0 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57  s to the first W
157e0 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74  HEN expression t
157f0 68 61 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f  hat evaluates to
15800 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e  .true. ^Or, if n
15810 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
15820 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
15830 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74 68  uate to true, th
15840 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61 6c  e result of.eval
15850 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20  uating the ELSE 
15860 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 61  expression, if a
15870 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73  ny. ^If there is
15880 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73 73   no ELSE express
15890 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20  ion and.none of 
158a0 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73  the WHEN express
158b0 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20 74  ions are true, t
158c0 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c 20  hen the overall 
158d0 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
158e0 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73 75  .<p>^A NULL resu
158f0 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  lt is considered
15900 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76 61   untrue when eva
15910 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65 72  luating WHEN ter
15920 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41  ms...<p>^In a CA
15930 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20 65  SE with a base e
15940 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 62  xpression, the b
15950 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ase expression i
15960 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73 74  s evaluated just
15970 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72 65  .once and the re
15980 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65 64  sult is compared
15990 20 61 67 61 69 6e 73 74 20 74 68 65 20 65 76 61   against the eva
159a0 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68 20  luation of each 
159b0 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f 6e  WHEN .expression
159c0 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
159d0 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74  ght. ^The result
159e0 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
159f0 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 0a  ression is the .
15a00 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68  evaluation of th
15a10 65 20 54 48 45 4e 20 65 78 70 72 65 73 73 69 6f  e THEN expressio
15a20 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  n that correspon
15a30 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ds to the first 
15a40 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20  WHEN.expression 
15a50 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 63 6f  for which the co
15a60 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
15a70 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f  . ^Or, if none o
15a80 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72 65  f the WHEN.expre
15a90 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20  ssions evaluate 
15aa0 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61 6c  to a value equal
15ab0 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70   to the base exp
15ac0 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65 73  ression, the res
15ad0 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult.of evaluatin
15ae0 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65  g the ELSE expre
15af0 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e  ssion, if any. ^
15b00 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45  If there is no E
15b10 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61  LSE expression a
15b20 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57  nd.none of the W
15b30 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  HEN expressions 
15b40 70 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c 74  produce a result
15b50 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61   equal to the ba
15b60 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a 74  se expression,.t
15b70 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c  he overall resul
15b80 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e  t is NULL...<p>^
15b90 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 61  When comparing a
15ba0 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
15bb0 20 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e 20   against a WHEN 
15bc0 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
15bd0 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73  same.collating s
15be0 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69 74  equence, affinit
15bf0 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64  y, and NULL-hand
15c00 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c 79  ling rules apply
15c10 20 61 73 20 69 66 20 74 68 65 0a 62 61 73 65 20   as if the.base 
15c20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 57  expression and W
15c30 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  HEN expression a
15c40 72 65 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  re respectively 
15c50 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72 69  the left- and.ri
15c60 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64  ght-hand operand
15c70 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62 3e  s of an <big><b>
15c80 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65 72  =</b></big> oper
15c90 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74 68  ator.</p> ^If th
15ca0 65 20 62 61 73 65 20 0a 65 78 70 72 65 73 73 69  e base .expressi
15cb0 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  on is NULL then 
15cc0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
15cd0 65 20 43 41 53 45 20 69 73 20 61 6c 77 61 79 73  e CASE is always
15ce0 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66 20   the result .of 
15cf0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45  evaluating the E
15d00 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  LSE expression i
15d10 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72 20  f it exists, or 
15d20 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73 20  NULL if it does 
15d30 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66  not...<p>^Both f
15d40 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53 45  orms of the CASE
15d50 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 20   expression use 
15d60 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d 63  lazy, or short-c
15d70 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61 74  ircuit, .evaluat
15d80 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f  ion...<p>^(The o
15d90 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62  nly difference b
15da0 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c 6f  etween the follo
15db0 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65 78  wing two CASE ex
15dc0 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 61  pressions is tha
15dd0 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20  t .the <i>x</i> 
15de0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
15df0 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79 20  aluated exactly 
15e00 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72 73  once in the firs
15e10 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a 6d  t example but .m
15e20 69 67 68 74 20 62 65 20 65 76 61 6c 75 61 74 65  ight be evaluate
15e30 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
15e40 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a 0a   in the second:.
15e50 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43  .<ul><pre>.<li>C
15e60 41 53 45 20 78 20 57 48 45 4e 20 77 31 20 54 48  ASE x WHEN w1 TH
15e70 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54 48  EN r1 WHEN w2 TH
15e80 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e  EN r2 ELSE r3 EN
15e90 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e 20  D.<li>CASE WHEN 
15ea0 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48 45  x=w1 THEN r1 WHE
15eb0 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20 45  N x=w2 THEN r2 E
15ec0 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72 65  LSE r3 END.</pre
15ed0 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e  ></ul>)^...<tcl>
15ee0 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f  hd_fragment in_o
15ef0 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d 20  p {IN operator} 
15f00 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72  {NOT IN operator
15f10 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
15f20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70  IN and NOT IN op
15f30 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e  erators</h3>.<p>
15f40 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20  ^The IN and NOT 
15f50 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61 6b  IN operators tak
15f60 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c 61  e a single scala
15f70 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65  r operand on the
15f80 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63 74  .left and a vect
15f90 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68  or operand on th
15fa0 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20 62  e right.formed b
15fb0 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c 69  y an explicit li
15fc0 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f  st of zero or mo
15fd0 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62 79  re scalars or by
15fe0 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71 75   a .single subqu
15ff0 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72  ery..^When the r
16000 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20  ight operand of 
16010 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  an IN or NOT IN 
16020 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 75  operator is a su
16030 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62 71  bquery, the.subq
16040 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20 61  uery must have a
16050 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20 63   single result c
16060 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68 65  olumn..^When the
16070 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 69   right operand i
16080 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c 20  s an empty set, 
16090 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  the result of IN
160a0 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74 68   is false and th
160b0 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54 20  e.result of NOT 
160c0 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67 61  IN is true, rega
160d0 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c 65  rdless of the le
160e0 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20 65  ft operand and e
160f0 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74 20  ven if the.left 
16100 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
16110 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .^(The result of
16120 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
16130 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65 74   operator is det
16140 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 66  ermined by the f
16150 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78 3a  ollowing.matrix:
16160 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c  ..<center>.<tabl
16170 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  e border=1>.<tr>
16180 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e  .<th>Left operan
16190 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74  d <br>is NULL.<t
161a0 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20  h>Right operand 
161b0 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55 4c  <br>contains NUL
161c0 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72  L.<th>Right oper
161d0 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65 6d  and <br>is an em
161e0 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66 74  pty set.<th>Left
161f0 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20 3c   operand found <
16200 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74 20  br>within right 
16210 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73 75  operand.<th>Resu
16220 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70 65  lt of <br>IN ope
16230 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c 74  rator.<th>Result
16240 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f   of <br>NOT IN o
16250 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64  perator.<tr>.<td
16260 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16270 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
16280 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
16290 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
162a0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
162b0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
162c0 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
162d0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
162e0 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61  >true.<tr>.<td a
162f0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f  lign="center">do
16300 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74  es not matter.<t
16310 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16320 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
16330 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61  enter">yes.<td a
16340 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
16350 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16360 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c  er">false.<td al
16370 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75  ign="center">tru
16380 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  e.<tr>.<td align
16390 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
163a0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
163b0 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
163c0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
163d0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
163e0 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64  "center">yes.<td
163f0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16400 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  true.<td align="
16410 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
16420 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
16430 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
16440 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a  gn="center">yes.
16450 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16460 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16470 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
16480 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
16490 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ULL.<td align="c
164a0 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e  enter">NULL.<tr>
164b0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
164c0 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67  er">yes.<td alig
164d0 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20  n="center">does 
164e0 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61  not matter.<td a
164f0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
16500 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16510 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
16520 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
16530 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20  enter">NULL.<td 
16540 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
16550 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  ULL.</table>.</c
16560 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f  enter>)^..<p>^No
16570 74 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 61  te that SQLite a
16580 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e 74  llows the parent
16590 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20  hesized list of 
165a0 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f 6e  scalar values on
165b0 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20  .the right-hand 
165c0 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72  side of an IN or
165d0 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
165e0 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79 20   to be an empty 
165f0 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f 74  list but.most ot
16600 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
16610 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
16620 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32 20  s and the SQL92 
16630 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65  standard require
16640 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f 6e  .the list to con
16650 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f 6e  tain at least on
16660 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  e element.</p>..
16670 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
16680 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20 6f   in_op {EXISTS o
16690 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45 58  perator} {NOT EX
166a0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c 2f  ISTS operator}</
166b0 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58 49  tcl>.<h3>The EXI
166c0 53 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33  STS operator</h3
166d0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53 54  >..<p>^The EXIST
166e0 53 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61 79  S operator alway
166f0 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6f  s evaluates to o
16700 6e 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ne of the intege
16710 72 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64 20  r values 0 .and 
16720 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67  1. ^If executing
16730 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
16740 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64 20  ement specified 
16750 61 73 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  as the right-han
16760 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74 68  d .operand of th
16770 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
16780 72 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6f  r would return o
16790 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 2c  ne or more rows,
167a0 20 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54 53   then the.EXISTS
167b0 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
167c0 74 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65 78  tes to 1. ^If ex
167d0 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45  ecuting the SELE
167e0 43 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 0a  CT would return.
167f0 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c 20  no rows at all, 
16800 74 68 65 6e 20 74 68 65 20 45 58 49 53 54 53 20  then the EXISTS 
16810 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
16820 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54  es to 0. ..<p>^T
16830 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
16840 75 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f 77  umns in each row
16850 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
16860 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
16870 74 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20 74  t.(if any) and t
16880 68 65 20 73 70 65 63 69 66 69 63 20 76 61 6c 75  he specific valu
16890 65 73 20 72 65 74 75 72 6e 65 64 20 68 61 76 65  es returned have
168a0 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68   no effect on th
168b0 65 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68 65  e results.of the
168c0 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
168d0 2e 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61 72  . ^In particular
168e0 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69 6e  , rows containin
168f0 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  g NULL values ar
16900 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61 6e  e.not handled an
16910 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66 72  y differently fr
16920 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20  om rows without 
16930 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c 68  NULL values...<h
16940 33 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65 72  3>Scalar Subquer
16950 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20  ies</h3>..<p>^A 
16960 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
16970 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70  nt enclosed in p
16980 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 61  arentheses may a
16990 70 70 65 61 72 20 61 73 20 61 20 73 63 61 6c 61  ppear as a scala
169a0 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20 5b  r.quantity. ^A [
169b0 53 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73 20  SELECT] used as 
169c0 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74  a scalar quantit
169d0 79 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61 20  y must return a 
169e0 72 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68 20  result set.with 
169f0 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
16a00 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
16a10 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
16a20 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
16a30 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 69  he.only column i
16a40 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 20  n the first row 
16a50 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
16a60 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16a70 2e 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54  . ^If the SELECT
16a80 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74 68   .yields more th
16a90 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72 6f  an one result ro
16aa0 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74 65  w, all rows afte
16ab0 72 20 74 68 65 20 66 69 72 73 74 20 61 72 65 20  r the first are 
16ac0 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68 65  ignored. ^If.the
16ad0 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20 6e   SELECT yields n
16ae0 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65  o rows, then the
16af0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65 78   value of the ex
16b00 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c  pression is NULL
16b10 2e 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f 66  ..^(The LIMIT of
16b20 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65   a scalar subque
16b30 72 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e 0a  ry is always 1..
16b40 41 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54 20  Any other LIMIT 
16b50 76 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20 74  value given in t
16b60 68 65 20 53 51 4c 20 74 65 78 74 20 69 73 20 69  he SQL text is i
16b70 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41  gnored.)^..<p>^A
16b80 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45 4c  ll types of [SEL
16b90 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20  ECT] statement, 
16ba0 69 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65 67  including aggreg
16bb0 61 74 65 20 61 6e 64 20 5b 63 6f 6d 70 6f 75 6e  ate and [compoun
16bc0 64 20 53 45 4c 45 43 54 5d 0a 71 75 65 72 69 65  d SELECT].querie
16bd0 73 20 28 71 75 65 72 69 65 73 20 77 69 74 68 20  s (queries with 
16be0 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e  keywords like UN
16bf0 49 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20 61  ION or EXCEPT) a
16c00 72 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63  re allowed as sc
16c10 61 6c 61 72 0a 73 75 62 71 75 65 72 69 65 73 2e  alar.subqueries.
16c20 0a 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75  ..<h3>Table Colu
16c30 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c  mn Names</h3>..<
16c40 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  p>^A column name
16c50 20 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74   can be any of t
16c60 68 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64  he names defined
16c70 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20   in the [CREATE 
16c80 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74  TABLE].statement
16c90 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   or one of the f
16ca0 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c  ollowing special
16cb0 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c   identifiers: "<
16cc0 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c  b>ROWID</b>",."<
16cd0 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22  b>OID</b>", or "
16ce0 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e  <b>_ROWID_</b>".
16cf0 0a 5e 54 68 65 20 74 68 72 65 65 20 73 70 65 63  .^The three spec
16d00 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20  ial identifiers 
16d10 64 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69  describe the.uni
16d20 71 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20  que integer key 
16d30 28 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73  (the [rowid]) as
16d40 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 76  sociated with ev
16d50 65 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72  ery .row of ever
16d60 79 20 74 61 62 6c 65 20 61 6e 64 20 73 6f 20 61  y table and so a
16d70 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  re not available
16d80 20 6f 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f 57   on [WITHOUT ROW
16d90 49 44 5d 20 74 61 62 6c 65 73 2e 0a 5e 54 68 65  ID] tables..^The
16da0 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66   special identif
16db0 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72 20  iers only refer 
16dc0 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69  to the row key i
16dd0 66 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41  f the [CREATE TA
16de0 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 64  BLE].statement d
16df0 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 61  oes not define a
16e00 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69 74   real column wit
16e10 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e  h the same name.
16e20 0a 5e 54 68 65 20 72 6f 77 69 64 20 63 61 6e 20  .^The rowid can 
16e30 62 65 20 75 73 65 64 20 61 6e 79 77 68 65 72 65  be used anywhere
16e40 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75 6d   a regular.colum
16e50 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2e 3c 2f  n can be used.</
16e60 70 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43  p>..<p>^A [SELEC
16e70 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  T] statement use
16e80 64 20 61 73 20 65 69 74 68 65 72 20 61 20 73 63  d as either a sc
16e90 61 6c 61 72 20 73 75 62 71 75 65 72 79 20 6f 72  alar subquery or
16ea0 20 61 73 20 74 68 65 20 0a 72 69 67 68 74 2d 68   as the .right-h
16eb0 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  and operand of a
16ec0 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e 20 6f 72 20  n IN, NOT IN or 
16ed0 45 58 49 53 54 53 20 65 78 70 72 65 73 73 69 6f  EXISTS expressio
16ee0 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 0a 72  n may contain .r
16ef0 65 66 65 72 65 6e 63 65 73 20 74 6f 20 63 6f 6c  eferences to col
16f00 75 6d 6e 73 20 69 6e 20 74 68 65 20 6f 75 74 65  umns in the oute
16f10 72 20 71 75 65 72 79 2e 20 53 75 63 68 20 61 20  r query. Such a 
16f20 73 75 62 71 75 65 72 79 20 69 73 20 6b 6e 6f 77  subquery is know
16f30 6e 20 61 73 0a 61 20 63 6f 72 72 65 6c 61 74 65  n as.a correlate
16f40 64 20 73 75 62 71 75 65 72 79 2e 20 5e 41 20 63  d subquery. ^A c
16f50 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
16f60 72 79 20 69 73 20 72 65 65 76 61 6c 75 61 74 65  ry is reevaluate
16f70 64 20 65 61 63 68 20 74 69 6d 65 0a 69 74 73 20  d each time.its 
16f80 72 65 73 75 6c 74 20 69 73 20 72 65 71 75 69 72  result is requir
16f90 65 64 2e 20 5e 41 6e 20 75 6e 63 6f 72 72 65 6c  ed. ^An uncorrel
16fa0 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69 73  ated subquery is
16fb0 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 6c 79 20   evaluated only 
16fc0 6f 6e 63 65 0a 61 6e 64 20 74 68 65 20 72 65 73  once.and the res
16fd0 75 6c 74 20 72 65 75 73 65 64 20 61 73 20 6e 65  ult reused as ne
16fe0 63 65 73 73 61 72 79 2e 0a 0a 3c 74 63 6c 3e 68  cessary...<tcl>h
16ff0 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 74 65  d_fragment caste
17000 78 70 72 20 7b 43 41 53 54 20 65 78 70 72 65 73  xpr {CAST expres
17010 73 69 6f 6e 7d 20 7b 43 41 53 54 7d 20 7b 63 61  sion} {CAST} {ca
17020 73 74 7d 20 7b 43 41 53 54 20 6f 70 65 72 61 74  st} {CAST operat
17030 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41  or}</tcl>.<h3>CA
17040 53 54 20 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f  ST expressions</
17050 68 33 3e 0a 0a 3c 70 3e 41 20 43 41 53 54 20 65  h3>..<p>A CAST e
17060 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
17070 20 66 6f 72 6d 20 22 43 41 53 54 28 26 6c 74 3b   form "CAST(&lt;
17080 65 78 70 72 26 67 74 3b 20 41 53 20 26 6c 74 3b  expr&gt; AS &lt;
17090 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 29 22 0a  type-name&gt;)".
170a0 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 76 65  is used to conve
170b0 72 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  rt the value of 
170c0 26 6c 74 3b 65 78 70 72 26 67 74 3b 20 74 6f 20  &lt;expr&gt; to 
170d0 0a 61 20 64 69 66 66 65 72 65 6e 74 20 5b 73 74  .a different [st
170e0 6f 72 61 67 65 20 63 6c 61 73 73 5d 20 73 70 65  orage class] spe
170f0 63 69 66 69 65 64 20 62 79 20 26 6c 74 3b 74 79  cified by &lt;ty
17100 70 65 2d 6e 61 6d 65 26 67 74 3b 2e 0a 5e 41 20  pe-name&gt;..^A 
17110 43 41 53 54 20 63 6f 6e 76 65 72 73 69 6f 6e 20  CAST conversion 
17120 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  is similar to th
17130 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 68 61  e conversion tha
17140 74 20 74 61 6b 65 73 0a 70 6c 61 63 65 20 77 68  t takes.place wh
17150 65 6e 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66  en a [column aff
17160 69 6e 69 74 79 5d 20 69 73 20 61 70 70 6c 69 65  inity] is applie
17170 64 20 74 6f 20 61 20 76 61 6c 75 65 20 65 78 63  d to a value exc
17180 65 70 74 20 74 68 61 74 20 77 69 74 68 0a 74 68  ept that with.th
17190 65 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20  e CAST operator 
171a0 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61  the conversion a
171b0 6c 77 61 79 73 20 74 61 6b 65 73 20 70 6c 61 63  lways takes plac
171c0 65 20 65 76 65 6e 20 69 66 20 74 68 65 20 63 6f  e even if the co
171d0 6e 76 65 72 73 69 6f 6e 0a 6c 6f 73 73 79 20 61  nversion.lossy a
171e0 6e 64 20 69 72 72 65 76 65 72 73 69 62 6c 65 2c  nd irreversible,
171f0 20 77 68 65 72 65 61 73 20 63 6f 6c 75 6d 6e 20   whereas column 
17200 61 66 66 69 6e 69 74 79 20 6f 6e 6c 79 20 63 68  affinity only ch
17210 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 20 74  anges the data t
17220 79 70 65 0a 6f 66 20 61 20 76 61 6c 75 65 20 69  ype.of a value i
17230 66 20 74 68 65 20 63 68 61 6e 67 65 20 69 73 20  f the change is 
17240 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72 65 76  lossless and rev
17250 65 72 73 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66  ersible...<p>^If
17260 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 26 6c   the value of &l
17270 74 3b 65 78 70 72 26 67 74 3b 20 69 73 20 4e 55  t;expr&gt; is NU
17280 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  LL, then the res
17290 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 54 0a  ult of the CAST.
172a0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6c  expression is al
172b0 73 6f 20 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72 77  so NULL. ^Otherw
172c0 69 73 65 2c 20 74 68 65 20 73 74 6f 72 61 67 65  ise, the storage
172d0 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 72 65   class of the re
172e0 73 75 6c 74 0a 69 73 20 64 65 74 65 72 6d 69 6e  sult.is determin
172f0 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67 20 74  ed by applying t
17300 68 65 20 5b 72 75 6c 65 73 20 66 6f 72 20 64 65  he [rules for de
17310 74 65 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e  termining column
17320 20 61 66 66 69 6e 69 74 79 5d 20 74 6f 0a 74 68   affinity] to.th
17330 65 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26  e &lt;type-name&
17340 67 74 3b 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  gt;...<table bor
17350 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74  der=1>.<tr>.  <t
17360 68 3e 20 41 66 66 69 6e 69 74 79 20 6f 66 20 26  h> Affinity of &
17370 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b  lt;type-name&gt;
17380 0a 20 20 3c 74 68 3e 20 43 6f 6e 76 65 72 73 69  .  <th> Conversi
17390 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 0a 3c 74  on Processing.<t
173a0 72 3e 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a  r>.  <td> NONE .
173b0 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67 20    <td> ^Casting 
173c0 61 20 76 61 6c 75 65 20 74 6f 20 61 20 26 6c 74  a value to a &lt
173d0 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 20 77  ;type-name&gt; w
173e0 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74 79 20  ith no affinity 
173f0 63 61 75 73 65 73 20 74 68 65 20 76 61 6c 75 65  causes the value
17400 20 74 6f 0a 20 20 62 65 20 63 6f 6e 76 65 72 74   to.  be convert
17410 65 64 20 69 6e 74 6f 20 61 20 42 4c 4f 42 2e 20  ed into a BLOB. 
17420 20 5e 43 61 73 74 69 6e 67 20 74 6f 20 61 20 42   ^Casting to a B
17430 4c 4f 42 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  LOB consists of 
17440 66 69 72 73 74 20 63 61 73 74 69 6e 67 0a 20 20  first casting.  
17450 74 68 65 20 76 61 6c 75 65 20 74 6f 20 54 45 58  the value to TEX
17460 54 20 69 6e 20 74 68 65 20 5b 65 6e 63 6f 64 69  T in the [encodi
17470 6e 67 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62  ng] of the datab
17480 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20  ase connection, 
17490 74 68 65 6e 0a 20 20 69 6e 74 65 72 70 72 65 74  then.  interpret
174a0 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 69 6e  ing the resultin
174b0 67 20 62 79 74 65 20 73 65 71 75 65 6e 63 65 20  g byte sequence 
174c0 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65 61  as a BLOB instea
174d0 64 20 6f 66 20 61 73 20 54 45 58 54 2e 0a 0a 3c  d of as TEXT...<
174e0 74 72 3e 0a 20 20 3c 74 64 3e 20 54 45 58 54 0a  tr>.  <td> TEXT.
174f0 20 20 3c 74 64 3e 20 5e 54 6f 20 63 61 73 74 20    <td> ^To cast 
17500 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20  a BLOB value to 
17510 54 45 58 54 2c 20 74 68 65 20 73 65 71 75 65 6e  TEXT, the sequen
17520 63 65 20 6f 66 20 62 79 74 65 73 20 74 68 61 74  ce of bytes that
17530 20 6d 61 6b 65 20 75 70 20 74 68 65 0a 20 20 42   make up the.  B
17540 4c 4f 42 20 69 73 20 69 6e 74 65 72 70 72 65 74  LOB is interpret
17550 65 64 20 61 73 20 74 65 78 74 20 65 6e 63 6f 64  ed as text encod
17560 65 64 20 75 73 69 6e 67 20 74 68 65 20 64 61 74  ed using the dat
17570 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 2e 0a  abase encoding..
17580 20 20 3c 70 3e 0a 20 20 20 5e 43 61 73 74 69 6e    <p>.   ^Castin
17590 67 20 61 6e 20 49 4e 54 45 47 45 52 20 6f 72 20  g an INTEGER or 
175a0 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20  REAL value into 
175b0 54 45 58 54 20 72 65 6e 64 65 72 73 20 74 68 65  TEXT renders the
175c0 20 76 61 6c 75 65 20 61 73 20 69 66 20 76 69 61   value as if via
175d0 20 0a 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 73   .    [sqlite3_s
175e0 6e 70 72 69 6e 74 66 28 29 5d 20 65 78 63 65 70  nprintf()] excep
175f0 74 20 74 68 61 74 20 74 68 65 20 72 65 73 75 6c  t that the resul
17600 74 69 6e 67 20 54 45 58 54 20 75 73 65 73 20 74  ting TEXT uses t
17610 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66  he [encoding] of
17620 0a 20 20 20 20 74 68 65 20 64 61 74 61 62 61 73  .    the databas
17630 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c  e connection...<
17640 74 72 3e 0a 20 20 3c 74 64 3e 20 52 45 41 4c 0a  tr>.  <td> REAL.
17650 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73    <td> ^When cas
17660 74 69 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75  ting a BLOB valu
17670 65 20 74 6f 20 61 20 52 45 41 4c 2c 20 74 68 65  e to a REAL, the
17680 20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74 20   value is first 
17690 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20  converted to.   
176a0 20 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20       TEXT..     
176b0 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69    <p>^When casti
176c0 6e 67 20 61 20 54 45 58 54 20 76 61 6c 75 65 20  ng a TEXT value 
176d0 74 6f 20 52 45 41 4c 2c 20 74 68 65 20 6c 6f 6e  to REAL, the lon
176e0 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70 72  gest possible pr
176f0 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20 20  efix of.        
17700 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 63  the value that c
17710 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  an be interprete
17720 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d 62  d as a real numb
17730 65 72 20 69 73 20 65 78 74 72 61 63 74 65 64 20  er is extracted 
17740 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68 65  from.        the
17750 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64 20   TEXT value and 
17760 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69 67  the remainder ig
17770 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64  nored. ^Any lead
17780 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74 68  ing spaces in th
17790 65 0a 20 20 20 20 20 20 20 20 54 45 58 54 20 76  e.        TEXT v
177a0 61 6c 75 65 20 61 72 65 20 69 67 6e 6f 72 65 64  alue are ignored
177b0 20 77 68 65 6e 20 63 6f 6e 76 65 72 67 69 6e 67   when converging
177c0 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20 52 45   from TEXT to RE
177d0 41 4c 2e 20 5e 28 49 66 20 74 68 65 72 65 20 69  AL. ^(If there i
177e0 73 0a 20 20 20 20 20 20 20 20 6e 6f 20 70 72 65  s.        no pre
177f0 66 69 78 20 74 68 61 74 20 63 61 6e 20 62 65 20  fix that can be 
17800 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
17810 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 74 68   real number, th
17820 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 0a  e result of the.
17830 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 73 69          conversi
17840 6f 6e 20 69 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74  on is 0.0.)^..<t
17850 72 3e 0a 20 20 3c 74 64 3e 20 49 4e 54 45 47 45  r>.  <td> INTEGE
17860 52 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63  R.  <td> ^When c
17870 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20 76 61  asting a BLOB va
17880 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52 2c 20  lue to INTEGER, 
17890 74 68 65 20 76 61 6c 75 65 20 69 73 20 66 69 72  the value is fir
178a0 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a  st converted to.
178b0 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a 20 20          TEXT..  
178c0 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61       <p>^When ca
178d0 73 74 69 6e 67 20 61 20 54 45 58 54 20 76 61 6c  sting a TEXT val
178e0 75 65 20 74 6f 20 49 4e 54 45 47 45 52 2c 20 74  ue to INTEGER, t
178f0 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69  he longest possi
17900 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20 20  ble prefix of.  
17910 20 20 20 20 20 20 74 68 65 20 76 61 6c 75 65 20        the value 
17920 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65  that can be inte
17930 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e  rpreted as an in
17940 74 65 67 65 72 20 6e 75 6d 62 65 72 20 69 73 20  teger number is 
17950 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a 20  extracted from. 
17960 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54 20         the TEXT 
17970 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72 65  value and the re
17980 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e  mainder ignored.
17990 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73 70   ^Any leading sp
179a0 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20  aces in the.    
179b0 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20 77      TEXT value w
179c0 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67 20 66  hen converting f
179d0 72 6f 6d 20 54 45 58 54 20 74 6f 20 49 4e 54 45  rom TEXT to INTE
179e0 47 45 52 20 61 72 65 20 69 67 6e 6f 72 65 64 2e  GER are ignored.
179f0 20 5e 49 66 20 74 68 65 72 65 0a 20 20 20 20 20   ^If there.     
17a00 20 20 20 69 73 20 6e 6f 20 70 72 65 66 69 78 20     is no prefix 
17a10 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65  that can be inte
17a20 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e  rpreted as an in
17a30 74 65 67 65 72 20 6e 75 6d 62 65 72 2c 20 74 68  teger number, th
17a40 65 20 72 65 73 75 6c 74 0a 20 20 20 20 20 20 20  e result.       
17a50 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   of the conversi
17a60 6f 6e 20 69 73 20 30 2e 20 20 5e 28 54 68 65 20  on is 0.  ^(The 
17a70 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20 75 6e  CAST operator un
17a80 64 65 72 73 74 61 6e 64 73 20 64 65 63 69 6d 61  derstands decima
17a90 6c 20 69 6e 74 65 67 65 72 73 0a 20 20 20 20 20  l integers.     
17aa0 20 20 20 6f 6e 6c 79 20 26 6d 64 61 73 68 3b 20     only &mdash; 
17ab0 63 6f 6e 76 65 72 73 69 6f 6e 20 6f 66 20 5b 68  conversion of [h
17ac0 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67  exadecimal integ
17ad0 65 72 73 5d 20 73 74 6f 70 73 20 61 74 20 74 68  ers] stops at th
17ae0 65 20 22 78 22 20 69 6e 20 74 68 65 0a 20 20 20  e "x" in the.   
17af0 20 20 20 20 20 22 30 78 22 20 70 72 65 66 69 78       "0x" prefix
17b00 20 6f 66 20 74 68 65 20 68 65 78 61 64 65 63 69   of the hexadeci
17b10 6d 61 6c 20 69 6e 74 65 67 65 72 20 73 74 72 69  mal integer stri
17b20 6e 67 20 61 6e 64 20 74 68 75 73 20 72 65 73 75  ng and thus resu
17b30 6c 74 20 6f 66 20 74 68 65 20 0a 20 20 20 20 20  lt of the .     
17b40 20 20 20 43 41 53 54 20 69 73 20 61 6c 77 61 79     CAST is alway
17b50 73 20 7a 65 72 6f 2e 29 5e 0a 0a 20 20 20 20 20  s zero.)^..     
17b60 20 3c 70 3e 5e 41 20 63 61 73 74 20 6f 66 20 61   <p>^A cast of a
17b70 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74 6f   REAL value into
17b80 20 61 6e 20 49 4e 54 45 47 45 52 20 72 65 73 75   an INTEGER resu
17b90 6c 74 73 20 69 6e 20 74 68 65 20 69 6e 74 65 67  lts in the integ
17ba0 65 72 0a 20 20 20 20 20 20 62 65 74 77 65 65 6e  er.      between
17bb0 20 74 68 65 20 52 45 41 4c 20 76 61 6c 75 65 20   the REAL value 
17bc0 61 6e 64 20 7a 65 72 6f 20 74 68 61 74 20 69 73  and zero that is
17bd0 20 63 6c 6f 73 65 73 74 20 74 6f 20 74 68 65 20   closest to the 
17be0 52 45 41 4c 20 76 61 6c 75 65 2e 0a 20 20 20 20  REAL value..    
17bf0 20 20 5e 49 66 20 61 20 52 45 41 4c 20 69 73 20    ^If a REAL is 
17c00 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
17c10 20 67 72 65 61 74 65 73 74 20 70 6f 73 73 69 62   greatest possib
17c20 6c 65 20 73 69 67 6e 65 64 0a 20 20 20 20 20 20  le signed.      
17c30 69 6e 74 65 67 65 72 20 28 2b 39 32 32 33 33 37  integer (+922337
17c40 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74  2036854775807) t
17c50 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
17c60 73 20 74 68 65 20 67 72 65 61 74 65 73 74 20 70  s the greatest p
17c70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20 73 69  ossible.      si
17c80 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 6e 64  gned integer and
17c90 20 69 66 20 74 68 65 20 52 45 41 4c 20 69 73 20   if the REAL is 
17ca0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6c 65  less than the le
17cb0 61 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69 67  ast possible sig
17cc0 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67 65  ned.      intege
17cd0 72 20 28 2d 39 32 32 33 33 37 32 30 33 36 38 35  r (-922337203685
17ce0 34 37 37 35 38 30 38 29 20 74 68 65 6e 20 74 68  4775808) then th
17cf0 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
17d00 6c 65 61 73 74 20 70 6f 73 73 69 62 6c 65 0a 20  least possible. 
17d10 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e 74 65       signed inte
17d20 67 65 72 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 50  ger...      <p>P
17d30 72 69 6f 72 20 74 6f 20 53 51 4c 69 74 65 20 76  rior to SQLite v
17d40 65 72 73 69 6f 6e 20 33 2e 38 2e 32 2c 20 63 61  ersion 3.8.2, ca
17d50 73 74 69 6e 67 20 61 20 52 45 41 4c 20 76 61 6c  sting a REAL val
17d60 75 65 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a  ue greater than.
17d70 20 20 20 20 20 20 2b 39 32 32 33 33 37 32 30 33        +922337203
17d80 36 38 35 34 37 37 35 38 30 37 2e 30 20 69 6e 74  6854775807.0 int
17d90 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 73  o an integer res
17da0 75 6c 74 65 64 20 69 6e 20 74 68 65 20 6d 6f 73  ulted in the mos
17db0 74 20 6e 65 67 61 74 69 76 65 0a 20 20 20 20 20  t negative.     
17dc0 20 69 6e 74 65 67 65 72 2c 20 2d 39 32 32 33 33   integer, -92233
17dd0 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e 20  72036854775808. 
17de0 20 54 68 69 73 20 62 65 68 61 76 69 6f 72 20 77   This behavior w
17df0 61 73 20 6d 65 61 6e 74 20 74 6f 20 65 6d 75 6c  as meant to emul
17e00 61 74 65 20 74 68 65 0a 20 20 20 20 20 20 62 65  ate the.      be
17e10 68 61 76 69 6f 72 20 6f 66 20 78 38 36 2f 78 36  havior of x86/x6
17e20 34 20 68 61 72 64 77 61 72 65 20 77 68 65 6e 20  4 hardware when 
17e30 64 6f 69 6e 67 20 74 68 65 20 65 71 75 69 76 61  doing the equiva
17e40 6c 65 6e 74 20 63 61 73 74 2e 0a 0a 3c 74 72 3e  lent cast...<tr>
17e50 0a 20 20 3c 74 64 3e 20 4e 55 4d 45 52 49 43 0a  .  <td> NUMERIC.
17e60 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67 20    <td> ^Casting 
17e70 61 20 54 45 58 54 20 6f 72 20 42 4c 4f 42 20 76  a TEXT or BLOB v
17e80 61 6c 75 65 20 69 6e 74 6f 20 4e 55 4d 45 52 49  alue into NUMERI
17e90 43 20 66 69 72 73 74 20 64 6f 65 73 20 61 20 66  C first does a f
17ea0 6f 72 63 65 64 0a 20 20 20 63 6f 6e 76 65 72 73  orced.   convers
17eb0 69 6f 6e 20 69 6e 74 6f 20 52 45 41 4c 20 62 75  ion into REAL bu
17ec0 74 20 74 68 65 6e 20 66 75 72 74 68 65 72 20 63  t then further c
17ed0 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65 73 75  onverts the resu
17ee0 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45 52 20  lt into INTEGER 
17ef0 69 66 0a 20 20 20 61 6e 64 20 6f 6e 6c 79 20 69  if.   and only i
17f00 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  f the conversion
17f10 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20 49 4e   from REAL to IN
17f20 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c 65 73  TEGER is lossles
17f30 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65  s and reversible
17f40 2e 0a 20 20 20 54 68 69 73 20 69 73 20 74 68 65  ..   This is the
17f50 20 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20 69 6e   only context in
17f60 20 53 51 4c 69 74 65 20 77 68 65 72 65 20 74 68   SQLite where th
17f70 65 20 4e 55 4d 45 52 49 43 20 61 6e 64 20 49 4e  e NUMERIC and IN
17f80 54 45 47 45 52 20 5b 61 66 66 69 6e 69 74 69 65  TEGER [affinitie
17f90 73 5d 0a 20 20 20 62 65 68 61 76 65 20 64 69 66  s].   behave dif
17fa0 66 65 72 65 6e 74 6c 79 2e 0a 20 20 20 3c 70 3e  ferently..   <p>
17fb0 20 5e 43 61 73 74 69 6e 67 20 61 20 52 45 41 4c   ^Casting a REAL
17fc0 20 6f 72 20 49 4e 54 45 47 45 52 20 76 61 6c 75   or INTEGER valu
17fd0 65 20 74 6f 20 4e 55 4d 45 52 49 43 20 69 73 20  e to NUMERIC is 
17fe0 61 20 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20 69 66  a no-op, even if
17ff0 20 61 20 72 65 61 6c 0a 20 20 20 76 61 6c 75 65   a real.   value
18000 20 63 6f 75 6c 64 20 62 65 20 6c 6f 73 73 6c 65   could be lossle
18010 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
18020 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 0a 3c  o an integer...<
18030 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  /tr>..</table>..
18040 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68  <p>^Note that th
18050 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 63 61  e result from ca
18060 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d 42 4c  sting any non-BL
18070 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20  OB value into a 
18080 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20 72 65  .BLOB and the re
18090 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e  sult from castin
180a0 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c 75 65  g any BLOB value
180b0 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c 4f 42   into a non-BLOB
180c0 20 76 61 6c 75 65 0a 6d 61 79 20 62 65 20 64 69   value.may be di
180d0 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64 69 6e  fferent dependin
180e0 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65  g on whether the
180f0 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63 6f 64   database [encod
18100 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c 0a 55  ing] is UTF-8,.U
18110 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54 46 2d  TF-16be, or UTF-
18120 31 36 6c 65 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f  16le....<tcl>hd_
18130 66 72 61 67 6d 65 6e 74 20 62 6f 6f 6c 65 61 6e  fragment boolean
18140 65 78 70 72 20 7b 62 6f 6f 6c 65 61 6e 20 65 78  expr {boolean ex
18150 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  pression}</tcl>.
18160 3c 68 33 3e 42 6f 6f 6c 65 61 6e 20 45 78 70 72  <h3>Boolean Expr
18170 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  essions</h3>..<p
18180 3e 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67  >The SQL languag
18190 65 20 66 65 61 74 75 72 65 73 20 73 65 76 65 72  e features sever
181a0 61 6c 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72  al contexts wher
181b0 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  e an expression 
181c0 69 73 20 0a 65 76 61 6c 75 61 74 65 64 20 61 6e  is .evaluated an
181d0 64 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e  d the result con
181e0 76 65 72 74 65 64 20 74 6f 20 61 20 62 6f 6f 6c  verted to a bool
181f0 65 61 6e 20 28 74 72 75 65 20 6f 72 20 66 61 6c  ean (true or fal
18200 73 65 29 20 76 61 6c 75 65 2e 20 54 68 65 73 65  se) value. These
18210 0a 63 6f 6e 74 65 78 74 73 20 61 72 65 3a 0a 0a  .contexts are:..
18220 20 20 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20    <ul>.    <li> 
18230 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
18240 20 6f 66 20 61 20 53 45 4c 45 43 54 2c 20 55 50   of a SELECT, UP
18250 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 20 73  DATE or DELETE s
18260 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c  tatement,.    <l
18270 69 3e 20 74 68 65 20 4f 4e 20 6f 72 20 55 53 49  i> the ON or USI
18280 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
18290 6f 69 6e 20 69 6e 20 61 20 53 45 4c 45 43 54 20  oin in a SELECT 
182a0 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c  statement,.    <
182b0 6c 69 3e 20 74 68 65 20 48 41 56 49 4e 47 20 63  li> the HAVING c
182c0 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
182d0 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20  T statement,.   
182e0 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e 20 63   <li> the WHEN c
182f0 6c 61 75 73 65 20 6f 66 20 61 6e 20 53 51 4c 20  lause of an SQL 
18300 74 72 69 67 67 65 72 2c 20 61 6e 64 0a 20 20 20  trigger, and.   
18310 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e 20 63   <li> the WHEN c
18320 6c 61 75 73 65 20 6f 72 20 63 6c 61 75 73 65 73  lause or clauses
18330 20 6f 66 20 73 6f 6d 65 20 43 41 53 45 20 65 78   of some CASE ex
18340 70 72 65 73 73 69 6f 6e 73 2e 0a 20 20 3c 2f 75  pressions..  </u
18350 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 63 6f 6e 76  l>..<p>^(To conv
18360 65 72 74 20 74 68 65 20 72 65 73 75 6c 74 73 20  ert the results 
18370 6f 66 20 61 6e 20 53 51 4c 20 65 78 70 72 65 73  of an SQL expres
18380 73 69 6f 6e 20 74 6f 20 61 20 62 6f 6f 6c 65 61  sion to a boolea
18390 6e 20 76 61 6c 75 65 2c 20 53 51 4c 69 74 65 0a  n value, SQLite.
183a0 66 69 72 73 74 20 63 61 73 74 73 20 74 68 65 20  first casts the 
183b0 72 65 73 75 6c 74 20 74 6f 20 61 20 4e 55 4d 45  result to a NUME
183c0 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65  RIC value in the
183d0 20 73 61 6d 65 20 77 61 79 20 61 73 20 61 20 0a   same way as a .
183e0 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  [CAST expression
183f0 5d 2e 20 41 20 6e 75 6d 65 72 69 63 20 7a 65 72  ]. A numeric zer
18400 6f 20 76 61 6c 75 65 20 28 69 6e 74 65 67 65 72  o value (integer
18410 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c   value 0 or real
18420 20 0a 76 61 6c 75 65 20 30 2e 30 29 20 69 73 20   .value 0.0) is 
18430 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65  considered to be
18440 20 66 61 6c 73 65 2e 20 20 41 20 4e 55 4c 4c 20   false.  A NULL 
18450 76 61 6c 75 65 20 69 73 20 73 74 69 6c 6c 20 4e  value is still N
18460 55 4c 4c 2e 0a 41 6c 6c 20 6f 74 68 65 72 20 76  ULL..All other v
18470 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
18480 65 72 65 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70  ered true.)^..<p
18490 3e 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  >^(For example, 
184a0 74 68 65 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c  the values NULL,
184b0 20 30 2e 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73   0.0, 0, 'englis
184c0 68 27 20 61 6e 64 20 27 30 27 20 61 72 65 20 61  h' and '0' are a
184d0 6c 6c 20 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f  ll considered.to
184e0 20 62 65 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56   be false.)^ ^(V
184f0 61 6c 75 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e  alues 1, 1.0, 0.
18500 31 2c 20 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e  1, -0.1 and '1en
18510 67 6c 69 73 68 27 20 61 72 65 20 63 6f 6e 73 69  glish' are consi
18520 64 65 72 65 64 20 74 6f 20 0a 62 65 20 74 72 75  dered to .be tru
18530 65 2e 29 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69  e.)^..<h3>Functi
18540 6f 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 53 51 4c 69  ons</h3>.<p>SQLi
18550 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79  te supports many
18560 20 5b 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c   [corefunc|simpl
18570 65 5d 20 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c  e] and [aggfunc|
18580 61 67 67 72 65 67 61 74 65 5d 0a 53 51 4c 20 66  aggregate].SQL f
18590 75 6e 63 74 69 6f 6e 73 2e 20 20 46 6f 72 20 70  unctions.  For p
185a0 72 65 73 65 6e 74 61 74 69 6f 6e 20 70 75 72 70  resentation purp
185b0 6f 73 65 73 2c 20 73 69 6d 70 6c 65 20 66 75 6e  oses, simple fun
185c0 63 74 69 6f 6e 73 20 61 72 65 20 66 75 72 74 68  ctions are furth
185d0 65 72 0a 73 75 62 64 69 76 69 64 65 64 20 69 6e  er.subdivided in
185e0 74 6f 20 5b 63 6f 72 65 66 75 6e 63 20 7c 20 63  to [corefunc | c
185f0 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61  ore functions] a
18600 6e 64 20 5b 64 61 74 65 66 75 6e 63 7c 64 61 74  nd [datefunc|dat
18610 65 2d 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  e-time functions
18620 5d 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73 20  ]..Applications 
18630 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75 6e 63  can add new func
18640 74 69 6f 6e 73 2c 20 77 72 69 74 74 65 6e 20 69  tions, written i
18650 6e 20 43 2f 43 2b 2b 2c 20 75 73 69 6e 67 20 74  n C/C++, using t
18660 68 65 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  he.[sqlite3_crea
18670 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69  te_function()] i
18680 6e 74 65 72 66 61 63 65 2e 0a 3c 2f 70 3e 0a 0a  nterface..</p>..
18690 3c 70 3e 5e 49 74 20 69 73 20 70 6f 73 73 69 62  <p>^It is possib
186a0 6c 65 20 74 6f 20 68 61 76 65 20 61 6e 20 61 67  le to have an ag
186b0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
186c0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
186d0 61 6d 65 20 61 73 20 61 0a 73 69 6d 70 6c 65 20  ame as a.simple 
186e0 66 75 6e 63 74 69 6f 6e 2c 20 61 73 20 6c 6f 6e  function, as lon
186f0 67 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  g as the number 
18700 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72  of arguments for
18710 20 74 68 65 20 74 77 6f 20 66 6f 72 6d 73 20 6f   the two forms o
18720 66 20 74 68 65 0a 66 75 6e 63 74 69 6f 6e 20 61  f the.function a
18730 72 65 20 64 69 66 66 65 72 65 6e 74 2e 20 20 5e  re different.  ^
18740 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
18750 20 5b 61 67 67 5f 6d 61 78 7c 6d 61 78 28 29 5d   [agg_max|max()]
18760 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61   function with a
18770 0a 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74  .single argument
18780 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65   is an aggregate
18790 20 61 6e 64 20 74 68 65 20 5b 6d 61 78 28 29 5d   and the [max()]
187a0 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74   function with t
187b0 77 6f 20 6f 72 20 6d 6f 72 65 0a 61 72 67 75 6d  wo or more.argum
187c0 65 6e 74 73 20 69 73 20 61 20 73 69 6d 70 6c 65  ents is a simple
187d0 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 3c 74 63 6c   function...<tcl
187e0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
187f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18830 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65 20 46  .Section {Core F
18840 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75  unctions} corefu
18850 6e 63 20 7b 2a 63 6f 72 65 66 75 6e 63 7d 0a 70  nc {*corefunc}.p
18860 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73 79 6e  roc funcdef {syn
18870 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73  tax keywords des
18880 63 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 7b  c} {.  hd_puts {
18890 3c 74 72 3e 7d 0a 20 20 72 65 67 73 75 62 20 2d  <tr>}.  regsub -
188a0 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e  all {\s+} [strin
188b0 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d 20  g trim $syntax] 
188c0 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78 0a  {<br />} syntax.
188d0 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c    regsub -all {\
188e0 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79  (([^*)]+)\)} $sy
188f0 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e  ntax {(<i>\1</i>
18900 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73  )} syntax.  regs
18910 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e  ub -all {,} $syn
18920 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73  tax {</i>,<i>} s
18930 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d  yntax.  regsub -
18940 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f  all {<i>\.\.\.</
18950 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e  i>} $syntax {...
18960 7d 20 73 79 6e 74 61 78 0a 20 20 68 64 5f 70 75  } syntax.  hd_pu
18970 74 73 20 22 3c 74 64 20 76 61 6c 69 67 6e 3d 5c  ts "<td valign=\
18980 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 72  "top\" align=\"r
18990 69 67 68 74 5c 22 20 77 69 64 74 68 3d 5c 22 31  ight\" width=\"1
189a0 32 30 5c 22 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c  20\">".  if {[ll
189b0 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 73 5d  ength $keywords]
189c0 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65 67 65 78  ==0} {.    regex
189d0 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e  p {[a-z_]+} $syn
189e0 74 61 78 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f  tax name.    hd_
189f0 66 72 61 67 6d 65 6e 74 20 24 6e 61 6d 65 20 2a  fragment $name *
18a00 24 6e 61 6d 65 20 22 24 7b 6e 61 6d 65 7d 28 29  $name "${name}()
18a10 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 22 0a 20   SQL function". 
18a20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65   } else {.    se
18a30 74 20 66 72 61 67 6e 61 6d 65 20 5b 6c 69 6e 64  t fragname [lind
18a40 65 78 20 24 6b 65 79 77 6f 72 64 73 20 30 5d 0a  ex $keywords 0].
18a50 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20      regsub -all 
18a60 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72 61 67 6e 61  {[^a-z]} $fragna
18a70 6d 65 20 7b 7d 20 66 72 61 67 6e 61 6d 65 0a 20  me {} fragname. 
18a80 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24     hd_fragment $
18a90 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 65 76 61  fragname.    eva
18aa0 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 5b 73  l hd_keywords [s
18ab0 74 72 69 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b 20  tring map {\n { 
18ac0 7d 7d 20 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20  }} $keywords].  
18ad0 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 24 73 79  }.  hd_puts "$sy
18ae0 6e 74 61 78 3c 2f 74 64 3e 22 0a 20 20 68 64 5f  ntax</td>".  hd_
18af0 70 75 74 73 20 7b 3c 74 64 20 76 61 6c 69 67 6e  puts {<td valign
18b00 3d 22 74 6f 70 22 3e 7d 0a 20 20 68 64 5f 72 65  ="top">}.  hd_re
18b10 73 6f 6c 76 65 20 24 64 65 73 63 0a 20 20 68 64  solve $desc.  hd
18b20 5f 70 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72  _puts {</td></tr
18b30 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  >}.}.</tcl>..<p>
18b40 54 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f  The core functio
18b50 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61  ns shown below a
18b60 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20  re available by 
18b70 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66  default. .[datef
18b80 75 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b  unc | Date &amp;
18b90 20 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d   Time functions]
18ba0 20 61 6e 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20   and.[aggfunc | 
18bb0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
18bc0 6f 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e  ons] are documen
18bd0 74 65 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20  ted separately. 
18be0 20 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20   An.application 
18bf0 6d 61 79 20 64 65 66 69 6e 65 20 61 64 64 69 74  may define addit
18c00 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20  ional.functions 
18c10 77 72 69 74 74 65 6e 20 69 6e 20 43 20 61 6e 64  written in C and
18c20 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 64 61   added to the da
18c30 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 75 73  tabase engine us
18c40 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33  ing.the [sqlite3
18c50 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
18c60 28 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74  ()] API.</p>..<t
18c70 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
18c80 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74  llpadding=10>.<t
18c90 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 62 73  cl>.funcdef {abs
18ca0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
18cb0 20 61 62 73 28 58 29 20 66 75 6e 63 74 69 6f 6e   abs(X) function
18cc0 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 62 73   returns the abs
18cd0 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74  olute value of t
18ce0 68 65 20 6e 75 6d 65 72 69 63 0a 20 20 61 72 67  he numeric.  arg
18cf0 75 6d 65 6e 74 20 58 2e 20 20 5e 41 62 73 28 58  ument X.  ^Abs(X
18d00 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69  ) returns NULL i
18d10 66 20 58 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20  f X is NULL. .  
18d20 5e 28 41 62 73 28 58 29 20 72 65 74 75 72 6e 20  ^(Abs(X) return 
18d30 30 2e 30 20 69 66 20 58 20 69 73 20 61 20 73 74  0.0 if X is a st
18d40 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74  ring or blob.  t
18d50 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  hat cannot be co
18d60 6e 76 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d  nverted to a num
18d70 65 72 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e  eric value.)^  ^
18d80 49 66 20 58 20 69 73 20 74 68 65 20 0a 20 20 69  If X is the .  i
18d90 6e 74 65 67 65 72 20 2d 39 32 32 33 33 37 32 30  nteger -92233720
18da0 33 36 38 35 34 37 37 35 38 30 38 20 74 68 65 6e  36854775808 then
18db0 20 61 62 73 28 58 29 20 74 68 72 6f 77 73 20 61   abs(X) throws a
18dc0 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
18dd0 6f 77 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65  ow.  error since
18de0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75   there is no equ
18df0 69 76 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65  ivalent positive
18e00 20 36 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70   64-bit two comp
18e10 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a  lement value..}.
18e20 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65  .funcdef {change
18e30 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  s()} {} {.  ^The
18e40 20 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74   changes() funct
18e50 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
18e60 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61  number of databa
18e70 73 65 20 72 6f 77 73 20 74 68 61 74 20 77 65 72  se rows that wer
18e80 65 20 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69  e changed.  or i
18e90 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74  nserted or delet
18ea0 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
18eb0 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65  ecently complete
18ec0 64 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  d INSERT, DELETE
18ed0 2c 0a 20 20 6f 72 20 55 50 44 41 54 45 20 73 74  ,.  or UPDATE st
18ee0 61 74 65 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69  atement, exclusi
18ef0 76 65 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  ve of statements
18f00 20 69 6e 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20   in lower-level 
18f10 74 72 69 67 67 65 72 73 2e 0a 20 20 5e 54 68 65  triggers..  ^The
18f20 20 63 68 61 6e 67 65 73 28 29 20 53 51 4c 20 66   changes() SQL f
18f30 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
18f40 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
18f50 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  [sqlite3_changes
18f60 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63  ()].  C/C++ func
18f70 74 69 6f 6e 20 61 6e 64 20 68 65 6e 63 65 20 66  tion and hence f
18f80 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20  ollows the same 
18f90 72 75 6c 65 73 20 66 6f 72 20 63 6f 75 6e 74 69  rules for counti
18fa0 6e 67 20 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66  ng changes..}..f
18fb0 75 6e 63 64 65 66 20 7b 63 68 61 72 28 58 31 2c  uncdef {char(X1,
18fc0 58 32 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d 20 7b  X2,...,XN)} {} {
18fd0 0a 20 20 5e 28 54 68 65 20 63 68 61 72 28 58 31  .  ^(The char(X1
18fe0 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 20 66 75 6e 63  ,X2,...,XN) func
18ff0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
19000 74 72 69 6e 67 20 63 6f 6d 70 6f 73 65 64 20 6f  tring composed o
19010 66 20 63 68 61 72 61 63 74 65 72 73 20 68 61 76  f characters hav
19020 69 6e 67 20 74 68 65 0a 20 20 20 75 6e 69 63 6f  ing the.   unico
19030 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20 76 61  de code point va
19040 6c 75 65 73 20 6f 66 20 69 6e 74 65 67 65 72 73  lues of integers
19050 20 58 31 20 74 68 72 6f 75 67 68 20 58 4e 2c 20   X1 through XN, 
19060 72 65 73 70 65 63 74 69 76 65 6c 79 2e 29 5e 0a  respectively.)^.
19070 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c  }..funcdef {coal
19080 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  esce(X,Y,...)} {
19090 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65  } {.  ^The coale
190a0 73 63 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  sce() function r
190b0 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
190c0 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   its first non-N
190d0 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72  ULL argument, or
190e0 0a 20 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61  .  NULL if all a
190f0 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c  rguments are NUL
19100 4c 2e 20 20 5e 43 6f 61 6c 65 73 63 65 28 29 20  L.  ^Coalesce() 
19110 6d 75 73 74 20 68 61 76 65 20 61 74 20 6c 65 61  must have at lea
19120 73 74 20 0a 20 20 32 20 61 72 67 75 6d 65 6e 74  st .  2 argument
19130 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67  s..}..funcdef {g
19140 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  lob(X,Y)} {} {. 
19150 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c 59 29 20   ^The glob(X,Y) 
19160 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69  function is equi
19170 76 61 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20 20  valent to the.  
19180 65 78 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59  expression "<b>Y
19190 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20   GLOB X</b>"..  
191a0 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20  Note that the X 
191b0 61 6e 64 20 59 20 61 72 67 75 6d 65 6e 74 73 20  and Y arguments 
191c0 61 72 65 20 72 65 76 65 72 73 65 64 20 69 6e 20  are reversed in 
191d0 74 68 65 20 67 6c 6f 62 28 29 20 66 75 6e 63 74  the glob() funct
191e0 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76 65 20 74  ion.  relative t
191f0 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f  o the infix [GLO
19200 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e  B] operator..  ^
19210 49 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  If the [sqlite3_
19220 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
19230 29 5d 20 69 6e 74 65 72 66 61 63 65 20 69 73 20  )] interface is 
19240 75 73 65 64 20 74 6f 0a 20 20 6f 76 65 72 72 69  used to.  overri
19250 64 65 20 74 68 65 20 67 6c 6f 62 28 58 2c 59 29  de the glob(X,Y)
19260 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61   function with a
19270 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d  n alternative im
19280 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 65  plementation the
19290 6e 0a 20 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f  n.  the [GLOB] o
192a0 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 69 6e 76  perator will inv
192b0 6f 6b 65 20 74 68 65 20 61 6c 74 65 72 6e 61 74  oke the alternat
192c0 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ive implementati
192d0 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  on..}..funcdef {
192e0 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20  ifnull(X,Y)} {} 
192f0 7b 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28  {.  ^The ifnull(
19300 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
19310 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73  ns a copy of its
19320 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20   first non-NULL 
19330 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e  argument, or.  N
19340 55 4c 4c 20 69 66 20 62 6f 74 68 20 61 72 67 75  ULL if both argu
19350 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20  ments are NULL. 
19360 20 5e 49 66 6e 75 6c 6c 28 29 20 6d 75 73 74 20   ^Ifnull() must 
19370 68 61 76 65 20 65 78 61 63 74 6c 79 20 32 20 61  have exactly 2 a
19380 72 67 75 6d 65 6e 74 73 2e 0a 20 20 5e 54 68 65  rguments..  ^The
19390 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69   ifnull() functi
193a0 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  on is equivalent
193b0 20 74 6f 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d   to [coalesce()]
193c0 20 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65   with two argume
193d0 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  nts..}..funcdef 
193e0 7b 69 6e 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20  {instr(X,Y)} {} 
193f0 7b 0a 20 20 5e 54 68 65 20 69 6e 73 74 72 28 58  {.  ^The instr(X
19400 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 66 69 6e  ,Y) function fin
19410 64 73 20 74 68 65 20 66 69 72 73 74 20 6f 63 63  ds the first occ
19420 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e  urrence of strin
19430 67 20 59 20 77 69 74 68 69 6e 20 0a 20 20 73 74  g Y within .  st
19440 72 69 6e 67 20 58 20 61 6e 64 20 72 65 74 75 72  ring X and retur
19450 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
19460 20 70 72 69 6f 72 20 63 68 61 72 61 63 74 65 72   prior character
19470 73 20 70 6c 75 73 20 31 2c 20 6f 72 20 30 20 69  s plus 1, or 0 i
19480 66 0a 20 20 59 20 69 73 20 6e 6f 77 68 65 72 65  f.  Y is nowhere
19490 20 66 6f 75 6e 64 20 77 69 74 68 69 6e 20 58 2e   found within X.
194a0 0a 20 20 5e 4f 72 2c 20 69 66 20 58 20 61 6e 64  .  ^Or, if X and
194b0 20 59 20 61 72 65 20 62 6f 74 68 20 42 4c 4f 42   Y are both BLOB
194c0 73 2c 20 74 68 65 6e 20 69 6e 73 74 72 28 58 2c  s, then instr(X,
194d0 59 29 20 72 65 74 75 72 6e 73 20 6f 6e 65 0a 20  Y) returns one. 
194e0 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6e   more than the n
194f0 75 6d 62 65 72 20 62 79 74 65 73 20 70 72 69 6f  umber bytes prio
19500 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 6f  r to the first o
19510 63 63 75 72 72 65 6e 63 65 20 6f 66 20 59 2c 20  ccurrence of Y, 
19520 6f 72 20 30 20 69 66 0a 20 20 59 20 64 6f 65 73  or 0 if.  Y does
19530 20 6e 6f 74 20 6f 63 63 75 72 20 61 6e 79 77 68   not occur anywh
19540 65 72 65 20 77 69 74 68 69 6e 20 58 2e 0a 20 20  ere within X..  
19550 5e 49 66 20 62 6f 74 68 20 61 72 67 75 6d 65 6e  ^If both argumen
19560 74 73 20 58 20 61 6e 64 20 59 20 74 6f 20 69 6e  ts X and Y to in
19570 73 74 72 28 58 2c 59 29 20 61 72 65 20 6e 6f 6e  str(X,Y) are non
19580 2d 4e 55 4c 4c 20 61 6e 64 20 61 72 65 20 6e 6f  -NULL and are no
19590 74 20 42 4c 4f 42 73 0a 20 20 74 68 65 6e 20 62  t BLOBs.  then b
195a0 6f 74 68 20 61 72 65 20 69 6e 74 65 72 70 72 65  oth are interpre
195b0 74 65 64 20 61 73 20 73 74 72 69 6e 67 73 2e 0a  ted as strings..
195c0 20 20 5e 49 66 20 65 69 74 68 65 72 20 58 20 6f    ^If either X o
195d0 72 20 59 20 61 72 65 20 4e 55 4c 4c 20 69 6e 20  r Y are NULL in 
195e0 69 6e 73 74 72 28 58 2c 59 29 20 74 68 65 6e 20  instr(X,Y) then 
195f0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
19600 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  LL..}..funcdef {
19610 68 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  hex(X)} {} {.  ^
19620 54 68 65 20 68 65 78 28 29 20 66 75 6e 63 74 69  The hex() functi
19630 6f 6e 20 69 6e 74 65 72 70 72 65 74 73 20 69 74  on interprets it
19640 73 20 61 72 67 75 6d 65 6e 74 20 61 73 20 61 20  s argument as a 
19650 42 4c 4f 42 20 61 6e 64 20 72 65 74 75 72 6e 73  BLOB and returns
19660 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68 69 63  .  a string whic
19670 68 20 69 73 20 74 68 65 20 75 70 70 65 72 2d 63  h is the upper-c
19680 61 73 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20  ase hexadecimal 
19690 72 65 6e 64 65 72 69 6e 67 20 6f 66 20 74 68 65  rendering of the
196a0 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 20 20 74 68   content of.  th
196b0 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63  at blob..}..func
196c0 64 65 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74  def {last_insert
196d0 5f 72 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20  _rowid()} {} {. 
196e0 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72   ^The last_inser
196f0 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
19700 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 5b  on returns the [
19710 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74 68 65 20  ROWID].  of the 
19720 6c 61 73 74 20 72 6f 77 20 69 6e 73 65 72 74 20  last row insert 
19730 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
19740 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69  e connection whi
19750 63 68 20 69 6e 76 6f 6b 65 64 20 74 68 65 0a 20  ch invoked the. 
19760 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68   function..  ^Th
19770 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  e last_insert_ro
19780 77 69 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69  wid() SQL functi
19790 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
197a0 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71  around the.  [sq
197b0 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
197c0 74 5f 72 6f 77 69 64 28 29 5d 20 43 2f 43 2b 2b  t_rowid()] C/C++
197d0 20 69 6e 74 65 72 66 61 63 65 20 66 75 6e 63 74   interface funct
197e0 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ion..}..funcdef 
197f0 7b 6c 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b  {length(X)} {} {
19800 0a 20 20 5e 46 6f 72 20 61 20 73 74 72 69 6e 67  .  ^For a string
19810 20 76 61 6c 75 65 20 58 2c 20 74 68 65 20 6c 65   value X, the le
19820 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e  ngth(X) function
19830 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
19840 62 65 72 20 6f 66 20 0a 20 20 63 68 61 72 61 63  ber of .  charac
19850 74 65 72 73 20 28 6e 6f 74 20 62 79 74 65 73 29  ters (not bytes)
19860 20 69 6e 20 58 20 70 72 69 6f 72 20 74 6f 20 74   in X prior to t
19870 68 65 20 66 69 72 73 74 20 4e 55 4c 20 63 68 61  he first NUL cha
19880 72 61 63 74 65 72 2e 0a 20 20 53 69 6e 63 65 20  racter..  Since 
19890 53 51 4c 69 74 65 20 73 74 72 69 6e 67 73 20 64  SQLite strings d
198a0 6f 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 63  o not normally c
198b0 6f 6e 74 61 69 6e 20 4e 55 4c 20 63 68 61 72 61  ontain NUL chara
198c0 63 74 65 72 73 2c 20 74 68 65 20 6c 65 6e 67 74  cters, the lengt
198d0 68 28 58 29 0a 20 20 66 75 6e 63 74 69 6f 6e 20  h(X).  function 
198e0 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 72 65 74  will usually ret
198f0 75 72 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  urn the total nu
19900 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
19910 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  rs in the string
19920 20 58 2e 0a 20 20 5e 46 6f 72 20 61 20 62 6c 6f   X..  ^For a blo
19930 62 20 76 61 6c 75 65 20 58 2c 20 6c 65 6e 67 74  b value X, lengt
19940 68 28 58 29 20 72 65 74 75 72 6e 73 20 74 68 65  h(X) returns the
19950 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
19960 20 69 6e 20 74 68 65 20 62 6c 6f 62 2e 0a 20 20   in the blob..  
19970 5e 49 66 20 58 20 69 73 20 4e 55 4c 4c 20 74 68  ^If X is NULL th
19980 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 69 73 20  en length(X) is 
19990 4e 55 4c 4c 2e 0a 20 20 5e 49 66 20 58 20 69 73  NULL..  ^If X is
199a0 20 6e 75 6d 65 72 69 63 20 74 68 65 6e 20 6c 65   numeric then le
199b0 6e 67 74 68 28 58 29 20 72 65 74 75 72 6e 73 20  ngth(X) returns 
199c0 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 61 20  the length of a 
199d0 73 74 72 69 6e 67 0a 20 20 72 65 70 72 65 73 65  string.  represe
199e0 6e 74 61 74 69 6f 6e 20 6f 66 20 58 2e 0a 7d 0a  ntation of X..}.
199f0 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 28 58  .funcdef {like(X
19a00 2c 59 29 20 6c 69 6b 65 28 58 2c 59 2c 5a 29 7d  ,Y) like(X,Y,Z)}
19a10 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b   {} {.  ^The lik
19a20 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  e() function is 
19a30 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
19a40 74 20 74 68 65 0a 20 20 22 3c 62 3e 59 20 4c 49  t the.  "<b>Y LI
19a50 4b 45 20 58 20 26 23 39 31 3b 45 53 43 41 50 45  KE X &#91;ESCAPE
19a60 20 5a 26 23 39 33 3b 3c 2f 62 3e 22 20 65 78 70   Z&#93;</b>" exp
19a70 72 65 73 73 69 6f 6e 2e 20 0a 20 20 5e 49 66 20  ression. .  ^If 
19a80 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43  the optional ESC
19a90 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70 72  APE clause is pr
19aa0 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a  esent, then the.
19ab0 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f    like() functio
19ac0 6e 20 69 73 20 69 6e 76 6f 6b 65 64 20 77 69 74  n is invoked wit
19ad0 68 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74  h three argument
19ae0 73 2e 20 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  s.  ^Otherwise, 
19af0 69 74 20 69 73 0a 20 20 69 6e 76 6f 6b 65 64 20  it is.  invoked 
19b00 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e  with two argumen
19b10 74 73 20 6f 6e 6c 79 2e 20 4e 6f 74 65 20 74 68  ts only. Note th
19b20 61 74 20 74 68 65 20 58 20 61 6e 64 20 59 20 70  at the X and Y p
19b30 61 72 61 6d 65 74 65 72 73 20 61 72 65 0a 20 20  arameters are.  
19b40 72 65 76 65 72 73 65 64 20 69 6e 20 74 68 65 20  reversed in the 
19b50 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  like() function 
19b60 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20  relative to the 
19b70 69 6e 66 69 78 20 5b 4c 49 4b 45 5d 20 6f 70 65  infix [LIKE] ope
19b80 72 61 74 6f 72 2e 0a 20 20 5e 54 68 65 20 5b 73  rator..  ^The [s
19b90 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
19ba0 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  nction()] interf
19bb0 61 63 65 20 63 61 6e 20 62 65 20 75 73 65 64 20  ace can be used 
19bc0 74 6f 20 6f 76 65 72 72 69 64 65 20 74 68 65 0a  to override the.
19bd0 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f    like() functio
19be0 6e 20 61 6e 64 20 74 68 65 72 65 62 79 20 63 68  n and thereby ch
19bf0 61 6e 67 65 20 74 68 65 20 6f 70 65 72 61 74 69  ange the operati
19c00 6f 6e 20 6f 66 20 74 68 65 0a 20 20 5b 4c 49 4b  on of the.  [LIK
19c10 45 5d 20 6f 70 65 72 61 74 6f 72 2e 20 20 57 68  E] operator.  Wh
19c20 65 6e 20 6f 76 65 72 72 69 64 69 6e 67 20 74 68  en overriding th
19c30 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f  e like() functio
19c40 6e 2c 20 69 74 20 6d 61 79 20 62 65 20 69 6d 70  n, it may be imp
19c50 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f 76 65 72  ortant.  to over
19c60 72 69 64 65 20 62 6f 74 68 20 74 68 65 20 74 77  ride both the tw
19c70 6f 20 61 6e 64 20 74 68 72 65 65 20 61 72 67 75  o and three argu
19c80 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66  ment versions of
19c90 20 74 68 65 20 6c 69 6b 65 28 29 20 0a 20 20 66   the like() .  f
19ca0 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69  unction. Otherwi
19cb0 73 65 2c 20 64 69 66 66 65 72 65 6e 74 20 63 6f  se, different co
19cc0 64 65 20 6d 61 79 20 62 65 20 63 61 6c 6c 65 64  de may be called
19cd0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
19ce0 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  e.  [LIKE] opera
19cf0 74 6f 72 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  tor depending on
19d00 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
19d10 61 6e 20 45 53 43 41 50 45 20 63 6c 61 75 73 65  an ESCAPE clause
19d20 20 77 61 73 20 0a 20 20 73 70 65 63 69 66 69 65   was .  specifie
19d30 64 2e 0a 7d 0a 0a 0a 66 75 6e 63 64 65 66 20 7b  d..}...funcdef {
19d40 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 7d  likelihood(X,Y)}
19d50 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b   {} {.  ^The lik
19d60 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66 75 6e  elihood(X,Y) fun
19d70 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 72  ction returns ar
19d80 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67  gument X unchang
19d90 65 64 2e 0a 20 20 5e 28 54 68 65 20 76 61 6c 75  ed..  ^(The valu
19da0 65 20 59 20 69 6e 20 6c 69 6b 65 6c 69 68 6f 6f  e Y in likelihoo
19db0 64 28 58 2c 59 29 20 6d 75 73 74 20 62 65 20 61  d(X,Y) must be a
19dc0 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
19dd0 63 6f 6e 73 74 61 6e 74 0a 20 20 62 65 74 77 65  constant.  betwe
19de0 65 6e 20 30 2e 30 20 61 6e 64 20 31 2e 30 2c 20  en 0.0 and 1.0, 
19df0 69 6e 63 6c 75 73 69 76 65 2e 29 5e 0a 20 20 5e  inclusive.)^.  ^
19e00 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58  The likelihood(X
19e10 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  ) function is a 
19e20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20 63  no-op that the c
19e30 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20 20  ode generator.  
19e40 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20 73  optimizes away s
19e50 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75 6d  o that it consum
19e60 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65 73  es no CPU cycles
19e70 20 64 75 72 69 6e 67 20 72 75 6e 2d 74 69 6d 65   during run-time
19e80 0a 20 20 28 74 68 61 74 20 69 73 2c 20 64 75 72  .  (that is, dur
19e90 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71  ing calls to [sq
19ea0 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a  lite3_step()])..
19eb0 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f    ^The purpose o
19ec0 66 20 74 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64  f the likelihood
19ed0 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 69  (X,Y) function i
19ee0 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 68  s to provide a h
19ef0 69 6e 74 0a 20 20 74 6f 20 74 68 65 20 71 75 65  int.  to the que
19f00 72 79 20 70 6c 61 6e 6e 65 72 20 74 68 61 74 20  ry planner that 
19f10 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 69  the argument X i
19f20 73 20 61 20 62 6f 6f 6c 65 61 6e 20 74 68 61 74  s a boolean that
19f30 20 69 73 0a 20 20 74 72 75 65 20 77 69 74 68 20   is.  true with 
19f40 61 20 70 72 6f 62 61 62 69 6c 69 74 79 20 6f 66  a probability of
19f50 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 59   approximately Y
19f60 2e 0a 20 20 5e 28 54 68 65 20 5b 75 6e 6c 69 6b  ..  ^(The [unlik
19f70 65 6c 79 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e  ely(X)] function
19f80 20 69 73 20 73 68 6f 72 74 2d 68 61 6e 64 20 66   is short-hand f
19f90 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c  or likelihood(X,
19fa0 30 2e 30 36 32 35 29 2e 29 5e 0a 20 20 5e 28 54  0.0625).)^.  ^(T
19fb0 68 65 20 5b 6c 69 6b 65 6c 79 28 58 29 5d 20 66  he [likely(X)] f
19fc0 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f 72 74  unction is short
19fd0 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65 6c 69  -hand for likeli
19fe0 68 6f 6f 64 28 58 2c 30 2e 39 33 37 35 29 2e 29  hood(X,0.9375).)
19ff0 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69  ^.}..funcdef {li
1a000 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  kely(X)} {} {.  
1a010 5e 54 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66  ^The likely(X) f
1a020 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1a030 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 75  the argument X u
1a040 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 54 68 65  nchanged..  ^The
1a050 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74   likely(X) funct
1a060 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74  ion is a no-op t
1a070 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e  hat the code gen
1a080 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a  erator.  optimiz
1a090 65 73 20 61 77 61 79 20 73 6f 20 74 68 61 74 20  es away so that 
1a0a0 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43  it consumes no C
1a0b0 50 55 20 63 79 63 6c 65 73 20 61 74 0a 20 20 72  PU cycles at.  r
1a0c0 75 6e 2d 74 69 6d 65 20 28 74 68 61 74 20 69 73  un-time (that is
1a0d0 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c 73 20 74  , during calls t
1a0e0 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28  o [sqlite3_step(
1a0f0 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70 75 72 70  )])..  ^The purp
1a100 6f 73 65 20 6f 66 20 74 68 65 20 6c 69 6b 65 6c  ose of the likel
1a110 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
1a120 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69   to provide a hi
1a130 6e 74 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72  nt.  to the quer
1a140 79 20 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74  y planner that t
1a150 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73  he argument X is
1a160 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
1a170 0a 20 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  .  that is usual
1a180 6c 79 20 74 72 75 65 2e 20 5e 28 54 68 65 20 6c  ly true. ^(The l
1a190 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
1a1a0 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a  n is equivalent.
1a1b0 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64    to [likelihood
1a1c0 5d 28 58 2c 30 2e 39 33 37 35 29 2e 29 5e 20 53  ](X,0.9375).)^ S
1a1d0 65 65 20 61 6c 73 6f 3a 20 5b 75 6e 6c 69 6b 65  ee also: [unlike
1a1e0 6c 79 28 58 29 5d 2e 0a 7d 0a 0a 66 75 6e 63 64  ly(X)]..}..funcd
1a1f0 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ef {load_extensi
1a200 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e  on(X) load_exten
1a210 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  sion(X,Y)} {} {.
1a220 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65    ^The load_exte
1a230 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74  nsion(X,Y) funct
1a240 69 6f 6e 20 6c 6f 61 64 73 20 5b 53 51 4c 69 74  ion loads [SQLit
1a250 65 20 65 78 74 65 6e 73 69 6f 6e 73 5d 20 6f 75  e extensions] ou
1a260 74 20 6f 66 20 74 68 65 20 73 68 61 72 65 64 0a  t of the shared.
1a270 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e    library file n
1a280 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74 68 65  amed X using the
1a290 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e 20   entry point Y. 
1a2a0 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
1a2b0 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
1a2c0 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61 20 4e  .  is always a N
1a2d0 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73 20 6f  ULL.  ^If Y is o
1a2e0 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68 65 20  mitted then the 
1a2f0 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20 70 6f  default entry po
1a300 69 6e 74 20 6e 61 6d 65 20 69 73 20 75 73 65 64  int name is used
1a310 2e 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78  ..  ^The load_ex
1a320 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69  tension() functi
1a330 6f 6e 20 72 61 69 73 65 73 20 61 6e 20 65 78 63  on raises an exc
1a340 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78  eption if the ex
1a350 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f  tension fails to
1a360 0a 20 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69  .  load or initi
1a370 61 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e  alize correctly.
1a380 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64  ..  <p>^The load
1a390 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e  _extension() fun
1a3a0 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20  ction will fail 
1a3b0 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  if the extension
1a3c0 20 61 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20   attempts to .  
1a3d0 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65  modify or delete
1a3e0 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
1a3f0 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
1a400 71 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20  quence.  ^The.  
1a410 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64  extension can ad
1a420 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20  d new functions 
1a430 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
1a440 75 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e  uences, but cann
1a450 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64  ot.  modify or d
1a460 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 66  elete existing f
1a470 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
1a480 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
1a490 62 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20  because.  those 
1a4a0 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72  functions and/or
1a4b0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
1a4c0 6e 63 65 73 20 6d 69 67 68 74 20 62 65 20 75 73  nces might be us
1a4d0 65 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69  ed elsewhere.  i
1a4e0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  n the currently 
1a4f0 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74  running SQL stat
1a500 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20  ement.  To load 
1a510 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61  an extension tha
1a520 74 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64  t.  changes or d
1a530 65 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73  eletes functions
1a540 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
1a550 71 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65  quences, use the
1a560 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64  .  [sqlite3_load
1a570 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d  _extension()] C-
1a580 6c 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70  language API.</p
1a590 3e 0a 0a 20 20 3c 70 3e 46 6f 72 20 73 65 63 75  >..  <p>For secu
1a5a0 72 69 74 79 20 72 65 61 73 6f 6e 73 2c 20 65 78  rity reasons, ex
1a5b0 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 65 64 20 69  tension loaded i
1a5c0 73 20 74 75 72 6e 65 64 20 6f 66 66 20 62 79 20  s turned off by 
1a5d0 64 65 66 61 75 6c 74 20 61 6e 64 20 6d 75 73 74  default and must
1a5e0 0a 20 20 62 65 20 65 6e 61 62 6c 65 64 20 62 79  .  be enabled by
1a5f0 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f   a prior call to
1a600 20 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65   [sqlite3_enable
1a610 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
1a620 29 5d 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64  )].</p>.}..funcd
1a630 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d  ef {lower(X)} {}
1a640 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 77 65 72 28   {.  ^The lower(
1a650 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1a660 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 73 74  rns a copy of st
1a670 72 69 6e 67 20 58 20 77 69 74 68 20 61 6c 6c 20  ring X with all 
1a680 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
1a690 0a 20 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  .  converted to 
1a6a0 6c 6f 77 65 72 20 63 61 73 65 2e 20 20 5e 54 68  lower case.  ^Th
1a6b0 65 20 64 65 66 61 75 6c 74 20 62 75 69 6c 74 2d  e default built-
1a6c0 69 6e 20 6c 6f 77 65 72 28 29 20 66 75 6e 63 74  in lower() funct
1a6d0 69 6f 6e 20 77 6f 72 6b 73 0a 20 20 66 6f 72 20  ion works.  for 
1a6e0 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
1a6f0 20 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f 20 63 61   only.  To do ca
1a700 73 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f  se conversions o
1a710 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a 20 20 63 68  n non-ASCII.  ch
1a720 61 72 61 63 74 65 72 73 2c 20 6c 6f 61 64 20 74  aracters, load t
1a730 68 65 20 49 43 55 20 65 78 74 65 6e 73 69 6f 6e  he ICU extension
1a740 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 74  ..}..funcdef {lt
1a750 72 69 6d 28 58 29 20 6c 74 72 69 6d 28 58 2c 59  rim(X) ltrim(X,Y
1a760 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
1a770 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69  trim(X,Y) functi
1a780 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1a790 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65  ing formed by re
1a7a0 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61  moving any and a
1a7b0 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73 20  ll.  characters 
1a7c0 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 59  that appear in Y
1a7d0 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73   from the left s
1a7e0 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20  ide of X..  ^If 
1a7f0 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69  the Y argument i
1a800 73 20 6f 6d 69 74 74 65 64 2c 20 6c 74 72 69 6d  s omitted, ltrim
1a810 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63  (X) removes spac
1a820 65 73 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74  es from the left
1a830 20 73 69 64 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a   side.  of X..}.
1a840 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c  .funcdef {max(X,
1a850 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72  Y,...)} {*maxCor
1a860 65 46 75 6e 63 20 2a 6d 61 78 20 7b 6d 61 78 28  eFunc *max {max(
1a870 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d  ) SQL function}}
1a880 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d   {.  ^The multi-
1a890 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66  argument max() f
1a8a0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1a8b0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74  the argument wit
1a8c0 68 20 74 68 65 20 0a 20 20 6d 61 78 69 6d 75 6d  h the .  maximum
1a8d0 20 76 61 6c 75 65 2c 20 6f 72 20 72 65 74 75 72   value, or retur
1a8e0 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79 20 61 72  n NULL if any ar
1a8f0 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 20  gument is NULL. 
1a900 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
1a910 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e  gument max() fun
1a920 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69  ction searches i
1a930 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  ts arguments fro
1a940 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a  m left to right.
1a950 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e    for an argumen
1a960 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61  t that defines a
1a970 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1a980 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61  ion and uses tha
1a990 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75  t collating.  fu
1a9a0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73  nction for all s
1a9b0 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e  tring comparison
1a9c0 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20  s.  ^If none of 
1a9d0 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  the arguments to
1a9e0 20 6d 61 78 28 29 0a 20 20 64 65 66 69 6e 65 20   max().  define 
1a9f0 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
1aa00 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42  tion, then the B
1aa10 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
1aa20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
1aa30 2e 0a 20 20 5e 28 4e 6f 74 65 20 74 68 61 74 20  ..  ^(Note that 
1aa40 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20 69 73 20  <b>max()</b> is 
1aa50 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a simple functio
1aa60 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20  n when.  it has 
1aa70 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65  2 or more argume
1aa80 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74 65 73  nts but operates
1aa90 20 61 73 20 61 6e 0a 20 20 5b 6d 61 78 41 67 67   as an.  [maxAgg
1aaa0 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65  Func | aggregate
1aab0 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69   function] if gi
1aac0 76 65 6e 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c  ven only a singl
1aad0 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a 7d 0a  e argument.)^.}.
1aae0 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 2c  .funcdef {min(X,
1aaf0 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e 43 6f 72  Y,...)} {*minCor
1ab00 65 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d 69 6e 28  eFunc *min {min(
1ab10 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d  ) SQL function}}
1ab20 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d   {.  ^The multi-
1ab30 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66  argument min() f
1ab40 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1ab50 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74  the argument wit
1ab60 68 20 74 68 65 0a 20 20 6d 69 6e 69 6d 75 6d 20  h the.  minimum 
1ab70 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 6d 75  value..  ^The mu
1ab80 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e  lti-argument min
1ab90 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65 61 72  () function sear
1aba0 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e  ches its argumen
1abb0 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ts from left to 
1abc0 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e 20 61  right.  for an a
1abd0 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66  rgument that def
1abe0 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67  ines a collating
1abf0 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73   function and us
1ac00 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e  es that collatin
1ac10 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  g.  function for
1ac20 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70   all string comp
1ac30 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f  arisons.  ^If no
1ac40 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  ne of the argume
1ac50 6e 74 73 20 74 6f 20 6d 69 6e 28 29 0a 20 20 64  nts to min().  d
1ac60 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e  efine a collatin
1ac70 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e  g function, then
1ac80 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c   the BINARY coll
1ac90 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69  ating function i
1aca0 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e 6f 74 65  s used..  ^(Note
1acb0 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29 3c 2f   that <b>min()</
1acc0 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66  b> is a simple f
1acd0 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69  unction when.  i
1ace0 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20  t has 2 or more 
1acf0 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70  arguments but op
1ad00 65 72 61 74 65 73 20 61 73 20 61 6e 20 0a 20 20  erates as an .  
1ad10 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20 61 67  [minAggFunc | ag
1ad20 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1ad30 5d 20 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e 6c  ] if given.  onl
1ad40 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  y a single argum
1ad50 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  ent.)^.}..funcde
1ad60 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20  f {nullif(X,Y)} 
1ad70 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c 6c  {} {.  ^The null
1ad80 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  if(X,Y) function
1ad90 20 72 65 74 75 72 6e 73 20 69 74 73 20 66 69 72   returns its fir
1ada0 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74  st argument if t
1adb0 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  he arguments are
1adc0 0a 20 20 64 69 66 66 65 72 65 6e 74 20 61 6e 64  .  different and
1add0 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 61 72 67   NULL if the arg
1ade0 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 73  uments are the s
1adf0 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c 69  ame.  ^The nulli
1ae00 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 0a  f(X,Y) function.
1ae10 20 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61    searches its a
1ae20 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65  rguments from le
1ae30 66 74 20 74 6f 20 72 69 67 68 74 20 66 6f 72 20  ft to right for 
1ae40 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74  an argument that
1ae50 20 64 65 66 69 6e 65 73 20 61 0a 20 20 63 6f 6c   defines a.  col
1ae60 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
1ae70 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f  and uses that co
1ae80 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
1ae90 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 0a   for all string.
1aea0 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20    comparisons.  
1aeb0 5e 49 66 20 6e 65 69 74 68 65 72 20 61 72 67 75  ^If neither argu
1aec0 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28 29  ment to nullif()
1aed0 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61   defines a colla
1aee0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20 20  ting function.  
1aef0 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20  then the BINARY 
1af00 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e 63  is used..}..func
1af10 64 65 66 20 7b 70 72 69 6e 74 66 28 46 4f 52 4d  def {printf(FORM
1af20 41 54 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20  AT,...)} {} {.  
1af30 5e 28 54 68 65 20 70 72 69 6e 74 66 28 46 4f 52  ^(The printf(FOR
1af40 4d 41 54 2c 2e 2e 2e 29 20 53 51 4c 20 66 75 6e  MAT,...) SQL fun
1af50 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65  ction works like
1af60 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6d 70   the [sqlite3_mp
1af70 72 69 6e 74 66 28 29 5d 20 43 2d 6c 61 6e 67 75  rintf()] C-langu
1af80 61 67 65 0a 20 20 66 75 6e 63 74 69 6f 6e 20 61  age.  function a
1af90 6e 64 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  nd the printf() 
1afa0 66 75 6e 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68  function from th
1afb0 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62  e standard C lib
1afc0 72 61 72 79 2e 29 5e 0a 20 20 54 68 65 20 66 69  rary.)^.  The fi
1afd0 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69 73 20  rst argument is 
1afe0 61 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  a format string 
1aff0 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 68  that specifies h
1b000 6f 77 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ow to construct 
1b010 74 68 65 20 6f 75 74 70 75 74 0a 20 20 73 74 72  the output.  str
1b020 69 6e 67 20 75 73 69 6e 67 20 76 61 6c 75 65 73  ing using values
1b030 20 74 61 6b 65 6e 20 66 72 6f 6d 20 73 75 62 73   taken from subs
1b040 65 71 75 65 6e 74 20 61 72 67 75 6d 65 6e 74 73  equent arguments
1b050 2e 20 20 5e 49 66 20 74 68 65 20 46 4f 52 4d 41  .  ^If the FORMA
1b060 54 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 20 20  T argument is.  
1b070 6d 69 73 73 69 6e 67 20 6f 72 20 4e 55 4c 4c 20  missing or NULL 
1b080 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
1b090 69 73 20 4e 55 4c 4c 2e 20 20 5e 54 68 65 20 25  is NULL.  ^The %
1b0a0 6e 20 66 6f 72 6d 61 74 20 69 73 20 73 69 6c 65  n format is sile
1b0b0 6e 74 6c 79 20 69 67 6e 6f 72 65 64 20 61 6e 64  ntly ignored and
1b0c0 0a 20 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 73  .  does not cons
1b0d0 75 6d 65 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e  ume an argument.
1b0e0 20 20 5e 54 68 65 20 25 70 20 66 6f 72 6d 61 74    ^The %p format
1b0f0 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   is an alias for
1b100 20 25 58 2e 20 20 5e 54 68 65 20 25 7a 20 66 6f   %X.  ^The %z fo
1b110 72 6d 61 74 0a 20 20 69 73 20 69 6e 74 65 72 63  rmat.  is interc
1b120 68 61 6e 67 65 61 62 6c 65 20 77 69 74 68 20 25  hangeable with %
1b130 73 2e 20 20 5e 28 49 66 20 74 68 65 72 65 20 61  s.  ^(If there a
1b140 72 65 20 74 6f 6f 20 66 65 77 20 61 72 67 75 6d  re too few argum
1b150 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 67 75  ents in the argu
1b160 6d 65 6e 74 20 6c 69 73 74 2c 0a 20 20 6d 69 73  ment list,.  mis
1b170 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 61  sing arguments a
1b180 72 65 20 61 73 73 75 6d 65 64 20 74 6f 20 68 61  re assumed to ha
1b190 76 65 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2c  ve a NULL value,
1b1a0 20 77 68 69 63 68 20 69 73 20 74 72 61 6e 73 6c   which is transl
1b1b0 61 74 65 64 20 69 6e 74 6f 0a 20 20 30 20 6f 72  ated into.  0 or
1b1c0 20 30 2e 30 20 66 6f 72 20 6e 75 6d 65 72 69 63   0.0 for numeric
1b1d0 20 66 6f 72 6d 61 74 73 20 6f 72 20 61 6e 20 65   formats or an e
1b1e0 6d 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20  mpty string for 
1b1f0 25 73 2e 29 5e 0a 7d 0a 20 20 0a 0a 66 75 6e 63  %s.)^.}.  ..func
1b200 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b  def {quote(X)} {
1b210 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74 65  } {.  ^The quote
1b220 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
1b230 75 72 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66  urns the text of
1b240 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
1b250 77 68 69 63 68 0a 20 20 69 73 20 74 68 65 20 76  which.  is the v
1b260 61 6c 75 65 20 6f 66 20 69 74 73 20 61 72 67 75  alue of its argu
1b270 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f  ment suitable fo
1b280 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f  r inclusion into
1b290 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
1b2a0 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 61 72  t..  ^Strings ar
1b2b0 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20  e surrounded by 
1b2c0 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69  single-quotes wi
1b2d0 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e  th escapes on in
1b2e0 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 20 20  terior quotes.  
1b2f0 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c 4f  as needed.  ^BLO
1b300 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61  Bs are encoded a
1b310 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6c 69  s hexadecimal li
1b320 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74 72 69 6e  terals..  ^Strin
1b330 67 73 20 77 69 74 68 20 65 6d 62 65 64 64 65 64  gs with embedded
1b340 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 20   NUL characters 
1b350 63 61 6e 6e 6f 74 20 62 65 20 72 65 70 72 65 73  cannot be repres
1b360 65 6e 74 65 64 20 61 73 20 73 74 72 69 6e 67 0a  ented as string.
1b370 20 20 6c 69 74 65 72 61 6c 73 20 69 6e 20 53 51    literals in SQ
1b380 4c 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20  L and hence the 
1b390 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e 67 20  returned string 
1b3a0 6c 69 74 65 72 61 6c 20 69 73 20 74 72 75 6e 63  literal is trunc
1b3b0 61 74 65 64 20 70 72 69 6f 72 0a 20 20 74 6f 20  ated prior.  to 
1b3c0 74 68 65 20 66 69 72 73 74 20 4e 55 4c 2e 0a 7d  the first NUL..}
1b3d0 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f  ..funcdef {rando
1b3e0 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  m()} {} {.  ^The
1b3f0 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69   random() functi
1b400 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 70 73 65  on returns a pse
1b410 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65 67  udo-random integ
1b420 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d 39 32  er.  between -92
1b430 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
1b440 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30 33  8 and +922337203
1b450 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a 66  6854775807..}..f
1b460 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62 6c  uncdef {randombl
1b470 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ob(N)} {} {.  ^T
1b480 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29  he randomblob(N)
1b490 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1b4a0 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62 20   an N-byte blob 
1b4b0 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65 75 64  containing pseud
1b4c0 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65 73  o-random.  bytes
1b4d0 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65 73 73 20  . ^If N is less 
1b4e0 74 68 61 6e 20 31 20 74 68 65 6e 20 61 20 31 2d  than 1 then a 1-
1b4f0 62 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f 62  byte random blob
1b500 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 20   is returned... 
1b510 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69   <p>Hint:  appli
1b520 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65  cations can gene
1b530 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e  rate globally un
1b540 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 73  ique identifiers
1b550 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20 66 75  .  using this fu
1b560 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65 72 20  nction together 
1b570 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61 6e 64  with [hex()] and
1b580 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20  /or.  [lower()] 
1b590 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a  like this:</p>..
1b5a0 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20    <blockquote>. 
1b5b0 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28   hex(randomblob(
1b5c0 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20  16))<br></br>.  
1b5d0 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f 6d  lower(hex(random
1b5e0 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f 62  blob(16))).  </b
1b5f0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75  lockquote>.}..fu
1b600 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65 28 58  ncdef {replace(X
1b610 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ,Y,Z)} {} {.  ^T
1b620 68 65 20 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a  he replace(X,Y,Z
1b630 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1b640 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
1b650 65 64 20 62 79 20 73 75 62 73 74 69 74 75 74 69  ed by substituti
1b660 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a 20 66 6f  ng.  string Z fo
1b670 72 20 65 76 65 72 79 20 6f 63 63 75 72 72 65 6e  r every occurren
1b680 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20 69  ce of string Y i
1b690 6e 20 73 74 72 69 6e 67 20 58 2e 20 20 5e 54 68  n string X.  ^Th
1b6a0 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f 6c  e [BINARY].  col
1b6b0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
1b6c0 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f 6d 70  is used for comp
1b6d0 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59 20  arisons.  ^If Y 
1b6e0 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20 73 74  is an empty.  st
1b6f0 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75 72 6e  ring then return
1b700 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 20 20 5e   X unchanged.  ^
1b710 49 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69 74  If Z is not init
1b720 69 61 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e 67  ially.  a string
1b730 2c 20 69 74 20 69 73 20 63 61 73 74 20 74 6f 20  , it is cast to 
1b740 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70  a UTF-8 string p
1b750 72 69 6f 72 20 74 6f 20 70 72 6f 63 65 73 73 69  rior to processi
1b760 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ng..}..funcdef {
1b770 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64 28 58  round(X) round(X
1b780 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1b790 20 72 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e 63   round(X,Y) func
1b7a0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 66  tion returns a f
1b7b0 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20 20  loating-point.  
1b7c0 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65 64 20  value X rounded 
1b7d0 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f 20 74  to Y digits to t
1b7e0 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65 20  he right of the 
1b7f0 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a 20  decimal point.. 
1b800 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
1b810 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
1b820 69 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  it is assumed to
1b830 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63 64 65   be 0..}..funcde
1b840 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74 72 69  f {rtrim(X) rtri
1b850 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  m(X,Y)} {} {.  ^
1b860 54 68 65 20 72 74 72 69 6d 28 58 2c 59 29 20 66  The rtrim(X,Y) f
1b870 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1b880 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20  a string formed 
1b890 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20  by removing any 
1b8a0 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63  and all.  charac
1b8b0 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61 72  ters that appear
1b8c0 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65 20 72   in Y from the r
1b8d0 69 67 68 74 20 73 69 64 65 20 6f 66 20 58 2e 0a  ight side of X..
1b8e0 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
1b8f0 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
1b900 20 72 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65   rtrim(X) remove
1b910 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74 68  s spaces from th
1b920 65 20 72 69 67 68 74 0a 20 20 73 69 64 65 20 6f  e right.  side o
1b930 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
1b940 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b 7d 20  {soundex(X)} {} 
1b950 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e 64 65 78  {.  ^The soundex
1b960 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
1b970 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68  urns a string th
1b980 61 74 20 69 73 20 74 68 65 20 73 6f 75 6e 64 65  at is the sounde
1b990 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20 20 6f 66  x encoding .  of
1b9a0 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20   the string X.. 
1b9b0 20 5e 54 68 65 20 73 74 72 69 6e 67 20 22 3f 30   ^The string "?0
1b9c0 30 30 22 20 69 73 20 72 65 74 75 72 6e 65 64 20  00" is returned 
1b9d0 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
1b9e0 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74 61  is NULL or conta
1b9f0 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49 49 20 61  ins.  no ASCII a
1ba00 6c 70 68 61 62 65 74 69 63 20 63 68 61 72 61 63  lphabetic charac
1ba10 74 65 72 73 2e 0a 20 20 5e 28 54 68 69 73 20 66  ters..  ^(This f
1ba20 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74  unction is omitt
1ba30 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 62  ed from SQLite b
1ba40 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49 74 20  y default..  It 
1ba50 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c  is only availabl
1ba60 65 20 69 66 20 74 68 65 20 5b 53 51 4c 49 54 45  e if the [SQLITE
1ba70 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d 70 69 6c  _SOUNDEX] compil
1ba80 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20  e-time option.  
1ba90 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51 4c  is used when SQL
1baa0 69 74 65 20 69 73 20 62 75 69 6c 74 2e 29 5e 0a  ite is built.)^.
1bab0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
1bac0 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
1bad0 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20  _get(N)} {} {.  
1bae0 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70  ^The sqlite_comp
1baf0 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29 20  ileoption_get() 
1bb00 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
1bb10 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
1bb20 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
1bb30 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
1bb40 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74  t()] C/C++ funct
1bb50 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20 72 6f 75  ion..  ^This rou
1bb60 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65  tine returns the
1bb70 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d 74 69   N-th compile-ti
1bb80 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74  me option used t
1bb90 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 0a 20  o build SQLite. 
1bba0 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e 20 69 73   or NULL if N is
1bbb0 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 20 20   out of range.  
1bbc0 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b 63 6f  See also the [co
1bbd0 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70 72  mpile_options pr
1bbe0 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65  agma]..}..funcde
1bbf0 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  f {sqlite_compil
1bc00 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 7d  eoption_used(X)}
1bc10 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c   {} {.  ^The sql
1bc20 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
1bc30 6e 5f 75 73 65 64 28 29 20 53 51 4c 20 66 75 6e  n_used() SQL fun
1bc40 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
1bc50 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20  er around the.  
1bc60 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65  [sqlite3_compile
1bc70 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d 20 43  option_used()] C
1bc80 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  /C++ function.. 
1bc90 20 5e 57 68 65 6e 20 74 68 65 20 61 72 67 75 6d   ^When the argum
1bca0 65 6e 74 20 58 20 74 6f 20 73 71 6c 69 74 65 5f  ent X to sqlite_
1bcb0 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
1bcc0 65 64 28 58 29 20 69 73 20 61 20 73 74 72 69 6e  ed(X) is a strin
1bcd0 67 20 77 68 69 63 68 0a 20 20 69 73 20 74 68 65  g which.  is the
1bce0 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6d 70 69   name of a compi
1bcf0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20  le-time option, 
1bd00 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  this routine ret
1bd10 75 72 6e 73 20 74 72 75 65 20 28 31 29 20 6f 72  urns true (1) or
1bd20 0a 20 20 66 61 6c 73 65 20 28 30 29 20 64 65 70  .  false (0) dep
1bd30 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
1bd40 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 6f 70  r or not that op
1bd50 74 69 6f 6e 20 77 61 73 20 75 73 65 64 20 64 75  tion was used du
1bd60 72 69 6e 67 20 74 68 65 0a 20 20 62 75 69 6c 64  ring the.  build
1bd70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
1bd80 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29  lite_source_id()
1bd90 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
1bda0 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29  lite_source_id()
1bdb0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1bdc0 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
1bdd0 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 0a 20  identifies the. 
1bde0 20 73 70 65 63 69 66 69 63 20 76 65 72 73 69 6f   specific versio
1bdf0 6e 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20  n of the source 
1be00 63 6f 64 65 20 74 68 61 74 20 77 61 73 20 75 73  code that was us
1be10 65 64 20 74 6f 20 62 75 69 6c 64 20 74 68 65 20  ed to build the 
1be20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61 72 79  SQLite.  library
1be30 2e 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20 72  .  ^The string r
1be40 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
1be50 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 62 65  e_source_id() be
1be60 67 69 6e 73 20 77 69 74 68 0a 20 20 74 68 65 20  gins with.  the 
1be70 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 74 68  date and time th
1be80 61 74 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f  at the source co
1be90 64 65 20 77 61 73 20 63 68 65 63 6b 65 64 20 69  de was checked i
1bea0 6e 20 61 6e 64 20 69 73 20 66 6f 6c 6c 6f 77 73  n and is follows
1beb0 20 62 79 0a 20 20 61 6e 20 53 48 41 31 20 68 61   by.  an SHA1 ha
1bec0 73 68 20 74 68 61 74 20 75 6e 69 71 75 65 6c 79  sh that uniquely
1bed0 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 20   identifies the 
1bee0 73 6f 75 72 63 65 20 74 72 65 65 2e 20 20 5e 54  source tree.  ^T
1bef0 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a  his function is.
1bf00 20 20 61 6e 20 53 51 4c 20 77 72 61 70 70 65 72    an SQL wrapper
1bf10 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c   around the [sql
1bf20 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 5d  ite3_sourceid()]
1bf30 20 43 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a   C interface..}.
1bf40 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65  .funcdef {sqlite
1bf50 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b 7d 20 7b  _version()} {} {
1bf60 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 76  .  ^The sqlite_v
1bf70 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f  ersion() functio
1bf80 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 76 65  n returns the ve
1bf90 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66 6f 72  rsion string for
1bfa0 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69   the SQLite.  li
1bfb0 62 72 61 72 79 20 74 68 61 74 20 69 73 20 72 75  brary that is ru
1bfc0 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73 20 66 75  nning.  ^This fu
1bfd0 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  nction is an SQL
1bfe0 0a 20 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e  .  wrapper aroun
1bff0 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c  d the [sqlite3_l
1c000 69 62 76 65 72 73 69 6f 6e 28 29 5d 20 43 2d 69  ibversion()] C-i
1c010 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e  nterface..}..fun
1c020 63 64 65 66 20 7b 73 75 62 73 74 72 28 58 2c 59  cdef {substr(X,Y
1c030 2c 5a 29 20 73 75 62 73 74 72 28 58 2c 59 29 7d  ,Z) substr(X,Y)}
1c040 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 62   {} {.  ^The sub
1c050 73 74 72 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74  str(X,Y,Z) funct
1c060 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 75  ion returns a su
1c070 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75 74  bstring of input
1c080 20 73 74 72 69 6e 67 20 58 20 74 68 61 74 20 62   string X that b
1c090 65 67 69 6e 73 0a 20 20 77 69 74 68 20 74 68 65  egins.  with the
1c0a0 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20   Y-th character 
1c0b0 61 6e 64 20 77 68 69 63 68 20 69 73 20 5a 20 63  and which is Z c
1c0c0 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a  haracters long..
1c0d0 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d 69 74 74    ^If Z is omitt
1c0e0 65 64 20 74 68 65 6e 20 73 75 62 73 74 72 28 58  ed then substr(X
1c0f0 2c 59 29 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  ,Y) returns all 
1c100 63 68 61 72 61 63 74 65 72 73 20 74 68 72 6f 75  characters throu
1c110 67 68 20 74 68 65 20 65 6e 64 0a 20 20 6f 66 20  gh the end.  of 
1c120 74 68 65 20 73 74 72 69 6e 67 20 58 20 62 65 67  the string X beg
1c130 69 6e 6e 69 6e 67 20 77 69 74 68 20 74 68 65 20  inning with the 
1c140 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20 6c 65 66  Y-th..  ^The lef
1c150 74 2d 6d 6f 73 74 20 63 68 61 72 61 63 74 65 72  t-most character
1c160 20 6f 66 20 58 20 69 73 20 6e 75 6d 62 65 72 20   of X is number 
1c170 31 2e 20 20 5e 49 66 20 59 20 69 73 20 6e 65 67  1.  ^If Y is neg
1c180 61 74 69 76 65 0a 20 20 74 68 65 6e 20 74 68 65  ative.  then the
1c190 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72   first character
1c1a0 20 6f 66 20 74 68 65 20 73 75 62 73 74 72 69 6e   of the substrin
1c1b0 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63 6f  g is found by co
1c1c0 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a  unting from the.
1c1d0 20 20 72 69 67 68 74 20 72 61 74 68 65 72 20 74    right rather t
1c1e0 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20 20 5e  han the left.  ^
1c1f0 49 66 20 5a 20 69 73 20 6e 65 67 61 74 69 76 65  If Z is negative
1c200 20 74 68 65 6e 0a 20 20 74 68 65 20 61 62 73 28   then.  the abs(
1c210 5a 29 20 63 68 61 72 61 63 74 65 72 73 20 70 72  Z) characters pr
1c220 65 63 65 64 69 6e 67 20 74 68 65 20 59 2d 74 68  eceding the Y-th
1c230 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20 72   character are r
1c240 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49 66 20 58  eturned..  ^If X
1c250 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 65   is a string the
1c260 6e 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 64  n characters ind
1c270 69 63 65 73 20 72 65 66 65 72 20 74 6f 20 61 63  ices refer to ac
1c280 74 75 61 6c 20 55 54 46 2d 38 20 0a 20 20 63 68  tual UTF-8 .  ch
1c290 61 72 61 63 74 65 72 73 2e 20 20 5e 49 66 20 58  aracters.  ^If X
1c2a0 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65 6e 20   is a BLOB then 
1c2b0 74 68 65 20 69 6e 64 69 63 65 73 20 72 65 66 65  the indices refe
1c2c0 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66  r to bytes..}..f
1c2d0 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f 63 68  uncdef {total_ch
1c2e0 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20  anges()} {} {.  
1c2f0 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68 61 6e 67  ^The total_chang
1c300 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  es() function re
1c310 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
1c320 20 6f 66 20 72 6f 77 20 63 68 61 6e 67 65 73 0a   of row changes.
1c330 20 20 63 61 75 73 65 64 20 62 79 20 49 4e 53 45    caused by INSE
1c340 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1c350 4c 45 54 45 0a 20 20 73 74 61 74 65 6d 65 6e 74  LETE.  statement
1c360 73 20 73 69 6e 63 65 20 74 68 65 20 63 75 72 72  s since the curr
1c370 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ent database con
1c380 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e  nection was open
1c390 65 64 2e 0a 20 20 5e 54 68 69 73 20 66 75 6e 63  ed..  ^This func
1c3a0 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65  tion is a wrappe
1c3b0 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
1c3c0 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
1c3d0 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 69  ges()].  C/C++ i
1c3e0 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e  nterface..}..fun
1c3f0 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20 74 72  cdef {trim(X) tr
1c400 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  im(X,Y)} {} {.  
1c410 5e 54 68 65 20 74 72 69 6d 28 58 2c 59 29 20 66  ^The trim(X,Y) f
1c420 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1c430 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20  a string formed 
1c440 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20  by removing any 
1c450 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63  and all.  charac
1c460 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61 72  ters that appear
1c470 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f 74 68 20   in Y from both 
1c480 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20 5e 49 66  ends of X..  ^If
1c490 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20   the Y argument 
1c4a0 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 72 69 6d  is omitted, trim
1c4b0 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63  (X) removes spac
1c4c0 65 73 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64  es from both end
1c4d0 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64  s of X..}..funcd
1c4e0 65 66 20 7b 74 79 70 65 6f 66 28 58 29 7d 20 7b  ef {typeof(X)} {
1c4f0 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79 70 65 6f  } {.  ^The typeo
1c500 66 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  f(X) function re
1c510 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
1c520 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68  hat indicates th
1c530 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f 66 0a  e [datatype] of.
1c540 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e    the expression
1c550 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74   X: "null", "int
1c560 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c 20 22  eger", "real", "
1c570 74 65 78 74 22 2c 20 6f 72 20 22 62 6c 6f 62 22  text", or "blob"
1c580 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e  ..}..funcdef {un
1c590 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a  likely(X)} {} {.
1c5a0 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28    ^The unlikely(
1c5b0 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1c5c0 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74  rns the argument
1c5d0 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20   X unchanged..  
1c5e0 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29  ^The unlikely(X)
1c5f0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e   function is a n
1c600 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20 63 6f  o-op that the co
1c610 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f  de generator.  o
1c620 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20 73 6f  ptimizes away so
1c630 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75 6d 65   that it consume
1c640 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65 73 20  s no CPU cycles 
1c650 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20 28 74  at.  run-time (t
1c660 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63  hat is, during c
1c670 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33  alls to [sqlite3
1c680 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68  _step()])..  ^Th
1c690 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65  e purpose of the
1c6a0 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e   unlikely(X) fun
1c6b0 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76  ction is to prov
1c6c0 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20  ide a hint.  to 
1c6d0 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  the query planne
1c6e0 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75 6d  r that the argum
1c6f0 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65  ent X is a boole
1c700 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61 74 20  an value.  that 
1c710 69 73 20 75 73 75 61 6c 6c 79 20 6e 6f 74 20 74  is usually not t
1c720 72 75 65 2e 20 5e 28 54 68 65 20 75 6e 6c 69 6b  rue. ^(The unlik
1c730 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1c740 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20  is equivalent.  
1c750 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28  to [likelihood](
1c760 58 2c 20 30 2e 30 36 32 35 29 2e 29 5e 0a 7d 0a  X, 0.0625).)^.}.
1c770 0a 66 75 6e 63 64 65 66 20 7b 75 6e 69 63 6f 64  .funcdef {unicod
1c780 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  e(X)} {} {.  ^Th
1c790 65 20 75 6e 69 63 6f 64 65 28 58 29 20 66 75 6e  e unicode(X) fun
1c7a0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1c7b0 65 20 6e 75 6d 65 72 69 63 20 75 6e 69 63 6f 64  e numeric unicod
1c7c0 65 20 63 6f 64 65 20 70 6f 69 6e 74 20 63 6f 72  e code point cor
1c7d0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0a 20 20  responding to.  
1c7e0 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63  the first charac
1c7f0 74 65 72 20 6f 66 20 74 68 65 20 73 74 72 69 6e  ter of the strin
1c800 67 20 58 2e 20 20 49 66 20 74 68 65 20 61 72 67  g X.  If the arg
1c810 75 6d 65 6e 74 20 74 6f 20 75 6e 69 63 6f 64 65  ument to unicode
1c820 28 58 29 20 69 73 20 6e 6f 74 20 61 20 73 74 72  (X) is not a str
1c830 69 6e 67 0a 20 20 74 68 65 6e 20 74 68 65 20 72  ing.  then the r
1c840 65 73 75 6c 74 20 69 73 20 75 6e 64 65 66 69 6e  esult is undefin
1c850 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ed..}..funcdef {
1c860 75 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20  upper(X)} {} {. 
1c870 20 5e 54 68 65 20 75 70 70 65 72 28 58 29 20 66   ^The upper(X) f
1c880 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1c890 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20  a copy of input 
1c8a0 73 74 72 69 6e 67 20 58 20 69 6e 20 77 68 69 63  string X in whic
1c8b0 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d 63  h all .  lower-c
1c8c0 61 73 65 20 41 53 43 49 49 20 63 68 61 72 61 63  ase ASCII charac
1c8d0 74 65 72 73 20 61 72 65 20 63 6f 6e 76 65 72 74  ters are convert
1c8e0 65 64 20 74 6f 20 74 68 65 69 72 20 75 70 70 65  ed to their uppe
1c8f0 72 2d 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e  r-case equivalen
1c900 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 7a  t..}..funcdef {z
1c910 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b  eroblob(N)} {} {
1c920 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c 6f 62  .  ^The zeroblob
1c930 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (N) function ret
1c940 75 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f 6e 73  urns a BLOB cons
1c950 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79 74 65  isting of N byte
1c960 73 20 6f 66 20 30 78 30 30 2e 0a 20 20 53 51 4c  s of 0x00..  SQL
1c970 69 74 65 20 6d 61 6e 61 67 65 73 20 74 68 65 73  ite manages thes
1c980 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72 79  e zeroblobs very
1c990 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20 20 5a   efficiently.  Z
1c9a0 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65 20  eroblobs can be 
1c9b0 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65 72 76  used to.  reserv
1c9c0 65 20 73 70 61 63 65 20 66 6f 72 20 61 20 42 4c  e space for a BL
1c9d0 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74 65 72  OB that is later
1c9e0 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67 20 0a   written using .
1c9f0 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f    [sqlite3_blob_
1ca00 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d 65  open() | increme
1ca10 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e 0a  ntal BLOB I/O]..
1ca20 20 20 5e 54 68 69 73 20 53 51 4c 20 66 75 6e 63    ^This SQL func
1ca30 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e  tion is implemen
1ca40 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 73  ted using the [s
1ca50 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65  qlite3_result_ze
1ca60 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f 75 74  roblob()].  rout
1ca70 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 43 2f 43  ine from the C/C
1ca80 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
1ca90 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  </tcl>.</table>.
1caa0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
1cab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1caf0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
1cb00 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75 6e  ate And Time Fun
1cb10 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63  ctions} datefunc
1cb20 20 7b 2a 64 61 74 65 66 75 6e 63 7d 0a 68 64 5f   {*datefunc}.hd_
1cb30 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65 28 29  keywords {date()
1cb40 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b   SQL function} {
1cb50 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74  time() SQL funct
1cb60 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73  ion}.hd_keywords
1cb70 20 7b 64 61 74 65 74 69 6d 65 28 29 20 53 51 4c   {datetime() SQL
1cb80 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69   function} {juli
1cb90 61 6e 64 61 79 28 29 20 53 51 4c 20 66 75 6e 63  anday() SQL func
1cba0 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64  tion}.hd_keyword
1cbb0 73 20 7b 73 74 72 66 74 69 6d 65 28 29 20 53 51  s {strftime() SQ
1cbc0 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63  L function}.</tc
1cbd0 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73  l>..<p>.SQLite s
1cbe0 75 70 70 6f 72 74 73 20 66 69 76 65 20 64 61 74  upports five dat
1cbf0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1cc00 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ions as follows:
1cc10 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a  .</p>..<p>.<ol>.
1cc20 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c  <li> ^(<b>date(<
1cc30 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
1cc40 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
1cc50 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
1cc60 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
1cc70 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62  i> ^(<b>time(</b
1cc80 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
1cc90 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
1cca0 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
1ccb0 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
1ccc0 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c   ^(<b>datetime(<
1ccd0 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
1cce0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
1ccf0 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
1cd00 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
1cd10 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61  i> ^(<b>julianda
1cd20 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72  y(</b><i>timestr
1cd30 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
1cd40 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
1cd50 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
1cd60 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74  .<li> ^(<b>strft
1cd70 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61  ime(</b><i>forma
1cd80 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  t, timestring, m
1cd90 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1cda0 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1cdb0 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  b>)^ </li>.</ol>
1cdc0 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20  ..<p>.^All five 
1cdd0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
1cde0 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74  nctions take a t
1cdf0 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e  ime string as an
1ce00 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65   argument. .^The
1ce10 20 74 69 6d 65 20 73 74 72 69 6e 67 20 69 73 20   time string is 
1ce20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f  followed by zero
1ce30 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65   or more modifie
1ce40 72 73 2e 20 0a 5e 54 68 65 20 73 74 72 66 74 69  rs. .^The strfti
1ce50 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c  me() function al
1ce60 73 6f 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61  so takes a forma
1ce70 74 20 73 74 72 69 6e 67 20 61 73 20 69 74 73 20  t string as its 
1ce80 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
1ce90 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61  </p>..<p>.The da
1cea0 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1ceb0 74 69 6f 6e 73 20 75 73 65 20 61 20 73 75 62 73  tions use a subs
1cec0 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e  et of.[http://en
1ced0 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1cee0 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49  iki/ISO_8601 | I
1cef0 53 30 2d 38 36 30 31 5d 20 64 61 74 65 20 61 6e  S0-8601] date an
1cf00 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a  d time.formats..
1cf10 5e 54 68 65 20 64 61 74 65 28 29 20 66 75 6e 63  ^The date() func
1cf20 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1cf30 20 64 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f   date in this fo
1cf40 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44  rmat: YYYY-MM-DD
1cf50 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28 29 20 66  . .^The time() f
1cf60 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1cf70 74 68 65 20 74 69 6d 65 20 61 73 20 48 48 3a 4d  the time as HH:M
1cf80 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61 74 65  M:SS. .^The date
1cf90 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  time() function 
1cfa0 72 65 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d  returns "YYYY-MM
1cfb0 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a  -DD HH:MM:SS". .
1cfc0 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28  ^(The julianday(
1cfd0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1cfe0 6e 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f  ns the .[http://
1cff0 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1d000 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79  /wiki/Julian_day
1d010 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d   | Julian day] -
1d020 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64   the.number of d
1d030 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69  ays since noon i
1d040 6e 20 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e  n Greenwich on N
1d050 6f 76 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34  ovember 24, 4714
1d060 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f   B.C. .([http://
1d070 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1d080 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f  /wiki/Proleptic_
1d090 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64  Gregorian_calend
1d0a0 61 72 20 7c 20 50 72 6f 6c 65 70 74 69 63 20 47  ar | Proleptic G
1d0b0 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61  regorian calenda
1d0c0 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66  r]).)^.^The strf
1d0d0 74 69 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72  time() routine r
1d0e0 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 65 20  eturns the date 
1d0f0 66 6f 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64  formatted accord
1d100 69 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d  ing to .the form
1d110 61 74 20 73 74 72 69 6e 67 20 73 70 65 63 69 66  at string specif
1d120 69 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74  ied as the first
1d130 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20   argument..^The 
1d140 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75  format string su
1d150 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20  pports the most 
1d160 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74  common substitut
1d170 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  ions found in th
1d180 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67  e .[http://openg
1d190 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70  roup.org/onlinep
1d1a0 75 62 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73  ubs/007908799/xs
1d1b0 68 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20  h/strftime.html 
1d1c0 7c 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e  | strftime() fun
1d1d0 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20  ction].from the 
1d1e0 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61  standard C libra
1d1f0 72 79 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20  ry plus two new 
1d200 73 75 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25  substitutions, %
1d210 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20  f and %J..^(The 
1d220 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 63  following is a c
1d230 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f 66 20  omplete list of 
1d240 76 61 6c 69 64 20 73 74 72 66 74 69 6d 65 28 29  valid strftime()
1d250 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a   substitutions:.
1d260 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1d270 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  e>.<table border
1d280 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67  ="0" cellpadding
1d290 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67  ="0" cellspacing
1d2a0 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74  ="0">.<tr><td><t
1d2b0 64 20 77 69 64 74 68 3d 22 31 30 22 3e 3c 74 64  d width="10"><td
1d2c0 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e  ></tr>..<tr><td>
1d2d0 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79   %d <td><td> day
1d2e0 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74   of month: 00.<t
1d2f0 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74  r><td> %f <td><t
1d300 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65  d> fractional se
1d310 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74  conds: SS.SSS.<t
1d320 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74  r><td> %H <td><t
1d330 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a  d> hour: 00-24 .
1d340 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e  <tr><td> %j <td>
1d350 3c 74 64 3e 20 64 61 79 20 6f 66 20 79 65 61 72  <td> day of year
1d360 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74  : 001-366.<tr><t
1d370 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a  d> %J <td><td> J
1d380 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  ulian day number
1d390 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64  .<tr><td> %m <td
1d3a0 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d  ><td> month: 01-
1d3b0 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c  12.<tr><td> %M <
1d3c0 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20  td><td> minute: 
1d3d0 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25  00-59.<tr><td> %
1d3e0 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e  s <td><td> secon
1d3f0 64 73 20 73 69 6e 63 65 20 31 39 37 30 2d 30 31  ds since 1970-01
1d400 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20  -01.<tr><td> %S 
1d410 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73  <td><td> seconds
1d420 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e  : 00-59.<tr><td>
1d430 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79   %w <td><td> day
1d440 20 6f 66 20 77 65 65 6b 20 30 2d 36 20 77 69 74   of week 0-6 wit
1d450 68 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e  h Sunday==0.<tr>
1d460 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e  <td> %W <td><td>
1d470 20 77 65 65 6b 20 6f 66 20 79 65 61 72 3a 20 30   week of year: 0
1d480 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59  0-53.<tr><td> %Y
1d490 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20   <td><td> year: 
1d4a0 30 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74  0000-9999.<tr><t
1d4b0 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25  d> %% <td><td> %
1d4c0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
1d4d0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e  kquote>)^..<p>.^
1d4e0 28 4e 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c  (Notice that all
1d4f0 20 6f 74 68 65 72 20 64 61 74 65 20 61 6e 64 20   other date and 
1d500 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63  time functions c
1d510 61 6e 20 62 65 20 65 78 70 72 65 73 73 65 64 0a  an be expressed.
1d520 69 6e 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66  in terms of strf
1d530 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62  time():.</p>..<b
1d540 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
1d550 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c  e border="0" cel
1d560 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c  lpadding="0" cel
1d570 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74  lspacing="0">.<t
1d580 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f  r><td><b>Functio
1d590 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22  n</b><td width="
1d5a0 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76  30"><td><b>Equiv
1d5b0 61 6c 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29  alent strftime()
1d5c0 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  </b>.<tr><td>   
1d5d0 64 61 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c  date(...)      <
1d5e0 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
1d5f0 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e  e('%Y-%m-%d', ..
1d600 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69  .).<tr><td>   ti
1d610 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64  me(...)      <td
1d620 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
1d630 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29  '%H:%M:%S', ...)
1d640 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65  .<tr><td>   date
1d650 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c  time(...)  <td><
1d660 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25  td>  strftime('%
1d670 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53  Y-%m-%d %H:%M:%S
1d680 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e  ', ...).<tr><td>
1d690 20 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e     julianday(...
1d6a0 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66  ) <td><td>  strf
1d6b0 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a  time('%J', ...).
1d6c0 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
1d6d0 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68  quote>)^..<p>.Th
1d6e0 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66  e only reasons f
1d6f0 6f 72 20 70 72 6f 76 69 64 69 6e 67 20 66 75 6e  or providing fun
1d700 63 74 69 6f 6e 73 20 6f 74 68 65 72 20 74 68 61  ctions other tha
1d710 6e 20 73 74 72 66 74 69 6d 65 28 29 20 69 73 0a  n strftime() is.
1d720 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  for convenience 
1d730 61 6e 64 20 66 6f 72 20 65 66 66 69 63 69 65 6e  and for efficien
1d740 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69  cy..</p>..<h3>Ti
1d750 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a  me Strings</h3>.
1d760 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73 74 72  .<p>^(A time str
1d770 69 6e 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e  ing can be in an
1d780 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  y of the followi
1d790 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a  ng formats:</p>.
1d7a0 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  .<ol>.<li> <i>YY
1d7b0 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69  YY-MM-DD</i>.<li
1d7c0 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20  > <i>YYYY-MM-DD 
1d7d0 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  HH:MM</i>.<li> <
1d7e0 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a  i>YYYY-MM-DD HH:
1d7f0 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM:SS</i>.<li> <
1d800 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a  i>YYYY-MM-DD HH:
1d810 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c  MM:SS.SSS</i>.<l
1d820 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1d830 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48  </i><b>T</b><i>H
1d840 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
1d850 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
1d860 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a  b>T</b><i>HH:MM:
1d870 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  SS</i>.<li> <i>Y
1d880 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e  YYY-MM-DD</i><b>
1d890 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53  T</b><i>HH:MM:SS
1d8a0 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  .SSS</i>.<li> <i
1d8b0 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20  >HH:MM</i>.<li> 
1d8c0 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a  <i>HH:MM:SS</i>.
1d8d0 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53  <li> <i>HH:MM:SS
1d8e0 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62  .SSS</i>.<li> <b
1d8f0 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69  >now</b>.<li> <i
1d900 3e 44 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a  >DDDDDDDDDD</i>.
1d910 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e  </ol>)^..<p>.^In
1d920 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75   formats 5 throu
1d930 67 68 20 37 2c 20 74 68 65 20 22 54 22 20 69 73  gh 7, the "T" is
1d940 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61   a literal chara
1d950 63 74 65 72 20 73 65 70 61 72 61 74 69 6e 67 20  cter separating 
1d960 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 68  .the date and th
1d970 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69  e time, as requi
1d980 72 65 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f  red by .[http://
1d990 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e  www.w3c.org/TR/N
1d9a0 4f 54 45 2d 64 61 74 65 74 69 6d 65 20 7c 20 49  OTE-datetime | I
1d9b0 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d  SO-8601]. .^Form
1d9c0 61 74 73 20 38 20 74 68 72 6f 75 67 68 20 31 30  ats 8 through 10
1d9d0 20 74 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e   that specify on
1d9e0 6c 79 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65  ly a time assume
1d9f0 20 61 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30   a date of .2000
1da00 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31  -01-01. Format 1
1da10 31 2c 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e  1, the string 'n
1da20 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65  ow', is converte
1da30 64 20 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72  d into the .curr
1da40 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ent date and tim
1da50 65 20 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72  e as obtained fr
1da60 6f 6d 20 74 68 65 20 78 43 75 72 72 65 6e 74 54  om the xCurrentT
1da70 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68  ime method.of th
1da80 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20  e [sqlite3_vfs] 
1da90 6f 62 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e  object in use..^
1daa0 54 68 65 20 27 6e 6f 77 27 20 61 72 67 75 6d 65  The 'now' argume
1dab0 6e 74 20 74 6f 20 64 61 74 65 20 61 6e 64 20 74  nt to date and t
1dac0 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c  ime functions al
1dad0 77 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61  ways returns exa
1dae0 63 74 6c 79 20 74 68 65 0a 73 61 6d 65 20 76 61  ctly the.same va
1daf0 6c 75 65 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65  lue for multiple
1db00 20 69 6e 76 6f 63 61 74 69 6f 6e 73 20 77 69 74   invocations wit
1db10 68 69 6e 20 74 68 65 20 73 61 6d 65 20 5b 73 71  hin the same [sq
1db20 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 20 63 61  lite3_step()] ca
1db30 6c 6c 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e  ll..^[http://en.
1db40 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1db50 6b 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55  ki/Coordinated_U
1db60 6e 69 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20  niversal_Time | 
1db70 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69  Universal Coordi
1db80 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29  nated Time (UTC)
1db90 5d 20 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72  ] is used. .^For
1dba0 6d 61 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b  mat 12 is the .[
1dbb0 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1dbc0 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c  dia.org/wiki/Jul
1dbd0 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e  ian_day | Julian
1dbe0 20 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70   day number].exp
1dbf0 72 65 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61  ressed as a floa
1dc00 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
1dc10 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d  ..</p>..<p>.Form
1dc20 61 74 73 20 32 20 74 68 72 6f 75 67 68 20 31 30  ats 2 through 10
1dc30 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
1dc40 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ly followed by a
1dc50 20 74 69 6d 65 7a 6f 6e 65 20 69 6e 64 69 63 61   timezone indica
1dc60 74 6f 72 20 6f 66 20 74 68 65 20 66 6f 72 6d 0a  tor of the form.
1dc70 22 3c 69 3e 26 23 39 31 3b 2b 2d 26 23 39 33 3b  "<i>&#91;+-&#93;
1dc80 48 48 3a 4d 4d 3c 2f 69 3e 22 20 6f 72 20 6a 75  HH:MM</i>" or ju
1dc90 73 74 20 22 3c 69 3e 5a 3c 2f 69 3e 22 2e 20 20  st "<i>Z</i>".  
1dca0 54 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  The date and tim
1dcb0 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20  e functions use 
1dcc0 55 54 43 20 6f 72 20 22 7a 75 6c 75 22 0a 74 69  UTC or "zulu".ti
1dcd0 6d 65 20 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 61  me internally, a
1dce0 6e 64 20 73 6f 20 74 68 65 20 22 5a 22 20 73 75  nd so the "Z" su
1dcf0 66 66 69 78 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  ffix is a no-op.
1dd00 20 20 41 6e 79 20 6e 6f 6e 2d 7a 65 72 6f 20 22    Any non-zero "
1dd10 48 48 3a 4d 4d 22 20 73 75 66 66 69 78 20 69 73  HH:MM" suffix is
1dd20 0a 73 75 62 74 72 61 63 74 65 64 20 66 72 6f 6d  .subtracted from
1dd30 20 74 68 65 20 69 6e 64 69 63 61 74 65 64 20 64   the indicated d
1dd40 61 74 65 20 61 6e 64 20 74 69 6d 65 20 69 6e 20  ate and time in 
1dd50 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65  order to compute
1dd60 20 7a 75 6c 75 20 74 69 6d 65 2e 0a 46 6f 72 20   zulu time..For 
1dd70 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 6f 66 20  example, all of 
1dd80 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 69  the following ti
1dd90 6d 65 20 73 74 72 69 6e 67 73 20 61 72 65 20 65  me strings are e
1dda0 71 75 69 76 61 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a  quivalent:.</p>.
1ddb0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 32 30  .<blockquote>.20
1ddc0 31 33 2d 31 30 2d 30 37 20 30 38 3a 32 33 3a 31  13-10-07 08:23:1
1ddd0 39 2e 31 32 30 3c 62 72 3e 0a 32 30 31 33 2d 31  9.120<br>.2013-1
1dde0 30 2d 30 37 54 30 38 3a 32 33 3a 31 39 2e 31 32  0-07T08:23:19.12
1ddf0 30 5a 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30  0Z<br>.2013-10-0
1de00 37 20 30 34 3a 32 33 3a 31 39 2e 31 32 30 2d 30  7 04:23:19.120-0
1de10 34 3a 30 30 3c 62 72 3e 0a 32 34 35 36 35 37 32  4:00<br>.2456572
1de20 2e 38 34 39 35 32 36 38 35 0a 3c 2f 62 6c 6f 63  .84952685.</bloc
1de30 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e 28 49  kquote>..<p>.^(I
1de40 6e 20 66 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20  n formats 4, 7, 
1de50 61 6e 64 20 31 30 2c 20 74 68 65 20 66 72 61 63  and 10, the frac
1de60 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76  tional seconds v
1de70 61 6c 75 65 20 53 53 2e 53 53 53 20 63 61 6e 20  alue SS.SSS can 
1de80 68 61 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65  have.one or more
1de90 20 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e   digits followin
1dea0 67 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  g the decimal po
1deb0 69 6e 74 2e 20 20 45 78 61 63 74 6c 79 20 74 68  int.  Exactly th
1dec0 72 65 65 20 64 69 67 69 74 73 20 61 72 65 0a 73  ree digits are.s
1ded0 68 6f 77 6e 20 69 6e 20 74 68 65 20 65 78 61 6d  hown in the exam
1dee0 70 6c 65 73 20 62 65 63 61 75 73 65 20 6f 6e 6c  ples because onl
1def0 79 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65  y the first thre
1df00 65 20 64 69 67 69 74 73 20 61 72 65 20 73 69 67  e digits are sig
1df10 6e 69 66 69 63 61 6e 74 0a 74 6f 20 74 68 65 20  nificant.to the 
1df20 72 65 73 75 6c 74 2c 20 62 75 74 20 74 68 65 20  result, but the 
1df30 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63 61 6e  input string can
1df40 20 68 61 76 65 20 66 65 77 65 72 20 6f 72 20 6d   have fewer or m
1df50 6f 72 65 20 74 68 61 6e 20 74 68 72 65 65 20 64  ore than three d
1df60 69 67 69 74 73 0a 61 6e 64 20 74 68 65 20 64 61  igits.and the da
1df70 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  te/time function
1df80 73 20 77 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65  s will still ope
1df90 72 61 74 65 20 63 6f 72 72 65 63 74 6c 79 2e 29  rate correctly.)
1dfa0 5e 0a 53 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72  ^.Similarly, for
1dfb0 6d 61 74 20 31 32 20 69 73 20 73 68 6f 77 6e 20  mat 12 is shown 
1dfc0 77 69 74 68 20 31 30 20 73 69 67 6e 69 66 69 63  with 10 signific
1dfd0 61 6e 74 20 64 69 67 69 74 73 2c 20 62 75 74 20  ant digits, but 
1dfe0 74 68 65 20 64 61 74 65 2f 74 69 6d 65 0a 66 75  the date/time.fu
1dff0 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61  nctions will rea
1e000 6c 6c 79 20 61 63 63 65 70 74 20 61 73 20 6d 61  lly accept as ma
1e010 6e 79 20 6f 72 20 61 73 20 66 65 77 20 64 69 67  ny or as few dig
1e020 69 74 73 20 61 73 20 61 72 65 20 6e 65 63 65 73  its as are neces
1e030 73 61 72 79 20 74 6f 0a 72 65 70 72 65 73 65 6e  sary to.represen
1e040 74 20 74 68 65 20 4a 75 6c 69 61 6e 20 64 61 79  t the Julian day
1e050 20 6e 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c   number..</p>..<
1e060 68 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33  h3>Modifiers</h3
1e070 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20  >..<p>^The time 
1e080 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f  string can be fo
1e090 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
1e0a0 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73  r more modifiers
1e0b0 20 74 68 61 74 20 0a 61 6c 74 65 72 20 64 61 74   that .alter dat
1e0c0 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e  e and/or time. ^
1e0d0 45 61 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73  Each modifier.is
1e0e0 20 61 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f   a transformatio
1e0f0 6e 20 74 68 61 74 20 69 73 20 61 70 70 6c 69 65  n that is applie
1e100 64 20 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61  d to the time va
1e110 6c 75 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e  lue to its left.
1e120 0a 5e 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20  .^Modifiers are 
1e130 61 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66  applied from lef
1e140 74 20 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65  t to right; orde
1e150 72 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a  r is important..
1e160 5e 28 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20  ^(The available 
1e170 6d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 73  modifiers are as
1e180 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c   follows.</p>..<
1e190 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79  ol>.<li> NNN day
1e1a0 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73  s.<li> NNN hours
1e1b0 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65  .<li> NNN minute
1e1c0 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20  s.<li> NNN.NNNN 
1e1d0 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e  seconds.<li> NNN
1e1e0 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e   months.<li> NNN
1e1f0 20 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72   years.<li> star
1e200 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20  t of month.<li> 
1e210 73 74 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c  start of year.<l
1e220 69 3e 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a  i> start of day.
1e230 3c 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c  <li> weekday N.<
1e240 6c 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c  li> unixepoch.<l
1e250 69 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69  i> localtime.<li
1e260 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a  > utc .</ol>)^..
1e270 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69  <p>^The first si
1e280 78 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74  x modifiers (1 t
1e290 68 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c  hrough 6) .simpl
1e2a0 79 20 61 64 64 20 74 68 65 20 73 70 65 63 69 66  y add the specif
1e2b0 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69  ied amount of ti
1e2c0 6d 65 20 74 6f 20 74 68 65 20 64 61 74 65 20 61  me to the date a
1e2d0 6e 64 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69  nd time .specifi
1e2e0 65 64 20 62 79 20 74 68 65 20 70 72 65 63 65 64  ed by the preced
1e2f0 69 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61  ing timestring a
1e300 6e 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 4e  nd modifiers..^N
1e310 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d  ote that "&plusm
1e320 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f  n;NNN months" wo
1e330 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67  rks by rendering
1e340 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61   the original da
1e350 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59  te into.the YYYY
1e360 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61  -MM-DD format, a
1e370 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d  dding the &plusm
1e380 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20  n;NNN to the MM 
1e390 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65  month value, the
1e3a0 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68  n.normalizing th
1e3b0 65 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73  e result.  ^Thus
1e3c0 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  , for example, t
1e3d0 68 65 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d  he data 2001-03-
1e3e0 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27  31 modified.by '
1e3f0 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61  +1 month' initia
1e400 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d  lly yields 2001-
1e410 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c  04-31, but April
1e420 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79   only has 30 day
1e430 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69 73  s.so the date is
1e440 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32   normalized to 2
1e450 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73  001-05-01.  ^A s
1e460 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63  imilar effect oc
1e470 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72  curs when.the or
1e480 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46  iginal date is F
1e490 65 62 72 75 61 72 79 20 32 39 20 6f 66 20 61 20  ebruary 29 of a 
1e4a0 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74 68 65  leapyear and the
1e4b0 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c   modifier is.&pl
1e4c0 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65  usmn;N years whe
1e4d0 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75  re N is not a mu
1e4e0 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c  ltiple of four.<
1e4f0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74  /p>..<p>^The "st
1e500 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72  art of" modifier
1e510 73 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20  s (7 through 9) 
1e520 73 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62  shift the date b
1e530 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65  ackwards .to the
1e540 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
1e550 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c  e current month,
1e560 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70   year or day.</p
1e570 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b  >..<p>^The "week
1e580 64 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64  day" modifier ad
1e590 76 61 6e 63 65 73 20 74 68 65 20 64 61 74 65 20  vances the date 
1e5a0 66 6f 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e  forward to the n
1e5b0 65 78 74 20 64 61 74 65 20 0a 77 68 65 72 65 20  ext date .where 
1e5c0 74 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62  the weekday numb
1e5d0 65 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20  er is N. Sunday 
1e5e0 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20  is 0, Monday is 
1e5f0 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  1, and so forth.
1e600 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75  </p>..<p>^The "u
1e610 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1e620 65 72 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72  er (11) only wor
1e630 6b 73 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61  ks if it immedia
1e640 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20  tely follows .a 
1e650 74 69 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68  timestring in th
1e660 65 20 44 44 44 44 44 44 44 44 44 44 20 66 6f 72  e DDDDDDDDDD for
1e670 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69  mat. .^This modi
1e680 66 69 65 72 20 63 61 75 73 65 73 20 74 68 65 20  fier causes the 
1e690 44 44 44 44 44 44 44 44 44 44 20 74 6f 20 62 65  DDDDDDDDDD to be
1e6a0 20 69 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74   interpreted not
1e6b0 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61   .as a Julian da
1e6c0 79 20 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e  y number as it n
1e6d0 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65  ormally would be
1e6e0 2c 20 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f  , but as.[http:/
1e6f0 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1e700 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65  g/wiki/Unix_time
1e710 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20   | Unix Time] - 
1e720 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73  the .number of s
1e730 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37  econds since 197
1e740 30 2e 20 20 49 66 20 74 68 65 20 22 75 6e 69 78  0.  If the "unix
1e750 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
1e760 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20  does not.follow 
1e770 61 20 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20  a timestring of 
1e780 74 68 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44  the form DDDDDDD
1e790 44 44 44 20 77 68 69 63 68 20 65 78 70 72 65 73  DDD which expres
1e7a0 73 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  ses the number.o
1e7b0 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  f seconds since 
1e7c0 31 39 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72  1970 or if other
1e7d0 20 6d 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72   modifiers.separ
1e7e0 61 74 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f  ate the "unixepo
1e7f0 63 68 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f  ch" modifier fro
1e800 6d 20 70 72 69 6f 72 20 44 44 44 44 44 44 44 44  m prior DDDDDDDD
1e810 44 44 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61  DD then the.beha
1e820 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65  vior is undefine
1e830 64 2e 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73  d..Due to precis
1e840 69 6f 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20  ion limitations 
1e850 69 6d 70 6f 73 65 64 20 62 79 20 74 68 65 20 69  imposed by the i
1e860 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75  mplementations u
1e870 73 65 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74  se.of 64-bit int
1e880 65 67 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78  egers, the "unix
1e890 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
1e8a0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64  only works for.d
1e8b0 61 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30  ates between 000
1e8c0 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30  0-01-01 00:00:00
1e8d0 20 61 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20   and 5352-11-01 
1e8e0 31 30 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74  10:52:47 (unix t
1e8f0 69 6d 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31  imes.of -6216721
1e900 39 32 30 30 20 74 68 72 6f 75 67 68 20 31 30 36  9200 through 106
1e910 37 35 31 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a  75199167).</p>..
1e920 3c 70 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69  <p>^The "localti
1e930 6d 65 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32  me" modifier (12
1e940 29 20 61 73 73 75 6d 65 73 20 74 68 65 20 74 69  ) assumes the ti
1e950 6d 65 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73  me string to its
1e960 20 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e 69 76   left is in.Univ
1e970 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65  ersal Coordinate
1e980 64 20 54 69 6d 65 20 28 55 54 43 29 20 61 6e 64  d Time (UTC) and
1e990 20 61 64 6a 75 73 74 73 20 74 68 65 20 74 69 6d   adjusts the tim
1e9a0 65 0a 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74  e.string so that
1e9b0 20 69 74 20 64 69 73 70 6c 61 79 73 20 6c 6f 63   it displays loc
1e9c0 61 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63  altime.  If "loc
1e9d0 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20  altime".follows 
1e9e0 61 20 74 69 6d 65 20 74 68 61 74 20 69 73 20 6e  a time that is n
1e9f0 6f 74 20 55 54 43 2c 20 74 68 65 6e 20 74 68 65  ot UTC, then the
1ea00 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
1ea10 65 66 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75  efined..^(The "u
1ea20 74 63 22 20 69 73 20 74 68 65 20 6f 70 70 6f 73  tc" is the oppos
1ea30 69 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d  ite of "localtim
1ea40 65 22 2e 20 20 22 75 74 63 22 20 61 73 73 75 6d  e".  "utc" assum
1ea50 65 73 20 74 68 61 74 20 74 68 65 20 73 74 72 69  es that the stri
1ea60 6e 67 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69  ng.to its left i
1ea70 73 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74  s in the local t
1ea80 69 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75  imezone and adju
1ea90 73 74 73 20 74 68 61 74 20 73 74 72 69 6e 67 20  sts that string 
1eaa0 74 6f 20 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a  to be in UTC.)^.
1eab0 49 66 20 74 68 65 20 70 72 69 6f 72 20 73 74 72  If the prior str
1eac0 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f  ing is not in lo
1ead0 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74 68  caltime, then th
1eae0 65 20 72 65 73 75 6c 74 20 6f 66 20 22 75 74 63  e result of "utc
1eaf0 22 20 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c  " is.undefined.<
1eb00 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65  /p>..<h3>Example
1eb10 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d  s</h3>..^(<p>Com
1eb20 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  pute the current
1eb30 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63   date.<p>..<bloc
1eb40 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61  kquote>SELECT da
1eb50 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63  te('now');</bloc
1eb60 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1eb70 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74  Compute the last
1eb80 20 64 61 79 20 6f 66 20 74 68 65 20 63 75 72 72   day of the curr
1eb90 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a  ent month.</p>..
1eba0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45  <blockquote>SELE
1ebb0 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73  CT date('now','s
1ebc0 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27  tart of month','
1ebd0 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61  +1 month','-1 da
1ebe0 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  y');.</blockquot
1ebf0 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
1ec00 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  te the date and 
1ec10 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69  time given a uni
1ec20 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32  x timestamp 1092
1ec30 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c  941466.</p>..<bl
1ec40 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45  ockquote>.    SE
1ec50 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30  LECT datetime(10
1ec60 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65  92941466, 'unixe
1ec70 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  poch');.</blockq
1ec80 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
1ec90 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61  mpute the date a
1eca0 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20  nd time given a 
1ecb0 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31  unix timestamp 1
1ecc0 30 39 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a  092941466, and .
1ecd0 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79  compensate for y
1ece0 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f  our local timezo
1ecf0 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ne.</p>..<blockq
1ed00 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64  uote>.  SELECT d
1ed10 61 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34  atetime(10929414
1ed20 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c  66, 'unixepoch',
1ed30 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c   'localtime');.<
1ed40 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1ed50 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1ed60 20 63 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69   current unix ti
1ed70 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62  mestamp.</p>..<b
1ed80 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
1ed90 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73  ECT strftime('%s
1eda0 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63  ','now');.</bloc
1edb0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1edc0 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  Compute the numb
1edd0 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65  er of days since
1ede0 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20   the signing of 
1edf0 74 68 65 20 55 53 20 44 65 63 6c 61 72 61 74 69  the US Declarati
1ee00 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e  on.of Independen
1ee10 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ce.</p>..<blockq
1ee20 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a  uote>.  SELECT j
1ee30 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20  ulianday('now') 
1ee40 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 37 37  - julianday('177
1ee50 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f  6-07-04');.</blo
1ee60 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1ee70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d  >Compute the num
1ee80 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber of seconds s
1ee90 69 6e 63 65 20 61 20 70 61 72 74 69 63 75 6c 61  ince a particula
1eea0 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34  r moment in 2004
1eeb0 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
1eec0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72  te>.  SELECT str
1eed0 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
1eee0 29 20 2d 20 73 74 72 66 74 69 6d 65 28 27 25 73  ) - strftime('%s
1eef0 27 2c 27 32 30 30 34 2d 30 31 2d 30 31 20 30 32  ','2004-01-01 02
1ef00 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63  :34:56');.</bloc
1ef10 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1ef20 0a 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74  .Compute the dat
1ef30 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 54  e of the first T
1ef40 75 65 73 64 61 79 20 69 6e 20 4f 63 74 6f 62 65  uesday in Octobe
1ef50 72 0a 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  r.for the curren
1ef60 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62  t year..</p>..<b
1ef70 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
1ef80 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27  ECT date('now','
1ef90 73 74 61 72 74 20 6f 66 20 79 65 61 72 27 2c 27  start of year','
1efa0 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b  +9 months','week
1efb0 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  day 2');.</block
1efc0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1efd0 6f 6d 70 75 74 65 20 74 68 65 20 74 69 6d 65 20  ompute the time 
1efe0 73 69 6e 63 65 20 74 68 65 20 75 6e 69 78 20 65  since the unix e
1eff0 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64 73 20  poch in seconds 
1f000 0a 28 6c 69 6b 65 20 73 74 72 66 74 69 6d 65 28  .(like strftime(
1f010 27 25 73 27 2c 27 6e 6f 77 27 29 20 65 78 63 65  '%s','now') exce
1f020 70 74 20 69 6e 63 6c 75 64 65 73 20 66 72 61 63  pt includes frac
1f030 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70  tional part):</p
1f040 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1f050 20 20 53 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e    SELECT (julian
1f060 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 32 34 34  day('now') - 244
1f070 30 35 38 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b  0587.5)*86400.0;
1f080 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1f090 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73 20 41 6e  ..<h3>Caveats An
1f0a0 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  d Bugs</h3>..<p>
1f0b0 54 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20  The computation 
1f0c0 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65  of local time de
1f0d0 70 65 6e 64 73 20 68 65 61 76 69 6c 79 20 6f 6e  pends heavily on
1f0e0 20 74 68 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f   the whim .of po
1f0f0 6c 69 74 69 63 69 61 6e 73 20 61 6e 64 20 69 73  liticians and is
1f100 20 74 68 75 73 20 64 69 66 66 69 63 75 6c 74 20   thus difficult 
1f110 74 6f 20 67 65 74 20 63 6f 72 72 65 63 74 20 66  to get correct f
1f120 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e  or .all locales.
1f130 20 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d   ^In this implem
1f140 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 73 74  entation, the st
1f150 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
1f160 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c   .function local
1f170 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73 65 64  time_r() is used
1f180 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20 74 68   to assist in th
1f190 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66  e calculation of
1f1a0 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e   .local time.  ^
1f1b0 28 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f  (The .localtime_
1f1c0 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e  r() C function n
1f1d0 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72  ormally only wor
1f1e0 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74  ks for years.bet
1f1f0 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30  ween 1970 and 20
1f200 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75  37. For dates ou
1f210 74 73 69 64 65 20 74 68 69 73 20 72 61 6e 67 65  tside this range
1f220 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70  , SQLite .attemp
1f230 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65  ts to map the ye
1f240 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76  ar into an equiv
1f250 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74 68 69  alent year withi
1f260 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64  n .this range, d
1f270 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f  o the calculatio
1f280 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20  n, then map the 
1f290 79 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e  year back.)^</p>
1f2a0 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20 66 75  ...<p>^(These fu
1f2b0 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72  nctions only wor
1f2c0 6b 20 66 6f 72 20 64 61 74 65 73 20 62 65 74 77  k for dates betw
1f2d0 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30  een 0000-01-01 0
1f2e0 30 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39 39 39  0:00:00.and 9999
1f2f0 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 20  -12-31 23:59:59 
1f300 28 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d  (julidan day num
1f310 62 65 72 73 20 31 37 32 31 30 35 39 2e 35 20 74  bers 1721059.5 t
1f320 68 72 6f 75 67 68 20 35 33 37 33 34 38 34 2e 35  hrough 5373484.5
1f330 29 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f  ).)^.For dates o
1f340 75 74 73 69 64 65 20 74 68 61 74 20 72 61 6e 67  utside that rang
1f350 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  e, the results o
1f360 66 20 74 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e  f these.function
1f370 73 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e  s are undefined.
1f380 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73  </p>..<p>Non-Vis
1f390 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66  ta Windows platf
1f3a0 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72  orms only suppor
1f3b0 74 20 6f 6e 65 20 73 65 74 20 6f 66 20 44 53 54  t one set of DST
1f3c0 20 72 75 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f   rules. .Vista o
1f3d0 6e 6c 79 20 73 75 70 70 6f 72 74 73 20 74 77 6f  nly supports two
1f3e0 2e 20 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20  . Therefore, on 
1f3f0 74 68 65 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c  these platforms,
1f400 20 0a 68 69 73 74 6f 72 69 63 61 6c 20 44 53 54   .historical DST
1f410 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69   calculations wi
1f420 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e  ll be incorrect.
1f430 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69   .For example, i
1f440 6e 20 74 68 65 20 55 53 2c 20 69 6e 20 32 30 30  n the US, in 200
1f450 37 20 74 68 65 20 44 53 54 20 72 75 6c 65 73 20  7 the DST rules 
1f460 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69  changed. .Non-Vi
1f470 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74  sta Windows plat
1f480 66 6f 72 6d 73 20 61 70 70 6c 79 20 74 68 65 20  forms apply the 
1f490 6e 65 77 20 32 30 30 37 20 44 53 54 20 72 75 6c  new 2007 DST rul
1f4a0 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69  es .to all previ
1f4b0 6f 75 73 20 79 65 61 72 73 20 61 73 20 77 65 6c  ous years as wel
1f4c0 6c 2e 20 56 69 73 74 61 20 64 6f 65 73 20 73 6f  l. Vista does so
1f4d0 6d 65 77 68 61 74 20 62 65 74 74 65 72 0a 67 65  mewhat better.ge
1f4e0 74 74 69 6e 67 20 72 65 73 75 6c 74 73 20 63 6f  tting results co
1f4f0 72 72 65 63 74 20 62 61 63 6b 20 74 6f 20 31 39  rrect back to 19
1f500 38 36 2c 20 77 68 65 6e 20 74 68 65 20 72 75 6c  86, when the rul
1f510 65 73 20 77 65 72 65 20 61 6c 73 6f 20 63 68 61  es were also cha
1f520 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c  nged.</p>..<p>Al
1f530 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75  l internal compu
1f540 74 61 74 69 6f 6e 73 20 61 73 73 75 6d 65 20 74  tations assume t
1f550 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  he .[http://en.w
1f560 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
1f570 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65  i/Gregorian_cale
1f580 6e 64 61 72 20 7c 20 47 72 65 67 6f 72 69 61 6e  ndar | Gregorian
1f590 20 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65   calendar].syste
1f5a0 6d 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20 61  m.  It is also a
1f5b0 73 73 75 6d 65 64 20 74 68 61 74 20 65 76 65 72  ssumed that ever
1f5c0 79 0a 64 61 79 20 69 73 20 65 78 61 63 74 6c 79  y.day is exactly
1f5d0 20 38 36 34 30 30 20 73 65 63 6f 6e 64 73 20 69   86400 seconds i
1f5e0 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a  n duration.</p>.
1f5f0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
1f600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f640 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41  #####.Section {A
1f650 67 67 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f  ggregate Functio
1f660 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a 61 67  ns} aggfunc {*ag
1f670 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  gfunc}.</tcl>..<
1f680 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74 65  p>.The aggregate
1f690 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e   functions shown
1f6a0 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c   below are avail
1f6b0 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e  able by default.
1f6c0 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67    Additional.agg
1f6d0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1f6e0 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61   written in C ma
1f6f0 79 20 62 65 20 61 64 64 65 64 20 75 73 69 6e 67  y be added using
1f700 20 74 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63   the .[sqlite3_c
1f710 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
1f720 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a  ]</a>.API.</p>..
1f730 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72  <p>.^In any aggr
1f740 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 74  egate function t
1f750 68 61 74 20 74 61 6b 65 73 20 61 20 73 69 6e 67  hat takes a sing
1f760 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 61  le argument, tha
1f770 74 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62  t argument.can b
1f780 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68  e preceded by th
1f790 65 20 6b 65 79 77 6f 72 64 20 44 49 53 54 49 4e  e keyword DISTIN
1f7a0 43 54 2e 20 20 5e 49 6e 20 73 75 63 68 20 63 61  CT.  ^In such ca
1f7b0 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65 0a 65  ses, duplicate.e
1f7c0 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69 6c 74  lements are filt
1f7d0 65 72 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e  ered before bein
1f7e0 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68  g passed into th
1f7f0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
1f800 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70  tion..^For examp
1f810 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  le, the function
1f820 20 22 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74   "count(distinct
1f830 20 58 29 22 20 77 69 6c 6c 20 72 65 74 75 72 6e   X)" will return
1f840 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64   the number.of d
1f850 69 73 74 69 6e 63 74 20 76 61 6c 75 65 73 20 6f  istinct values o
1f860 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65  f column X inste
1f870 61 64 20 6f 66 20 74 68 65 20 74 6f 74 61 6c 20  ad of the total 
1f880 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75  number of non-nu
1f890 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c  ll.values in col
1f8a0 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61  umn X..</p>..<ta
1f8b0 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
1f8c0 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63  lpadding=10>.<tc
1f8d0 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 76 67 28  l>.funcdef {avg(
1f8e0 58 29 7d 20 7b 2a 61 76 67 20 7b 61 76 67 28 29  X)} {*avg {avg()
1f8f0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1f900 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61  ion}} {.  ^The a
1f910 76 67 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  vg() function.  
1f920 72 65 74 75 72 6e 73 20 74 68 65 20 61 76 65 72  returns the aver
1f930 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  age value of all
1f940 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f   non-NULL <i>X</
1f950 69 3e 20 77 69 74 68 69 6e 20 61 0a 20 20 67 72  i> within a.  gr
1f960 6f 75 70 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e  oup.  ^String an
1f970 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 20 74 68  d BLOB values th
1f980 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c  at do not look l
1f990 69 6b 65 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ike numbers are.
1f9a0 20 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73    interpreted as
1f9b0 20 30 2e 0a 20 20 5e 54 68 65 20 72 65 73 75 6c   0..  ^The resul
1f9c0 74 20 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c  t of avg() is al
1f9d0 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  ways a floating 
1f9e0 70 6f 69 6e 74 20 76 61 6c 75 65 20 61 73 20 6c  point value as l
1f9f0 6f 6e 67 20 61 73 0a 20 20 61 74 20 74 68 65 72  ong as.  at ther
1fa00 65 20 69 73 20 61 74 20 6c 65 61 73 74 20 6f 6e  e is at least on
1fa10 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  e non-NULL input
1fa20 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69   even if all.  i
1fa30 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67 65  nputs are intege
1fa40 72 73 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74  rs.  ^The result
1fa50 20 6f 66 20 61 76 67 28 29 20 69 73 20 4e 55 4c   of avg() is NUL
1fa60 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  L if and only if
1fa70 0a 20 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  .  there are no 
1fa80 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e  non-NULL inputs.
1fa90 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63    .}..funcdef {c
1faa0 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74 28 2a 29  ount(X) count(*)
1fab0 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74  } {*count {count
1fac0 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1fad0 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
1fae0 20 63 6f 75 6e 74 28 58 29 20 66 75 6e 63 74 69   count(X) functi
1faf0 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20 63  on returns.  a c
1fb00 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62  ount of the numb
1fb10 65 72 20 6f 66 20 74 69 6d 65 73 0a 20 20 74 68  er of times.  th
1fb20 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e  at <i>X</i> is n
1fb30 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f  ot NULL in a gro
1fb40 75 70 2e 20 20 5e 54 68 65 20 63 6f 75 6e 74 28  up.  ^The count(
1fb50 2a 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77  *) function.  (w
1fb60 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73  ith no arguments
1fb70 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 6f  ) returns the to
1fb80 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  tal number of ro
1fb90 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ws in the group.
1fba0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f  .}..funcdef {gro
1fbb0 75 70 5f 63 6f 6e 63 61 74 28 58 29 20 67 72 6f  up_concat(X) gro
1fbc0 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20  up_concat(X,Y)} 
1fbd0 7b 0a 20 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61  {.  *group_conca
1fbe0 74 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  t {group_concat(
1fbf0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1fc00 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65  tion}.} {.  ^The
1fc10 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20   group_concat() 
1fc20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1fc30 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68 69 63  .  a string whic
1fc40 68 20 69 73 20 74 68 65 20 63 6f 6e 63 61 74 65  h is the concate
1fc50 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20  nation of.  all 
1fc60 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20  non-NULL values 
1fc70 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49  of <i>X</i>.  ^I
1fc80 66 20 70 61 72 61 6d 65 74 65 72 20 3c 69 3e 59  f parameter <i>Y
1fc90 3c 2f 69 3e 20 69 73 20 70 72 65 73 65 6e 74 20  </i> is present 
1fca0 74 68 65 6e 0a 20 20 69 74 20 69 73 20 75 73 65  then.  it is use
1fcb0 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74  d as the separat
1fcc0 6f 72 0a 20 20 62 65 74 77 65 65 6e 20 69 6e 73  or.  between ins
1fcd0 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f  tances of <i>X</
1fce0 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22  i>.  ^A comma ("
1fcf0 2c 22 29 20 69 73 20 75 73 65 64 20 61 73 20 74  ,") is used as t
1fd00 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 69  he separator.  i
1fd10 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d  f <i>Y</i> is om
1fd20 69 74 74 65 64 2e 20 20 54 68 65 20 6f 72 64 65  itted.  The orde
1fd30 72 20 6f 66 20 74 68 65 20 63 6f 6e 63 61 74 65  r of the concate
1fd40 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73 20 69  nated elements i
1fd50 73 0a 20 20 61 72 62 69 74 72 61 72 79 2e 0a 7d  s.  arbitrary..}
1fd60 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58  ..funcdef {max(X
1fd70 29 7d 20 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20  )} {*maxAggFunc 
1fd80 2a 61 67 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20  *agg_max {max() 
1fd90 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1fda0 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61  on}} {.  ^The ma
1fdb0 78 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  x() aggregate fu
1fdc0 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73  nction.  returns
1fdd0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c   the maximum val
1fde0 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73  ue of all values
1fdf0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
1fe00 20 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61   ^The maximum va
1fe10 6c 75 65 20 69 73 20 74 68 65 20 76 61 6c 75 65  lue is the value
1fe20 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72   that would be r
1fe30 65 74 75 72 6e 65 64 20 6c 61 73 74 20 69 6e 20  eturned last in 
1fe40 61 6e 0a 20 20 4f 52 44 45 52 20 42 59 20 6f 6e  an.  ORDER BY on
1fe50 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e   the same column
1fe60 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 61  .  ^Aggregate ma
1fe70 78 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  x() returns NULL
1fe80 20 0a 20 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20   .  if and only 
1fe90 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
1fea0 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20  non-NULL values 
1feb0 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
1fec0 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29  .funcdef {min(X)
1fed0 7d 20 7b 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a  } {*minAggFunc *
1fee0 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61  agg_min {min() a
1fef0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1ff00 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e  n}} {.  ^The min
1ff10 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1ff20 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20  ction.  returns 
1ff30 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d  the minimum non-
1ff40 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c  NULL value of al
1ff50 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  l values in the 
1ff60 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69  group..  ^The mi
1ff70 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74  nimum value is t
1ff80 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  he first non-NUL
1ff90 4c 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75  L value that wou
1ffa0 6c 64 20 61 70 70 65 61 72 0a 20 20 69 6e 20 61  ld appear.  in a
1ffb0 6e 20 4f 52 44 45 52 20 42 59 20 6f 66 20 74 68  n ORDER BY of th
1ffc0 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67  e column..  ^Agg
1ffd0 72 65 67 61 74 65 20 6d 69 6e 28 29 20 72 65 74  regate min() ret
1ffe0 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64  urns NULL if and
1fff0 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61   only if there a
20000 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20  re no non-NULL. 
20010 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
20020 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  roup..}..funcdef
20030 20 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c 28 58   {sum(X) total(X
20040 29 7d 20 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20  )} {.  *sumFunc 
20050 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73  *sum *total.  {s
20060 75 6d 28 29 20 61 67 67 72 65 67 61 74 65 20 66  um() aggregate f
20070 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61  unction}.  {tota
20080 6c 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  l() aggregate fu
20090 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54  nction}.} {.  ^T
200a0 68 65 20 73 75 6d 28 29 20 61 6e 64 20 74 6f 74  he sum() and tot
200b0 61 6c 28 29 20 61 67 67 72 65 67 61 74 65 20 66  al() aggregate f
200c0 75 6e 63 74 69 6f 6e 73 0a 20 20 72 65 74 75 72  unctions.  retur
200d0 6e 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e  n sum of all non
200e0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20  -NULL values in 
200f0 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66  the group..  ^If
20100 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
20110 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77  n-NULL input row
20120 73 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74  s then sum() ret
20130 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20  urns.  NULL but 
20140 74 6f 74 61 6c 28 29 20 72 65 74 75 72 6e 73 20  total() returns 
20150 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e  0.0..  NULL is n
20160 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65  ot normally a he
20170 6c 70 66 75 6c 20 72 65 73 75 6c 74 20 66 6f 72  lpful result for
20180 20 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72   the sum of no r
20190 6f 77 73 0a 20 20 62 75 74 20 74 68 65 20 53 51  ows.  but the SQ
201a0 4c 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69  L standard requi
201b0 72 65 73 20 69 74 20 61 6e 64 20 6d 6f 73 74 20  res it and most 
201c0 6f 74 68 65 72 0a 20 20 53 51 4c 20 64 61 74 61  other.  SQL data
201d0 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69 6d 70  base engines imp
201e0 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20 74 68 61  lement sum() tha
201f0 74 20 77 61 79 20 73 6f 20 53 51 4c 69 74 65 20  t way so SQLite 
20200 64 6f 65 73 20 69 74 20 69 6e 20 74 68 65 0a 20  does it in the. 
20210 20 73 61 6d 65 20 77 61 79 20 69 6e 20 6f 72 64   same way in ord
20220 65 72 20 74 6f 20 62 65 20 63 6f 6d 70 61 74 69  er to be compati
20230 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73  ble.   The non-s
20240 74 61 6e 64 61 72 64 20 74 6f 74 61 6c 28 29 20  tandard total() 
20250 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20 70 72  function.  is pr
20260 6f 76 69 64 65 64 20 61 73 20 61 20 63 6f 6e 76  ovided as a conv
20270 65 6e 69 65 6e 74 20 77 61 79 20 74 6f 20 77 6f  enient way to wo
20280 72 6b 20 61 72 6f 75 6e 64 20 74 68 69 73 20 64  rk around this d
20290 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20  esign problem.  
202a0 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75  in the SQL langu
202b0 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e  age.</p>..  <p>^
202c0 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 6f  The result of to
202d0 74 61 6c 28 29 20 69 73 20 61 6c 77 61 79 73 20  tal() is always 
202e0 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
202f0 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72   value..  ^The r
20300 65 73 75 6c 74 20 6f 66 20 73 75 6d 28 29 20 69  esult of sum() i
20310 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  s an integer val
20320 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  ue if all non-NU
20330 4c 4c 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e  LL inputs are in
20340 74 65 67 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e  tegers..  ^If an
20350 79 20 69 6e 70 75 74 20 74 6f 20 73 75 6d 28 29  y input to sum()
20360 20 69 73 20 6e 65 69 74 68 65 72 20 61 6e 20 69   is neither an i
20370 6e 74 65 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c  nteger or a NULL
20380 0a 20 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65  .  then sum() re
20390 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67  turns a floating
203a0 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20 77   point value.  w
203b0 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 61 6e  hich might be an
203c0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74   approximation t
203d0 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d 2e 3c  o the true sum.<
203e0 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29  /p>..  <p>^Sum()
203f0 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22   will throw an "
20400 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
20410 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61  " exception if a
20420 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61 72 65 20  ll inputs.  are 
20430 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c  integers or NULL
20440 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65  .  and an intege
20450 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72  r overflow occur
20460 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74 20 64  s at any point d
20470 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70 75 74  uring the comput
20480 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28  ation..  ^Total(
20490 29 20 6e 65 76 65 72 20 74 68 72 6f 77 73 20 61  ) never throws a
204a0 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
204b0 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  ow..}.</tcl>.</t
204c0 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  able>..<tcl>.###
204d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
204e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
204f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20510 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
20520 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72  ion INSERT inser
20530 74 20 7b 49 4e 53 45 52 54 20 2a 49 4e 53 45 52  t {INSERT *INSER
20540 54 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  Ts}..RecursiveBu
20550 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65  bbleDiagram inse
20560 72 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  rt-stmt.</tcl>..
20570 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73 74  <p>The INSERT st
20580 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e  atement comes in
20590 20 74 68 72 65 65 20 62 61 73 69 63 20 66 6f 72   three basic for
205a0 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  ms.  .<ul>.<li><
205b0 70 3e 5e 54 68 65 20 66 69 72 73 74 20 66 6f 72  p>^The first for
205c0 6d 20 28 77 69 74 68 20 74 68 65 20 22 56 41 4c  m (with the "VAL
205d0 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72  UES" keyword) cr
205e0 65 61 74 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  eates one or mor
205f0 65 0a 6e 65 77 20 72 6f 77 73 20 69 6e 0a 61 6e  e.new rows in.an
20600 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e   existing table.
20610 20 5e 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c   ^If no column-l
20620 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64  ist is specified
20630 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72   then the number
20640 0a 6f 66 20 76 61 6c 75 65 73 20 69 6e 73 65 72  .of values inser
20650 74 65 64 20 69 6e 74 6f 20 65 61 63 68 20 72 6f  ted into each ro
20660 77 0a 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  w.must be the sa
20670 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72  me as the number
20680 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
20690 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20 74 68  he table. ^In th
206a0 69 73 20 63 61 73 65 0a 74 68 65 20 72 65 73 75  is case.the resu
206b0 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  lt of evaluating
206c0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65   the left-most e
206d0 78 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 65  xpression from e
206e0 61 63 68 20 74 65 72 6d 20 6f 66 0a 74 68 65 20  ach term of.the 
206f0 56 41 4c 55 45 53 20 6c 69 73 74 20 69 73 20 69  VALUES list is i
20700 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
20710 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
20720 6e 20 6f 66 20 65 61 63 68 20 6e 65 77 20 72 6f  n of each new ro
20730 77 2c 0a 61 6e 64 20 73 6f 20 66 6f 72 74 68 20  w,.and so forth 
20740 66 6f 72 20 65 61 63 68 20 73 75 62 73 65 71 75  for each subsequ
20750 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ent expression. 
20760 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d 6c 69 73  ^If a.column-lis
20770 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
20780 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
20790 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 65 61 63  of values in eac
207a0 68 20 74 65 72 6d 20 6f 66 20 74 68 65 0a 56 41  h term of the.VA
207b0 4c 55 45 20 6c 69 73 74 20 6d 75 73 74 20 6d 61  LUE list must ma
207c0 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  tch the number o
207d0 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75  f.specified colu
207e0 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20 74 68  mns. ^Each of th
207f0 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20  e named columns 
20800 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69  of the new row i
20810 73 20 70 6f 70 75 6c 61 74 65 64 0a 77 69 74 68  s populated.with
20820 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
20830 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 63  evaluating the c
20840 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 56 41 4c  orresponding VAL
20850 55 45 53 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  UES expression. 
20860 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73 20 74  ^Table.columns t
20870 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65 61  hat do not appea
20880 72 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  r in the column 
20890 6c 69 73 74 20 61 72 65 20 70 6f 70 75 6c 61 74  list are populat
208a0 65 64 20 77 69 74 68 20 74 68 65 20 64 65 66 61  ed with the defa
208b0 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  ult.column value
208c0 20 28 73 70 65 63 69 66 69 65 64 20 61 73 20 70   (specified as p
208d0 61 72 74 20 6f 66 20 74 68 65 20 43 52 45 41 54  art of the CREAT
208e0 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
208f0 74 29 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c 4c  t), or with NULL
20900 20 69 66 0a 6e 6f 20 64 65 66 61 75 6c 74 20 76   if.no default v
20910 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69 65  alue is specifie
20920 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73  d...<li><p>The s
20930 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68  econd form of th
20940 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  e INSERT stateme
20950 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 53 45  nt contains a SE
20960 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69  LECT statement.i
20970 6e 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c 55  nstead of a VALU
20980 45 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e 65  ES clause. ^A ne
20990 77 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65 72  w entry is inser
209a0 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62  ted into the tab
209b0 6c 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77 20  le for each.row 
209c0 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  of data returned
209d0 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68   by executing th
209e0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
209f0 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d 6e  nt. ^If a column
20a00 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66 69  -list is.specifi
20a10 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ed, the number o
20a20 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
20a30 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53   result of the S
20a40 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74 68  ELECT must be th
20a50 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75  e same.as the nu
20a60 6d 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69 6e  mber of items in
20a70 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74   the column-list
20a80 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  . ^Otherwise, if
20a90 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20   no column-list 
20aa0 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68  is.specified, th
20ab0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
20ac0 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
20ad0 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  t of the SELECT 
20ae0 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
20af0 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .as the number o
20b00 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
20b10 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45 4c   table. ^Any SEL
20b20 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 69  ECT statement, i
20b30 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d 70 6f 75  ncluding.[compou
20b40 6e 64 20 53 45 4c 45 43 54 73 5d 20 61 6e 64 20  nd SELECTs] and 
20b50 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
20b60 73 20 77 69 74 68 20 5b 4f 52 44 45 52 20 42 59  s with [ORDER BY
20b70 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d 49 54 5d  ] and/or [LIMIT]
20b80 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20 62   clauses, .may b
20b90 65 20 75 73 65 64 20 69 6e 20 61 6e 20 49 4e 53  e used in an INS
20ba0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66  ERT statement of
20bb0 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69   this form...<li
20bc0 3e 3c 70 3e 54 68 65 20 74 68 69 72 64 20 66 6f  ><p>The third fo
20bd0 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rm of an INSERT 
20be0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77 69 74  statement is wit
20bf0 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  h DEFAULT VALUES
20c00 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54 20 2e  ..^(The INSERT .
20c10 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  .. DEFAULT VALUE
20c20 53 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 73 65  S statement inse
20c30 72 74 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77  rts a single new
20c40 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61   row into the.na
20c50 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61  med table.)^ ^Ea
20c60 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
20c70 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75   new row is popu
20c80 6c 61 74 65 64 20 77 69 74 68 20 69 74 73 20 64  lated with its d
20c90 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 0a 6f 72  efault value,.or
20ca0 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 69 66 20   with a NULL if 
20cb0 6e 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  no default value
20cc0 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
20cd0 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6c   part of the col
20ce0 75 6d 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 20 69  umn.definition i
20cf0 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  n the CREATE TAB
20d00 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  LE statement...<
20d10 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70  /ul>..<p>^The op
20d20 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d  tional conflict-
20d30 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68  clause allows th
20d40 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  e specification 
20d50 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  of an alternativ
20d60 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  e.constraint con
20d70 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
20d80 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
20d90 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e  e during this on
20da0 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64  e INSERT command
20db0 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f  ..See the sectio
20dc0 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e  n titled.[ON CON
20dd0 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
20de0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
20df0 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  n..For compatibi
20e00 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c  lity with MySQL,
20e10 20 5e 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c   ^the parser all
20e20 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66 20 74  ows the use of t
20e30 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72  he.single keywor
20e40 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f  d <a href="lang_
20e50 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45  replace.html">RE
20e60 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20  PLACE</a> as an 
20e70 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45  .alias for "INSE
20e80 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a  RT OR REPLACE"..
20e90 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e  .<p>^(The option
20ea0 61 6c 20 22 3c 69 3e 64 61 74 61 62 61 73 65 2d  al "<i>database-
20eb0 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e  name</i><b>.</b>
20ec0 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  " prefix on the 
20ed0 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  <i>table-name</i
20ee0 3e 0a 69 73 20 73 75 70 70 6f 72 74 20 66 6f 72  >.is support for
20ef0 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52   top-level INSER
20f00 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c  T statements onl
20f10 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65  y.)^  ^The table
20f20 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e   name must be.un
20f30 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20 49 4e  qualified for IN
20f40 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20  SERT statements 
20f50 74 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69  that occur withi
20f60 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  n [CREATE TRIGGE
20f70 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e  R] statements..^
20f80 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 22  Similarly, the "
20f90 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20  DEFAULT VALUES" 
20fa0 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45  form of the INSE
20fb0 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  RT statement is 
20fc0 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f  supported for.to
20fd0 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
20fe0 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61  tatements only a
20ff0 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52  nd not for INSER
21000 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  T statements wit
21010 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70  hin.triggers..<p
21020 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
21030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21070 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
21080 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61  {ON CONFLICT cla
21090 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b  use} conflict {{
210a0 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d  conflict clause}
210b0 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a   {ON CONFLICT}}.
210c0 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
210d0 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74  Diagram conflict
210e0 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a  -clause.</tcl>..
210f0 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  <p>The ON CONFLI
21100 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74  CT clause is not
21110 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c 20   a separate SQL 
21120 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73 20  command.  It is 
21130 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63  a.non-standard c
21140 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20 61  lause that can a
21150 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74  ppear in many ot
21160 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73  her SQL commands
21170 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69 74  ..It is given it
21180 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e  s own section in
21190 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 62   this document b
211a0 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74  ecause it is not
211b0 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72  .part of standar
211c0 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65 66  d SQL and theref
211d0 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62 65  ore might not be
211e0 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a   familiar.</p>..
211f0 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78 20 66  <p>^The syntax f
21200 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  or the ON CONFLI
21210 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73 20  CT clause is as 
21220 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a  shown above for.
21230 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
21240 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20   command.  ^For 
21250 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a 55  the INSERT and.U
21260 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20  PDATE commands, 
21270 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e  the keywords "ON
21280 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72   CONFLICT" are r
21290 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22 20  eplaced by "OR" 
212a0 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79 6e 74  so that.the synt
212b0 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20 6e 61  ax reads more na
212c0 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20 65 78  turally.  For ex
212d0 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f  ample, instead o
212e0 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e  f."INSERT ON CON
212f0 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77 65  FLICT IGNORE" we
21300 20 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f 52   have "INSERT OR
21310 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65   IGNORE"..The ke
21320 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62 75  ywords change bu
21330 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66  t the meaning of
21340 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20 74   the clause is t
21350 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20 77  he same.either w
21360 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ay.</p>..<p>The 
21370 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
21380 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20 5b 55  se applies to [U
21390 4e 49 51 55 45 5d 2c 20 5b 4e 4f 54 20 4e 55 4c  NIQUE], [NOT NUL
213a0 4c 5d 2c 0a 5b 43 48 45 43 4b 5d 2c 20 61 6e 64  L],.[CHECK], and
213b0 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63   [PRIMARY KEY] c
213c0 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 54 68 65 20  onstraints..The 
213d0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
213e0 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74 0a 61  rithm does not.a
213f0 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49 47 4e  pply to [FOREIGN
21400 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73   KEY constraints
21410 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66 69 76  ]..There are fiv
21420 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  e conflict resol
21430 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
21440 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42 41 43  choices:.ROLLBAC
21450 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c 2c 20  K, ABORT, FAIL, 
21460 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c  IGNORE, and REPL
21470 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c  ACE..^The defaul
21480 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
21490 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
214a0 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73 0a  is ABORT.  This.
214b0 69 73 20 77 68 61 74 20 74 68 65 79 20 6d 65 61  is what they mea
214c0 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74  n:</p>..<dl>.<dt
214d0 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e  ><b>ROLLBACK</b>
214e0 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57  </dt>.<dd><p> ^W
214f0 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c  hen an applicabl
21500 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
21510 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
21520 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65 73 6f  he ROLLBACK.reso
21530 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
21540 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72 72   aborts the curr
21550 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ent SQL statemen
21560 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49 54 45  t with.an SQLITE
21570 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f  _CONSTRAINT erro
21580 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61 63 6b  r and rolls back
21590 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
215a0 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e 6f  nsaction..^If no
215b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
215c0 61 63 74 69 76 65 20 28 6f 74 68 65 72 20 74 68  active (other th
215d0 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20 74  an the implied t
215e0 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74 20  ransaction that 
215f0 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65 76  is created on ev
21600 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65  ery.command) the
21610 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 72  n the ROLLBACK r
21620 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
21630 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73 61  thm works the sa
21640 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52 54 20  me as the.ABORT 
21650 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c 2f  algorithm.</p></
21660 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52  dd>..<dt><b>ABOR
21670 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  T</b></dt>.<dd><
21680 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
21690 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
216a0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
216b0 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a 72 65  rs, the ABORT.re
216c0 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
216d0 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
216e0 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
216f0 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51 4c 49  ent.with an SQLI
21700 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
21710 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20 6f 75  ror and backs ou
21720 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d 61  t any changes.ma
21730 64 65 20 62 79 20 74 68 65 20 63 75 72 72 65 6e  de by the curren
21740 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 3b  t SQL statement;
21750 20 62 75 74 20 63 68 61 6e 67 65 73 20 63 61 75   but changes cau
21760 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53 51 4c  sed.by prior SQL
21770 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
21780 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61 6e  in the same tran
21790 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72 65 73  saction are pres
217a0 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a 74 72  erved and the.tr
217b0 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e  ansaction remain
217c0 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73 20 69  s active..This i
217d0 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 65  s the default be
217e0 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65 20 62  havior and the b
217f0 65 68 61 76 69 6f 72 20 73 70 65 63 69 66 69 65  ehavior specifie
21800 64 20 62 79 20 74 68 65 20 53 51 4c 0a 73 74 61  d by the SQL.sta
21810 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a  ndard.</p></dd>.
21820 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e  .<dt><b>FAIL</b>
21830 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57  </dt>.<dd><p> ^W
21840 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c  hen an applicabl
21850 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
21860 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
21870 68 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74 69  he FAIL.resoluti
21880 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f  on algorithm abo
21890 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
218a0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69  SQL statement wi
218b0 74 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e  th an.SQLITE_CON
218c0 53 54 52 41 49 4e 54 20 65 72 72 6f 72 2e 20 20  STRAINT error.  
218d0 5e 42 75 74 20 74 68 65 20 46 41 49 4c 20 72 65  ^But the FAIL re
218e0 73 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  solution does no
218f0 74 0a 62 61 63 6b 20 6f 75 74 20 70 72 69 6f 72  t.back out prior
21900 20 63 68 61 6e 67 65 73 20 6f 66 20 74 68 65 20   changes of the 
21910 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68  SQL statement th
21920 61 74 20 66 61 69 6c 65 64 20 6e 6f 72 20 64 6f  at failed nor do
21930 65 73 0a 69 74 20 65 6e 64 20 74 68 65 20 74 72  es.it end the tr
21940 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20  ansaction..^For 
21950 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55  example, if an U
21960 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20  PDATE.statement 
21970 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f  encountered a co
21980 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
21990 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20  on on the 100th 
219a0 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74 65  row that.it atte
219b0 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20  mpts to update, 
219c0 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 39  then the first 9
219d0 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72  9 row changes ar
219e0 65 20 70 72 65 73 65 72 76 65 64 0a 62 75 74 20  e preserved.but 
219f0 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20  changes to rows 
21a00 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e  100 and beyond n
21a10 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c  ever occur.</p><
21a20 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e  /dd>..<dt><b>IGN
21a30 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORE</b></dt>.<dd
21a40 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
21a50 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
21a60 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
21a70 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f 52  curs, .the IGNOR
21a80 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  E resolution alg
21a90 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74 68 65  orithm skips the
21aa0 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f   one row that co
21ab0 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74  ntains.the const
21ac0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
21ad0 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 70 72  and continues pr
21ae0 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65 71 75  ocessing subsequ
21af0 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68 65 20  ent rows.of the 
21b00 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 73  SQL statement as
21b10 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e 74   if nothing went
21b20 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72 6f   wrong..Other ro
21b30 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  ws before and af
21b40 74 65 72 20 74 68 65 20 72 6f 77 20 74 68 61 74  ter the row that
21b50 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63  .contained the c
21b60 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
21b70 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74 65 64  ion are inserted
21b80 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d   or updated.norm
21b90 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72 20  ally. ^No error 
21ba0 69 73 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  is returned when
21bb0 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66   the IGNORE conf
21bc0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
21bd0 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
21be0 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  d.</p></dd>..<dt
21bf0 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c  ><b>REPLACE</b><
21c00 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
21c10 65 6e 20 61 20 5b 55 4e 49 51 55 45 5d 20 6f 72  en a [UNIQUE] or
21c20 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63   [PRIMARY KEY] c
21c30 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
21c40 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65  ion occurs, .the
21c50 20 52 45 50 4c 41 43 45 20 61 6c 67 6f 72 69 74   REPLACE algorit
21c60 68 6d 0a 64 65 6c 65 74 65 73 20 70 72 65 2d 65  hm.deletes pre-e
21c70 78 69 73 74 69 6e 67 20 72 6f 77 73 20 74 68 61  xisting rows tha
21c80 74 20 61 72 65 20 63 61 75 73 69 6e 67 20 74 68  t are causing th
21c90 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
21ca0 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20 74 6f 20  lation.prior to 
21cb0 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 75 70 64  inserting or upd
21cc0 61 74 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  ating the curren
21cd0 74 20 72 6f 77 20 61 6e 64 20 74 68 65 20 63 6f  t row and the co
21ce0 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20  mmand continues 
21cf0 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61  .executing norma
21d00 6c 6c 79 2e 0a 5e 49 66 20 61 20 5b 4e 4f 54 20  lly..^If a [NOT 
21d10 4e 55 4c 4c 5d 20 63 6f 6e 73 74 72 61 69 6e 74  NULL] constraint
21d20 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
21d30 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20 63  s, the REPLACE c
21d40 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69  onflict.resoluti
21d50 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65 20  on replaces the 
21d60 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69 74 68 0a  NULL value with.
21d70 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
21d80 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  e for that colum
21d90 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63 6f 6c  n, or if the col
21da0 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61 75  umn has no defau
21db0 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  lt.value, then t
21dc0 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74  he ABORT algorit
21dd0 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49 66 20  hm is used..^If 
21de0 61 20 5b 43 48 45 43 4b 5d 20 63 6f 6e 73 74 72  a [CHECK] constr
21df0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
21e00 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41  ccurs, the REPLA
21e10 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CE conflict reso
21e20 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d  lution.algorithm
21e30 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c 69   always works li
21e40 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c  ke ABORT.</p>..<
21e50 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45 50 4c  p>^When the REPL
21e60 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACE conflict res
21e70 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79  olution strategy
21e80 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e   deletes rows in
21e90 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66   order to.satisf
21ea0 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  y a constraint, 
21eb0 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20  [CREATE TRIGGER 
21ec0 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67 65 72  | delete trigger
21ed0 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64 20 6f  s] fire if and o
21ee0 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73 69 76  nly if.[recursiv
21ef0 65 5f 74 72 69 67 67 65 72 73 20 70 72 61 67 6d  e_triggers pragm
21f00 61 20 7c 20 72 65 63 75 72 73 69 76 65 20 74 72  a | recursive tr
21f10 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e 61 62  iggers] are enab
21f20 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  led.</p>..<p>^Th
21f30 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64 61 74  e [sqlite3_updat
21f40 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20  e_hook | update 
21f50 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76  hook] is not inv
21f60 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20 74 68  oked for rows th
21f70 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64 20 62  at.are deleted b
21f80 79 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f  y the REPLACE co
21f90 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
21fa0 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f  n strategy.  ^No
21fb0 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45 20 69  r does.REPLACE i
21fc0 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b 73 71  ncrement the [sq
21fd0 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20 7c 20  lite3_changes | 
21fe0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e  change counter].
21ff0 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e 61 6c  .The exceptional
22000 20 62 65 68 61 76 69 6f 72 73 20 64 65 66 69 6e   behaviors defin
22010 65 64 20 69 6e 20 74 68 69 73 20 70 61 72 61 67  ed in this parag
22020 72 61 70 68 20 6d 69 67 68 74 20 63 68 61 6e 67  raph might chang
22030 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65 20 72  e .in a future r
22040 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c  elease.</p>.</dl
22050 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72  >..<p>^The algor
22060 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69  ithm specified i
22070 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20  n the OR clause 
22080 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20  of an INSERT or 
22090 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73  UPDATE.overrides
220a0 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73   any algorithm s
220b0 70 65 63 69 66 69 65 64 20 69 6e 20 61 20 43 52  pecified in a CR
220c0 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20  EATE TABLE..^If 
220d0 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  no algorithm is 
220e0 73 70 65 63 69 66 69 65 64 20 61 6e 79 77 68 65  specified anywhe
220f0 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c  re, the ABORT al
22100 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e  gorithm is used.
22110 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
22120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22160 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
22170 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64  on REINDEX reind
22180 65 78 20 52 45 49 4e 44 45 58 0a 0a 52 65 63 75  ex REINDEX..Recu
22190 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
221a0 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d 74 0a  am reindex-stmt.
221b0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
221c0 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20  REINDEX command 
221d0 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74  is used to delet
221e0 65 20 61 6e 64 20 72 65 63 72 65 61 74 65 20 69  e and recreate i
221f0 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61  ndices from scra
22200 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65  tch..This is use
22210 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66  ful when the def
22220 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c  inition of a col
22230 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
22240 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70  has changed..</p
22250 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45  >..<p>^If the RE
22260 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73  INDEX keyword is
22270 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79   not followed by
22280 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71   a collation-seq
22290 75 65 6e 63 65 20 6f 72 20 64 61 74 61 62 61 73  uence or databas
222a0 65 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e 74 69  e .object identi
222b0 66 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69  fier, then all i
222c0 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74  ndices in all at
222d0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
222e0 20 61 72 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c   are rebuilt...<
222f0 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45  p>^If the REINDE
22300 58 20 6b 65 79 77 6f 72 64 20 69 73 20 66 6f 6c  X keyword is fol
22310 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61  lowed by a colla
22320 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61  tion-sequence na
22330 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64  me, then.all ind
22340 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61  ices in all atta
22350 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 74  ched databases t
22360 68 61 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65  hat use the name
22370 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
22380 65 6e 63 65 73 0a 61 72 65 20 72 65 63 72 65 61  ences.are recrea
22390 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69  ted. ..<p>^Or, i
223a0 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 61  f the argument a
223b0 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 52  ttached to the R
223c0 45 49 4e 44 45 58 20 69 64 65 6e 74 69 66 69 65  EINDEX identifie
223d0 73 20 61 20 73 70 65 63 69 66 69 63 20 0a 64 61  s a specific .da
223e0 74 61 62 61 73 65 20 74 61 62 6c 65 2c 20 74 68  tabase table, th
223f0 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 61  en all indices a
22400 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 64  ttached to the d
22410 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 61 72  atabase table ar
22420 65 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20  e rebuilt. .^If 
22430 69 74 20 69 64 65 6e 74 69 66 69 65 73 20 61 20  it identifies a 
22440 73 70 65 63 69 66 69 63 20 64 61 74 61 62 61 73  specific databas
22450 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75  e index, then ju
22460 73 74 20 74 68 61 74 20 69 6e 64 65 78 20 69 73  st that index is
22470 20 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e   recreated...<p>
22480 5e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61  ^If no <i>databa
22490 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73  se-name</i> is s
224a0 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 68 65  pecified and the
224b0 72 65 20 65 78 69 73 74 73 20 62 6f 74 68 20 61  re exists both a
224c0 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20   table or.index 
224d0 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  and a collation 
224e0 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
224f0 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65 2c 20  specified name, 
22500 53 51 4c 69 74 65 20 69 6e 74 65 72 70 72 65 74  SQLite interpret
22510 73 0a 74 68 69 73 20 61 73 20 61 20 72 65 71 75  s.this as a requ
22520 65 73 74 20 74 6f 20 72 65 62 75 69 6c 64 20 74  est to rebuild t
22530 68 65 20 69 6e 64 69 63 65 73 20 74 68 61 74 20  he indices that 
22540 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f  use the named co
22550 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
22560 2e 0a 54 68 69 73 20 61 6d 62 69 67 75 69 74 79  ..This ambiguity
22570 20 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6d   in the syntax m
22580 61 79 20 62 65 20 61 76 6f 69 64 65 64 20 62 79  ay be avoided by
22590 20 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69   always specifyi
225a0 6e 67 20 61 0a 3c 69 3e 64 61 74 61 62 61 73 65  ng a.<i>database
225b0 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72  -name</i> when r
225c0 65 69 6e 64 65 78 69 6e 67 20 61 20 73 70 65 63  eindexing a spec
225d0 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e  ific table or in
225e0 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  dex...<tcl>.####
225f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22630 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
22640 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c  ion REPLACE repl
22650 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74  ace REPLACE..</t
22660 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50  cl>..<p>^The REP
22670 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20  LACE command is 
22680 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
22690 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c   "[ON CONFLICT |
226a0 20 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41   INSERT OR REPLA
226b0 43 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20  CE]".variant of 
226c0 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d  the [INSERT] com
226d0 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69  mand.  .This ali
226e0 61 73 20 69 73 20 70 72 6f 76 69 64 65 64 20 66  as is provided f
226f0 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or compatibility
22700 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62   other SQL datab
22710 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65  ase engines.  Se
22720 65 20 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20  e the .[INSERT] 
22730 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74  command document
22740 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69  ation for additi
22750 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
22760 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23  .</p>  ..<tcl>.#
22770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
227a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
227b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
227c0 65 63 74 69 6f 6e 20 7b 57 49 54 48 20 63 6c 61  ection {WITH cla
227d0 75 73 65 7d 20 77 69 74 68 20 7b 7b 63 6f 6d 6d  use} with {{comm
227e0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
227f0 69 6f 6e 73 7d 20 57 49 54 48 7d 0a 0a 52 65 63  ions} WITH}..Rec
22800 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
22810 72 61 6d 20 77 69 74 68 2d 63 6c 61 75 73 65 0a  ram with-clause.
22820 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d 6f  </tcl>..<p>Commo
22830 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73 73 69  n Table Expressi
22840 6f 6e 73 20 6f 72 20 43 54 45 73 20 61 63 74 20  ons or CTEs act 
22850 6c 69 6b 65 20 74 65 6d 70 6f 72 61 72 79 20 5b  like temporary [
22860 76 69 65 77 73 5d 20 74 68 61 74 20 65 78 69 73  views] that exis
22870 74 0a 6f 6e 6c 79 20 66 6f 72 20 74 68 65 20 64  t.only for the d
22880 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e  uration of a sin
22890 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
228a0 74 2e 20 20 54 68 65 72 65 20 61 72 65 20 74 77  t.  There are tw
228b0 6f 20 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d 6d 6f  o kinds of.commo
228c0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
228d0 6f 6e 73 3a 20 22 6f 72 64 69 6e 61 72 79 22 20  ons: "ordinary" 
228e0 61 6e 64 20 22 72 65 63 75 72 73 69 76 65 22 2e  and "recursive".
228f0 20 4f 72 64 69 6e 61 72 79 20 0a 63 6f 6d 6d 6f   Ordinary .commo
22900 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
22910 6f 6e 73 20 61 72 65 20 68 65 6c 70 66 75 6c 20  ons are helpful 
22920 66 6f 72 20 6d 61 6b 69 6e 67 0a 71 75 65 72 69  for making.queri
22930 65 73 20 65 61 73 69 65 72 20 74 6f 20 75 6e 64  es easier to und
22940 65 72 73 74 61 6e 64 20 62 79 20 66 61 63 74 6f  erstand by facto
22950 72 69 6e 67 0a 73 75 62 71 75 65 72 69 65 73 20  ring.subqueries 
22960 6f 75 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 20  out of the main 
22970 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 52  SQL statement..R
22980 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20  ecursive common 
22990 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
229a0 73 0a 70 72 6f 76 69 64 65 20 74 68 65 20 61 62  s.provide the ab
229b0 69 6c 69 74 79 20 74 6f 20 64 6f 20 68 69 65 72  ility to do hier
229c0 61 72 63 68 69 63 61 6c 20 6f 72 0a 72 65 63 75  archical or.recu
229d0 72 73 69 76 65 20 71 75 65 72 69 65 73 20 6f 66  rsive queries of
229e0 20 74 72 65 65 73 20 61 6e 64 20 67 72 61 70 68   trees and graph
229f0 73 2c 20 61 20 63 61 70 61 62 69 6c 69 74 79 0a  s, a capability.
22a00 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 74 68 65  that is not othe
22a10 72 77 69 73 65 20 61 76 61 69 6c 61 62 6c 65 20  rwise available 
22a20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75  in the SQL langu
22a30 61 67 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63 6f 6d  age...<p>All com
22a40 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
22a50 73 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72 79 20  sions (ordinary 
22a60 61 6e 64 20 72 65 63 75 72 73 69 76 65 29 20 61  and recursive) a
22a70 72 65 20 0a 63 72 65 61 74 65 64 20 62 79 20 70  re .created by p
22a80 72 65 70 65 6e 64 69 6e 67 20 61 20 57 49 54 48  repending a WITH
22a90 20 63 6c 61 75 73 65 20 69 6e 20 66 72 6f 6e 74   clause in front
22aa0 20 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d 2c 20   of a [SELECT], 
22ab0 5b 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c 45 54  [INSERT], [DELET
22ac0 45 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20  E],.or [UPDATE] 
22ad0 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 20 73 69  statement.  A si
22ae0 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
22af0 20 63 61 6e 20 73 70 65 63 69 66 79 20 6f 6e 65   can specify one
22b00 20 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f 6e 20   or more.common 
22b10 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
22b20 73 2c 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68  s, some of which
22b30 20 61 72 65 20 6f 72 64 69 6e 61 72 79 20 61 6e   are ordinary an
22b40 64 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 0a  d some of which.
22b50 61 72 65 20 72 65 63 75 72 73 69 76 65 2e 0a 0a  are recursive...
22b60 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
22b70 20 6f 72 64 69 6e 61 72 79 63 74 65 20 7b 6f 72   ordinarycte {or
22b80 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
22b90 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d  ble expressions}
22ba0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64 69 6e  </tcl>.<h3>Ordin
22bb0 61 72 79 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65  ary Common Table
22bc0 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   Expressions</h3
22bd0 3e 0a 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e 61 72  >..<p>An ordinar
22be0 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  y common table e
22bf0 78 70 72 65 73 73 69 6f 6e 20 77 6f 72 6b 73 20  xpression works 
22c00 61 73 20 69 66 20 69 74 20 77 65 72 65 20 61 20  as if it were a 
22c10 5b 76 69 65 77 5d 20 74 68 61 74 0a 65 78 69 73  [view] that.exis
22c20 74 73 20 66 6f 72 20 74 68 65 20 64 75 72 61 74  ts for the durat
22c30 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20  ion of a single 
22c40 73 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72 64 69  statement.  Ordi
22c50 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  nary common tabl
22c60 65 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  e.expressions ar
22c70 65 20 75 73 65 66 75 6c 20 66 6f 72 20 66 61 63  e useful for fac
22c80 74 6f 72 69 6e 67 20 6f 75 74 20 73 75 62 71 75  toring out subqu
22c90 65 72 69 65 73 20 61 6e 64 20 6d 61 6b 69 6e 67  eries and making
22ca0 20 74 68 65 20 6f 76 65 72 61 6c 6c 0a 53 51 4c   the overall.SQL
22cb0 20 73 74 61 74 65 6d 65 6e 74 20 65 61 73 69 65   statement easie
22cc0 72 20 74 6f 20 72 65 61 64 20 61 6e 64 20 75 6e  r to read and un
22cd0 64 65 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e 41 20  derstand...<p>A 
22ce0 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 20  WITH clause can 
22cf0 63 6f 6e 74 61 69 6e 20 6f 72 64 69 6e 61 72 79  contain ordinary
22d00 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
22d10 70 72 65 73 73 69 6f 6e 73 20 65 76 65 6e 20 69  pressions even i
22d20 66 0a 69 74 20 69 6e 63 6c 75 64 65 73 20 74 68  f.it includes th
22d30 65 20 52 45 43 55 52 53 49 56 45 20 6b 65 79 77  e RECURSIVE keyw
22d40 6f 72 64 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ord.  The use of
22d50 20 52 45 43 55 52 53 49 56 45 20 64 6f 65 73 20   RECURSIVE does 
22d60 6e 6f 74 20 66 6f 72 63 65 0a 63 6f 6d 6d 6f 6e  not force.common
22d70 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
22d80 6e 73 20 74 6f 20 62 65 20 72 65 63 75 72 73 69  ns to be recursi
22d90 76 65 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72  ve...<tcl>.hd_fr
22da0 61 67 6d 65 6e 74 20 72 65 63 75 72 73 69 76 65  agment recursive
22db0 63 74 65 20 7b 72 65 63 75 72 73 69 76 65 20 63  cte {recursive c
22dc0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
22dd0 65 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65 63 75  essions} \.{recu
22de0 72 73 69 76 65 20 71 75 65 72 79 7d 0a 3c 2f 74  rsive query}.</t
22df0 63 6c 3e 0a 3c 68 33 3e 52 65 63 75 72 73 69 76  cl>.<h3>Recursiv
22e00 65 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45  e Common Table E
22e10 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a  xpressions</h3>.
22e20 0a 3c 70 3e 41 20 72 65 63 75 72 73 69 76 65 20  .<p>A recursive 
22e30 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
22e40 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75  ression can be u
22e50 73 65 64 20 74 6f 20 77 72 69 74 65 20 61 20 71  sed to write a q
22e60 75 65 72 79 20 74 68 61 74 0a 77 61 6c 6b 73 20  uery that.walks 
22e70 61 20 74 72 65 65 20 6f 72 20 67 72 61 70 68 2e  a tree or graph.
22e80 20 20 41 20 72 65 63 75 72 73 69 76 65 20 63 6f    A recursive co
22e90 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
22ea0 73 73 69 6f 6e 20 68 61 73 20 74 68 65 20 73 61  ssion has the sa
22eb0 6d 65 0a 62 61 73 69 63 20 73 79 6e 74 61 78 20  me.basic syntax 
22ec0 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 63  as an ordinary c
22ed0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
22ee0 65 73 73 69 6f 6e 2c 20 62 75 74 20 77 69 74 68  ession, but with
22ef0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 61   the following.a
22f00 64 64 69 74 69 6f 6e 61 6c 20 66 65 61 74 75 72  dditional featur
22f10 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54  es:..<ol>.<li> T
22f20 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74  he "[select-stmt
22f30 5d 22 0a 20 20 20 20 20 6d 75 73 74 20 62 65 20  ]".     must be 
22f40 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  a [compound sele
22f50 63 74 5d 20 77 68 65 72 65 20 74 68 65 20 72 69  ct] where the ri
22f60 67 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70 6f 75  ght-most [compou
22f70 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 20 69 73 0a  nd-operator] is.
22f80 20 20 20 20 20 65 69 74 68 65 72 20 55 4e 49 4f       either UNIO
22f90 4e 20 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c 2e 0a  N or UNION ALL..
22fa0 3c 6c 69 3e 20 54 68 65 20 74 61 62 6c 65 20 6e  <li> The table n
22fb0 61 6d 65 64 20 6f 6e 20 74 68 65 20 6c 65 66 74  amed on the left
22fc0 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68  -hand side of th
22fd0 65 20 41 53 20 6b 65 79 77 6f 72 64 20 6d 75 73  e AS keyword mus
22fe0 74 20 61 70 70 65 61 72 0a 20 20 20 20 20 65 78  t appear.     ex
22ff0 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68  actly once in th
23000 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
23010 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20   the right-most 
23020 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
23030 0a 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6d  .     of the com
23040 70 6f 75 6e 64 20 73 65 6c 65 63 74 2c 20 61 6e  pound select, an
23050 64 20 6e 6f 77 68 65 72 65 20 65 6c 73 65 2e 0a  d nowhere else..
23060 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70 75 74  </ol>..<p>To put
23070 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61 79 2c   it another way,
23080 20 61 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d   a recursive com
23090 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
230a0 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b 20 6c  sion must.look l
230b0 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ike the followin
230c0 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75 72 73 69  g:..<tcl>Recursi
230d0 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
230e0 72 65 63 75 72 73 69 76 65 2d 63 74 65 3c 2f 74  recursive-cte</t
230f0 63 6c 3e 0a 0a 3c 70 3e 57 65 20 72 65 66 65 72  cl>..<p>We refer
23100 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6e 61   to the table na
23110 6d 65 64 20 62 79 20 74 68 65 20 63 74 65 2d 74  med by the cte-t
23120 61 62 6c 65 2d 6e 61 6d 65 20 69 6e 20 61 20 72  able-name in a r
23130 65 63 75 72 73 69 76 65 0a 63 6f 6d 6d 6f 6e 20  ecursive.common 
23140 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
23150 20 61 73 20 74 68 65 20 22 72 65 63 75 72 73 69   as the "recursi
23160 76 65 20 74 61 62 6c 65 22 2e 0a 49 6e 20 74 68  ve table"..In th
23170 65 20 72 65 63 75 72 73 69 76 65 2d 63 74 65 20  e recursive-cte 
23180 62 75 62 62 6c 65 20 64 69 61 67 72 61 6d 20 61  bubble diagram a
23190 62 6f 76 65 2c 20 74 68 65 20 72 65 63 75 72 73  bove, the recurs
231a0 69 76 65 0a 74 61 62 6c 65 20 6d 75 73 74 20 61  ive.table must a
231b0 70 70 65 61 72 20 65 78 61 63 74 6c 79 20 6f 6e  ppear exactly on
231c0 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ce in the FROM c
231d0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 72 65 63  lause of the rec
231e0 75 72 73 69 76 65 2d 73 65 6c 65 63 74 0a 61 6e  ursive-select.an
231f0 64 20 6d 75 73 74 20 6e 6f 74 20 61 70 70 65 61  d must not appea
23200 72 20 61 6e 79 77 68 65 72 65 20 65 6c 73 65 20  r anywhere else 
23210 69 6e 20 65 69 74 68 65 72 20 74 68 65 20 69 6e  in either the in
23220 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 6f 72 20  itial-select or 
23230 74 68 65 0a 72 65 63 75 72 73 69 76 65 2d 73 65  the.recursive-se
23240 6c 65 63 74 2c 20 69 6e 63 6c 75 64 69 6e 67 20  lect, including 
23250 73 75 62 71 75 65 72 69 65 73 2e 20 20 54 68 65  subqueries.  The
23260 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20   initial-select 
23270 6d 61 79 20 62 65 0a 61 20 5b 63 6f 6d 70 6f 75  may be.a [compou
23280 6e 64 20 73 65 6c 65 63 74 5d 2c 20 62 75 74 20  nd select], but 
23290 69 74 20 6d 61 79 20 6e 6f 74 20 69 6e 63 6c 75  it may not inclu
232a0 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20  de an ORDER BY, 
232b0 4c 49 4d 49 54 2c 20 6f 72 20 4f 46 46 53 45 54  LIMIT, or OFFSET
232c0 2e 0a 54 68 65 20 72 65 63 75 72 73 69 76 65 2d  ..The recursive-
232d0 73 65 6c 65 63 74 20 6d 75 73 74 20 62 65 20 61  select must be a
232e0 20 73 69 6d 70 6c 65 20 73 65 6c 65 63 74 2c 20   simple select, 
232f0 6e 6f 74 20 61 20 63 6f 6d 70 6f 75 6e 64 2e 20  not a compound. 
23300 20 54 68 65 0a 72 65 63 75 72 73 69 76 65 2d 73   The.recursive-s
23310 65 6c 65 63 74 20 69 73 20 61 6c 6c 6f 77 65 64  elect is allowed
23320 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f   to include an O
23330 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20  RDER BY, LIMIT, 
23340 61 6e 64 2f 6f 72 20 4f 46 46 53 45 54 2e 0a 0a  and/or OFFSET...
23350 3c 70 3e 54 68 65 20 62 61 73 69 63 20 61 6c 67  <p>The basic alg
23360 6f 72 69 74 68 6d 20 66 6f 72 20 63 6f 6d 70 75  orithm for compu
23370 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
23380 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76   of the recursiv
23390 65 20 74 61 62 6c 65 0a 69 73 20 61 73 20 66 6f  e table.is as fo
233a0 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  llows:..<ol>.<li
233b0 3e 20 52 75 6e 20 74 68 65 20 69 6e 69 74 69 61  > Run the initia
233c0 6c 2d 73 65 6c 65 63 74 20 61 6e 64 20 61 64 64  l-select and add
233d0 20 74 68 65 20 72 65 73 75 6c 74 73 20 74 6f 20   the results to 
233e0 61 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 57 68  a queue..<li> Wh
233f0 69 6c 65 20 74 68 65 20 71 75 65 75 65 20 69 73  ile the queue is
23400 20 6e 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f 6c 20   not empty:.<ol 
23410 74 79 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e 20 45  type="a">.<li> E
23420 78 74 72 61 63 74 20 61 20 73 69 6e 67 6c 65 20  xtract a single 
23430 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 71 75 65  row from the que
23440 75 65 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72 74 20  ue..<li> Insert 
23450 74 68 61 74 20 73 69 6e 67 6c 65 20 72 6f 77 20  that single row 
23460 69 6e 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  into the recursi
23470 76 65 20 74 61 62 6c 65 0a 3c 6c 69 3e 20 50 72  ve table.<li> Pr
23480 65 74 65 6e 64 20 74 68 61 74 20 74 68 65 20 73  etend that the s
23490 69 6e 67 6c 65 20 72 6f 77 20 6a 75 73 74 20 65  ingle row just e
234a0 78 74 72 61 63 74 65 64 20 69 73 20 74 68 65 20  xtracted is the 
234b0 6f 6e 6c 79 0a 20 20 20 20 20 72 6f 77 20 69 6e  only.     row in
234c0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
234d0 61 62 6c 65 20 61 6e 64 20 72 75 6e 20 74 68 65  able and run the
234e0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
234f0 74 2c 0a 20 20 20 20 20 61 64 64 69 6e 67 20 61  t,.     adding a
23500 6c 6c 20 72 65 73 75 6c 74 73 20 74 6f 20 74 68  ll results to th
23510 65 20 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e 0a 3c  e queue..</ol>.<
23520 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62 61 73  /ol>..<p>The bas
23530 69 63 20 70 72 6f 63 65 64 75 72 65 20 61 62 6f  ic procedure abo
23540 76 65 20 6d 61 79 20 6d 6f 64 69 66 69 65 64 20  ve may modified 
23550 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  by the following
23560 20 61 64 64 69 74 69 6f 6e 61 6c 20 72 75 6c 65   additional rule
23570 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  s:..<ul>.<li><p>
23580 0a 20 20 49 66 20 61 20 55 4e 49 4f 4e 20 6f 70  .  If a UNION op
23590 65 72 61 74 6f 72 20 63 6f 6e 6e 65 63 74 73 20  erator connects 
235a0 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65  the initial-sele
235b0 63 74 20 77 69 74 68 20 74 68 65 0a 20 20 72 65  ct with the.  re
235c0 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20  cursive-select, 
235d0 74 68 65 6e 20 6f 6e 6c 79 20 61 64 64 20 72 6f  then only add ro
235e0 77 73 20 74 6f 20 74 68 65 20 71 75 65 75 65 20  ws to the queue 
235f0 69 66 20 6e 6f 20 69 64 65 6e 74 69 63 61 6c 20  if no identical 
23600 72 6f 77 20 68 61 73 0a 20 20 62 65 65 6e 20 70  row has.  been p
23610 72 65 76 69 6f 75 73 6c 79 20 61 64 64 65 64 20  reviously added 
23620 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 52  to the queue.  R
23630 65 70 65 61 74 65 64 20 72 6f 77 73 20 61 72 65  epeated rows are
23640 20 64 69 73 63 61 72 64 65 64 20 62 65 66 6f 72   discarded befor
23650 65 20 62 65 69 6e 67 0a 20 20 61 64 64 65 64 20  e being.  added 
23660 74 6f 20 74 68 65 20 71 75 65 75 65 20 65 76 65  to the queue eve
23670 6e 20 69 66 20 74 68 65 20 72 65 70 65 61 74 65  n if the repeate
23680 64 20 72 6f 77 73 20 68 61 76 65 20 61 6c 72 65  d rows have alre
23690 61 64 79 20 62 65 65 6e 20 65 78 74 72 61 63 74  ady been extract
236a0 65 64 0a 20 20 66 72 6f 6d 20 74 68 65 20 71 75  ed.  from the qu
236b0 65 75 65 20 62 79 20 74 68 65 20 72 65 63 75 72  eue by the recur
236c0 73 69 6f 6e 20 73 74 65 70 2e 20 20 49 66 20 74  sion step.  If t
236d0 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 20 55  he operator is U
236e0 4e 49 4f 4e 20 41 4c 4c 2c 0a 20 20 74 68 65 6e  NION ALL,.  then
236f0 20 61 6c 6c 20 72 6f 77 73 20 67 65 6e 65 72 61   all rows genera
23700 74 65 64 20 62 79 20 62 6f 74 68 20 74 68 65 20  ted by both the 
23710 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 61  initial-select a
23720 6e 64 20 74 68 65 0a 20 20 72 65 63 75 72 73 69  nd the.  recursi
23730 76 65 2d 73 65 6c 65 63 74 20 61 72 65 20 61 6c  ve-select are al
23740 77 61 79 73 20 61 64 64 65 64 20 74 6f 20 74 68  ways added to th
23750 65 20 71 75 65 75 65 20 65 76 65 6e 20 69 66 20  e queue even if 
23760 74 68 65 79 20 61 72 65 20 72 65 70 65 61 74 73  they are repeats
23770 2e 0a 20 20 57 68 65 6e 20 64 65 74 65 72 6d 69  ..  When determi
23780 6e 69 6e 67 20 69 66 20 61 20 72 6f 77 20 69 73  ning if a row is
23790 20 72 65 70 65 61 74 65 64 2c 20 4e 55 4c 4c 20   repeated, NULL 
237a0 76 61 6c 75 65 73 20 63 6f 6d 70 61 72 65 0a 20  values compare. 
237b0 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e   equal to one an
237c0 6f 74 68 65 72 20 61 6e 64 20 6e 6f 74 20 65 71  other and not eq
237d0 75 61 6c 20 74 6f 20 61 6e 79 20 6f 74 68 65 72  ual to any other
237e0 20 76 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a   value..<li><p>.
237f0 20 20 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75    The LIMIT clau
23800 73 65 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20  se, if present, 
23810 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6d  determines the m
23820 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
23830 20 72 6f 77 73 20 74 68 61 74 0a 20 20 77 69 6c   rows that.  wil
23840 6c 20 65 76 65 72 20 62 65 20 61 64 64 65 64 20  l ever be added 
23850 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65  to the recursive
23860 20 74 61 62 6c 65 20 69 6e 20 73 74 65 70 20 32   table in step 2
23870 62 2e 0a 20 20 4f 6e 63 65 20 74 68 65 20 6c 69  b..  Once the li
23880 6d 69 74 20 69 73 20 72 65 61 63 68 65 64 2c 20  mit is reached, 
23890 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74  the recursion st
238a0 6f 70 73 2e 0a 20 20 41 20 6c 69 6d 69 74 20 6f  ops..  A limit o
238b0 66 20 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 61  f zero means tha
238c0 74 20 6e 6f 20 72 6f 77 73 20 61 72 65 20 65 76  t no rows are ev
238d0 65 72 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a  er added to the.
238e0 20 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c    recursive tabl
238f0 65 2c 20 61 6e 64 20 61 20 6e 65 67 61 74 69 76  e, and a negativ
23900 65 20 6c 69 6d 69 74 20 6d 65 61 6e 73 20 61 6e  e limit means an
23910 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75 6d 62 65   unlimited numbe
23920 72 20 6f 66 20 72 6f 77 73 0a 20 20 6d 61 79 20  r of rows.  may 
23930 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  be added to the 
23940 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e  recursive table.
23950 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4f  .<li><p>.  The O
23960 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 69 66  FFSET clause, if
23970 20 69 74 20 69 73 20 70 72 65 73 65 6e 74 20 61   it is present a
23980 6e 64 20 68 61 73 20 61 20 70 6f 73 69 74 69 76  nd has a positiv
23990 65 20 76 61 6c 75 65 20 4e 2c 20 70 72 65 76 65  e value N, preve
239a0 6e 74 73 20 74 68 65 0a 20 20 66 69 72 73 74 20  nts the.  first 
239b0 4e 20 72 6f 77 73 20 66 72 6f 6d 20 62 65 69 6e  N rows from bein
239c0 67 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72  g added to the r
239d0 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a  ecursive table..
239e0 20 20 54 68 65 20 66 69 72 73 74 20 4e 20 72 6f    The first N ro
239f0 77 73 20 61 72 65 20 73 74 69 6c 6c 20 70 72 6f  ws are still pro
23a00 63 65 73 73 65 64 20 62 79 20 74 68 65 20 72 65  cessed by the re
23a10 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3b 20  cursive-select; 
23a20 74 68 65 79 0a 20 20 6a 75 73 74 20 61 72 65 20  they.  just are 
23a30 6e 6f 74 20 61 64 64 65 64 20 74 6f 20 74 68 65  not added to the
23a40 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
23a50 2e 20 20 52 6f 77 73 20 61 72 65 20 6e 6f 74 20  .  Rows are not 
23a60 63 6f 75 6e 74 65 64 20 74 6f 77 61 72 64 0a 20  counted toward. 
23a70 20 66 75 6c 66 69 6c 6c 69 6e 67 20 74 68 65 20   fulfilling the 
23a80 4c 49 4d 49 54 20 75 6e 74 69 6c 20 61 6c 6c 20  LIMIT until all 
23a90 4f 46 46 53 45 54 20 72 6f 77 73 20 68 61 76 65  OFFSET rows have
23aa0 20 62 65 65 6e 20 73 6b 69 70 70 65 64 2e 0a 3c   been skipped..<
23ab0 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 6e 20 4f  li><p>.  If an O
23ac0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
23ad0 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20 64 65  s present, it de
23ae0 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6f 72 64  termines the ord
23af0 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
23b00 0a 20 20 61 72 65 20 65 78 74 72 61 63 74 65 64  .  are extracted
23b10 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20   from the queue 
23b20 69 6e 20 73 74 65 70 20 32 61 2e 20 20 49 66 20  in step 2a.  If 
23b30 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 52 44 45  there is no ORDE
23b40 52 20 42 59 20 63 6c 61 75 73 65 2c 0a 20 20 74  R BY clause,.  t
23b50 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 69 6e  hen the order in
23b60 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
23b70 65 78 74 72 61 63 74 65 64 20 69 73 20 75 6e 64  extracted is und
23b80 65 66 69 6e 65 64 2e 20 20 28 49 6e 20 74 68 65  efined.  (In the
23b90 20 63 75 72 72 65 6e 74 0a 20 20 69 6d 70 6c 65   current.  imple
23ba0 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 71  mentation, the q
23bb0 75 65 75 65 20 62 65 63 6f 6d 65 73 20 61 20 46  ueue becomes a F
23bc0 49 46 4f 20 69 66 20 74 68 65 20 4f 52 44 45 52  IFO if the ORDER
23bd0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f 6d   BY clause is om
23be0 69 74 74 65 64 2c 0a 20 20 62 75 74 20 61 70 70  itted,.  but app
23bf0 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64  lications should
23c00 20 6e 6f 74 20 64 65 70 65 6e 64 20 6f 6e 20 74   not depend on t
23c10 68 61 74 20 66 61 63 74 20 73 69 6e 63 65 20 69  hat fact since i
23c20 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65 2e 29  t might change.)
23c30 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  .</ul>..<tcl>hd_
23c40 66 72 61 67 6d 65 6e 74 20 72 63 65 78 31 3c 2f  fragment rcex1</
23c50 74 63 6c 3e 0a 3c 68 34 3e 52 65 63 75 72 73 69  tcl>.<h4>Recursi
23c60 76 65 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65  ve Query Example
23c70 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66  s</h4>..<p>The f
23c80 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79 20 72  ollowing query r
23c90 65 74 75 72 6e 73 20 61 6c 6c 20 69 6e 74 65 67  eturns all integ
23ca0 65 72 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e  ers between 1 an
23cb0 64 20 31 30 30 30 30 30 30 3a 0a 0a 3c 62 6c 6f  d 1000000:..<blo
23cc0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
23cd0 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 63  TH RECURSIVE.  c
23ce0 6e 74 28 78 29 20 41 53 20 28 56 41 4c 55 45 53  nt(x) AS (VALUES
23cf0 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  (1) UNION ALL SE
23d00 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e  LECT x+1 FROM cn
23d10 74 20 57 48 45 52 45 20 78 3c 31 30 30 30 30 30  t WHERE x<100000
23d20 30 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  0).SELECT x FROM
23d30 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c   cnt;.</pre></bl
23d40 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f  ockquote>..<p>Co
23d50 6e 73 69 64 65 72 20 68 6f 77 20 74 68 69 73 20  nsider how this 
23d60 71 75 65 72 79 20 77 6f 72 6b 73 2e 20 20 54 68  query works.  Th
23d70 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  e initial-select
23d80 0a 72 75 6e 73 20 66 69 72 73 74 20 61 6e 64 20  .runs first and 
23d90 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65  returns a single
23da0 20 72 6f 77 0a 77 69 74 68 20 61 20 73 69 6e 67   row.with a sing
23db0 6c 65 20 63 6f 6c 75 6d 6e 20 22 31 22 2e 20 20  le column "1".  
23dc0 54 68 69 73 20 6f 6e 65 20 72 6f 77 20 69 73 20  This one row is 
23dd0 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65  added to the que
23de0 75 65 2e 20 20 49 6e 0a 73 74 65 70 20 32 61 2c  ue.  In.step 2a,
23df0 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73   that one row is
23e00 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20   extracted from 
23e10 74 68 65 20 71 75 65 75 65 20 61 6e 64 20 61 64  the queue and ad
23e20 64 65 64 20 74 6f 20 22 63 6e 74 22 2e 0a 54 68  ded to "cnt"..Th
23e30 65 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  en the recursive
23e40 2d 73 65 6c 65 63 74 20 69 73 20 72 75 6e 20 69  -select is run i
23e50 6e 20 61 63 63 6f 72 64 61 6e 63 65 20 77 69 74  n accordance wit
23e60 68 20 73 74 65 70 20 32 63 20 67 65 6e 65 72 61  h step 2c genera
23e70 74 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20 6e 65  ting.a single ne
23e80 77 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75 65  w row with value
23e90 20 22 32 22 20 74 6f 20 61 64 64 20 74 6f 20 74   "2" to add to t
23ea0 68 65 20 71 75 65 75 65 2e 20 20 54 68 65 20 71  he queue.  The q
23eb0 75 65 75 65 20 73 74 69 6c 6c 0a 68 61 73 20 6f  ueue still.has o
23ec0 6e 65 20 72 6f 77 2c 20 73 6f 20 73 74 65 70 20  ne row, so step 
23ed0 32 20 72 65 70 65 61 74 73 2e 20 20 54 68 65 20  2 repeats.  The 
23ee0 22 32 22 20 72 6f 77 20 69 73 20 65 78 74 72 61  "2" row is extra
23ef0 63 74 65 64 20 61 6e 64 20 61 64 64 65 64 20 74  cted and added t
23f00 6f 20 74 68 65 0a 72 65 63 75 72 73 69 76 65 20  o the.recursive 
23f10 74 61 62 6c 65 20 62 79 20 73 74 65 70 73 20 32  table by steps 2
23f20 61 20 61 6e 64 20 32 62 2e 20 20 54 68 65 6e 20  a and 2b.  Then 
23f30 74 68 65 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69  the row containi
23f40 6e 67 20 32 20 69 73 20 75 73 65 64 20 0a 61 73  ng 2 is used .as
23f50 20 69 66 20 69 74 20 77 65 72 65 20 74 68 65 20   if it were the 
23f60 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65 6e 74  complete content
23f70 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76   of the recursiv
23f80 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
23f90 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63  .recursive-selec
23fa0 74 20 69 73 20 72 75 6e 20 61 67 61 69 6e 2c 20  t is run again, 
23fb0 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 72  resulting in a r
23fc0 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20 22 33  ow with value "3
23fd0 22 20 62 65 69 6e 67 20 61 64 64 65 64 0a 74 6f  " being added.to
23fe0 20 74 68 65 20 71 75 65 75 65 2e 20 20 54 68 69   the queue.  Thi
23ff0 73 20 72 65 70 65 61 74 73 20 39 39 39 39 39 39  s repeats 999999
24000 20 74 69 6d 65 73 20 75 6e 74 69 6c 20 66 69 6e   times until fin
24010 61 6c 6c 79 20 61 74 20 73 74 65 70 20 32 61 20  ally at step 2a 
24020 74 68 65 0a 6f 6e 6c 79 20 76 61 6c 75 65 20 6f  the.only value o
24030 6e 20 74 68 65 20 71 75 65 75 65 20 69 73 20 61  n the queue is a
24040 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20   row containing 
24050 31 30 30 30 30 30 30 2e 20 20 54 68 61 74 20 72  1000000.  That r
24060 6f 77 20 69 73 0a 65 78 74 72 61 63 74 65 64 20  ow is.extracted 
24070 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68 65  and added to the
24080 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
24090 2e 20 20 42 75 74 20 74 68 69 73 20 74 69 6d 65  .  But this time
240a0 2c 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75  , the.WHERE clau
240b0 73 65 20 63 61 75 73 65 73 20 74 68 65 20 72 65  se causes the re
240c0 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74  cursive-select t
240d0 6f 20 72 65 74 75 72 6e 20 6e 6f 20 72 6f 77 73  o return no rows
240e0 2c 20 73 6f 20 74 68 65 0a 71 75 65 75 65 20 72  , so the.queue r
240f0 65 6d 61 69 6e 73 20 65 6d 70 74 79 20 61 6e 64  emains empty and
24100 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73   the recursion s
24110 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f 70 74  tops...<p><b>Opt
24120 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f 74 65 3a 3c  imization note:<
24130 2f 62 3e 0a 49 6e 20 74 68 65 20 64 69 73 63 75  /b>.In the discu
24140 73 73 69 6f 6e 20 61 62 6f 76 65 2c 20 73 74 61  ssion above, sta
24150 74 65 6d 65 6e 74 73 20 6c 69 6b 65 20 22 69 6e  tements like "in
24160 73 65 72 74 20 74 68 65 20 72 6f 77 20 69 6e 74  sert the row int
24170 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o.the recursive 
24180 74 61 62 6c 65 22 20 73 68 6f 75 6c 64 20 62 65  table" should be
24190 20 75 6e 64 65 72 73 74 6f 6f 64 20 63 6f 6e 63   understood conc
241a0 65 70 74 75 61 6c 6c 79 2c 20 6e 6f 74 20 6c 69  eptually, not li
241b0 74 65 72 61 6c 6c 79 2e 0a 49 74 20 73 6f 75 6e  terally..It soun
241c0 64 73 20 61 73 20 69 66 20 53 51 4c 69 74 65 20  ds as if SQLite 
241d0 69 73 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20  is accumulating 
241e0 61 20 68 75 67 65 20 74 61 62 6c 65 0a 63 6f 6e  a huge table.con
241f0 74 61 69 6e 69 6e 67 20 6f 6e 65 20 6d 69 6c 6c  taining one mill
24200 69 6f 6e 20 72 6f 77 73 2c 20 74 68 65 6e 20 67  ion rows, then g
24210 6f 69 6e 67 20 62 61 63 6b 20 61 6e 64 20 73 63  oing back and sc
24220 61 6e 6e 69 6e 67 20 74 68 61 74 20 74 61 62 6c  anning that tabl
24230 65 0a 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f  e.from top to bo
24240 74 74 6f 6d 20 74 6f 20 67 65 6e 65 72 61 74 65  ttom to generate
24250 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 57 68   the result.  Wh
24260 61 74 20 72 65 61 6c 6c 79 20 68 61 70 70 65 6e  at really happen
24270 73 0a 69 73 20 74 68 61 74 20 74 68 65 20 71 75  s.is that the qu
24280 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 73 65  ery optimizer se
24290 65 73 20 74 68 61 74 20 76 61 6c 75 65 73 20 69  es that values i
242a0 6e 20 74 68 65 0a 22 63 6e 74 22 20 72 65 63 75  n the."cnt" recu
242b0 72 73 69 76 65 20 74 61 62 6c 65 20 61 72 65 20  rsive table are 
242c0 6f 6e 6c 79 20 75 73 65 64 20 6f 6e 63 65 2e 20  only used once. 
242d0 20 53 6f 20 61 73 20 65 61 63 68 20 72 6f 77 20   So as each row 
242e0 69 73 20 61 64 64 65 64 20 74 6f 0a 74 68 65 20  is added to.the 
242f0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2c  recursive table,
24300 20 74 68 61 74 20 72 6f 77 20 69 73 20 69 6d 6d   that row is imm
24310 65 64 69 61 74 65 6c 79 20 72 65 74 75 72 6e 65  ediately returne
24320 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
24330 20 74 68 65 20 6d 61 69 6e 0a 53 45 4c 45 43 54   the main.SELECT
24340 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74   statement and t
24350 68 65 6e 20 64 69 73 63 61 72 64 65 64 2e 20 20  hen discarded.  
24360 53 51 4c 69 74 65 20 64 6f 65 73 20 3c 65 6d 3e  SQLite does <em>
24370 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63 75 6d 75 6c  not</em> accumul
24380 61 74 65 0a 61 20 74 65 6d 70 6f 72 61 72 79 20  ate.a temporary 
24390 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  table containing
243a0 20 61 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2e   a million rows.
243b0 20 20 56 65 72 79 20 6c 69 74 74 6c 65 20 6d 65    Very little me
243c0 6d 6f 72 79 20 69 73 0a 6e 65 65 64 65 64 20 74  mory is.needed t
243d0 6f 20 72 75 6e 20 74 68 65 20 61 62 6f 76 65 20  o run the above 
243e0 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76 65  example.  Howeve
243f0 72 2c 20 69 66 20 74 68 65 20 65 78 61 6d 70 6c  r, if the exampl
24400 65 20 68 61 64 20 75 73 65 64 0a 55 4e 49 4f 4e  e had used.UNION
24410 20 69 6e 73 74 65 61 64 20 6f 66 20 55 4e 49 4f   instead of UNIO
24420 4e 20 41 4c 4c 2c 20 74 68 65 6e 20 53 51 4c 69  N ALL, then SQLi
24430 74 65 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61  te would have ha
24440 64 20 74 6f 20 6b 65 65 70 20 61 72 6f 75 6e 64  d to keep around
24450 0a 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c 79 20  .all previously 
24460 67 65 6e 65 72 61 74 65 64 20 63 6f 6e 74 65 6e  generated conten
24470 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 68  t in order to ch
24480 65 63 6b 20 66 6f 72 20 64 75 70 6c 69 63 61 74  eck for duplicat
24490 65 73 2e 0a 46 6f 72 20 74 68 69 73 20 72 65 61  es..For this rea
244a0 73 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73  son, programmers
244b0 20 73 68 6f 75 6c 64 20 73 74 72 69 76 65 20 74   should strive t
244c0 6f 20 75 73 65 20 55 4e 49 4f 4e 20 41 4c 4c 20  o use UNION ALL 
244d0 69 6e 73 74 65 61 64 0a 6f 66 20 55 4e 49 4f 4e  instead.of UNION
244e0 20 77 68 65 6e 20 66 65 61 73 69 62 6c 65 2e 0a   when feasible..
244f0 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20 76 61  .<p>Here is a va
24500 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 70  riation on the p
24510 72 65 76 69 6f 75 73 20 65 78 61 6d 70 6c 65 3a  revious example:
24520 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
24530 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
24540 56 45 0a 20 20 63 6e 74 28 78 29 20 41 53 20 28  VE.  cnt(x) AS (
24550 0a 20 20 20 20 20 53 45 4c 45 43 54 20 31 0a 20  .     SELECT 1. 
24560 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
24570 20 20 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52     SELECT x+1 FR
24580 4f 4d 20 63 6e 74 0a 20 20 20 20 20 20 4c 49 4d  OM cnt.      LIM
24590 49 54 20 31 30 30 30 30 30 30 0a 20 20 29 0a 53  IT 1000000.  ).S
245a0 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 6e 74  ELECT x FROM cnt
245b0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
245c0 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  uote>..<p>There 
245d0 61 72 65 20 74 77 6f 20 64 69 66 66 65 72 65 6e  are two differen
245e0 63 65 73 20 69 6e 20 74 68 69 73 20 76 61 72 69  ces in this vari
245f0 61 74 69 6f 6e 2e 20 20 54 68 65 20 69 6e 69 74  ation.  The init
24600 69 61 6c 2d 73 65 6c 65 63 74 20 69 73 0a 22 53  ial-select is."S
24610 45 4c 45 43 54 20 31 22 20 69 6e 73 74 65 61 64  ELECT 1" instead
24620 20 6f 66 20 22 56 41 4c 55 45 53 28 31 29 22 2e   of "VALUES(1)".
24630 20 20 42 75 74 20 74 68 6f 73 65 20 61 72 65 20    But those are 
24640 6a 75 73 74 20 64 69 66 66 65 72 65 6e 74 0a 73  just different.s
24650 79 6e 74 61 78 65 73 20 66 6f 72 20 73 61 79 69  yntaxes for sayi
24660 6e 67 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  ng exactly the s
24670 61 6d 65 20 74 68 69 6e 67 2e 20 20 54 68 65 20  ame thing.  The 
24680 6f 74 68 65 72 20 63 68 61 6e 67 65 20 69 73 20  other change is 
24690 74 68 61 74 20 74 68 65 0a 72 65 63 75 72 73 69  that the.recursi
246a0 6f 6e 20 69 73 20 73 74 6f 70 70 65 64 20 62 79  on is stopped by
246b0 20 61 20 4c 49 4d 49 54 20 72 61 74 68 65 72 20   a LIMIT rather 
246c0 74 68 61 6e 20 61 20 57 48 45 52 45 20 63 6c 61  than a WHERE cla
246d0 75 73 65 2e 20 20 54 68 65 20 75 73 65 20 6f 66  use.  The use of
246e0 0a 4c 49 4d 49 54 20 6d 65 61 6e 73 20 74 68 61  .LIMIT means tha
246f0 74 20 77 68 65 6e 20 74 68 65 20 6f 6e 65 2d 6d  t when the one-m
24700 69 6c 6c 69 6f 6e 74 68 20 72 6f 77 20 69 73 20  illionth row is 
24710 61 64 64 65 64 20 74 6f 20 74 68 65 20 22 63 6e  added to the "cn
24720 74 22 20 74 61 62 6c 65 0a 28 61 6e 64 20 72 65  t" table.(and re
24730 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 6d 61  turned by the ma
24740 69 6e 20 53 45 4c 45 43 54 2c 20 74 68 61 6e 6b  in SELECT, thank
24750 73 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 6f  s to the query o
24760 70 74 69 6d 69 7a 65 72 29 0a 74 68 65 6e 20 74  ptimizer).then t
24770 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f  he recursion sto
24780 70 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72  ps immediately r
24790 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f 77  egardless of how
247a0 20 6d 61 6e 79 20 72 6f 77 73 20 6d 69 67 68 74   many rows might
247b0 20 62 65 0a 6c 65 66 74 20 69 6e 20 74 68 65 20   be.left in the 
247c0 71 75 65 75 65 2e 20 20 4f 6e 20 6d 6f 72 65 20  queue.  On more 
247d0 63 6f 6d 70 6c 65 78 20 71 75 65 72 69 65 73 2c  complex queries,
247e0 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65   it can sometime
247f0 73 20 62 65 0a 64 69 66 66 69 63 75 6c 74 20 74  s be.difficult t
24800 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
24810 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 77  e WHERE clause w
24820 69 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79 20 63  ill eventually c
24830 61 75 73 65 20 74 68 65 0a 71 75 65 75 65 20 74  ause the.queue t
24840 6f 20 64 72 61 69 6e 20 61 6e 64 20 74 68 65 20  o drain and the 
24850 72 65 63 75 72 73 69 6f 6e 20 74 6f 20 74 65 72  recursion to ter
24860 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 74 68 65  minate.  But the
24870 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77 69   LIMIT clause wi
24880 6c 6c 0a 61 6c 77 61 79 73 20 73 74 6f 70 20 74  ll.always stop t
24890 68 65 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 53  he recursion.  S
248a0 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 70 72 61  o it is good pra
248b0 63 74 69 63 65 20 74 6f 20 61 6c 77 61 79 73 20  ctice to always 
248c0 69 6e 63 6c 75 64 65 20 61 0a 4c 49 4d 49 54 20  include a.LIMIT 
248d0 63 6c 61 75 73 65 20 61 73 20 61 20 73 61 66 65  clause as a safe
248e0 74 79 20 69 66 20 61 6e 20 75 70 70 65 72 20 62  ty if an upper b
248f0 6f 75 6e 64 20 6f 6e 20 74 68 65 20 73 69 7a 65  ound on the size
24900 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 6f   of the recursio
24910 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a 3c 74  n .is known...<t
24920 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
24930 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 48  cex2</tcl>.<h4>H
24940 69 65 72 61 72 63 68 69 63 61 6c 20 51 75 65 72  ierarchical Quer
24950 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a  y Examples</h4>.
24960 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20 61 20 74  .<p>Consider a t
24970 61 62 6c 65 20 74 68 61 74 20 64 65 73 63 72 69  able that descri
24980 62 65 73 20 74 68 65 20 6d 65 6d 62 65 72 73 20  bes the members 
24990 6f 66 20 61 6e 20 6f 72 67 61 6e 69 7a 61 74 69  of an organizati
249a0 6f 6e 20 61 73 0a 77 65 6c 6c 20 61 73 20 74 68  on as.well as th
249b0 65 20 63 68 61 69 6e 2d 6f 66 2d 63 6f 6d 6d 61  e chain-of-comma
249c0 6e 64 20 77 69 74 68 69 6e 20 74 68 61 74 20 6f  nd within that o
249d0 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 0a 3c 62  rganization:..<b
249e0 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
249f0 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 67  CREATE TABLE org
24a00 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52  (.  name TEXT PR
24a10 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73  IMARY KEY,.  bos
24a20 73 20 54 45 58 54 20 52 45 46 45 52 45 4e 43 45  s TEXT REFERENCE
24a30 53 20 6f 72 67 2c 0a 20 20 68 65 69 67 68 74 20  S org,.  height 
24a40 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74 68 65 72 20  INT,.  -- other 
24a50 63 6f 6e 74 65 6e 74 20 6f 6d 69 74 74 65 64 0a  content omitted.
24a60 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
24a70 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 76 65 72 79  quote>..<p>Every
24a80 20 6d 65 6d 62 65 72 20 69 6e 20 74 68 65 20 6f   member in the o
24a90 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20  rganization has 
24aa0 61 20 6e 61 6d 65 2c 20 61 6e 64 20 6d 6f 73 74  a name, and most
24ab0 20 6d 65 6d 62 65 72 73 20 68 61 76 65 0a 61 20   members have.a 
24ac0 73 69 6e 67 6c 65 20 62 6f 73 73 2e 20 20 28 54  single boss.  (T
24ad0 68 65 20 68 65 61 64 20 6f 66 20 74 68 65 20 77  he head of the w
24ae0 68 6f 6c 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f  hole organizatio
24af0 6e 20 68 61 73 20 61 20 4e 55 4c 4c 0a 22 62 6f  n has a NULL."bo
24b00 73 73 22 20 66 69 65 6c 64 2e 29 20 54 68 65 20  ss" field.) The 
24b10 72 6f 77 73 20 6f 66 20 74 68 65 20 22 6f 72 67  rows of the "org
24b20 22 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 74  " table form a t
24b30 72 65 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73  ree...<p>Here is
24b40 20 61 20 71 75 65 72 79 20 74 68 61 74 20 63 6f   a query that co
24b50 6d 70 75 74 65 73 20 74 68 65 20 61 76 65 72 61  mputes the avera
24b60 67 65 20 68 65 69 67 68 74 20 6f 76 65 72 20 65  ge height over e
24b70 76 65 72 79 6f 6e 65 0a 69 6e 20 41 6c 69 63 65  veryone.in Alice
24b80 27 73 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 2c  's organization,
24b90 20 69 6e 63 6c 75 64 69 6e 67 20 41 6c 69 63 65   including Alice
24ba0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
24bb0 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
24bc0 49 56 45 0a 20 20 77 6f 72 6b 73 5f 66 6f 72 5f  IVE.  works_for_
24bd0 61 6c 69 63 65 28 6e 29 20 41 53 20 28 0a 20 20  alice(n) AS (.  
24be0 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27    VALUES('Alice'
24bf0 29 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20  ).    UNION.    
24c00 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
24c10 20 6f 72 67 2c 20 77 6f 72 6b 73 5f 66 6f 72 5f   org, works_for_
24c20 61 6c 69 63 65 0a 20 20 20 20 20 57 48 45 52 45  alice.     WHERE
24c30 20 6f 72 67 2e 62 6f 73 73 3d 77 6f 72 6b 73 5f   org.boss=works_
24c40 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a 20 20 29 0a  for_alice.n.  ).
24c50 53 45 4c 45 43 54 20 61 76 67 28 68 65 69 67 68  SELECT avg(heigh
24c60 74 29 20 46 52 4f 4d 20 6f 72 67 0a 20 57 48 45  t) FROM org. WHE
24c70 52 45 20 6f 72 67 2e 6e 61 6d 65 20 49 4e 20 77  RE org.name IN w
24c80 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 3b 0a  orks_for_alice;.
24c90 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
24ca0 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6e 65 78 74  te>..<p>The next
24cb0 20 65 78 61 6d 70 6c 65 20 75 73 65 73 20 74 77   example uses tw
24cc0 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  o .common table 
24cd0 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  expressions in a
24ce0 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
24cf0 75 73 65 2e 20 20 0a 54 68 65 20 66 6f 6c 6c 6f  use.  .The follo
24d00 77 69 6e 67 20 74 61 62 6c 65 20 72 65 63 6f 72  wing table recor
24d10 64 73 20 61 20 66 61 6d 69 6c 79 20 74 72 65 65  ds a family tree
24d20 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
24d30 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
24d40 45 20 66 61 6d 69 6c 79 28 0a 20 20 6e 61 6d 65  E family(.  name
24d50 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45   TEXT PRIMARY KE
24d60 59 2c 0a 20 20 6d 6f 6d 20 54 45 58 54 20 52 45  Y,.  mom TEXT RE
24d70 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c  FERENCES family,
24d80 0a 20 20 64 61 64 20 54 45 58 54 20 52 45 46 45  .  dad TEXT REFE
24d90 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a 20  RENCES family,. 
24da0 20 62 6f 72 6e 20 44 41 54 45 54 49 4d 45 2c 0a   born DATETIME,.
24db0 20 20 64 69 65 64 20 44 41 54 45 54 49 4d 45 2c    died DATETIME,
24dc0 20 2d 2d 20 4e 55 4c 4c 20 69 66 20 73 74 69 6c   -- NULL if stil
24dd0 6c 20 61 6c 69 76 65 0a 20 20 2d 2d 20 6f 74 68  l alive.  -- oth
24de0 65 72 20 63 6f 6e 74 65 6e 74 0a 29 3b 0a 3c 2f  er content.);.</
24df0 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
24e00 3e 0a 0a 3c 70 3e 54 68 65 20 22 66 61 6d 69 6c  >..<p>The "famil
24e10 79 22 20 74 61 62 6c 65 20 69 73 20 73 69 6d 69  y" table is simi
24e20 6c 61 72 20 74 6f 20 74 68 65 20 65 61 72 6c 69  lar to the earli
24e30 65 72 20 22 6f 72 67 22 20 74 61 62 6c 65 20 65  er "org" table e
24e40 78 63 65 70 74 20 74 68 61 74 20 0a 6e 6f 77 20  xcept that .now 
24e50 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 70 61  there are two pa
24e60 72 65 6e 74 73 20 74 6f 20 65 61 63 68 20 6d 65  rents to each me
24e70 6d 62 65 72 2e 0a 57 65 20 77 61 6e 74 20 74 6f  mber..We want to
24e80 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69 76 69 6e 67   know all living
24e90 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20 41 6c   ancestors of Al
24ea0 69 63 65 2c 20 66 72 6f 6d 20 6f 6c 64 65 73 74  ice, from oldest
24eb0 20 74 6f 20 79 6f 75 6e 67 65 73 74 2e 0a 41 6e   to youngest..An
24ec0 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e   ordinary common
24ed0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
24ee0 6e 2c 20 22 70 61 72 65 6e 74 5f 6f 66 22 2c 20  n, "parent_of", 
24ef0 69 73 20 64 65 66 69 6e 65 64 20 66 69 72 73 74  is defined first
24f00 2e 20 20 54 68 61 74 0a 6f 72 64 69 6e 61 72 79  .  That.ordinary
24f10 20 43 54 45 20 69 73 20 61 20 76 69 65 77 20 74   CTE is a view t
24f20 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20  hat can be used 
24f30 74 6f 20 66 69 6e 64 20 61 6c 6c 20 70 61 72 65  to find all pare
24f40 6e 74 73 20 6f 66 20 61 6e 79 0a 69 6e 64 69 76  nts of any.indiv
24f50 69 64 75 61 6c 2e 20 20 54 68 61 74 20 6f 72 64  idual.  That ord
24f60 69 6e 61 72 79 20 43 54 45 20 69 73 20 74 68 65  inary CTE is the
24f70 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20 22 61  n used in the "a
24f80 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
24f90 22 0a 72 65 63 75 72 73 69 76 65 20 43 54 45 2e  ".recursive CTE.
24fa0 20 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20    The recursive 
24fb0 43 54 45 20 69 73 20 74 68 65 6e 20 75 73 65 64  CTE is then used
24fc0 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20 71 75   in the final qu
24fd0 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ery:..<blockquot
24fe0 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
24ff0 55 52 53 49 56 45 0a 20 20 70 61 72 65 6e 74 5f  URSIVE.  parent_
25000 6f 66 28 6e 61 6d 65 2c 20 70 61 72 65 6e 74 29  of(name, parent)
25010 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43 54 20   AS.    (SELECT 
25020 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52 4f 4d 20 66  name, mom FROM f
25030 61 6d 69 6c 79 20 55 4e 49 4f 4e 20 53 45 4c 45  amily UNION SELE
25040 43 54 20 6e 61 6d 65 2c 20 64 61 64 20 46 52 4f  CT name, dad FRO
25050 4d 20 66 61 6d 69 6c 79 29 2c 0a 20 20 61 6e 63  M family),.  anc
25060 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 28 6e  estor_of_alice(n
25070 61 6d 65 29 20 41 53 0a 20 20 20 20 28 53 45 4c  ame) AS.    (SEL
25080 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f 4d 20  ECT parent FROM 
25090 70 61 72 65 6e 74 5f 6f 66 20 57 48 45 52 45 20  parent_of WHERE 
250a0 6e 61 6d 65 3d 27 41 6c 69 63 65 27 0a 20 20 20  name='Alice'.   
250b0 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20    UNION ALL.    
250c0 20 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20 46   SELECT parent F
250d0 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 4a 4f  ROM parent_of JO
250e0 49 4e 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61  IN ancestor_of_a
250f0 6c 69 63 65 20 55 53 49 4e 47 28 6e 61 6d 65 29  lice USING(name)
25100 29 0a 53 45 4c 45 43 54 20 66 61 6d 69 6c 79 2e  ).SELECT family.
25110 6e 61 6d 65 20 46 52 4f 4d 20 61 6e 63 65 73 74  name FROM ancest
25120 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c 20 66 61 6d  or_of_alice, fam
25130 69 6c 79 0a 20 57 48 45 52 45 20 61 6e 63 65 73  ily. WHERE ances
25140 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2e 6e 61 6d  tor_of_alice.nam
25150 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d 65 0a 20 20  e=family.name.  
25160 20 41 4e 44 20 64 69 65 64 20 49 53 20 4e 55 4c   AND died IS NUL
25170 4c 0a 20 4f 52 44 45 52 20 42 59 20 62 6f 72 6e  L. ORDER BY born
25180 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
25190 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  uote>..<tcl>hd_f
251a0 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f 74  ragment rcex2</t
251b0 63 6c 3e 0a 3c 68 34 3e 51 75 65 72 69 65 73 20  cl>.<h4>Queries 
251c0 41 67 61 69 6e 73 74 20 41 20 47 72 61 70 68 3c  Against A Graph<
251d0 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76 65 72 73 69  /h4>..<p>A versi
251e0 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73 74 65  on control syste
251f0 6d 20 28 56 43 53 29 20 77 69 6c 6c 20 74 79 70  m (VCS) will typ
25200 69 63 61 6c 6c 79 20 73 74 6f 72 65 20 74 68 65  ically store the
25210 20 65 76 6f 6c 76 69 6e 67 0a 76 65 72 73 69 6f   evolving.versio
25220 6e 73 20 6f 66 20 61 20 70 72 6f 6a 65 63 74 20  ns of a project 
25230 61 73 20 61 20 64 69 72 65 63 74 65 64 20 61 63  as a directed ac
25240 79 63 6c 69 63 20 67 72 61 70 68 20 28 44 41 47  yclic graph (DAG
25250 29 2e 20 20 43 61 6c 6c 20 65 61 63 68 0a 76 65  ).  Call each.ve
25260 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f  rsion of the pro
25270 6a 65 63 74 20 61 20 22 63 68 65 63 6b 69 6e 22  ject a "checkin"
25280 2e 20 20 41 20 73 69 6e 67 6c 65 0a 63 68 65 63  .  A single.chec
25290 6b 69 6e 20 63 61 6e 20 68 61 76 65 20 7a 65 72  kin can have zer
252a0 6f 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e 74  o or more parent
252b0 73 2e 20 20 4d 6f 73 74 20 63 68 65 63 6b 69 6e  s.  Most checkin
252c0 73 20 28 65 78 63 65 70 74 20 74 68 65 0a 66 69  s (except the.fi
252d0 72 73 74 29 20 68 61 76 65 20 61 20 73 69 6e 67  rst) have a sing
252e0 6c 65 20 70 61 72 65 6e 74 2c 20 62 75 74 20 69  le parent, but i
252f0 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n the case of a 
25300 6d 65 72 67 65 2c 20 61 20 63 68 65 63 6b 69 6e  merge, a checkin
25310 0a 6d 69 67 68 74 20 68 61 76 65 20 74 77 6f 20  .might have two 
25320 6f 72 20 74 68 72 65 65 20 6f 72 20 6d 6f 72 65  or three or more
25330 20 70 61 72 65 6e 74 73 2e 20 20 41 20 73 63 68   parents.  A sch
25340 65 6d 61 20 74 6f 20 6b 65 65 70 20 74 72 61 63  ema to keep trac
25350 6b 20 6f 66 0a 63 68 65 63 6b 69 6e 73 20 61 6e  k of.checkins an
25360 64 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77  d the order in w
25370 68 69 63 68 20 74 68 65 79 20 6f 63 63 75 72 20  hich they occur 
25380 6d 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65 74  might look somet
25390 68 69 6e 67 20 6c 69 6b 65 0a 74 68 69 73 3a 0a  hing like.this:.
253a0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
253b0 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
253c0 63 68 65 63 6b 69 6e 28 0a 20 20 69 64 20 49 4e  checkin(.  id IN
253d0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
253e0 59 2c 0a 20 20 6d 74 69 6d 65 20 49 4e 54 45 47  Y,.  mtime INTEG
253f0 45 52 20 2d 2d 20 74 69 6d 65 73 74 61 6d 70 20  ER -- timestamp 
25400 77 68 65 6e 20 74 68 69 73 20 63 68 65 63 6b 69  when this checki
25410 6e 20 6f 63 63 75 72 72 65 64 0a 29 3b 0a 43 52  n occurred.);.CR
25420 45 41 54 45 20 54 41 42 4c 45 20 64 65 72 69 76  EATE TABLE deriv
25430 65 64 66 72 6f 6d 28 0a 20 20 78 66 72 6f 6d 20  edfrom(.  xfrom 
25440 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c  INTEGER NOT NULL
25450 20 52 45 46 45 52 45 4e 43 45 53 20 63 68 65 63   REFERENCES chec
25460 6b 69 6e 2c 20 2d 2d 20 70 61 72 65 6e 74 20 63  kin, -- parent c
25470 68 65 63 6b 69 6e 0a 20 20 78 74 6f 20 49 4e 54  heckin.  xto INT
25480 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45  EGER NOT NULL RE
25490 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b 69 6e  FERENCES checkin
254a0 2c 20 20 20 2d 2d 20 64 65 72 69 76 65 64 20 63  ,   -- derived c
254b0 68 65 63 6b 69 6e 0a 20 20 50 52 49 4d 41 52 59  heckin.  PRIMARY
254c0 20 4b 45 59 28 78 66 72 6f 6d 2c 78 74 6f 29 0a   KEY(xfrom,xto).
254d0 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20  );.CREATE INDEX 
254e0 64 65 72 69 76 65 64 66 72 6f 6d 5f 62 61 63 6b  derivedfrom_back
254f0 20 4f 4e 20 64 65 72 69 76 65 64 66 72 6f 6d 28   ON derivedfrom(
25500 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a 3c 2f 70 72  xto,xfrom);.</pr
25510 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
25520 0a 3c 70 3e 54 68 69 73 20 67 72 61 70 68 20 69  .<p>This graph i
25530 73 20 61 63 79 63 6c 69 63 2e 20 20 41 6e 64 20  s acyclic.  And 
25540 77 65 20 61 73 73 75 6d 65 20 74 68 61 74 20 74  we assume that t
25550 68 65 20 6d 74 69 6d 65 20 6f 66 20 65 76 65 72  he mtime of ever
25560 79 0a 63 68 69 6c 64 20 63 68 65 63 6b 69 6e 20  y.child checkin 
25570 69 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20  is no less than 
25580 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 61 6c 6c  the mtime of all
25590 20 69 74 73 20 70 61 72 65 6e 74 73 2e 20 20 42   its parents.  B
255a0 75 74 0a 75 6e 6c 69 6b 65 20 74 68 65 20 65 61  ut.unlike the ea
255b0 72 6c 69 65 72 20 65 78 61 6d 70 6c 65 73 2c 20  rlier examples, 
255c0 74 68 69 73 20 67 72 61 70 68 20 6d 69 67 68 74  this graph might
255d0 20 68 61 76 65 20 6d 75 6c 74 69 70 6c 65 20 70   have multiple p
255e0 61 74 68 73 20 6f 66 0a 64 69 66 66 65 72 69 6e  aths of.differin
255f0 67 20 6c 65 6e 67 74 68 73 20 62 65 74 77 65 65  g lengths betwee
25600 6e 20 61 6e 79 20 74 77 6f 20 63 68 65 63 6b 69  n any two checki
25610 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77 61 6e 74 20  ns...<p>We want 
25620 74 6f 20 6b 6e 6f 77 20 74 68 65 20 74 77 65 6e  to know the twen
25630 74 79 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61  ty most recent a
25640 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 69 6d 65  ncestors in time
25650 20 28 6f 75 74 20 6f 66 0a 74 68 65 20 74 68 6f   (out of.the tho
25660 75 73 61 6e 64 73 20 61 6e 64 20 74 68 6f 75 73  usands and thous
25670 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f 72  ands of ancestor
25680 73 20 69 6e 20 74 68 65 20 77 68 6f 6c 65 20 44  s in the whole D
25690 41 47 29 20 66 6f 72 0a 63 68 65 63 6b 69 6e 20  AG) for.checkin 
256a0 22 40 42 41 53 45 4c 49 4e 45 22 2e 20 20 28 41  "@BASELINE".  (A
256b0 20 71 75 65 72 79 20 73 69 6d 69 6c 61 72 20 74   query similar t
256c0 6f 20 74 68 69 73 20 69 73 20 75 73 65 64 0a 62  o this is used.b
256d0 79 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 68  y the <a href="h
256e0 74 74 70 3a 2f 2f 77 77 77 2e 66 6f 73 73 69 6c  ttp://www.fossil
256f0 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46 6f 73 73 69  -scm.org/">Fossi
25700 6c 3c 2f 61 3e 20 56 43 53 20 74 6f 0a 73 68 6f  l</a> VCS to.sho
25710 77 20 74 68 65 20 4e 20 6d 6f 73 74 20 72 65 63  w the N most rec
25720 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 6f 66  ent ancestors of
25730 20 61 20 63 68 65 63 6b 2e 20 20 46 6f 72 20 65   a check.  For e
25740 78 61 6d 70 6c 65 3a 0a 3c 61 20 68 72 65 66 3d  xample:.<a href=
25750 22 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69  "http://www.sqli
25760 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c  te.org/src/timel
25770 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30  ine?p=trunk&n=30
25780 22 3e 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c  ">http://www.sql
25790 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65  ite.org/src/time
257a0 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33  line?p=trunk&n=3
257b0 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c 6f 63 6b 71  0</a>.)..<blockq
257c0 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
257d0 52 45 43 55 52 53 49 56 45 0a 20 20 61 6e 63 65  RECURSIVE.  ance
257e0 73 74 6f 72 28 69 64 2c 6d 74 69 6d 65 29 20 41  stor(id,mtime) A
257f0 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 69  S (.    SELECT i
25800 64 2c 20 6d 74 69 6d 65 20 46 52 4f 4d 20 63 68  d, mtime FROM ch
25810 65 63 6b 69 6e 20 57 48 45 52 45 20 69 64 3d 40  eckin WHERE id=@
25820 42 41 53 45 4c 49 4e 45 0a 20 20 20 20 55 4e 49  BASELINE.    UNI
25830 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 65  ON.    SELECT de
25840 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 2c  rivedfrom.xfrom,
25850 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 0a 20   checkin.mtime. 
25860 20 20 20 20 20 46 52 4f 4d 20 61 6e 63 65 73 74       FROM ancest
25870 6f 72 2c 20 64 65 72 69 76 65 64 66 72 6f 6d 2c  or, derivedfrom,
25880 20 63 68 65 63 6b 69 6e 0a 20 20 20 20 20 57 48   checkin.     WH
25890 45 52 45 20 61 6e 63 65 73 74 6f 72 2e 69 64 3d  ERE ancestor.id=
258a0 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 74 6f 0a  derivedfrom.xto.
258b0 20 20 20 20 20 20 20 41 4e 44 20 63 68 65 63 6b         AND check
258c0 69 6e 2e 69 64 3d 64 65 72 69 76 65 64 66 72 6f  in.id=derivedfro
258d0 6d 2e 78 66 72 6f 6d 0a 20 20 20 20 20 4f 52 44  m.xfrom.     ORD
258e0 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74  ER BY checkin.mt
258f0 69 6d 65 20 44 45 53 43 0a 20 20 20 20 20 4c 49  ime DESC.     LI
25900 4d 49 54 20 32 30 0a 20 20 29 0a 53 45 4c 45 43  MIT 20.  ).SELEC
25910 54 20 2a 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e  T * FROM checkin
25920 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 20 55   JOIN ancestor U
25930 53 49 4e 47 28 69 64 29 3b 0a 3c 2f 70 72 65 3e  SING(id);.</pre>
25940 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
25950 70 3e 0a 54 68 65 20 22 4f 52 44 45 52 20 42 59  p>.The "ORDER BY
25960 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44   checkin.mtime D
25970 45 53 43 22 20 74 65 72 6d 20 69 6e 20 74 68 65  ESC" term in the
25980 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
25990 74 20 6d 61 6b 65 73 0a 74 68 65 20 71 75 65 72  t makes.the quer
259a0 79 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74 65  y run much faste
259b0 72 20 62 79 20 70 72 65 76 65 6e 74 69 6e 67 20  r by preventing 
259c0 69 74 20 66 72 6f 6d 20 66 6f 6c 6c 6f 77 69 6e  it from followin
259d0 67 0a 62 72 61 6e 63 68 65 73 20 74 68 61 74 20  g.branches that 
259e0 6d 65 72 67 65 20 63 68 65 63 6b 69 6e 73 0a 66  merge checkins.f
259f0 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f 2e 20 20 54  rom long ago.  T
25a00 68 65 20 4f 52 44 45 52 20 42 59 20 66 6f 72 63  he ORDER BY forc
25a10 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76 65  es the recursive
25a20 2d 73 65 6c 65 63 74 20 74 6f 20 66 6f 63 75 73  -select to focus
25a30 0a 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63  .on the most rec
25a40 65 6e 74 20 63 68 65 63 6b 69 6e 73 2c 20 74 68  ent checkins, th
25a50 65 20 6f 6e 65 73 20 77 65 20 77 61 6e 74 2e 20  e ones we want. 
25a60 20 57 69 74 68 6f 75 74 20 74 68 65 20 4f 52 44   Without the ORD
25a70 45 52 20 42 59 0a 6f 6e 20 74 68 65 20 72 65 63  ER BY.on the rec
25a80 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 6f  ursive-select, o
25a90 6e 65 20 77 6f 75 6c 64 20 62 65 20 66 6f 72 63  ne would be forc
25aa0 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 20 74 68  ed to compute th
25ab0 65 20 63 6f 6d 70 6c 65 74 65 20 73 65 74 20 6f  e complete set o
25ac0 66 0a 74 68 6f 75 73 61 6e 64 73 20 6f 66 20 61  f.thousands of a
25ad0 6e 63 65 73 74 6f 72 73 2c 20 73 6f 72 74 20 74  ncestors, sort t
25ae0 68 65 6d 20 61 6c 6c 20 62 79 20 6d 74 69 6d 65  hem all by mtime
25af0 2c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  , then take the 
25b00 74 6f 70 20 74 77 65 6e 74 79 2e 0a 54 68 65 20  top twenty..The 
25b10 4f 52 44 45 52 20 42 59 20 65 73 73 65 6e 74 69  ORDER BY essenti
25b20 61 6c 6c 79 20 73 65 74 73 20 75 70 20 61 20 70  ally sets up a p
25b30 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 74 68  riority queue th
25b40 61 74 0a 66 6f 72 63 65 73 20 74 68 65 20 72 65  at.forces the re
25b50 63 75 72 73 69 76 65 20 71 75 65 72 79 20 74 6f  cursive query to
25b60 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 6d 6f 73   look at the mos
25b70 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f  t recent ancesto
25b80 72 73 20 66 69 72 73 74 2c 0a 61 6c 6c 6f 77 69  rs first,.allowi
25b90 6e 67 20 74 68 65 20 75 73 65 20 6f 66 20 61 20  ng the use of a 
25ba0 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74 6f 20  LIMIT clause to 
25bb0 72 65 73 74 72 69 63 74 20 74 68 65 20 73 63 6f  restrict the sco
25bc0 70 65 20 6f 66 20 74 68 65 0a 71 75 65 72 79 20  pe of the.query 
25bd0 74 6f 20 6a 75 73 74 20 74 68 65 20 63 68 65 63  to just the chec
25be0 6b 69 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74  kins of interest
25bf0 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
25c00 65 6e 74 20 77 69 74 68 6f 72 64 65 72 62 79 3c  ent withorderby<
25c10 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f 6e 74 72 6f  /tcl>.<h4>Contro
25c20 6c 6c 69 6e 67 20 44 65 70 74 68 2d 46 69 72 73  lling Depth-Firs
25c30 74 20 56 65 72 73 75 73 20 42 72 65 61 64 74 68  t Versus Breadth
25c40 2d 46 69 72 73 74 20 53 65 61 72 63 68 20 4f 66  -First Search Of
25c50 20 61 20 54 72 65 65 0a 55 73 69 6e 67 20 4f 52   a Tree.Using OR
25c60 44 45 52 20 42 59 3c 2f 68 34 3e 0a 0a 3c 70 3e  DER BY</h4>..<p>
25c70 41 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  An ORDER BY clau
25c80 73 65 20 6f 6e 20 74 68 65 20 72 65 63 75 72 73  se on the recurs
25c90 69 76 65 2d 73 65 6c 65 63 74 20 63 61 6e 20 62  ive-select can b
25ca0 65 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  e used to contro
25cb0 6c 0a 77 68 65 74 68 65 72 20 74 68 65 20 73 65  l.whether the se
25cc0 61 72 63 68 20 6f 66 20 61 20 74 72 65 65 20 69  arch of a tree i
25cd0 73 20 64 65 70 74 68 2d 66 69 72 73 74 20 6f 72  s depth-first or
25ce0 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 2e 20   breadth-first. 
25cf0 20 54 6f 0a 69 6c 6c 75 73 74 72 61 74 65 2c 20   To.illustrate, 
25d00 77 65 20 77 69 6c 6c 20 75 73 65 20 61 20 76 61  we will use a va
25d10 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 22  riation on the "
25d20 6f 72 67 22 20 74 61 62 6c 65 20 66 72 6f 6d 20  org" table from 
25d30 61 6e 20 65 78 61 6d 70 6c 65 0a 61 62 6f 76 65  an example.above
25d40 2c 20 77 69 74 68 6f 75 74 20 74 68 65 20 22 68  , without the "h
25d50 65 69 67 68 74 22 20 63 6f 6c 75 6d 6e 2c 20 61  eight" column, a
25d60 6e 64 20 77 69 74 68 20 73 6f 6d 65 20 72 65 61  nd with some rea
25d70 6c 20 64 61 74 61 20 69 6e 73 65 72 74 65 64 3a  l data inserted:
25d80 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
25d90 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
25da0 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45 58   org(.  name TEX
25db0 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20  T PRIMARY KEY,. 
25dc0 20 62 6f 73 73 20 54 45 58 54 20 52 45 46 45 52   boss TEXT REFER
25dd0 45 4e 43 45 53 20 6f 72 67 0a 29 20 57 49 54 48  ENCES org.) WITH
25de0 4f 55 54 20 52 4f 57 49 44 3b 0a 49 4e 53 45 52  OUT ROWID;.INSER
25df0 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
25e00 53 28 27 41 6c 69 63 65 27 2c 4e 55 4c 4c 29 3b  S('Alice',NULL);
25e10 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
25e20 20 56 41 4c 55 45 53 28 27 42 6f 62 27 2c 27 41   VALUES('Bob','A
25e30 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54 20 49  lice');.INSERT I
25e40 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27  NTO org VALUES('
25e50 43 69 6e 64 79 27 2c 27 41 6c 69 63 65 27 29 3b  Cindy','Alice');
25e60 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
25e70 20 56 41 4c 55 45 53 28 27 44 61 76 65 27 2c 27   VALUES('Dave','
25e80 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  Bob');.INSERT IN
25e90 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 45  TO org VALUES('E
25ea0 6d 6d 61 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53  mma','Bob');.INS
25eb0 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c  ERT INTO org VAL
25ec0 55 45 53 28 27 46 72 65 64 27 2c 27 43 69 6e 64  UES('Fred','Cind
25ed0 79 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  y');.INSERT INTO
25ee0 20 6f 72 67 20 56 41 4c 55 45 53 28 27 47 61 69   org VALUES('Gai
25ef0 6c 27 2c 27 43 69 6e 64 79 27 29 3b 0a 3c 2f 70  l','Cindy');.</p
25f00 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
25f10 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20 71  ..<p>Here is a q
25f20 75 65 72 79 20 74 6f 20 73 68 6f 77 20 74 68 65  uery to show the
25f30 20 74 72 65 65 20 73 74 72 75 63 74 75 72 65 20   tree structure 
25f40 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72  in a breadth-fir
25f50 73 74 20 70 61 74 74 65 72 6e 3a 0a 0a 3c 62 6c  st pattern:..<bl
25f60 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
25f70 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
25f80 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65  under_alice(name
25f90 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20 20 20  ,level) AS (.   
25fa0 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c   VALUES('Alice',
25fb0 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  0).    UNION ALL
25fc0 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72 67 2e  .    SELECT org.
25fd0 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63  name, under_alic
25fe0 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20 20 20  e.level+1.      
25ff0 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e  FROM org JOIN un
26000 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67  der_alice ON org
26010 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63  .boss=under_alic
26020 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52 44 45  e.name.     ORDE
26030 52 20 42 59 20 32 0a 20 20 29 0a 53 45 4c 45 43  R BY 2.  ).SELEC
26040 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e  T substr('......
26050 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29  ....',1,level*3)
26060 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e   || name FROM un
26070 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65  der_alice;.</pre
26080 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
26090 3c 70 3e 54 68 65 20 22 4f 52 44 45 52 20 42 59  <p>The "ORDER BY
260a0 20 32 22 20 28 77 68 69 63 68 20 6d 65 61 6e 73   2" (which means
260b0 20 74 68 65 20 73 61 6d 65 20 61 73 20 22 4f 52   the same as "OR
260c0 44 45 52 20 42 59 20 75 6e 64 65 72 5f 61 6c 69  DER BY under_ali
260d0 63 65 2e 6c 65 76 65 6c 2b 31 22 29 0a 63 61 75  ce.level+1").cau
260e0 73 65 73 20 68 69 67 68 65 72 20 6c 65 76 65 6c  ses higher level
260f0 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a  s in the organiz
26100 61 74 69 6f 6e 20 63 68 61 72 74 20 28 77 69 74  ation chart (wit
26110 68 20 73 6d 61 6c 6c 65 72 20 22 6c 65 76 65 6c  h smaller "level
26120 22 20 76 61 6c 75 65 73 29 0a 74 6f 20 62 65 20  " values).to be 
26130 70 72 6f 63 65 73 73 65 64 20 66 69 72 73 74 2c  processed first,
26140 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20   resulting in a 
26150 62 72 65 61 64 74 68 2d 66 69 72 73 74 20 73 65  breadth-first se
26160 61 72 63 68 2e 20 20 54 68 65 20 6f 75 74 70 75  arch.  The outpu
26170 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  t is:..<blockquo
26180 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e  te><pre>.Alice..
26190 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e 64 79 0a 2e  ..Bob....Cindy..
261a0 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e  .....Dave.......
261b0 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a  Emma.......Fred.
261c0 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65  ......Gail.</pre
261d0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
261e0 3c 70 3e 42 75 74 20 69 66 20 77 65 20 63 68 61  <p>But if we cha
261f0 6e 67 65 20 74 68 65 20 4f 52 44 45 52 20 42 59  nge the ORDER BY
26200 20 63 6c 61 75 73 65 20 74 6f 20 61 64 64 20 74   clause to add t
26210 68 65 20 22 44 45 53 43 22 20 6d 6f 64 69 66 69  he "DESC" modifi
26220 65 72 2c 20 74 68 61 74 20 77 69 6c 6c 0a 63 61  er, that will.ca
26230 75 73 65 20 6c 6f 77 65 72 20 6c 65 76 65 6c 73  use lower levels
26240 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61   in the organiza
26250 74 69 6f 6e 20 28 77 69 74 68 20 6c 61 72 67 65  tion (with large
26260 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75 65 73  r "level" values
26270 29 20 74 6f 20 62 65 0a 70 72 6f 63 65 73 73 65  ) to be.processe
26280 64 20 66 69 72 73 74 20 62 79 20 74 68 65 20 72  d first by the r
26290 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c  ecursive-select,
262a0 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20   resulting in a 
262b0 64 65 70 74 68 2d 66 69 72 73 74 20 73 65 61 72  depth-first sear
262c0 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ch:..<blockquote
262d0 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
262e0 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c  RSIVE.  under_al
262f0 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20  ice(name,level) 
26300 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28  AS (.    VALUES(
26310 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20 20 55  'Alice',0).    U
26320 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c  NION ALL.    SEL
26330 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e  ECT org.name, un
26340 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b  der_alice.level+
26350 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f 72 67  1.      FROM org
26360 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63   JOIN under_alic
26370 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e  e ON org.boss=un
26380 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20  der_alice.name. 
26390 20 20 20 20 4f 52 44 45 52 20 42 59 20 32 20 3c      ORDER BY 2 <
263a0 62 3e 44 45 53 43 3c 2f 62 3e 0a 20 20 29 0a 53  b>DESC</b>.  ).S
263b0 45 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e 2e  ELECT substr('..
263c0 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65  ........',1,leve
263d0 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f  l*3) || name FRO
263e0 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c  M under_alice;.<
263f0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
26400 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75  e>..<p>The outpu
26410 74 20 6f 66 20 74 68 69 73 20 72 65 76 69 73 65  t of this revise
26420 64 20 71 75 65 72 79 20 69 73 3a 0a 0a 3c 62 6c  d query is:..<bl
26430 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41  ockquote><pre>.A
26440 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 2e  lice....Bob.....
26450 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d  ..Dave.......Emm
26460 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e  a....Cindy......
26470 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c  .Fred.......Gail
26480 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
26490 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68  ote>..<p>When th
264a0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
264b0 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  e is omitted fro
264c0 6d 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  m the recursive-
264d0 73 65 6c 65 63 74 2c 20 74 68 65 0a 71 75 65 75  select, the.queu
264e0 65 20 62 65 68 61 76 65 73 20 61 73 20 61 20 46  e behaves as a F
264f0 49 46 4f 2c 20 77 68 69 63 68 20 72 65 73 75 6c  IFO, which resul
26500 74 73 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d  ts in a breadth-
26510 66 69 72 73 74 20 73 65 61 72 63 68 2e 0a 0a 0a  first search....
26520 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
26530 20 6d 61 6e 64 65 6c 62 72 6f 74 20 7b 63 6f 6d   mandelbrot {com
26540 70 75 74 65 20 74 68 65 20 4d 61 6e 64 65 6c 62  pute the Mandelb
26550 72 6f 74 20 73 65 74 7d 3c 2f 74 63 6c 3e 0a 3c  rot set}</tcl>.<
26560 68 34 3e 4f 75 74 6c 61 6e 64 69 73 68 20 52 65  h4>Outlandish Re
26570 63 75 72 73 69 76 65 20 51 75 65 72 79 20 45 78  cursive Query Ex
26580 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e  amples</h4>..<p>
26590 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75  The following qu
265a0 65 72 79 20 63 6f 6d 70 75 74 65 73 20 61 6e 20  ery computes an 
265b0 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 6f 66  approximation of
265c0 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20   the Mandelbrot 
265d0 53 65 74 0a 61 6e 64 20 6f 75 74 70 75 74 73 20  Set.and outputs 
265e0 74 68 65 20 72 65 73 75 6c 74 20 61 73 20 41 53  the result as AS
265f0 43 49 49 2d 61 72 74 3a 0a 0a 3c 62 6c 6f 63 6b  CII-art:..<block
26600 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
26610 20 52 45 43 55 52 53 49 56 45 0a 20 20 78 61 78   RECURSIVE.  xax
26620 69 73 28 78 29 20 41 53 20 28 56 41 4c 55 45 53  is(x) AS (VALUES
26630 28 2d 32 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c  (-2.0) UNION ALL
26640 20 53 45 4c 45 43 54 20 78 2b 30 2e 30 35 20 46   SELECT x+0.05 F
26650 52 4f 4d 20 78 61 78 69 73 20 57 48 45 52 45 20  ROM xaxis WHERE 
26660 78 3c 31 2e 32 29 2c 0a 20 20 79 61 78 69 73 28  x<1.2),.  yaxis(
26670 79 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d 31  y) AS (VALUES(-1
26680 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  .0) UNION ALL SE
26690 4c 45 43 54 20 79 2b 30 2e 31 20 46 52 4f 4d 20  LECT y+0.1 FROM 
266a0 79 61 78 69 73 20 57 48 45 52 45 20 79 3c 31 2e  yaxis WHERE y<1.
266b0 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c 20 63 78  0),.  m(iter, cx
266c0 2c 20 63 79 2c 20 78 2c 20 79 29 20 41 53 20 28  , cy, x, y) AS (
266d0 0a 20 20 20 20 53 45 4c 45 43 54 20 30 2c 20 78  .    SELECT 0, x
266e0 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52  , y, 0.0, 0.0 FR
266f0 4f 4d 20 78 61 78 69 73 2c 20 79 61 78 69 73 0a  OM xaxis, yaxis.
26700 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
26710 20 20 53 45 4c 45 43 54 20 69 74 65 72 2b 31 2c    SELECT iter+1,
26720 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d 79 2a 79   cx, cy, x*x-y*y
26730 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a 79 20 2b   + cx, 2.0*x*y +
26740 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20 20 20 20   cy FROM m .    
26750 20 57 48 45 52 45 20 28 78 2a 78 20 2b 20 79 2a   WHERE (x*x + y*
26760 79 29 20 3c 20 34 2e 30 20 41 4e 44 20 69 74 65  y) < 4.0 AND ite
26770 72 3c 32 38 0a 20 20 29 2c 0a 20 20 6d 32 28 69  r<28.  ),.  m2(i
26780 74 65 72 2c 20 63 78 2c 20 63 79 29 20 41 53 20  ter, cx, cy) AS 
26790 28 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78  (.    SELECT max
267a0 28 69 74 65 72 29 2c 20 63 78 2c 20 63 79 20 46  (iter), cx, cy F
267b0 52 4f 4d 20 6d 20 47 52 4f 55 50 20 42 59 20 63  ROM m GROUP BY c
267c0 78 2c 20 63 79 0a 20 20 29 2c 0a 20 20 61 28 74  x, cy.  ),.  a(t
267d0 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43  ) AS (.    SELEC
267e0 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 20  T group_concat( 
267f0 73 75 62 73 74 72 28 27 20 2e 2b 2a 23 27 2c 20  substr(' .+*#', 
26800 31 2b 6d 69 6e 28 69 74 65 72 2f 37 2c 34 29 2c  1+min(iter/7,4),
26810 20 31 29 2c 20 27 27 29 20 0a 20 20 20 20 46 52   1), '') .    FR
26820 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42 59 20 63  OM m2 GROUP BY c
26830 79 0a 20 20 29 0a 53 45 4c 45 43 54 20 67 72 6f  y.  ).SELECT gro
26840 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69 6d 28  up_concat(rtrim(
26850 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d 20 61  t),x'0a') FROM a
26860 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
26870 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68 69  uote>..<p>In thi
26880 73 20 71 75 65 72 79 2c 20 74 68 65 20 22 78 61  s query, the "xa
26890 78 69 73 22 20 61 6e 64 20 22 79 61 78 69 73 22  xis" and "yaxis"
268a0 20 43 54 45 73 20 64 65 66 69 6e 65 20 74 68 65   CTEs define the
268b0 20 67 72 69 64 20 6f 66 20 70 6f 69 6e 74 73 20   grid of points 
268c0 66 6f 72 0a 77 68 69 63 68 20 74 68 65 20 4d 61  for.which the Ma
268d0 6e 64 65 6c 62 72 6f 74 20 53 65 74 20 77 69 6c  ndelbrot Set wil
268e0 6c 20 62 65 20 61 70 70 72 6f 78 69 6d 61 74 65  l be approximate
268f0 64 2e 20 20 45 61 63 68 20 72 6f 77 20 69 6e 20  d.  Each row in 
26900 74 68 65 0a 22 6d 28 69 74 65 72 2c 63 78 2c 63  the."m(iter,cx,c
26910 79 2c 78 2c 79 29 22 20 43 54 45 20 6d 65 61 6e  y,x,y)" CTE mean
26920 73 20 74 68 61 74 20 61 66 74 65 72 20 22 69 74  s that after "it
26930 65 72 22 20 69 74 65 72 61 74 69 6f 6e 73 2c 20  er" iterations, 
26940 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 0a 69  the Mandelbrot.i
26950 74 65 72 61 74 69 6f 6e 20 73 74 61 72 74 69 6e  teration startin
26960 67 20 61 74 20 63 78 2c 63 79 20 68 61 73 20 72  g at cx,cy has r
26970 65 61 63 68 65 64 20 70 6f 69 6e 74 20 78 2c 79  eached point x,y
26980 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
26990 20 69 74 65 72 61 74 69 6f 6e 73 0a 69 6e 20 74   iterations.in t
269a0 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 6c  his example is l
269b0 69 6d 69 74 65 64 20 74 6f 20 32 38 20 28 77 68  imited to 28 (wh
269c0 69 63 68 20 73 65 76 65 72 65 6c 79 20 6c 69 6d  ich severely lim
269d0 69 74 73 20 74 68 65 20 72 65 73 6f 6c 75 74 69  its the resoluti
269e0 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 6d 70 75 74  on of.the comput
269f0 61 74 69 6f 6e 2c 20 62 75 74 20 69 73 20 73 75  ation, but is su
26a00 66 66 69 63 69 65 6e 74 20 66 6f 72 20 6c 6f 77  fficient for low
26a10 2d 72 65 73 6f 6c 75 74 69 6f 6e 20 41 53 43 49  -resolution ASCI
26a20 49 2d 61 72 74 20 6f 75 74 70 75 74 29 2e 0a 54  I-art output)..T
26a30 68 65 20 22 6d 32 28 69 74 65 72 2c 63 78 2c 63  he "m2(iter,cx,c
26a40 79 29 22 20 43 54 45 20 68 6f 6c 64 73 20 74 68  y)" CTE holds th
26a50 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
26a60 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 72   of iterations r
26a70 65 61 63 68 65 64 20 77 68 65 6e 0a 73 74 61 72  eached when.star
26a80 74 69 6e 67 20 61 74 20 70 6f 69 6e 74 20 63 78  ting at point cx
26a90 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65 61  ,cy..Finally, ea
26aa0 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 22 61  ch row in the "a
26ab0 28 74 29 22 20 43 54 45 20 68 6f 6c 64 73 20 61  (t)" CTE holds a
26ac0 20 73 74 72 69 6e 67 20 0a 77 68 69 63 68 20 69   string .which i
26ad0 73 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20  s a single line 
26ae0 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 41 53  of the output AS
26af0 43 49 49 2d 61 72 74 2e 0a 54 68 65 20 53 45 4c  CII-art..The SEL
26b00 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74  ECT statement at
26b10 20 74 68 65 20 65 6e 64 20 6a 75 73 74 20 71 75   the end just qu
26b20 65 72 69 65 73 20 74 68 65 20 22 61 22 20 43 54  eries the "a" CT
26b30 45 20 74 6f 0a 72 65 74 72 69 65 76 65 20 61 6c  E to.retrieve al
26b40 6c 20 6c 69 6e 65 73 20 6f 66 20 41 53 43 49 49  l lines of ASCII
26b50 2d 61 72 74 2c 20 6f 6e 65 20 62 79 20 6f 6e 65  -art, one by one
26b60 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20 74 68  ...<p>Running th
26b70 65 20 71 75 65 72 79 20 61 62 6f 76 65 20 69 6e  e query above in
26b80 20 61 6e 20 53 51 4c 69 74 65 20 5b 63 6f 6d 6d   an SQLite [comm
26b90 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 20  and-line shell] 
26ba0 72 65 73 75 6c 74 73 0a 69 6e 20 74 68 65 20 66  results.in the f
26bb0 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74 70 75 74 3a  ollowing output:
26bc0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
26bd0 72 65 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20  re>.            
26be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bf0 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20 20          ....#.  
26c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20   ..#*...        
26c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c40 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23 23           ..+####
26c50 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
26c70 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20  ......+####.... 
26c80 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20    +.            
26c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
26ca0 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b  .##+*##########+
26cb0 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20  .++++.          
26cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cd0 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23 23  .+.#############
26ce0 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20  #####+..        
26cf0 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e        ..........
26d00 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23 23 23  ...+############
26d10 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20 20  #######+.+.     
26d20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23           ..++..#
26d30 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23  .....*##########
26d40 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
26d50 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23             ...+#
26d60 23 23 23 23 23 23 2b 2b 23 23 23 23 23 23 23 23  ######++########
26d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e  ###############.
26d80 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b  .          ....+
26d90 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  *###############
26da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26db0 23 2e 0a 20 23 23 23 23 23 23 23 23 23 23 23 23  #.. ############
26dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26de0 23 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 2e  #....          .
26df0 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23 23  ...+*###########
26e00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e10 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20  #####..         
26e20 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b      ...+#######+
26e30 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +###############
26e40 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20  ########..      
26e50 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e          ..++..#.
26e60 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23 23  ....*###########
26e70 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20  ##########+..   
26e80 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e             .....
26e90 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23  ........+#######
26ea0 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a  ############+.+.
26eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ec0 20 20 20 20 20 20 20 20 20 20 2e 2b 2e 23 23 23            .+.###
26ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b  ###############+
26ee0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23               ..#
26f00 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #+*##########+.+
26f10 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +++.            
26f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f30 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e  .......+####....
26f40 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20     +.           
26f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f60 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a        ..+####+..
26f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f90 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20     ..#*...      
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
26fc0 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20 20  ..#.            
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fe0 20 20 20 20 20 20 20 20 2b 2e 0a 3c 2f 70 72 65          +..</pre
26ff0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
27000 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
27010 20 73 75 64 6f 6b 75 20 7b 73 6f 6c 76 65 20 53   sudoku {solve S
27020 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 73 7d 20 3c  udoku puzzles} <
27030 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e 65  /tcl>.<p>This ne
27040 78 74 20 71 75 65 72 79 20 73 6f 6c 76 65 73 20  xt query solves 
27050 61 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 2e  a Sudoku puzzle.
27060 20 20 54 68 65 20 73 74 61 74 65 20 6f 66 20 74    The state of t
27070 68 65 20 70 75 7a 7a 6c 65 20 69 73 0a 64 65 66  he puzzle is.def
27080 69 6e 65 64 20 62 79 20 61 6e 20 38 31 2d 63 68  ined by an 81-ch
27090 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20 66  aracter string f
270a0 6f 72 6d 65 64 20 62 79 20 72 65 61 64 69 6e 67  ormed by reading
270b0 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
270c0 65 0a 70 75 7a 7a 6c 65 20 62 6f 78 20 72 6f 77  e.puzzle box row
270d0 20 62 79 20 72 6f 77 20 66 72 6f 6d 20 6c 65 66   by row from lef
270e0 74 20 74 6f 20 72 69 67 68 74 20 61 6e 64 20 74  t to right and t
270f0 68 65 6e 20 66 72 6f 6d 20 74 6f 70 20 74 6f 20  hen from top to 
27100 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73 71  bottom..Blank sq
27110 75 61 72 65 73 20 69 6e 20 74 68 65 20 70 75 7a  uares in the puz
27120 7a 6c 65 20 61 72 65 20 64 65 6e 6f 74 65 64 20  zle are denoted 
27130 62 79 20 61 20 22 2e 22 20 63 68 61 72 61 63 74  by a "." charact
27140 65 72 2e 20 20 0a 54 68 75 73 20 74 68 65 20 69  er.  .Thus the i
27150 6e 70 75 74 20 73 74 72 69 6e 67 3a 0a 0a 3c 62  nput string:..<b
27160 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e 37  lockquote>.53..7
27170 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38  ....6..195....98
27180 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34  ....6.8...6...34
27190 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e  ..8.3..17...2...
271a0 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39  6.6....28....419
271b0 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f 62  ..5....8..79.</b
271c0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43  lockquote>..<p>C
271d0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20  orresponds to a 
271e0 70 75 7a 7a 6c 65 20 6c 69 6b 65 20 74 68 69 73  puzzle like this
271f0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  :..<blockquote>.
27200 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 31  <table border="1
27210 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
27220 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74 64 3e  ">.<tr><td>5<td>
27230 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37  3<td> <td> <td>7
27240 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
27250 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74 64  td>.<tr><td>6<td
27260 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 3c 74 64 3e  > <td> <td>1<td>
27270 39 3c 74 64 3e 35 3c 74 64 3e 20 3c 74 64 3e 20  9<td>5<td> <td> 
27280 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74  <td>.<tr><td> <t
27290 64 3e 39 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64  d>9<td>8<td> <td
272a0 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
272b0 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38 3c  6<td>.<tr><td>8<
272c0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
272d0 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>6<td> <td> <td
272e0 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74 64 3e  > <td>3.<tr><td>
272f0 34 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38  4<td> <td> <td>8
27300 3c 74 64 3e 20 3c 74 64 3e 33 3c 74 64 3e 20 3c  <td> <td>3<td> <
27310 74 64 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c 74  td> <td>1.<tr><t
27320 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>7<td> <td> <td
27330 3e 20 3c 74 64 3e 32 3c 74 64 3e 20 3c 74 64 3e  > <td>2<td> <td>
27340 20 3c 74 64 3e 20 3c 74 64 3e 36 0a 3c 74 72 3e   <td> <td>6.<tr>
27350 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c  <td> <td>6<td> <
27360 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
27370 64 3e 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74 72  d>2<td>8<td>.<tr
27380 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  ><td> <td> <td> 
27390 3c 74 64 3e 34 3c 74 64 3e 31 3c 74 64 3e 39 3c  <td>4<td>1<td>9<
273a0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 35 0a 3c  td> <td> <td>5.<
273b0 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  tr><td> <td> <td
273c0 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e  > <td> <td>8<td>
273d0 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 39   <td> <td>7<td>9
273e0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
273f0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73  kquote>..<p>This
27400 20 69 73 20 74 68 65 20 71 75 65 72 79 20 74 68   is the query th
27410 61 74 20 73 6f 6c 76 65 73 20 74 68 65 20 70 75  at solves the pu
27420 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  zzle:..<blockquo
27430 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
27440 43 55 52 53 49 56 45 0a 20 20 69 6e 70 75 74 28  CURSIVE.  input(
27450 73 75 64 29 20 41 53 20 28 0a 20 20 20 20 56 41  sud) AS (.    VA
27460 4c 55 45 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e 36  LUES('53..7....6
27470 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36  ..195....98....6
27480 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33  .8...6...34..8.3
27490 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e  ..17...2...6.6..
274a0 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e  ..28....419..5..
274b0 2e 2e 38 2e 2e 37 39 27 29 0a 20 20 29 2c 0a 20  ..8..79').  ),. 
274c0 20 64 69 67 69 74 73 28 7a 2c 20 6c 70 29 20 41   digits(z, lp) A
274d0 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27  S (.    VALUES('
274e0 31 27 2c 20 31 29 0a 20 20 20 20 55 4e 49 4f 4e  1', 1).    UNION
274f0 20 41 4c 4c 20 53 45 4c 45 43 54 0a 20 20 20 20   ALL SELECT.    
27500 43 41 53 54 28 6c 70 2b 31 20 41 53 20 54 45 58  CAST(lp+1 AS TEX
27510 54 29 2c 20 6c 70 2b 31 20 46 52 4f 4d 20 64 69  T), lp+1 FROM di
27520 67 69 74 73 20 57 48 45 52 45 20 6c 70 3c 39 0a  gits WHERE lp<9.
27530 20 20 29 2c 0a 20 20 78 28 73 2c 20 69 6e 64 29    ),.  x(s, ind)
27540 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
27550 20 73 75 64 2c 20 69 6e 73 74 72 28 73 75 64 2c   sud, instr(sud,
27560 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70 75 74   '.') FROM input
27570 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20  .    UNION ALL. 
27580 20 20 20 53 45 4c 45 43 54 0a 20 20 20 20 20 20     SELECT.      
27590 73 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64  substr(s, 1, ind
275a0 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73  -1) || z || subs
275b0 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c 0a 20 20  tr(s, ind+1),.  
275c0 20 20 20 20 69 6e 73 74 72 28 20 73 75 62 73 74      instr( subst
275d0 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c  r(s, 1, ind-1) |
275e0 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c  | z || substr(s,
275f0 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29 0a 20   ind+1), '.' ). 
27600 20 20 20 20 46 52 4f 4d 20 78 2c 20 64 69 67 69      FROM x, digi
27610 74 73 20 41 53 20 7a 0a 20 20 20 20 57 48 45 52  ts AS z.    WHER
27620 45 20 69 6e 64 3e 30 0a 20 20 20 20 20 20 41 4e  E ind>0.      AN
27630 44 20 4e 4f 54 20 45 58 49 53 54 53 20 28 0a 20  D NOT EXISTS (. 
27640 20 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43             SELEC
27650 54 20 31 0a 20 20 20 20 20 20 20 20 20 20 20 20  T 1.            
27660 20 20 46 52 4f 4d 20 64 69 67 69 74 73 20 41 53    FROM digits AS
27670 20 6c 70 0a 20 20 20 20 20 20 20 20 20 20 20 20   lp.            
27680 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73 75 62   WHERE z.z = sub
27690 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 2f  str(s, ((ind-1)/
276a0 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29 0a 20 20  9)*9 + lp, 1).  
276b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52                OR
276c0 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c   z.z = substr(s,
276d0 20 28 28 69 6e 64 2d 31 29 25 39 29 20 2b 20 28   ((ind-1)%9) + (
276e0 6c 70 2d 31 29 2a 39 20 2b 20 31 2c 20 31 29 0a  lp-1)*9 + 1, 1).
276f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27700 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28  OR z.z = substr(
27710 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f 33 29 20  s, (((ind-1)/3) 
27720 25 20 33 29 20 2a 20 33 0a 20 20 20 20 20 20 20  % 3) * 3.       
27730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27740 20 2b 20 28 28 69 6e 64 2d 31 29 2f 32 37 29 20   + ((ind-1)/27) 
27750 2a 20 32 37 20 2b 20 6c 70 0a 20 20 20 20 20 20  * 27 + lp.      
27760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27770 20 20 2b 20 28 28 6c 70 2d 31 29 20 2f 20 33 29    + ((lp-1) / 3)
27780 20 2a 20 36 2c 20 31 29 0a 20 20 20 20 20 20 20   * 6, 1).       
27790 20 20 29 0a 20 20 29 0a 53 45 4c 45 43 54 20 73    ).  ).SELECT s
277a0 20 46 52 4f 4d 20 78 20 57 48 45 52 45 20 69 6e   FROM x WHERE in
277b0 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d=0;.</pre></blo
277c0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
277d0 20 22 69 6e 70 75 74 22 20 43 54 45 20 64 65 66   "input" CTE def
277e0 69 6e 65 73 20 74 68 65 20 69 6e 70 75 74 20 70  ines the input p
277f0 75 7a 7a 6c 65 2e 0a 54 68 65 20 22 64 69 67 69  uzzle..The "digi
27800 74 73 22 20 43 54 45 20 64 65 66 69 6e 65 73 20  ts" CTE defines 
27810 61 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  a table that hol
27820 64 73 20 61 6c 6c 20 64 69 67 69 74 73 20 62 65  ds all digits be
27830 74 77 65 65 6e 20 31 20 61 6e 64 20 39 2e 0a 54  tween 1 and 9..T
27840 68 65 20 77 6f 72 6b 20 6f 66 20 73 6f 6c 76 69  he work of solvi
27850 6e 67 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73  ng the puzzle is
27860 20 75 6e 64 65 72 74 61 6b 65 6e 20 62 79 20 74   undertaken by t
27870 68 65 20 22 78 22 20 43 54 45 2e 0a 41 6e 20 65  he "x" CTE..An e
27880 6e 74 72 79 20 69 6e 20 78 28 73 2c 69 6e 64 29  ntry in x(s,ind)
27890 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
278a0 38 31 2d 63 68 61 72 61 63 74 65 72 20 73 74 72  81-character str
278b0 69 6e 67 20 22 73 22 20 69 73 20 61 20 76 61 6c  ing "s" is a val
278c0 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65  id.sudoku puzzle
278d0 20 28 69 74 20 68 61 73 20 6e 6f 20 63 6f 6e 66   (it has no conf
278e0 6c 69 63 74 73 29 20 61 6e 64 20 74 68 61 74 20  licts) and that 
278f0 74 68 65 20 66 69 72 73 74 20 75 6e 6b 6e 6f 77  the first unknow
27900 6e 20 63 68 61 72 61 63 74 65 72 0a 69 73 20 61  n character.is a
27910 74 20 70 6f 73 69 74 69 6f 6e 20 22 69 6e 64 22  t position "ind"
27920 2c 20 6f 72 20 69 6e 64 3d 3d 30 20 69 66 20 61  , or ind==0 if a
27930 6c 6c 20 63 68 61 72 61 63 74 65 72 20 70 6f 73  ll character pos
27940 69 74 69 6f 6e 73 20 61 72 65 20 66 69 6c 6c 65  itions are fille
27950 64 20 69 6e 2e 0a 54 68 65 20 67 6f 61 6c 2c 20  d in..The goal, 
27960 74 68 65 6e 2c 20 69 73 20 74 6f 20 63 6f 6d 70  then, is to comp
27970 75 74 65 20 65 6e 74 72 69 65 73 20 66 6f 72 20  ute entries for 
27980 22 78 22 20 77 69 74 68 20 61 6e 20 22 69 6e 64  "x" with an "ind
27990 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e 54 68 65 20  " of 0...<p>The 
279a0 73 6f 6c 76 65 72 20 77 6f 72 6b 73 20 62 79 20  solver works by 
279b0 61 64 64 69 6e 67 20 6e 65 77 20 65 6e 74 72 69  adding new entri
279c0 65 73 20 74 6f 20 74 68 65 20 22 78 22 20 72 65  es to the "x" re
279d0 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 47  cursive table..G
279e0 69 76 65 6e 20 70 72 69 6f 72 20 65 6e 74 72 69  iven prior entri
279f0 65 73 2c 20 74 68 65 20 72 65 63 75 72 73 69 76  es, the recursiv
27a00 65 2d 73 65 6c 65 63 74 20 74 72 69 65 73 20 74  e-select tries t
27a10 6f 20 66 69 6c 6c 20 69 6e 20 61 20 73 69 6e 67  o fill in a sing
27a20 6c 65 20 6e 65 77 0a 70 6f 73 69 74 69 6f 6e 20  le new.position 
27a30 77 69 74 68 20 61 6c 6c 20 76 61 6c 75 65 73 20  with all values 
27a40 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20  between 1 and 9 
27a50 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20 77 6f  that actually wo
27a60 72 6b 20 69 6e 20 74 68 61 74 0a 70 6f 73 69 74  rk in that.posit
27a70 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 70 6c 69  ion.  The compli
27a80 63 61 74 65 64 20 22 4e 4f 54 20 45 58 49 53 54  cated "NOT EXIST
27a90 53 22 20 73 75 62 71 75 65 72 79 20 69 73 20 74  S" subquery is t
27aa0 68 65 20 6d 61 67 69 63 20 74 68 61 74 0a 66 69  he magic that.fi
27ab0 67 75 72 65 73 20 6f 75 74 20 77 68 65 74 68 65  gures out whethe
27ac0 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 63 61  r or not each ca
27ad0 6e 64 69 64 61 74 65 20 22 73 22 20 73 74 72 69  ndidate "s" stri
27ae0 6e 67 20 69 73 20 61 20 76 61 6c 69 64 0a 73 75  ng is a valid.su
27af0 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 6f 72 20 6e  doku puzzle or n
27b00 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 69 6e 61  ot...<p>The fina
27b10 6c 20 61 6e 73 77 65 72 20 69 73 20 66 6f 75 6e  l answer is foun
27b20 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  d by looking for
27b30 20 61 20 73 74 72 69 6e 67 20 77 69 74 68 20 69   a string with i
27b40 6e 64 3d 3d 30 2e 0a 49 66 20 74 68 65 20 6f 72  nd==0..If the or
27b50 69 67 69 6e 61 6c 20 73 75 64 6f 6b 75 20 70 72  iginal sudoku pr
27b60 6f 62 6c 65 6d 20 64 69 64 20 6e 6f 74 20 68 61  oblem did not ha
27b70 76 65 20 61 20 75 6e 69 71 75 65 20 73 6f 6c 75  ve a unique solu
27b80 74 69 6f 6e 2c 20 74 68 65 6e 0a 74 68 65 20 71  tion, then.the q
27b90 75 65 72 79 20 77 69 6c 6c 20 72 65 74 75 72 6e  uery will return
27ba0 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 73 6f   all possible so
27bb0 6c 75 74 69 6f 6e 73 2e 20 20 49 66 20 74 68 65  lutions.  If the
27bc0 20 6f 72 69 67 69 6e 61 6c 20 70 72 6f 62 6c 65   original proble
27bd0 6d 0a 77 61 73 20 75 6e 73 6f 6c 76 61 62 6c 65  m.was unsolvable
27be0 2c 20 74 68 65 6e 20 6e 6f 20 72 6f 77 73 20 77  , then no rows w
27bf0 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e  ill be returned.
27c00 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
27c10 74 68 65 20 75 6e 69 71 75 65 0a 61 6e 73 77 65  the unique.answe
27c20 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  r is:..<blockquo
27c30 74 65 3e 0a 35 33 34 36 37 38 39 31 32 36 37 32  te>.534678912672
27c40 31 39 35 33 34 38 31 39 38 33 34 32 35 36 37 38  1953481983425678
27c50 35 39 37 36 31 34 32 33 34 32 36 38 35 33 37 39  5976142342685379
27c60 31 37 31 33 39 32 34 38 35 36 39 36 31 35 33 37  1713924856961537
27c70 32 38 34 32 38 37 34 31 39 36 33 35 33 34 35 32  2842874196353452
27c80 38 36 31 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  86179.</blockquo
27c90 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 75  te>..<p>The solu
27ca0 74 69 6f 6e 20 77 61 73 20 63 6f 6d 70 75 74 65  tion was compute
27cb0 64 20 69 6e 20 6c 65 73 73 20 74 68 61 6e 20 33  d in less than 3
27cc0 30 30 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  00 milliseconds 
27cd0 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a 77 6f 72 6b  on a modern.work
27ce0 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 4c 69  station...<h3>Li
27cf0 6d 69 74 61 74 69 6f 6e 73 20 41 6e 64 20 43 61  mitations And Ca
27d00 76 65 61 74 73 3c 2f 68 33 3e 0a 0a 3c 75 6c 3e  veats</h3>..<ul>
27d10 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54  .<li><p>.The WIT
27d20 48 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20  H clause cannot 
27d30 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61  be used within a
27d40 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
27d50 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57  ]..<li><p>.The W
27d60 49 54 48 20 63 6c 61 75 73 65 20 6d 75 73 74 20  ITH clause must 
27d70 61 70 70 65 61 72 20 61 74 20 74 68 65 20 62 65  appear at the be
27d80 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20 74 6f 70  ginning of a top
27d90 2d 6c 65 76 65 6c 20 5b 53 45 4c 45 43 54 5d 20  -level [SELECT] 
27da0 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 61 74 20  statement.or at 
27db0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
27dc0 20 61 20 73 75 62 71 75 65 72 79 2e 20 20 54 68   a subquery.  Th
27dd0 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61  e WITH clause ca
27de0 6e 6e 6f 74 20 62 65 20 70 72 65 70 65 6e 64 65  nnot be prepende
27df0 64 20 74 6f 0a 74 68 65 20 73 65 63 6f 6e 64 20  d to.the second 
27e00 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 53 45  or subsequent SE
27e10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  LECT statement o
27e20 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65  f a [compound se
27e30 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54  lect]..<li><p>.T
27e40 68 65 20 53 51 4c 3a 31 39 39 39 20 73 70 65 63  he SQL:1999 spec
27e50 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20 74   requires that t
27e60 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65 79  he RECURSIVE key
27e70 77 6f 72 64 20 66 6f 6c 6c 6f 77 20 57 49 54 48  word follow WITH
27e80 20 69 6e 20 61 6e 79 0a 57 49 54 48 20 63 6c 61   in any.WITH cla
27e90 75 73 65 20 74 68 61 74 20 69 6e 63 6c 75 64 65  use that include
27ea0 73 20 61 20 72 65 63 75 72 73 69 76 65 20 63 6f  s a recursive co
27eb0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
27ec0 73 73 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c  ssion.  However,
27ed0 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69   for.compatibili
27ee0 74 79 20 77 69 74 68 20 53 71 6c 53 65 72 76 65  ty with SqlServe
27ef0 72 20 61 6e 64 20 4f 72 61 63 6c 65 2c 20 53 51  r and Oracle, SQ
27f00 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 65 6e  Lite does not en
27f10 66 6f 72 63 65 20 74 68 69 73 20 72 75 6c 65 2e  force this rule.
27f20 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  .</ul>..<tcl>.##
27f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f70 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
27f80 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c  ction SELECT sel
27f90 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72  ect {SELECT quer
27fa0 79 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  y}..RecursiveBub
27fb0 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63  bleDiagram selec
27fc0 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 0a  t-stmt.</tcl>...
27fd0 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74  <p>The SELECT st
27fe0 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
27ff0 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74  to query the dat
28000 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75  abase.  The.resu
28010 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69  lt of a SELECT i
28020 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72  s zero or more r
28030 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65 72  ows of data wher
28040 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61  e each row.has a
28050 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66   fixed number of
28060 20 63 6f 6c 75 6d 6e 73 2e 20 20 41 20 53 45 4c   columns.  A SEL
28070 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ECT statement do
28080 65 73 20 6e 6f 74 20 6d 61 6b 65 0a 61 6e 79 20  es not make.any 
28090 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
280a0 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 54 68 65  atabase...<p>The
280b0 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22   "[select-stmt]"
280c0 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20   syntax diagram 
280d0 61 62 6f 76 65 20 61 74 74 65 6d 70 74 73 20 74  above attempts t
280e0 6f 20 73 68 6f 77 20 61 73 20 6d 75 63 68 20 6f  o show as much o
280f0 66 20 74 68 65 0a 53 45 4c 45 43 54 20 73 74 61  f the.SELECT sta
28100 74 65 6d 65 6e 74 20 73 79 6e 74 61 78 20 61 73  tement syntax as
28110 20 70 6f 73 73 69 62 6c 65 20 69 6e 20 61 20 73   possible in a s
28120 69 6e 67 6c 65 20 64 69 61 67 72 61 6d 2c 20 62  ingle diagram, b
28130 65 63 61 75 73 65 20 73 6f 6d 65 20 72 65 61 64  ecause some read
28140 65 72 73 0a 66 69 6e 64 20 74 68 61 74 20 68 65  ers.find that he
28150 6c 70 66 75 6c 2e 20 20 54 68 65 20 66 6f 6c 6c  lpful.  The foll
28160 6f 77 69 6e 67 20 22 5b 66 61 63 74 6f 72 65 64  owing "[factored
28170 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20 69  -select-stmt]" i
28180 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  s an alternative
28190 0a 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73  .syntax diagrams
281a0 20 74 68 61 74 20 65 78 70 72 65 73 73 65 73 20   that expresses 
281b0 74 68 65 20 73 61 6d 65 20 73 79 6e 74 61 78 20  the same syntax 
281c0 62 75 74 20 74 72 69 65 73 20 74 6f 20 62 72 65  but tries to bre
281d0 61 6b 20 74 68 65 20 73 79 6e 74 61 78 20 0a 64  ak the syntax .d
281e0 6f 77 6e 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72  own into smaller
281f0 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74 63 6c 3e 0a   chunks...<tcl>.
28200 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
28210 69 61 67 72 61 6d 20 2d 2d 69 6e 69 74 69 61 6c  iagram --initial
28220 6c 79 2d 68 69 64 64 65 6e 20 66 61 63 74 6f 72  ly-hidden factor
28230 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20 73  ed-select-stmt s
28240 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c  elect-core.</tcl
28250 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20  >..<p>Note that 
28260 74 68 65 72 65 20 61 72 65 20 70 61 74 68 73 20  there are paths 
28270 74 68 72 6f 75 67 68 20 74 68 65 20 73 79 6e 74  through the synt
28280 61 78 20 64 69 61 67 72 61 6d 73 20 74 68 61 74  ax diagrams that
28290 0a 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  .are not allowed
282a0 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20 53   in practice.  S
282b0 6f 6d 65 20 65 78 61 6d 70 6c 65 73 3a 0a 3c 75  ome examples:.<u
282c0 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41 4c 55 45 53  l>.<li>A [VALUES
282d0 5d 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  ] clause can be 
282e0 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
282f0 74 20 69 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  t in a [compound
28300 20 53 45 4c 45 43 54 5d 0a 20 20 20 20 74 68 61   SELECT].    tha
28310 74 20 75 73 65 73 20 61 20 5b 57 49 54 48 5d 20  t uses a [WITH] 
28320 63 6c 61 75 73 65 2c 20 62 75 74 20 61 20 5b 73  clause, but a [s
28330 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 74 68  imple SELECT] th
28340 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a 20  at consists of. 
28350 20 20 20 6a 75 73 74 20 61 20 5b 56 41 4c 55 45     just a [VALUE
28360 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  S] clause cannot
28370 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20   be preceded by 
28380 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2e  a [WITH] clause.
28390 0a 3c 6c 69 3e 54 68 65 20 5b 57 49 54 48 5d 20  .<li>The [WITH] 
283a0 63 6c 61 75 73 65 20 6d 75 73 74 20 6f 63 63 75  clause must occu
283b0 72 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 53  r on the first S
283c0 45 4c 45 43 54 20 6f 66 20 61 20 5b 63 6f 6d 70  ELECT of a [comp
283d0 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2e 0a 20 20  ound SELECT]..  
283e0 20 20 49 74 20 63 61 6e 6e 6f 74 20 66 6f 6c 6c    It cannot foll
283f0 6f 77 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f  ow a [compound-o
28400 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f 75 6c 3e 0a  perator]..</ul>.
28410 54 68 65 73 65 20 61 6e 64 20 6f 74 68 65 72 20  These and other 
28420 73 69 6d 69 6c 61 72 20 73 79 6e 74 61 78 20 72  similar syntax r
28430 65 73 74 72 69 63 74 69 6f 6e 73 20 61 72 65 20  estrictions are 
28440 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 65  described in the
28450 20 74 65 78 74 2e 0a 0a 3c 70 3e 54 68 65 20 53   text...<p>The S
28460 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
28470 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 70  is the most comp
28480 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e 64 20  licated command 
28490 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75  in the SQL langu
284a0 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74 68 65  age..To make the
284b0 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65 61 73   description eas
284c0 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c 20 73  ier to follow, s
284d0 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73 73 61  ome of the passa
284e0 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63 72 69  ges below descri
284f0 62 65 0a 74 68 65 20 77 61 79 20 74 68 65 20 64  be.the way the d
28500 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20  ata returned by 
28510 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
28520 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  nt is determined
28530 20 61 73 20 61 20 73 65 72 69 65 73 20 6f 66 0a   as a series of.
28540 73 74 65 70 73 2e 20 49 74 20 69 73 20 69 6d 70  steps. It is imp
28550 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70 20 69  ortant to keep i
28560 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68 69 73  n mind that this
28570 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c 75 73   is purely illus
28580 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70 72 61  trative -.in pra
28590 63 74 69 63 65 20 6e 65 69 74 68 65 72 20 53 51  ctice neither SQ
285a0 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f 74 68  Lite nor any oth
285b0 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20 69 73  er SQL engine is
285c0 20 72 65 71 75 69 72 65 64 20 74 6f 20 66 6f 6c   required to fol
285d0 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61 6e 79  low .this or any
285e0 20 6f 74 68 65 72 20 73 70 65 63 69 66 69 63 20   other specific 
285f0 70 72 6f 63 65 73 73 2e 0a 0a 3c 74 63 6c 3e 68  process...<tcl>h
28600 64 5f 66 72 61 67 6d 65 6e 74 20 73 69 6d 70 6c  d_fragment simpl
28610 65 73 65 6c 65 63 74 20 7b 73 69 6d 70 6c 65 20  eselect {simple 
28620 53 45 4c 45 43 54 7d 3c 2f 74 63 6c 3e 0a 3c 68  SELECT}</tcl>.<h
28630 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20  3>Simple Select 
28640 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a  Processing</h3>.
28650 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 6f 66 20  .<p>The core of 
28660 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
28670 6e 74 20 69 73 20 61 20 22 73 69 6d 70 6c 65 20  nt is a "simple 
28680 53 45 4c 45 43 54 22 20 73 68 6f 77 6e 20 62 79  SELECT" shown by
28690 20 74 68 65 0a 5b 73 65 6c 65 63 74 2d 63 6f 72   the.[select-cor
286a0 65 5d 20 61 6e 64 20 5b 73 69 6d 70 6c 65 2d 73  e] and [simple-s
286b0 65 6c 65 63 74 2d 73 74 6d 74 5d 20 73 79 6e 74  elect-stmt] synt
286c0 61 78 20 64 69 61 67 72 61 6d 73 20 62 65 6c 6f  ax diagrams belo
286d0 77 2e 20 20 0a 49 6e 20 70 72 61 63 74 69 63 65  w.  .In practice
286e0 2c 20 6d 6f 73 74 20 53 45 4c 45 43 54 20 73 74  , most SELECT st
286f0 61 74 65 6d 65 6e 74 73 20 61 72 65 20 73 69 6d  atements are sim
28700 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
28710 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65  ments...<tcl>.Re
28720 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
28730 67 72 61 6d 20 73 69 6d 70 6c 65 2d 73 65 6c 65  gram simple-sele
28740 63 74 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63  ct-stmt select-c
28750 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 47  ore.</tcl>..<p>G
28760 65 6e 65 72 61 74 69 6e 67 20 74 68 65 20 72 65  enerating the re
28770 73 75 6c 74 73 20 6f 66 20 61 20 73 69 6d 70 6c  sults of a simpl
28780 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65  e SELECT.stateme
28790 6e 74 20 69 73 20 70 72 65 73 65 6e 74 65 64 20  nt is presented 
287a0 61 73 20 61 20 66 6f 75 72 20 73 74 65 70 20 70  as a four step p
287b0 72 6f 63 65 73 73 20 69 6e 20 74 68 65 20 64 65  rocess in the de
287c0 73 63 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a  scription below:
287d0 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70  ..<ol>.  <li> <p
287e0 3e 5b 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70  >[FROM clause] p
287f0 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
28800 6e 70 75 74 20 64 61 74 61 20 66 6f 72 20 74 68  nput data for th
28810 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
28820 69 73 0a 20 20 20 20 20 20 20 64 65 74 65 72 6d  is.       determ
28830 69 6e 65 64 2e 20 54 68 65 20 69 6e 70 75 74 20  ined. The input 
28840 64 61 74 61 20 69 73 20 65 69 74 68 65 72 20 69  data is either i
28850 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67  mplicitly a sing
28860 6c 65 20 72 6f 77 20 77 69 74 68 20 30 0a 20 20  le row with 0.  
28870 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66       columns (if
28880 20 74 68 65 72 65 20 69 73 20 6e 6f 20 46 52 4f   there is no FRO
28890 4d 20 63 6c 61 75 73 65 29 20 6f 72 20 69 73 20  M clause) or is 
288a0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
288b0 65 20 46 52 4f 4d 0a 20 20 20 20 20 20 20 63 6c  e FROM.       cl
288c0 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ause..  <li> <p>
288d0 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70  [WHERE clause] p
288e0 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
288f0 6e 70 75 74 20 64 61 74 61 20 69 73 20 66 69 6c  nput data is fil
28900 74 65 72 65 64 20 75 73 69 6e 67 20 74 68 65 20  tered using the 
28910 57 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61  WHERE.       cla
28920 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  use expression. 
28930 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f   .  <li> <p>[GRO
28940 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20  UP BY|GROUP BY, 
28950 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c  HAVING and resul
28960 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  t-column express
28970 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  ion] processing:
28980 20 0a 20 20 20 20 20 20 20 54 68 65 20 73 65 74   .       The set
28990 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
289a0 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61  is computed by a
289b0 67 67 72 65 67 61 74 69 6e 67 20 74 68 65 20 64  ggregating the d
289c0 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ata according to
289d0 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55  .       any GROU
289e0 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20  P BY clause and 
289f0 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20  calculating the 
28a00 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
28a10 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20  ssions for the. 
28a20 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68        rows of th
28a30 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74  e filtered input
28a40 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c   dataset.  .  <l
28a50 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c  i> <p>[DISTINCT|
28a60 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79  DISTINCT/ALL key
28a70 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67  word] processing
28a80 3a 20 49 66 20 74 68 65 20 71 75 65 72 79 20 69  : If the query i
28a90 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20  s a "SELECT.    
28aa0 20 20 20 44 49 53 54 49 4e 43 54 22 20 71 75 65     DISTINCT" que
28ab0 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ry, duplicate ro
28ac0 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
28ad0 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72  rom the set of r
28ae0 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c  esult rows..</ol
28af0 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
28b00 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d  two types of sim
28b10 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
28b20 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65  ment - aggregate
28b30 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67   and .non-aggreg
28b40 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20  ate queries. ^A 
28b50 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
28b60 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67  atement is an ag
28b70 67 72 65 67 61 74 65 20 71 75 65 72 79 20 69 66  gregate query if
28b80 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74  .it contains eit
28b90 68 65 72 20 61 20 47 52 4f 55 50 20 42 59 20 63  her a GROUP BY c
28ba0 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20  lause or one or 
28bb0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
28bc0 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20  unctions.in the 
28bd0 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68  result-set. ^Oth
28be0 65 72 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d  erwise, if a sim
28bf0 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61  ple SELECT conta
28c00 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65  ins no aggregate
28c10 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20  .functions or a 
28c20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c  GROUP BY clause,
28c30 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67   it is a non-agg
28c40 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c  regate query...<
28c50 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e  p><b>1. Determin
28c60 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64  ation of input d
28c70 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65  ata (FROM clause
28c80 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62   processing).</b
28c90 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
28ca0 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74  nt fromclause</t
28cb0 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
28cc0 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73  ords {FROM claus
28cd0 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e}</tcl>..<p>The
28ce0 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
28cf0 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   by a simple SEL
28d00 45 43 54 20 71 75 65 72 79 20 69 73 20 61 20 73  ECT query is a s
28d10 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72  et of <i>N</i> r
28d20 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f  ows .each <i>M</
28d30 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e  i> columns wide.
28d40 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52  ..<p>^(If the FR
28d50 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  OM clause is omi
28d60 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70  tted from a simp
28d70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
28d80 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69  ent, then the .i
28d90 6e 70 75 74 20 64 61 74 61 20 69 73 20 69 6d 70  nput data is imp
28da0 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
28db0 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e   row zero column
28dc0 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c  s wide)^ (i.e. <
28dd0 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69  i>N</i>=1 and.<i
28de0 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49  >M</i>=0)...<p>I
28df0 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  f a FROM clause 
28e00 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
28e10 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20  e data on which 
28e20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
28e30 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63  query.operates c
28e40 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e  omes from the on
28e50 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
28e60 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 28   or subqueries (
28e70 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
28e80 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73  s.in parenthesis
28e90 29 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c  ) specified foll
28ea0 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b  owing the FROM k
28eb0 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 71 75  eyword. ^A subqu
28ec0 65 72 79 20 73 70 65 63 69 66 69 65 64 0a 69 6e  ery specified.in
28ed0 20 74 68 65 20 74 61 62 6c 65 2d 6f 72 2d 73 75   the table-or-su
28ee0 62 71 75 65 72 79 20 66 6f 6c 6c 6f 77 69 6e 67  bquery following
28ef0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
28f00 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45   in a .simple SE
28f10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
28f20 73 0a 68 61 6e 64 6c 65 64 20 61 73 20 69 66 20  s.handled as if 
28f30 69 74 20 77 61 73 20 61 20 74 61 62 6c 65 20 63  it was a table c
28f40 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 61  ontaining the da
28f50 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  ta returned by e
28f60 78 65 63 75 74 69 6e 67 20 74 68 65 0a 73 75 62  xecuting the.sub
28f70 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e  query statement.
28f80 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66   ^Each column of
28f90 20 74 68 65 20 73 75 62 71 75 65 72 79 20 68 61   the subquery ha
28fa0 73 20 74 68 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e  s the.[collation
28fb0 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65  |collation seque
28fc0 6e 63 65 5d 20 61 6e 64 20 5b 61 66 66 69 6e 69  nce] and [affini
28fd0 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ty] of the corre
28fe0 73 70 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73  sponding express
28ff0 69 6f 6e 0a 69 6e 20 74 68 65 20 73 75 62 71 75  ion.in the subqu
29000 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ery statement...
29010 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20  <p>^If there is 
29020 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61  only a single ta
29030 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
29040 69 6e 20 74 68 65 20 46 52 4f 4d 0a 63 6c 61 75  in the FROM.clau
29050 73 65 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 70  se, then the inp
29060 75 74 20 64 61 74 61 20 75 73 65 64 20 62 79 20  ut data used by 
29070 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
29080 6d 65 6e 74 20 69 73 20 74 68 65 20 63 6f 6e 74  ment is the cont
29090 65 6e 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65  ents of the.name
290a0 64 20 74 61 62 6c 65 2e 20 5e 49 66 20 74 68 65  d table. ^If the
290b0 72 65 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20  re is more than 
290c0 6f 6e 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62  one table or sub
290d0 71 75 65 72 79 20 69 6e 20 46 52 4f 4d 20 63 6c  query in FROM cl
290e0 61 75 73 65 0a 74 68 65 6e 20 74 68 65 20 63 6f  ause.then the co
290f0 6e 74 65 6e 74 73 20 6f 66 20 61 6c 6c 20 74 61  ntents of all ta
29100 62 6c 65 73 20 61 6e 64 2f 6f 72 20 73 75 62 71  bles and/or subq
29110 75 65 72 69 65 73 0a 61 72 65 20 6a 6f 69 6e 65  ueries.are joine
29120 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20  d into a single 
29130 64 61 74 61 73 65 74 20 66 6f 72 20 74 68 65 20  dataset for the 
29140 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
29150 61 74 65 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61  atement to opera
29160 74 65 20 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68  te on..Exactly h
29170 6f 77 20 74 68 65 20 64 61 74 61 20 69 73 20 63  ow the data is c
29180 6f 6d 62 69 6e 65 64 20 64 65 70 65 6e 64 73 20  ombined depends 
29190 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 63 20  on the specific 
291a0 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 5d 20  [join-operator] 
291b0 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72  and.[join-constr
291c0 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f  aint] used to co
291d0 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65 73  nnect the tables
291e0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 74   or subqueries t
291f0 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c  ogether...<p>All
29200 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65   joins in SQLite
29210 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68   are based on th
29220 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
29230 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20  uct of the left 
29240 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64  and.right-hand d
29250 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f  atasets. ^The co
29260 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72  lumns of the car
29270 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64  tesian product d
29280 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a  ataset are, in .
29290 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63  order, all the c
292a0 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
292b0 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ft-hand dataset 
292c0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20  followed by all 
292d0 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
292e0 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  he right-hand da
292f0 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73  taset. ^There is
29300 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61   a row in the ca
29310 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
29320 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62  dataset.formed b
29330 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68  y combining each
29340 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
29350 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f  ion of a row fro
29360 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  m the left-hand 
29370 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20  .and right-hand 
29380 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f  datasets. ^(In o
29390 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
293a0 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74  he left-hand dat
293b0 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  aset consists of
293c0 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>N<sub><small
293d0 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
293e0 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20  ub></i> rows of 
293f0 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>M<sub><small
29400 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
29410 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c  ub></i> columns,
29420 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 68   and the right-h
29430 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a 3c  and dataset of.<
29440 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72  i>N<sub><small>r
29450 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  ight</small></su
29460 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 0a 3c  b></i> rows of.<
29470 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72  i>M<sub><small>r
29480 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  ight</small></su
29490 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20  b></i> columns, 
294a0 74 68 65 6e 20 74 68 65 20 63 61 72 74 65 73 69  then the cartesi
294b0 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61 0a  an product is a.
294c0 64 61 74 61 73 65 74 20 6f 66 20 0a 3c 69 3e 4e  dataset of .<i>N
294d0 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74  <sub><small>left
294e0 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 26 74  </small></sub>&t
294f0 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c 73 6d 61 6c  imes;N<sub><smal
29500 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c  l>right</small><
29510 2f 73 75 62 3e 3c 2f 69 3e 0a 72 6f 77 73 2c 20  /sub></i>.rows, 
29520 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20  each containing 
29530 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>M<sub><small
29540 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
29550 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  ub>+M<sub><small
29560 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  >right</small></
29570 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  sub></i> columns
29580 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  .)^..<p>^If the 
29590 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73  join-operator is
295a0 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22   "CROSS JOIN", "
295b0 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f  INNER JOIN", "JO
295c0 49 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28  IN" or a comma.(
295d0 22 2c 22 29 20 61 6e 64 20 74 68 65 72 65 20 69  ",") and there i
295e0 73 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47  s no ON or USING
295f0 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
29600 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
29610 6a 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74  join is.simply t
29620 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
29630 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74  duct of the left
29640 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20   and right-hand 
29650 64 61 74 61 73 65 74 73 2e 20 0a 49 66 20 6a 6f  datasets. .If jo
29660 69 6e 2d 6f 70 65 72 61 74 6f 72 20 64 6f 65 73  in-operator does
29670 20 68 61 76 65 20 4f 4e 20 6f 72 20 55 53 49 4e   have ON or USIN
29680 47 20 63 6c 61 75 73 65 73 2c 20 74 68 6f 73 65  G clauses, those
29690 20 61 72 65 20 68 61 6e 64 6c 65 64 20 61 63 63   are handled acc
296a0 6f 72 64 69 6e 67 20 74 6f 0a 74 68 65 20 66 6f  ording to.the fo
296b0 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70  llowing bullet p
296c0 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c  oints:..<ul>.  <
296d0 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 72  li> <p>^(If ther
296e0 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75 73  e is an ON claus
296f0 65 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 65 78  e then the ON ex
29700 70 72 65 73 73 69 6f 6e 20 69 73 0a 20 20 20 20  pression is.    
29710 20 20 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72     evaluated for
29720 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
29730 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
29740 63 74 20 61 73 20 61 20 0a 20 20 20 20 20 20 20  ct as a .       
29750 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
29760 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20  ion]. Only rows 
29770 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 65 78  for which the ex
29780 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
29790 65 73 20 74 6f 20 0a 20 20 20 20 20 20 20 74 72  es to .       tr
297a0 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ue are included 
297b0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
297c0 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  .)^..  <li> <p>^
297d0 49 66 20 74 68 65 72 65 20 69 73 20 61 20 55 53  If there is a US
297e0 49 4e 47 20 63 6c 61 75 73 65 0a 20 20 20 20 20  ING clause.     
297f0 20 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74    then each of t
29800 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  he column names 
29810 73 70 65 63 69 66 69 65 64 20 6d 75 73 74 20 65  specified must e
29820 78 69 73 74 20 69 6e 20 74 68 65 20 64 61 74 61  xist in the data
29830 73 65 74 73 20 74 6f 20 0a 20 20 20 20 20 20 20  sets to .       
29840 62 6f 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e  both the left an
29850 64 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 6a  d right of the j
29860 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 2e 20 5e 28  oin-operator. ^(
29870 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66  For each pair of
29880 20 6e 61 6d 65 64 0a 20 20 20 20 20 20 20 63 6f   named.       co
29890 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78 70 72 65  lumns, the expre
298a0 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d 20 72  ssion "lhs.X = r
298b0 68 73 2e 58 22 20 69 73 20 65 76 61 6c 75 61 74  hs.X" is evaluat
298c0 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ed for each row 
298d0 6f 66 0a 20 20 20 20 20 20 20 74 68 65 20 63 61  of.       the ca
298e0 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
298f0 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
29900 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20  pression]. Only 
29910 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20  rows for which. 
29920 20 20 20 20 20 20 61 6c 6c 20 73 75 63 68 20 65        all such e
29930 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
29940 61 74 65 73 20 74 6f 20 74 72 75 65 20 61 72 65  ates to true are
29950 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74   included from t
29960 68 65 0a 20 20 20 20 20 20 20 72 65 73 75 6c 74  he.       result
29970 20 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f   set.)^ ^When co
29980 6d 70 61 72 69 6e 67 20 76 61 6c 75 65 73 20 61  mparing values a
29990 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 61 20  s a result of a 
299a0 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
299b0 65 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20  e.       normal 
299c0 72 75 6c 65 73 20 66 6f 72 20 68 61 6e 64 6c 69  rules for handli
299d0 6e 67 20 61 66 66 69 6e 69 74 69 65 73 2c 20 63  ng affinities, c
299e0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
299f0 65 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20  es and NULL.    
29a00 20 20 20 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d     values in com
29a10 70 61 72 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20  parisons apply. 
29a20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  ^The column from
29a30 20 74 68 65 20 64 61 74 61 73 65 74 20 6f 6e 20   the dataset on 
29a40 74 68 65 0a 20 20 20 20 20 20 20 6c 65 66 74 2d  the.       left-
29a50 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65  hand side of the
29a60 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69   join-operator i
29a70 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  s considered to 
29a80 62 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68  be on the left-h
29a90 61 6e 64 0a 20 20 20 20 20 20 20 73 69 64 65 20  and.       side 
29aa0 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
29ab0 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 29 20 66  n operator (=) f
29ac0 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
29ad0 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20  of collation .  
29ae0 20 20 20 20 20 73 65 71 75 65 6e 63 65 20 61 6e       sequence an
29af0 64 20 61 66 66 69 6e 69 74 79 20 70 72 65 63 65  d affinity prece
29b00 64 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c  dence...       <
29b10 70 3e 5e 46 6f 72 20 65 61 63 68 20 70 61 69 72  p>^For each pair
29b20 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e   of columns iden
29b30 74 69 66 69 65 64 20 62 79 20 61 20 55 53 49 4e  tified by a USIN
29b40 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20 63 6f  G clause, the co
29b50 6c 75 6d 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d  lumn.       from
29b60 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
29b70 64 61 74 61 73 65 74 20 69 73 20 6f 6d 69 74 74  dataset is omitt
29b80 65 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e  ed from the join
29b90 65 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 69  ed dataset. ^Thi
29ba0 73 20 0a 20 20 20 20 20 20 20 69 73 20 74 68 65  s .       is the
29bb0 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65   only difference
29bc0 20 62 65 74 77 65 65 6e 20 61 20 55 53 49 4e 47   between a USING
29bd0 20 63 6c 61 75 73 65 20 61 6e 64 20 69 74 73 20   clause and its 
29be0 65 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20  equivalent ON.  
29bf0 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e       constraint.
29c00 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66  ..  <li> <p>^(If
29c10 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79   the NATURAL key
29c20 77 6f 72 64 20 69 73 20 69 6e 20 74 68 65 20 6a  word is in the j
29c30 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 74 68 65  oin-operator the
29c40 6e 20 61 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c  n an.       impl
29c50 69 63 69 74 20 55 53 49 4e 47 20 63 6c 61 75 73  icit USING claus
29c60 65 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68  e is added to th
29c70 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e  e join-constrain
29c80 74 73 2e 20 54 68 65 20 69 6d 70 6c 69 63 69 74  ts. The implicit
29c90 0a 20 20 20 20 20 20 20 55 53 49 4e 47 20 63 6c  .       USING cl
29ca0 61 75 73 65 20 63 6f 6e 74 61 69 6e 73 20 65 61  ause contains ea
29cb0 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ch of the column
29cc0 20 6e 61 6d 65 73 20 74 68 61 74 20 61 70 70 65   names that appe
29cd0 61 72 20 69 6e 20 62 6f 74 68 0a 20 20 20 20 20  ar in both.     
29ce0 20 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72    the left and r
29cf0 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 20  ight-hand input 
29d00 64 61 74 61 73 65 74 73 2e 29 5e 20 5e 49 66 20  datasets.)^ ^If 
29d10 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
29d20 68 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 69  ht-hand.       i
29d30 6e 70 75 74 20 64 61 74 61 73 65 74 73 20 66 65  nput datasets fe
29d40 61 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20  ature no common 
29d50 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68  column names, th
29d60 65 6e 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  en the NATURAL k
29d70 65 79 77 6f 72 64 0a 20 20 20 20 20 20 20 68 61  eyword.       ha
29d80 73 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74  s no effect on t
29d90 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
29da0 65 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47  e join. ^A USING
29db0 20 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61   or ON clause ma
29dc0 79 0a 20 20 20 20 20 20 20 6e 6f 74 20 62 65 20  y.       not be 
29dd0 61 64 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20  added to a join 
29de0 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
29df0 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f  he NATURAL keywo
29e00 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  rd...  <li> <p>^
29e10 28 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65  (If the join-ope
29e20 72 61 74 6f 72 20 69 73 20 61 20 22 4c 45 46 54  rator is a "LEFT
29e30 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20   JOIN" or "LEFT 
29e40 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65  OUTER JOIN", the
29e50 6e 0a 20 20 20 20 20 20 20 61 66 74 65 72 0a 20  n.       after. 
29e60 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f 72 20        the ON or 
29e70 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e 67 20  USING filtering 
29e80 63 6c 61 75 73 65 73 20 68 61 76 65 20 62 65 65  clauses have bee
29e90 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20 65 78  n applied, an ex
29ea0 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20 20 20  tra row is .    
29eb0 20 20 20 61 64 64 65 64 20 74 6f 20 74 68 65 20     added to the 
29ec0 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63 68 20  output for each 
29ed0 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69 67 69  row in the origi
29ee0 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e  nal left-hand in
29ef0 70 75 74 20 0a 20 20 20 20 20 20 20 64 61 74 61  put .       data
29f00 73 65 74 20 74 68 61 74 20 63 6f 72 72 65 73 70  set that corresp
29f10 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20  onds to no rows 
29f20 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f  at all in the co
29f30 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20 20 64  mposite.       d
29f40 61 74 61 73 65 74 20 28 69 66 20 61 6e 79 29 2e  ataset (if any).
29f50 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20 72 6f  )^ ^The added ro
29f60 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20  ws contain NULL 
29f70 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f  values in the co
29f80 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74 68 61  lumns.       tha
29f90 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79  t would normally
29fa0 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20   contain values 
29fb0 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20  copied from the 
29fc0 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74  right-hand input
29fd0 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 2e  .       dataset.
29fe0 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57    .</ul>..<p>^(W
29ff0 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74 77  hen more than tw
2a000 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a 6f 69  o tables are joi
2a010 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61 73 20  ned together as 
2a020 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d 20 63  part of a FROM c
2a030 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20  lause,.the join 
2a040 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70  operations are p
2a050 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72 64 65  rocessed in orde
2a060 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  r from left to r
2a070 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a  ight. In other .
2a080 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f 4d 20  words, the FROM 
2a090 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f  clause (A join-o
2a0a0 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20  p-1 B join-op-2 
2a0b0 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61  C) is computed a
2a0c0 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31  s .((A join-op-1
2a0d0 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29   B) join-op-2 C)
2a0e0 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
2a0f0 67 6d 65 6e 74 20 63 72 6f 73 73 6a 6f 69 6e 20  gment crossjoin 
2a100 7b 74 72 65 61 74 73 20 74 68 65 20 43 52 4f 53  {treats the CROS
2a110 53 20 4a 4f 49 4e 20 6f 70 65 72 61 74 6f 72 20  S JOIN operator 
2a120 73 70 65 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c 3e  specially}</tcl>
2a130 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65  .<p><b>Side note
2a140 3a 20 53 70 65 63 69 61 6c 20 68 61 6e 64 6c 69  : Special handli
2a150 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e  ng of CROSS JOIN
2a160 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65 20 69 73 20  .</b>.^There is 
2a170 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  no difference be
2a180 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e 45 52  tween the "INNER
2a190 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61   JOIN", "JOIN" a
2a1a0 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72  nd "," join.oper
2a1b0 61 74 6f 72 73 2e 20 54 68 65 79 20 61 72 65 20  ators. They are 
2a1c0 63 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 74 65 72  completely inter
2a1d0 63 68 61 6e 67 65 61 62 6c 65 20 69 6e 20 53 51  changeable in SQ
2a1e0 4c 69 74 65 2e 0a 5e 28 54 68 65 20 22 43 52 4f  Lite..^(The "CRO
2a1f0 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70  SS JOIN" join op
2a200 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65 73 20  erator produces 
2a210 74 68 65 20 73 61 6d 65 20 72 65 73 75 6c 74 20  the same result 
2a220 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20 4a  as the ."INNER J
2a230 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64  OIN", "JOIN" and
2a240 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29 5e   "," operators)^
2a250 2c 20 62 75 74 20 69 73 20 0a 5b 43 52 4f 53 53  , but is .[CROSS
2a260 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65 64 20 64 69   JOIN|handled di
2a270 66 66 65 72 65 6e 74 6c 79 20 62 79 20 74 68 65  fferently by the
2a280 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
2a290 5d 0a 69 6e 20 74 68 61 74 20 69 74 20 70 72 65  ].in that it pre
2a2a0 76 65 6e 74 73 20 74 68 65 20 71 75 65 72 79 20  vents the query 
2a2b0 6f 70 74 69 6d 69 7a 65 72 20 66 72 6f 6d 20 72  optimizer from r
2a2c0 65 6f 72 64 65 72 69 6e 67 0a 74 68 65 20 74 61  eordering.the ta
2a2d0 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e  bles in the join
2a2e0 2e 20 20 41 6e 20 61 70 70 6c 69 63 61 74 69 6f  .  An applicatio
2a2f0 6e 20 70 72 6f 67 72 61 6d 6d 65 72 20 63 61 6e  n programmer can
2a300 20 75 73 65 20 74 68 65 20 43 52 4f 53 53 20 4a   use the CROSS J
2a310 4f 49 4e 20 0a 6f 70 65 72 61 74 6f 72 20 74 6f  OIN .operator to
2a320 20 64 69 72 65 63 74 6c 79 20 69 6e 66 6c 75 65   directly influe
2a330 6e 63 65 20 74 68 65 20 61 6c 67 6f 72 69 74 68  nce the algorith
2a340 6d 20 74 68 61 74 20 69 73 20 63 68 6f 73 65 6e  m that is chosen
2a350 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a 74 68   to implement.th
2a360 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2a370 6e 74 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67  nt.  Avoid using
2a380 20 43 52 4f 53 53 20 4a 4f 49 4e 20 65 78 63 65   CROSS JOIN exce
2a390 70 74 20 69 6e 20 73 70 65 63 69 66 69 63 20 73  pt in specific s
2a3a0 69 74 75 61 74 69 6f 6e 73 20 0a 77 68 65 72 65  ituations .where
2a3b0 20 6d 61 6e 75 61 6c 20 63 6f 6e 74 72 6f 6c 20   manual control 
2a3c0 6f 66 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  of the query opt
2a3d0 69 6d 69 7a 65 72 20 69 73 20 64 65 73 69 72 65  imizer is desire
2a3e0 64 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67 0a  d.  Avoid using.
2a3f0 43 52 4f 53 53 20 4a 4f 49 4e 20 65 61 72 6c 79  CROSS JOIN early
2a400 20 69 6e 20 74 68 65 20 64 65 76 65 6c 6f 70 6d   in the developm
2a410 65 6e 74 20 6f 66 20 61 6e 20 61 70 70 6c 69 63  ent of an applic
2a420 61 74 69 6f 6e 20 61 73 20 64 6f 69 6e 67 20 73  ation as doing s
2a430 6f 20 69 73 0a 61 20 3c 61 20 68 72 65 66 3d 22  o is.a <a href="
2a440 68 74 74 70 3a 2f 2f 63 32 2e 63 6f 6d 2f 63 67  http://c2.com/cg
2a450 69 2f 77 69 6b 69 3f 50 72 65 6d 61 74 75 72 65  i/wiki?Premature
2a460 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 22 3e 70 72  Optimization">pr
2a470 65 6d 61 74 75 72 65 0a 6f 70 74 69 6d 69 7a 61  emature.optimiza
2a480 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54 68 65 20 73  tion</a>.  The s
2a490 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
2a4a0 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 20 69 73  of CROSS JOIN is
2a4b0 20 61 6e 20 53 51 4c 69 74 65 2d 73 70 65 63 69   an SQLite-speci
2a4c0 66 69 63 0a 66 65 61 74 75 72 65 20 61 6e 64 20  fic.feature and 
2a4d0 69 73 20 6e 6f 74 20 61 20 70 61 72 74 20 6f 66  is not a part of
2a4e0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 20   standard SQL.. 
2a4f0 20 20 20 20 20 20 0a 0a 3c 74 63 6c 3e 68 64 5f        ..<tcl>hd_
2a500 66 72 61 67 6d 65 6e 74 20 77 68 65 72 65 63 6c  fragment wherecl
2a510 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  ause</tcl>.<tcl>
2a520 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57 48 45  hd_keywords {WHE
2a530 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e  RE clause}</tcl>
2a540 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20  .<p><b>2. WHERE 
2a550 63 6c 61 75 73 65 20 66 69 6c 74 65 72 69 6e 67  clause filtering
2a560 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61  .</b>..<p>^(If a
2a570 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
2a580 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20   specified, the 
2a590 57 48 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e  WHERE expression
2a5a0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f   is evaluated fo
2a5b0 72 20 0a 65 61 63 68 20 72 6f 77 20 69 6e 20 74  r .each row in t
2a5c0 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 73  he input data as
2a5d0 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72   a [boolean expr
2a5e0 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f  ession]. Only ro
2a5f0 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
2a600 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78  .WHERE clause ex
2a610 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
2a620 65 73 20 74 6f 20 74 72 75 65 20 61 72 65 20 69  es to true are i
2a630 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65  ncluded from the
2a640 20 64 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a   dataset before.
2a650 63 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 20 20 52  continuing.)^  R
2a660 6f 77 73 20 61 72 65 20 65 78 63 6c 75 64 65 64  ows are excluded
2a670 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74   from the result
2a680 20 69 66 20 74 68 65 20 57 48 45 52 45 20 63 6c   if the WHERE cl
2a690 61 75 73 65 0a 65 76 61 6c 75 61 74 65 73 20 74  ause.evaluates t
2a6a0 6f 20 65 69 74 68 65 72 20 66 61 6c 73 65 20 6f  o either false o
2a6b0 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f 72 20  r NULL...<p>For 
2a6c0 61 20 4a 4f 49 4e 20 6f 72 20 49 4e 4e 45 52 20  a JOIN or INNER 
2a6d0 4a 4f 49 4e 20 6f 72 20 43 52 4f 53 53 20 4a 4f  JOIN or CROSS JO
2a6e0 49 4e 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  IN, there is no 
2a6f0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
2a700 65 6e 20 0a 61 20 63 6f 6e 73 74 72 61 69 6e 74  en .a constraint
2a710 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
2a720 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
2a730 61 6e 64 20 6f 6e 65 20 69 6e 20 74 68 65 20 4f  and one in the O
2a740 4e 20 63 6c 61 75 73 65 2e 20 20 48 6f 77 65 76  N clause.  Howev
2a750 65 72 2c 0a 66 6f 72 20 61 20 4c 45 46 54 20 4a  er,.for a LEFT J
2a760 4f 49 4e 20 6f 72 20 4c 45 46 54 20 4f 55 54 45  OIN or LEFT OUTE
2a770 52 20 4a 4f 49 4e 2c 20 74 68 65 20 64 69 66 66  R JOIN, the diff
2a780 65 72 65 6e 63 65 20 69 73 20 76 65 72 79 20 69  erence is very i
2a790 6d 70 6f 72 74 61 6e 74 2e 20 20 0a 49 6e 20 61  mportant.  .In a
2a7a0 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a 74 68 65 20   LEFT JOIN,.the 
2a7b0 65 78 74 72 61 20 4e 55 4c 4c 20 72 6f 77 20 66  extra NULL row f
2a7c0 6f 72 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  or the right-han
2a7d0 64 20 74 61 62 6c 65 20 69 73 20 61 64 64 65 64  d table is added
2a7e0 20 61 66 74 65 72 20 4f 4e 20 63 6c 61 75 73 65   after ON clause
2a7f0 20 70 72 6f 63 65 73 73 69 6e 67 0a 62 75 74 20   processing.but 
2a800 62 65 66 6f 72 65 20 57 48 45 52 45 20 63 6c 61  before WHERE cla
2a810 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  use processing. 
2a820 20 41 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66   A constraint of
2a830 20 74 68 65 20 66 6f 72 6d 20 22 6c 65 66 74 2e   the form "left.
2a840 78 3d 72 69 67 68 74 2e 79 22 0a 69 6e 20 61 6e  x=right.y".in an
2a850 20 4f 4e 20 63 6c 61 75 73 65 20 77 69 6c 6c 20   ON clause will 
2a860 74 68 65 72 65 66 6f 72 65 20 61 6c 6c 6f 77 20  therefore allow 
2a870 74 68 72 6f 75 67 68 20 74 68 65 20 61 64 64 65  through the adde
2a880 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72 6f 77 73 20  d all-NULL rows 
2a890 6f 66 20 74 68 65 0a 72 69 67 68 74 20 74 61 62  of the.right tab
2a8a0 6c 65 2e 20 20 42 75 74 20 69 66 20 74 68 61 74  le.  But if that
2a8b0 20 73 61 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74   same constraint
2a8c0 20 69 73 20 69 6e 20 74 68 65 20 57 48 45 52 45   is in the WHERE
2a8d0 20 63 6c 61 75 73 65 20 61 20 4e 55 4c 4c 20 69   clause a NULL i
2a8e0 6e 0a 22 72 69 67 68 74 2e 79 22 20 77 69 6c 6c  n."right.y" will
2a8f0 20 70 72 65 76 65 6e 74 20 74 68 65 20 65 78 70   prevent the exp
2a900 72 65 73 73 69 6f 6e 20 22 6c 65 66 74 2e 78 3d  ression "left.x=
2a910 72 69 67 68 74 2e 79 22 20 66 72 6f 6d 20 62 65  right.y" from be
2a920 69 6e 67 20 74 72 75 65 2c 20 61 6e 64 0a 74 68  ing true, and.th
2a930 75 73 20 65 78 63 6c 75 64 65 20 74 68 61 74 20  us exclude that 
2a940 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6f 75 74  row from the out
2a950 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47  put...<p><b>3. G
2a960 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
2a970 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
2a980 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ows.</b>.<tcl>hd
2a990 5f 66 72 61 67 6d 65 6e 74 20 72 65 73 75 6c 74  _fragment result
2a9a0 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68  set</tcl>.<tcl>h
2a9b0 64 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65 73 75  d_keywords {resu
2a9c0 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f  lt-set expressio
2a9d0 6e 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f  ns} {GROUP BY}</
2a9e0 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68  tcl>..<p>Once th
2a9f0 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 72 6f  e input data fro
2aa00 6d 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  m the FROM claus
2aa10 65 20 68 61 73 20 62 65 65 6e 20 66 69 6c 74 65  e has been filte
2aa20 72 65 64 20 62 79 20 74 68 65 0a 57 48 45 52 45  red by the.WHERE
2aa30 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
2aa40 6f 6e 20 28 69 66 20 61 6e 79 29 2c 20 74 68 65  on (if any), the
2aa50 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
2aa60 6f 77 73 20 66 6f 72 20 74 68 65 20 73 69 6d 70  ows for the simp
2aa70 6c 65 20 0a 53 45 4c 45 43 54 20 61 72 65 20 63  le .SELECT are c
2aa80 61 6c 63 75 6c 61 74 65 64 2e 20 45 78 61 63 74  alculated. Exact
2aa90 6c 79 20 68 6f 77 20 74 68 69 73 20 69 73 20 64  ly how this is d
2aaa0 6f 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 77  one depends on w
2aab0 68 65 74 68 65 72 20 74 68 65 20 73 69 6d 70 6c  hether the simpl
2aac0 65 20 0a 53 45 4c 45 43 54 20 69 73 20 61 6e 20  e .SELECT is an 
2aad0 61 67 67 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e  aggregate or non
2aae0 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
2aaf0 2c 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  , and whether or
2ab00 20 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42 59 20   not a GROUP.BY 
2ab10 63 6c 61 75 73 65 20 77 61 73 20 73 70 65 63 69  clause was speci
2ab20 66 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c  fied...<p> The l
2ab30 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
2ab40 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 53  ns between the S
2ab50 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b  ELECT and FROM k
2ab60 65 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e  eywords is known
2ab70 20 61 73 0a 74 68 65 20 72 65 73 75 6c 74 20 65   as.the result e
2ab80 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20  xpression list. 
2ab90 20 5e 49 66 20 61 20 72 65 73 75 6c 74 20 65 78   ^If a result ex
2aba0 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
2abb0 73 70 65 63 69 61 6c 20 65 78 70 72 65 73 73 69  special expressi
2abc0 6f 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20  on."*" then all 
2abd0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
2abe0 6e 70 75 74 20 64 61 74 61 20 61 72 65 20 73 75  nput data are su
2abf0 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68  bstituted for th
2ac00 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f  at one expressio
2ac10 6e 2e 0a 5e 28 49 66 20 74 68 65 20 65 78 70 72  n..^(If the expr
2ac20 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 61 6c  ession is the al
2ac30 69 61 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6f  ias of a table o
2ac40 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
2ac50 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f  e FROM clause.fo
2ac60 6c 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22 20 74  llowed by ".*" t
2ac70 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  hen all columns 
2ac80 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 74  from the named t
2ac90 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
2aca0 20 61 72 65 0a 73 75 62 73 74 69 74 75 74 65 64   are.substituted
2acb0 20 66 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20   for the single 
2acc0 65 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28  expression.)^ ^(
2acd0 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
2ace0 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 0a 22  o use a "*" or."
2acf0 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73  alias.*" express
2ad00 69 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65  ion in any conte
2ad10 78 74 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  xt other than a 
2ad20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2ad30 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69  n list.)^.^(It i
2ad40 73 20 61 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20  s also an error 
2ad50 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 20  to use a "*" or 
2ad60 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73  "alias.*" expres
2ad70 73 69 6f 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65  sion in a simple
2ad80 20 53 45 4c 45 43 54 0a 71 75 65 72 79 20 74 68   SELECT.query th
2ad90 61 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  at does not have
2ada0 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29   a FROM clause.)
2adb0 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d  ^..<p> ^(The num
2adc0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
2add0 6e 20 74 68 65 20 72 6f 77 73 20 72 65 74 75 72  n the rows retur
2ade0 6e 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20  ned by a simple 
2adf0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2ae00 0a 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65  .is equal to the
2ae10 20 6e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   number of expre
2ae20 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65  ssions in the re
2ae30 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
2ae40 6c 69 73 74 20 61 66 74 65 72 0a 73 75 62 73 74  list after.subst
2ae50 69 74 75 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64  itution of * and
2ae60 20 61 6c 69 61 73 2e 2a 20 65 78 70 72 65 73 73   alias.* express
2ae70 69 6f 6e 73 2e 29 5e 20 45 61 63 68 20 72 65 73  ions.)^ Each res
2ae80 75 6c 74 20 72 6f 77 20 69 73 20 63 61 6c 63 75  ult row is calcu
2ae90 6c 61 74 65 64 20 62 79 0a 65 76 61 6c 75 61 74  lated by.evaluat
2aea0 69 6e 67 20 74 68 65 20 65 78 70 72 65 73 73 69  ing the expressi
2aeb0 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ons in the resul
2aec0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  t expression lis
2aed0 74 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74  t with respect t
2aee0 6f 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f  o a.single row o
2aef0 66 20 69 6e 70 75 74 20 64 61 74 61 20 6f 72 2c  f input data or,
2af00 20 66 6f 72 20 61 67 67 72 65 67 61 74 65 20 71   for aggregate q
2af10 75 65 72 69 65 73 2c 20 77 69 74 68 20 72 65 73  ueries, with res
2af20 70 65 63 74 20 74 6f 20 61 20 67 72 6f 75 70 0a  pect to a group.
2af30 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20  of rows...<ul>. 
2af40 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
2af50 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2af60 20 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67   is <b>a non-agg
2af70 72 65 67 61 74 65 20 71 75 65 72 79 3c 2f 62 3e  regate query</b>
2af80 2c 20 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68  , then .    each
2af90 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
2afa0 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73  he result expres
2afb0 73 69 6f 6e 20 6c 69 73 74 20 69 73 20 65 76 61  sion list is eva
2afc0 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
2afd0 72 6f 77 20 69 6e 0a 20 20 20 20 74 68 65 20 64  row in.    the d
2afe0 61 74 61 73 65 74 20 66 69 6c 74 65 72 65 64 20  ataset filtered 
2aff0 62 79 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  by the WHERE cla
2b000 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  use...  <li><p>^
2b010 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  If the SELECT st
2b020 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e  atement is <b>an
2b030 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
2b040 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50   without a GROUP
2b050 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75  .    BY</b> clau
2b060 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 61 67  se, then each ag
2b070 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2b080 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
2b090 2d 73 65 74 20 69 73 20 0a 20 20 20 20 65 76 61  -set is .    eva
2b0a0 6c 75 61 74 65 64 20 6f 6e 63 65 20 61 63 72 6f  luated once acro
2b0b0 73 73 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  ss the entire da
2b0c0 74 61 73 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e  taset. ^Each non
2b0d0 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
2b0e0 73 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65  ssion.    in the
2b0f0 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65   result-set is e
2b100 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
2b110 72 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79  r an arbitrarily
2b120 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 6f 66   selected row of
2b130 0a 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74  .    the dataset
2b140 2e 20 5e 54 68 65 20 73 61 6d 65 20 61 72 62 69  . ^The same arbi
2b150 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64  trarily selected
2b160 20 72 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72   row is used for
2b170 20 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67   each.    non-ag
2b180 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2b190 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20  on. ^Or, if the 
2b1a0 64 61 74 61 73 65 74 20 63 6f 6e 74 61 69 6e 73  dataset contains
2b1b0 20 7a 65 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e   zero rows, then
2b1c0 20 0a 20 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61   .    each non-a
2b1d0 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
2b1e0 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
2b1f0 20 61 67 61 69 6e 73 74 20 61 20 72 6f 77 20 63   against a row c
2b200 6f 6e 73 69 73 74 69 6e 67 0a 20 20 20 20 65 6e  onsisting.    en
2b210 74 69 72 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76  tirely of NULL v
2b220 61 6c 75 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54  alues...   <p>^T
2b230 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66  he single row of
2b240 20 72 65 73 75 6c 74 2d 73 65 74 20 64 61 74 61   result-set data
2b250 20 63 72 65 61 74 65 64 20 62 79 20 65 76 61 6c   created by eval
2b260 75 61 74 69 6e 67 20 74 68 65 20 61 67 67 72 65  uating the aggre
2b270 67 61 74 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e  gate.    and non
2b280 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
2b290 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65  ssions in the re
2b2a0 73 75 6c 74 2d 73 65 74 20 66 6f 72 6d 73 20 74  sult-set forms t
2b2b0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a  he result of an.
2b2c0 20 20 20 20 61 67 67 72 65 67 61 74 65 20 71 75      aggregate qu
2b2d0 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52  ery without a GR
2b2e0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 5e  OUP BY clause. ^
2b2f0 41 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  An aggregate que
2b300 72 79 20 77 69 74 68 6f 75 74 20 61 0a 20 20 20  ry without a.   
2b310 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2b320 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20   always returns 
2b330 65 78 61 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20  exactly one row 
2b340 6f 66 20 64 61 74 61 2c 20 65 76 65 6e 20 69 66  of data, even if
2b350 20 74 68 65 72 65 20 61 72 65 0a 20 20 20 20 7a   there are.    z
2b360 65 72 6f 20 72 6f 77 73 20 6f 66 20 69 6e 70 75  ero rows of inpu
2b370 74 20 64 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c  t data...  <li><
2b380 70 3e 5e 28 49 66 20 74 68 65 20 53 45 4c 45 43  p>^(If the SELEC
2b390 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
2b3a0 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  b>an aggregate q
2b3b0 75 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55  uery with a GROU
2b3c0 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61  P.    BY</b> cla
2b3d0 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 6f  use, then each o
2b3e0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
2b3f0 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
2b400 61 72 74 20 6f 66 20 74 68 65 0a 20 20 20 20 47  art of the.    G
2b410 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 69  ROUP BY clause i
2b420 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
2b430 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
2b440 64 61 74 61 73 65 74 2e 20 45 61 63 68 20 72 6f  dataset. Each ro
2b450 77 0a 20 20 20 20 69 73 20 74 68 65 6e 20 61 73  w.    is then as
2b460 73 69 67 6e 65 64 20 74 6f 20 61 20 22 67 72 6f  signed to a "gro
2b470 75 70 22 20 62 61 73 65 64 20 6f 6e 20 74 68 65  up" based on the
2b480 20 72 65 73 75 6c 74 73 3b 20 72 6f 77 73 20 66   results; rows f
2b490 6f 72 20 77 68 69 63 68 0a 20 20 20 20 74 68 65  or which.    the
2b4a0 20 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c   results of eval
2b4b0 75 61 74 69 6e 67 20 74 68 65 20 47 52 4f 55 50  uating the GROUP
2b4c0 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20   BY expressions 
2b4d0 61 72 65 20 74 68 65 20 73 61 6d 65 20 67 65 74  are the same get
2b4e0 0a 20 20 20 20 61 73 73 69 67 6e 65 64 20 74 6f  .    assigned to
2b4f0 20 74 68 65 20 73 61 6d 65 20 67 72 6f 75 70 2e   the same group.
2b500 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70  )^ ^For the purp
2b510 6f 73 65 73 20 6f 66 20 67 72 6f 75 70 69 6e 67  oses of grouping
2b520 20 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20   rows, NULL .   
2b530 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
2b540 69 64 65 72 65 64 20 65 71 75 61 6c 2e 20 5e 54  idered equal. ^T
2b550 68 65 20 75 73 75 61 6c 20 72 75 6c 65 73 20 66  he usual rules f
2b560 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65  or [collation|se
2b570 6c 65 63 74 69 6e 67 20 61 0a 20 20 20 20 63 6f  lecting a.    co
2b580 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2b590 5d 20 77 69 74 68 20 77 68 69 63 68 20 74 6f 20  ] with which to 
2b5a0 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c  compare text val
2b5b0 75 65 73 20 61 70 70 6c 79 20 77 68 65 6e 20 65  ues apply when e
2b5c0 76 61 6c 75 61 74 69 6e 67 0a 20 20 20 20 65 78  valuating.    ex
2b5d0 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47  pressions in a G
2b5e0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20  ROUP BY clause. 
2b5f0 20 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e   ^The expression
2b600 73 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42  s in the GROUP B
2b610 59 20 63 6c 61 75 73 65 0a 20 20 20 20 64 6f 20  Y clause.    do 
2b620 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76  <em>not</em> hav
2b630 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 69  e to be expressi
2b640 6f 6e 73 20 74 68 61 74 20 61 70 70 65 61 72 20  ons that appear 
2b650 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 5e  in the result. ^
2b660 54 68 65 0a 20 20 20 20 65 78 70 72 65 73 73 69  The.    expressi
2b670 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42  ons in a GROUP B
2b680 59 20 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74  Y clause may not
2b690 20 62 65 20 61 67 67 72 65 67 61 74 65 20 65 78   be aggregate ex
2b6a0 70 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20  pressions...    
2b6b0 3c 70 3e 5e 28 49 66 20 61 20 48 41 56 49 4e 47  <p>^(If a HAVING
2b6c0 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
2b6d0 66 69 65 64 2c 20 69 74 20 69 73 20 65 76 61 6c  fied, it is eval
2b6e0 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65  uated once for e
2b6f0 61 63 68 20 67 72 6f 75 70 20 0a 20 20 20 20 6f  ach group .    o
2b700 66 20 72 6f 77 73 20 61 73 20 61 20 5b 62 6f 6f  f rows as a [boo
2b710 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lean expression]
2b720 2e 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20  . If the result 
2b730 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
2b740 65 0a 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61  e.    HAVING cla
2b750 75 73 65 20 69 73 20 66 61 6c 73 65 2c 20 74 68  use is false, th
2b760 65 20 67 72 6f 75 70 20 69 73 20 64 69 73 63 61  e group is disca
2b770 72 64 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20  rded.)^ ^If the 
2b780 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73  HAVING clause is
2b790 0a 20 20 20 20 61 6e 20 61 67 67 72 65 67 61 74  .    an aggregat
2b7a0 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74  e expression, it
2b7b0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 63   is evaluated ac
2b7c0 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e  ross all rows in
2b7d0 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 0a   the group. ^If.
2b7e0 20 20 20 20 61 20 48 41 56 49 4e 47 20 63 6c 61      a HAVING cla
2b7f0 75 73 65 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67  use is a non-agg
2b800 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2b810 6e 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  n, it is evaluat
2b820 65 64 20 77 69 74 68 20 72 65 73 70 65 63 74 0a  ed with respect.
2b830 20 20 20 20 74 6f 20 61 6e 20 61 72 62 69 74 72      to an arbitr
2b840 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72  arily selected r
2b850 6f 77 20 66 72 6f 6d 20 74 68 65 20 67 72 6f 75  ow from the grou
2b860 70 2e 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20  p.  ^The HAVING 
2b870 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 0a 20  expression may. 
2b880 20 20 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75     refer to valu
2b890 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61  es, even aggrega
2b8a0 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68  te functions, th
2b8b0 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68  at are not in th
2b8c0 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20  e result.</p>.. 
2b8d0 20 20 20 3c 70 3e 5e 45 61 63 68 20 65 78 70 72     <p>^Each expr
2b8e0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
2b8f0 73 75 6c 74 2d 73 65 74 20 69 73 20 74 68 65 6e  sult-set is then
2b900 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
2b910 66 6f 72 20 65 61 63 68 0a 20 20 20 20 67 72 6f  for each.    gro
2b920 75 70 20 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20  up of rows. ^If 
2b930 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
2b940 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65  s an aggregate e
2b950 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73  xpression, it is
2b960 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20   .    evaluated 
2b970 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20  across all rows 
2b980 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f  in the group. ^O
2b990 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 20  therwise, it is 
2b9a0 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73  evaluated agains
2b9b0 74 0a 20 20 20 20 61 20 73 69 6e 67 6c 65 20 61  t.    a single a
2b9c0 72 62 69 74 72 61 72 69 6c 79 20 63 68 6f 73 65  rbitrarily chose
2b9d0 6e 20 72 6f 77 20 66 72 6f 6d 20 77 69 74 68 69  n row from withi
2b9e0 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66  n the group. ^If
2b9f0 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 0a 20   there is more. 
2ba00 20 20 20 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d     than one non-
2ba10 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2ba20 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
2ba30 6c 74 2d 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  lt-set, then all
2ba40 20 73 75 63 68 0a 20 20 20 20 65 78 70 72 65 73   such.    expres
2ba50 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61  sions are evalua
2ba60 74 65 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65  ted for the same
2ba70 20 72 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45   row...    <p>^E
2ba80 61 63 68 20 67 72 6f 75 70 20 6f 66 20 69 6e 70  ach group of inp
2ba90 75 74 20 64 61 74 61 73 65 74 20 72 6f 77 73 20  ut dataset rows 
2baa0 63 6f 6e 74 72 69 62 75 74 65 73 20 61 20 73 69  contributes a si
2bab0 6e 67 6c 65 20 72 6f 77 20 74 6f 20 74 68 65 20  ngle row to the 
2bac0 0a 20 20 20 20 73 65 74 20 6f 66 20 72 65 73 75  .    set of resu
2bad0 6c 74 20 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63  lt rows. ^Subjec
2bae0 74 20 74 6f 20 66 69 6c 74 65 72 69 6e 67 20 61  t to filtering a
2baf0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
2bb00 68 65 20 44 49 53 54 49 4e 43 54 0a 20 20 20 20  he DISTINCT.    
2bb10 6b 65 79 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d  keyword, the num
2bb20 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75  ber of rows retu
2bb30 72 6e 65 64 20 62 79 20 61 6e 20 61 67 67 72 65  rned by an aggre
2bb40 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68 20  gate query with 
2bb50 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59 20 63  a GROUP.    BY c
2bb60 6c 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d  lause is the sam
2bb70 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e as the number 
2bb80 6f 66 20 67 72 6f 75 70 73 20 6f 66 20 72 6f 77  of groups of row
2bb90 73 20 70 72 6f 64 75 63 65 64 20 62 79 20 61 70  s produced by ap
2bba0 70 6c 79 69 6e 67 0a 20 20 20 20 74 68 65 20 47  plying.    the G
2bbb0 52 4f 55 50 20 42 59 20 61 6e 64 20 48 41 56 49  ROUP BY and HAVI
2bbc0 4e 47 20 63 6c 61 75 73 65 73 20 74 6f 20 74 68  NG clauses to th
2bbd0 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74  e filtered input
2bbe0 20 64 61 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a   dataset..</ul>.
2bbf0 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61  .<p><b>4. Remova
2bc00 6c 20 6f 66 20 64 75 70 6c 69 63 61 74 65 20 72  l of duplicate r
2bc10 6f 77 73 20 28 44 49 53 54 49 4e 43 54 20 70 72  ows (DISTINCT pr
2bc20 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c  ocessing).</b>.<
2bc30 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2bc40 64 69 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c  distinct</tcl>.<
2bc50 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
2bc60 7b 44 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e  {DISTINCT}</tcl>
2bc70 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74 68 65  ..<p>^One of the
2bc80 20 41 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43 54   ALL or DISTINCT
2bc90 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 66 6f   keywords may fo
2bca0 6c 6c 6f 77 20 74 68 65 20 53 45 4c 45 43 54 20  llow the SELECT 
2bcb0 6b 65 79 77 6f 72 64 20 69 6e 20 61 20 0a 73 69  keyword in a .si
2bcc0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
2bcd0 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 73  ement. ^If the s
2bce0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20  imple SELECT is 
2bcf0 61 20 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74 68  a SELECT ALL, th
2bd00 65 6e 20 74 68 65 0a 65 6e 74 69 72 65 20 73 65  en the.entire se
2bd10 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
2bd20 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79   are returned by
2bd30 20 74 68 65 20 53 45 4c 45 43 54 2e 20 5e 49 66   the SELECT. ^If
2bd40 20 6e 65 69 74 68 65 72 20 41 4c 4c 20 6f 72 0a   neither ALL or.
2bd50 44 49 53 54 49 4e 43 54 20 61 72 65 20 70 72 65  DISTINCT are pre
2bd60 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62  sent, then the b
2bd70 65 68 61 76 69 6f 72 20 69 73 20 61 73 20 69 66  ehavior is as if
2bd80 20 41 4c 4c 20 77 65 72 65 20 73 70 65 63 69 66   ALL were specif
2bd90 69 65 64 2e 20 0a 5e 49 66 20 74 68 65 20 73 69  ied. .^If the si
2bda0 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61  mple SELECT is a
2bdb0 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54   SELECT DISTINCT
2bdc0 2c 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65  , then duplicate
2bdd0 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65   rows are remove
2bde0 64 0a 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f  d.from the set o
2bdf0 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 62 65  f result rows be
2be00 66 6f 72 65 20 69 74 20 69 73 20 72 65 74 75 72  fore it is retur
2be10 6e 65 64 2e 20 5e 46 6f 72 20 74 68 65 20 70 75  ned. ^For the pu
2be20 72 70 6f 73 65 73 20 6f 66 0a 64 65 74 65 63 74  rposes of.detect
2be30 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ing duplicate ro
2be40 77 73 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c  ws, two NULL val
2be50 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
2be60 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 20  ed to be equal. 
2be70 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65  ^The.normal rule
2be80 73 20 66 6f 72 20 73 65 6c 65 63 74 69 6e 67 20  s for selecting 
2be90 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
2bea0 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20  ence to compare 
2beb0 74 65 78 74 20 76 61 6c 75 65 73 20 77 69 74 68  text values with
2bec0 0a 61 70 70 6c 79 2e 0a 0a 3c 74 63 6c 3e 0a 68  .apply...<tcl>.h
2bed0 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f  d_fragment compo
2bee0 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65  und {compound se
2bef0 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20  lect} {compound 
2bf00 71 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75 6e 64  query} {compound
2bf10 20 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70 6f 75   SELECT} {compou
2bf20 6e 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f 74 63  nd SELECTs}.</tc
2bf30 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20  l>.<h3>Compound 
2bf40 53 65 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74  Select Statement
2bf50 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f  s</h3>..<p>Two o
2bf60 72 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65 20 53  r more [simple S
2bf70 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2bf80 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63 74  s may be connect
2bf90 65 64 20 74 6f 67 65 74 68 65 72 20 74 6f 20 66  ed together to f
2bfa0 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53  orm.a compound S
2bfb0 45 4c 45 43 54 20 75 73 69 6e 67 20 74 68 65 20  ELECT using the 
2bfc0 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c  UNION, UNION ALL
2bfd0 2c 20 49 4e 54 45 52 53 45 43 54 20 6f 72 20 45  , INTERSECT or E
2bfe0 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 2c 0a  XCEPT operator,.
2bff0 61 73 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20  as shown by the 
2c000 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61  following diagra
2c010 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73  m:..<tcl>.Recurs
2c020 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
2c030 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74   compound-select
2c040 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
2c050 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  >^In a compound 
2c060 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20  SELECT, all the 
2c070 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45  constituent SELE
2c080 43 54 73 20 6d 75 73 74 20 72 65 74 75 72 6e 20  CTs must return 
2c090 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72  the same .number
2c0a0 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d   of result colum
2c0b0 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d 70  ns. ^As the comp
2c0c0 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70  onents of a comp
2c0d0 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75 73 74  ound SELECT must
2c0e0 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  .be simple SELEC
2c0f0 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 74 68  T statements, th
2c100 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61  ey may not conta
2c110 69 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20 6f 72  in [ORDER BY] or
2c120 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73   [LIMIT] clauses
2c130 2e 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e  ..^[ORDER BY] an
2c140 64 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65  d [LIMIT] clause
2c150 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72  s may only occur
2c160 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
2c170 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75  he entire compou
2c180 6e 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64 20 74  nd.SELECT, and t
2c190 68 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68 65 20  hen only if the 
2c1a0 66 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20 6f 66  final element of
2c1b0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 69 73   the compound is
2c1c0 20 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53 5d 20   not a [VALUES] 
2c1d0 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41 20 63  clause...<p>^A c
2c1e0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63  ompound SELECT c
2c1f0 72 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49  reated using UNI
2c200 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20  ON ALL operator 
2c210 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20  returns all the 
2c220 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45  rows.from the SE
2c230 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74  LECT to the left
2c240 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c   of the UNION AL
2c250 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20  L operator, and 
2c260 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f  all the rows.fro
2c270 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20  m the SELECT to 
2c280 74 68 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e  the right of it.
2c290 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72   ^The UNION oper
2c2a0 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73  ator works the s
2c2b0 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e  ame way as.UNION
2c2c0 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61   ALL, except tha
2c2d0 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  t duplicate rows
2c2e0 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
2c2f0 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75  m the final resu
2c300 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54  lt set..^The INT
2c310 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20  ERSECT operator 
2c320 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65  returns the inte
2c330 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  rsection of the 
2c340 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c  results of the l
2c350 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45  eft and.right SE
2c360 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43  LECTs.  ^The EXC
2c370 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74  EPT operator ret
2c380 75 72 6e 73 20 74 68 65 20 73 75 62 73 65 74 20  urns the subset 
2c390 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  of rows returned
2c3a0 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c   by the.left SEL
2c3b0 45 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ECT that are not
2c3c0 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62   also returned b
2c3d0 79 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  y the right-hand
2c3e0 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63   SELECT. ^Duplic
2c3f0 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d  ate.rows are rem
2c400 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  oved from the re
2c410 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45  sults of INTERSE
2c420 43 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70  CT and EXCEPT op
2c430 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74  erators before t
2c440 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73  he.result set is
2c450 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e   returned...<p>^
2c460 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
2c470 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20   of determining 
2c480 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66  duplicate rows f
2c490 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  or the results o
2c4a0 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43  f compound.SELEC
2c4b0 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c  T operators, NUL
2c4c0 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
2c4d0 73 69 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f  sidered equal to
2c4e0 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
2c4f0 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20  es and.distinct 
2c500 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  from all non-NUL
2c510 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63  L values. ^The c
2c520 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2c530 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  e used to compar
2c540 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75  e .two text valu
2c550 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  es is determined
2c560 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d   as if the colum
2c570 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61  ns of the left a
2c580 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45  nd right-hand.SE
2c590 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
2c5a0 77 65 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e  were the left an
2c5b0 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65  d right-hand ope
2c5c0 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75  rands of the equ
2c5d0 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72  als (=).operator
2c5e0 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 67 72  , except that gr
2c5f0 65 61 74 65 72 20 70 72 65 63 65 64 65 6e 63 65  eater precedence
2c600 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64   is not assigned
2c610 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20   to a collation 
2c620 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63 69 66  .sequence specif
2c630 69 65 64 20 77 69 74 68 20 74 68 65 20 70 6f 73  ied with the pos
2c640 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65  tfix COLLATE ope
2c650 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e  rator. ^No affin
2c660 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69  ity.transformati
2c670 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64 20  ons are applied 
2c680 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68  to any values wh
2c690 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77  en comparing row
2c6a0 73 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63  s as part of a.c
2c6b0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20  ompound SELECT. 
2c6c0 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65  ..<p>^(When thre
2c6d0 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65  e or more simple
2c6e0 20 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e   SELECTs are con
2c6f0 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f  nected into a co
2c700 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74  mpound SELECT,.t
2c710 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c  hey group from l
2c720 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e  eft to right. In
2c730 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
2c740 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43   "A", "B" and "C
2c750 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65  " are all.simple
2c760 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2c770 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43  ts, (A op B op C
2c780 29 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61  ) is processed a
2c790 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43  s ((A op B) op C
2c7a0 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ).)^..</p>..<tcl
2c7b0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64  >hd_fragment ord
2c7c0 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 20  erby {order by} 
2c7d0 7b 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63 6c 3e  {ORDER BY}</tcl>
2c7e0 0a 3c 68 33 3e 54 68 65 20 4f 52 44 45 52 20 42  .<h3>The ORDER B
2c7f0 59 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c  Y clause</h3>..<
2c800 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20 73 74  p>If a SELECT st
2c810 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72 65 74  atement that ret
2c820 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f  urns more than o
2c830 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ne row does not 
2c840 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20 42 59  have an.ORDER BY
2c850 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f 72 64   clause, the ord
2c860 65 72 20 69 6e 20 77 68 69 63 68 20 74 68 65 20  er in which the 
2c870 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
2c880 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  d is undefined..
2c890 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43 54 20  Or, if a SELECT 
2c8a0 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 68  statement does h
2c8b0 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20  ave an ORDER BY 
2c8c0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
2c8d0 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65 73 73   list of.express
2c8e0 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20 74 6f  ions attached to
2c8f0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 64 65   the ORDER BY de
2c900 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72 64 65  termine the orde
2c910 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a  r in which rows.
2c920 61 72 65 20 72 65 74 75 72 6e 65 64 20 74 6f 20  are returned to 
2c930 74 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e 0a 49  the user...<p>.I
2c940 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
2c950 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
2c960 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74 20 6f   only the last o
2c970 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69  r right-most [si
2c980 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a 6d 61 79  mple SELECT].may
2c990 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42   have an ORDER B
2c9a0 59 20 63 6c 61 75 73 65 2e 20 54 68 61 74 20 4f  Y clause. That O
2c9b0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 77  RDER BY clause w
2c9c0 69 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f 73 73  ill apply across
2c9d0 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20 6f 66   all elements of
2c9e0 0a 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20 49  .the compound. I
2c9f0 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  f the right-most
2ca00 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 5b 63   element of a [c
2ca10 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20  ompound SELECT] 
2ca20 69 73 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c  is a [VALUES] cl
2ca30 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f 20 4f 52  ause,.then no OR
2ca40 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
2ca50 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74 68 61 74   allowed on that
2ca60 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a 3c 70   statement....<p
2ca70 3e 5e 52 6f 77 73 20 61 72 65 20 66 69 72 73 74  >^Rows are first
2ca80 20 73 6f 72 74 65 64 20 62 61 73 65 64 20 6f 6e   sorted based on
2ca90 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
2caa0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 6c  evaluating the l
2cab0 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73  eft-most express
2cac0 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44 45 52  ion in the ORDER
2cad0 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e 20 74   BY list, then t
2cae0 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e 0a 62  ies are broken.b
2caf0 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
2cb00 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73   second left-mos
2cb10 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  t expression and
2cb20 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72 64 65   so on. The orde
2cb30 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f 20 72  r in which.two r
2cb40 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 61 6c  ows for which al
2cb50 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  l ORDER BY expre
2cb60 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20  ssions evaluate 
2cb70 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65 73 20  to equal values 
2cb80 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69 73 20  are.returned is 
2cb90 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61 63 68  undefined. ^Each
2cba0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2cbb0 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74 69  sion may be opti
2cbc0 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a  onally followed.
2cbd0 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65  by one of the ke
2cbe0 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d 61 6c  ywords ASC (smal
2cbf0 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65 20 72  ler values are r
2cc00 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 20 6f  eturned first) o
2cc10 72 20 44 45 53 43 20 28 6c 61 72 67 65 72 0a 76  r DESC (larger.v
2cc20 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72 6e  alues are return
2cc30 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66 20 6e  ed first). ^If n
2cc40 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
2cc50 53 43 20 61 72 65 20 73 70 65 63 69 66 69 65 64  SC are specified
2cc60 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72 74 65  , rows.are sorte
2cc70 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 28  d in ascending (
2cc80 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 66  smaller values f
2cc90 69 72 73 74 29 20 6f 72 64 65 72 20 62 79 20 64  irst) order by d
2cca0 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68  efault...<p>Each
2ccb0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2ccc0 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73 73 65  sion is processe
2ccd0 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  d as follows:</p
2cce0 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e  >..<ol>.<li><p>^
2ccf0 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  If the ORDER BY 
2cd00 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
2cd10 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67 65 72  constant integer
2cd20 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78 70 72   K then the.expr
2cd30 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64  ession is consid
2cd40 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20 66 6f  ered an alias fo
2cd50 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75 6d  r the K-th colum
2cd60 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  n of the result 
2cd70 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61 72 65  set.(columns are
2cd80 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c   numbered from l
2cd90 65 66 74 20 74 6f 20 72 69 67 68 74 20 73 74 61  eft to right sta
2cda0 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e 0a 0a  rting with 1)...
2cdb0 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f  <li><p>^If the O
2cdc0 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
2cdd0 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  on is an identif
2cde0 69 65 72 20 74 68 61 74 20 63 6f 72 72 65 73 70  ier that corresp
2cdf0 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c 69 61  onds to.the alia
2ce00 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68 65 20  s of one of the 
2ce10 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 2c 20  output columns, 
2ce20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  then the express
2ce30 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ion is considere
2ce40 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  d.an alias for t
2ce50 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69  hat column...<li
2ce60 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
2ce70 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
2ce80 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
2ce90 79 20 6f 74 68 65 72 20 65 78 70 72 65 73 73 69  y other expressi
2cea0 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61 6c 75  on, it .is evalu
2ceb0 61 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 74  ated and the ret
2cec0 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73 65 64  urned value used
2ced0 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20 6f 75   to order the ou
2cee0 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66 0a 74  tput rows. ^If.t
2cef0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2cf00 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c 65 20  ent is a simple 
2cf10 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61 6e 20  SELECT, then an 
2cf20 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63 6f 6e  ORDER BY may con
2cf30 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74 72 61  tain any.arbitra
2cf40 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  ry expressions. 
2cf50 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65  ^However, if the
2cf60 20 53 45 4c 45 43 54 20 69 73 20 61 20 63 6f 6d   SELECT is a com
2cf70 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 74 68  pound SELECT, th
2cf80 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78 70 72  en.ORDER BY expr
2cf90 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65  essions that are
2cfa0 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74 6f 20   not aliases to 
2cfb0 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20 6d  output columns m
2cfc0 75 73 74 20 62 65 20 65 78 61 63 74 6c 79 0a 74  ust be exactly.t
2cfd0 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20 65 78  he same as an ex
2cfe0 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20 61 73  pression used as
2cff0 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d   an output colum
2d000 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f  n..</ol>..<p>^Fo
2d010 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
2d020 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73 2c 20  f sorting rows, 
2d030 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
2d040 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  red in the same 
2d050 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f 6d 70  way.as for [comp
2d060 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73 69 6f  arison expressio
2d070 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61 74 69  ns]. The collati
2d080 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64  on sequence used
2d090 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77 6f 20   to compare.two 
2d0a0 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64  text values is d
2d0b0 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66 6f 6c  etermined as fol
2d0c0 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c  lows:..<ol>.  <l
2d0d0 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44  i><p>^If the ORD
2d0e0 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
2d0f0 20 69 73 20 61 73 73 69 67 6e 65 64 20 61 20 63   is assigned a c
2d100 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2d110 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 70 6f  e using.  the po
2d120 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45 20 6f  stfix [COLLATE o
2d130 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74  perator], then t
2d140 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  he specified col
2d150 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
2d160 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c 6c 69  is.  used..  <li
2d170 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
2d180 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
2d190 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
2d1a0 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65 78 70   alias to an exp
2d1b0 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74 20 68  ression.  that h
2d1c0 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e 65 64  as been assigned
2d1d0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
2d1e0 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68 65 20  uence using the 
2d1f0 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f 4c 4c  postfix .  [COLL
2d200 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74  ATE operator], t
2d210 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  hen the collatio
2d220 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73 69 67  n sequence assig
2d230 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69 61 73  ned to the alias
2d240 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20  ed.  expression 
2d250 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c  is used..  <li><
2d260 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  p>^Otherwise, if
2d270 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
2d280 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f  pression is a co
2d290 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69 61 73  lumn or an alias
2d2a0 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65 73 73   of.  an express
2d2b0 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20 63 6f  ion that is a co
2d2c0 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20 64  lumn, then the d
2d2d0 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
2d2e0 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a 20 20   sequence for.  
2d2f0 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  the column is us
2d300 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f  ed. .  <li><p>^O
2d310 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 5b 42  therwise, the [B
2d320 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e  INARY] collation
2d330 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65   sequence is use
2d340 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20  d..</ol>..<p>In 
2d350 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  a [compound SELE
2d360 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 61  CT] statement, a
2d370 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ll ORDER BY expr
2d380 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61 6e 64  essions are hand
2d390 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73 20 66  led.as aliases f
2d3a0 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65  or one of the re
2d3b0 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  sult columns of 
2d3c0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 0a 5e 28  the compound..^(
2d3d0 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20 65  If an ORDER BY e
2d3e0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e 6f 74  xpression is not
2d3f0 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c 69 61   an integer alia
2d400 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73  s, then SQLite s
2d410 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65 66 74  earches.the left
2d420 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69 6e 20  -most SELECT in 
2d430 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66 6f 72  the compound for
2d440 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e   a result column
2d450 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 65 69   that matches ei
2d460 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e 64 20  ther.the second 
2d470 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73 20 61  or third rules a
2d480 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74 63 68  bove. If a match
2d490 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 73   is found, the s
2d4a0 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e 64 0a  earch stops and.
2d4b0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
2d4c0 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61 6e 20  s handled as an 
2d4d0 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 65  alias for the re
2d4e0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74  sult column that
2d4f0 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d 61 74   it has been.mat
2d500 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20 4f 74  ched against. Ot
2d510 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e 65 78  herwise, the nex
2d520 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  t SELECT to the 
2d530 72 69 67 68 74 20 69 73 20 74 72 69 65 64 2c 20  right is tried, 
2d540 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e 49 66  and so on.)^.^If
2d550 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65 78 70   no matching exp
2d560 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 66  ression can be f
2d570 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65 73 75  ound in the resu
2d580 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e  lt columns of an
2d590 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  y.constituent SE
2d5a0 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e 20 65  LECT, it is an e
2d5b0 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65 72 6d  rror. ^Each term
2d5c0 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   of the ORDER BY
2d5d0 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f 63 65   clause is.proce
2d5e0 73 73 65 64 20 73 65 70 61 72 61 74 65 6c 79 20  ssed separately 
2d5f0 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74 63 68  and may be match
2d600 65 64 20 61 67 61 69 6e 73 74 20 72 65 73 75 6c  ed against resul
2d610 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 64  t columns from d
2d620 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43 54 20  ifferent.SELECT 
2d630 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
2d640 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a  e compound.</p>.
2d650 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2d660 74 20 6c 69 6d 69 74 6f 66 66 73 65 74 20 7b 4c  t limitoffset {L
2d670 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54 7d 3c 2f  IMIT} {OFFSET}</
2d680 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4d  tcl>.<h3>The LIM
2d690 49 54 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a  IT clause</h3>..
2d6a0 3c 70 3e 54 68 65 20 4c 49 4d 49 54 20 63 6c 61  <p>The LIMIT cla
2d6b0 75 73 65 20 69 73 20 75 73 65 64 20 74 6f 20 70  use is used to p
2d6c0 6c 61 63 65 20 61 6e 20 75 70 70 65 72 20 62 6f  lace an upper bo
2d6d0 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  und on the numbe
2d6e0 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75 72 6e  r of rows.return
2d6f0 65 64 20 62 79 20 74 68 65 20 65 6e 74 69 72 65  ed by the entire
2d700 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2d710 74 2e 0a 0a 3c 70 3e 49 6e 20 61 20 5b 63 6f 6d  t...<p>In a [com
2d720 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20 6f  pound SELECT], o
2d730 6e 6c 79 20 74 68 65 0a 6c 61 73 74 20 6f 72 20  nly the.last or 
2d740 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70  right-most [simp
2d750 6c 65 20 53 45 4c 45 43 54 5d 20 6d 61 79 20 63  le SELECT] may c
2d760 6f 6e 74 61 69 6e 20 61 20 4c 49 4d 49 54 20 63  ontain a LIMIT c
2d770 6c 61 75 73 65 2e 20 20 0a 49 6e 20 61 20 5b 63  lause.  .In a [c
2d780 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c  ompound SELECT],
2d790 20 0a 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75   .the LIMIT clau
2d7a0 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20 74 68  se applies to th
2d7b0 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e  e entire compoun
2d7c0 64 2c 20 6e 6f 74 20 6a 75 73 74 20 74 68 65 20  d, not just the 
2d7d0 66 69 6e 61 6c 20 53 45 4c 45 43 54 2e 0a 49 66  final SELECT..If
2d7e0 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20   the right-most 
2d7f0 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20  [simple SELECT] 
2d800 69 73 20 61 20 5b 56 41 4c 55 45 53 20 63 6c 61  is a [VALUES cla
2d810 75 73 65 5d 20 74 68 65 6e 20 6e 6f 20 4c 49 4d  use] then no LIM
2d820 49 54 20 63 6c 61 75 73 65 0a 69 73 20 61 6c 6c  IT clause.is all
2d830 6f 77 65 64 2e 0a 0a 3c 70 3e 5e 41 6e 79 20 73  owed...<p>^Any s
2d840 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
2d850 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20   may be used in 
2d860 74 68 65 20 0a 4c 49 4d 49 54 20 63 6c 61 75 73  the .LIMIT claus
2d870 65 2c 20 73 6f 20 6c 6f 6e 67 20 61 73 20 69 74  e, so long as it
2d880 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 6e   evaluates to an
2d890 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 76 61   integer or a va
2d8a0 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a  lue that can be.
2d8b0 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
2d8c0 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
2d8d0 65 72 2e 20 5e 49 66 20 74 68 65 20 65 78 70 72  er. ^If the expr
2d8e0 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
2d8f0 20 74 6f 20 61 20 4e 55 4c 4c 20 0a 76 61 6c 75   to a NULL .valu
2d900 65 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 76  e or any other v
2d910 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74  alue that cannot
2d920 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be losslessly c
2d930 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
2d940 6e 74 65 67 65 72 2c 20 61 6e 0a 65 72 72 6f 72  nteger, an.error
2d950 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 49   is returned. ^I
2d960 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72  f the LIMIT expr
2d970 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
2d980 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76   to a negative v
2d990 61 6c 75 65 2c 0a 74 68 65 6e 20 74 68 65 72 65  alue,.then there
2d9a0 20 69 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75   is no upper bou
2d9b0 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72  nd on the number
2d9c0 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65   of rows returne
2d9d0 64 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  d. ^Otherwise, t
2d9e0 68 65 0a 53 45 4c 45 43 54 20 72 65 74 75 72 6e  he.SELECT return
2d9f0 73 20 74 68 65 20 66 69 72 73 74 20 4e 20 72 6f  s the first N ro
2da00 77 73 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74  ws of its result
2da10 20 73 65 74 20 6f 6e 6c 79 2c 20 77 68 65 72 65   set only, where
2da20 20 4e 20 69 73 20 74 68 65 20 76 61 6c 75 65 0a   N is the value.
2da30 74 68 61 74 20 74 68 65 20 4c 49 4d 49 54 20 65  that the LIMIT e
2da40 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
2da50 74 65 73 20 74 6f 2e 20 5e 4f 72 2c 20 69 66 20  tes to. ^Or, if 
2da60 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
2da70 6d 65 6e 74 20 77 6f 75 6c 64 0a 72 65 74 75 72  ment would.retur
2da80 6e 20 6c 65 73 73 20 74 68 61 6e 20 4e 20 72 6f  n less than N ro
2da90 77 73 20 77 69 74 68 6f 75 74 20 61 20 4c 49 4d  ws without a LIM
2daa0 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  IT clause, then 
2dab0 74 68 65 20 65 6e 74 69 72 65 20 72 65 73 75 6c  the entire resul
2dac0 74 20 73 65 74 20 69 73 0a 72 65 74 75 72 6e 65  t set is.returne
2dad0 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 65 78 70  d. ..<p>^The exp
2dae0 72 65 73 73 69 6f 6e 20 61 74 74 61 63 68 65 64  ression attached
2daf0 20 74 6f 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c   to the optional
2db00 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 74   OFFSET clause t
2db10 68 61 74 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 61  hat may follow a
2db20 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 75  .LIMIT clause mu
2db30 73 74 20 61 6c 73 6f 20 65 76 61 6c 75 61 74 65  st also evaluate
2db40 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   to an integer, 
2db50 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  or a value that 
2db60 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c  can be.losslessl
2db70 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
2db80 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 61  n integer. ^If a
2db90 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73  n expression has
2dba0 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73   an OFFSET claus
2dbb0 65 2c 0a 74 68 65 6e 20 74 68 65 20 66 69 72 73  e,.then the firs
2dbc0 74 20 4d 20 72 6f 77 73 20 61 72 65 20 6f 6d 69  t M rows are omi
2dbd0 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  tted from the re
2dbe0 73 75 6c 74 20 73 65 74 20 72 65 74 75 72 6e 65  sult set returne
2dbf0 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 0a  d by the SELECT.
2dc00 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68  statement and th
2dc10 65 20 6e 65 78 74 20 4e 20 72 6f 77 73 20 61 72  e next N rows ar
2dc20 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68 65 72  e returned, wher
2dc30 65 20 4d 20 61 6e 64 20 4e 20 61 72 65 20 74 68  e M and N are th
2dc40 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a 74 68  e values that.th
2dc50 65 20 4f 46 46 53 45 54 20 61 6e 64 20 4c 49 4d  e OFFSET and LIM
2dc60 49 54 20 63 6c 61 75 73 65 73 20 65 76 61 6c 75  IT clauses evalu
2dc70 61 74 65 20 74 6f 2c 20 72 65 73 70 65 63 74 69  ate to, respecti
2dc80 76 65 6c 79 2e 20 5e 4f 72 2c 20 69 66 20 74 68  vely. ^Or, if th
2dc90 65 20 53 45 4c 45 43 54 0a 77 6f 75 6c 64 20 72  e SELECT.would r
2dca0 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20  eturn less than 
2dcb0 4d 2b 4e 20 72 6f 77 73 20 69 66 20 69 74 20 64  M+N rows if it d
2dcc0 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20 4c 49  id not have a LI
2dcd0 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  MIT clause, then
2dce0 20 74 68 65 0a 66 69 72 73 74 20 4d 20 72 6f 77   the.first M row
2dcf0 73 20 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e  s are skipped an
2dd00 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  d the remaining 
2dd10 72 6f 77 73 20 28 69 66 20 61 6e 79 29 20 61 72  rows (if any) ar
2dd20 65 20 72 65 74 75 72 6e 65 64 2e 20 5e 49 66 20  e returned. ^If 
2dd30 74 68 65 0a 4f 46 46 53 45 54 20 63 6c 61 75 73  the.OFFSET claus
2dd40 65 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  e evaluates to a
2dd50 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c   negative value,
2dd60 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 72 65   the results are
2dd70 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 66 20   the same as if 
2dd80 69 74 0a 68 61 64 20 65 76 61 6c 75 61 74 65 64  it.had evaluated
2dd90 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 49   to zero...<p>^I
2dda0 6e 73 74 65 61 64 20 6f 66 20 61 20 73 65 70 61  nstead of a sepa
2ddb0 72 61 74 65 20 4f 46 46 53 45 54 20 63 6c 61 75  rate OFFSET clau
2ddc0 73 65 2c 20 74 68 65 20 4c 49 4d 49 54 20 63 6c  se, the LIMIT cl
2ddd0 61 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79  ause may specify
2dde0 20 74 77 6f 0a 73 63 61 6c 61 72 20 65 78 70 72   two.scalar expr
2ddf0 65 73 73 69 6f 6e 73 20 73 65 70 61 72 61 74 65  essions separate
2de00 64 20 62 79 20 61 20 63 6f 6d 6d 61 2e 20 5e 49  d by a comma. ^I
2de10 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
2de20 20 66 69 72 73 74 20 65 78 70 72 65 73 73 69 6f   first expressio
2de30 6e 0a 69 73 20 75 73 65 64 20 61 73 20 74 68 65  n.is used as the
2de40 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69   OFFSET expressi
2de50 6f 6e 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e  on and the secon
2de60 64 20 61 73 20 74 68 65 20 4c 49 4d 49 54 20 65  d as the LIMIT e
2de70 78 70 72 65 73 73 69 6f 6e 2e 0a 54 68 69 73 20  xpression..This 
2de80 69 73 20 63 6f 75 6e 74 65 72 2d 69 6e 74 75 69  is counter-intui
2de90 74 69 76 65 2c 20 61 73 20 77 68 65 6e 20 75 73  tive, as when us
2dea0 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63  ing the OFFSET c
2deb0 6c 61 75 73 65 20 74 68 65 20 73 65 63 6f 6e 64  lause the second
2dec0 20 6f 66 0a 74 68 65 20 74 77 6f 20 65 78 70 72   of.the two expr
2ded0 65 73 73 69 6f 6e 73 20 69 73 20 74 68 65 20 4f  essions is the O
2dee0 46 46 53 45 54 20 61 6e 64 20 74 68 65 20 66 69  FFSET and the fi
2def0 72 73 74 20 74 68 65 20 4c 49 4d 49 54 2e 20 0a  rst the LIMIT. .
2df00 54 68 69 73 20 72 65 76 65 72 73 61 6c 20 6f 66  This reversal of
2df10 20 74 68 65 20 6f 66 66 73 65 74 20 61 6e 64 20   the offset and 
2df20 6c 69 6d 69 74 20 69 73 20 69 6e 74 65 6e 74 69  limit is intenti
2df30 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61 78 69 6d 69  onal.- it maximi
2df40 7a 65 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  zes compatibilit
2df50 79 20 77 69 74 68 20 6f 74 68 65 72 20 53 51 4c  y with other SQL
2df60 20 64 61 74 61 62 61 73 65 20 73 79 73 74 65 6d   database system
2df70 73 2e 0a 48 6f 77 65 76 65 72 2c 20 74 6f 20 61  s..However, to a
2df80 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20  void confusion, 
2df90 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20  programmers are 
2dfa0 73 74 72 6f 6e 67 6c 79 20 65 6e 63 6f 75 72 61  strongly encoura
2dfb0 67 65 64 20 74 6f 20 75 73 65 0a 74 68 65 20 66  ged to use.the f
2dfc0 6f 72 6d 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  orm of the LIMIT
2dfd0 20 63 6c 61 75 73 65 20 74 68 61 74 20 75 73 65   clause that use
2dfe0 73 20 74 68 65 20 22 4f 46 46 53 45 54 22 20 6b  s the "OFFSET" k
2dff0 65 79 77 6f 72 64 20 61 6e 64 20 61 76 6f 69 64  eyword and avoid
2e000 0a 75 73 69 6e 67 20 61 20 4c 49 4d 49 54 20 63  .using a LIMIT c
2e010 6c 61 75 73 65 20 77 69 74 68 20 61 20 63 6f 6d  lause with a com
2e020 6d 61 2d 73 65 70 61 72 61 74 65 64 20 6f 66 66  ma-separated off
2e030 73 65 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  set...<tcl>hd_fr
2e040 61 67 6d 65 6e 74 20 76 61 6c 75 65 73 20 7b 56  agment values {V
2e050 41 4c 55 45 53 20 63 6c 61 75 73 65 7d 20 56 41  ALUES clause} VA
2e060 4c 55 45 53 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  LUES</tcl>.<h3>T
2e070 68 65 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  he VALUES clause
2e080 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 70 68  </h3>..<p>The ph
2e090 72 61 73 65 20 22 56 41 4c 55 45 53 28 3c 69 3e  rase "VALUES(<i>
2e0a0 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 29 22 20  expr-list</i>)" 
2e0b0 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 74  means the same t
2e0c0 68 69 6e 67 0a 61 73 20 22 53 45 4c 45 43 54 20  hing.as "SELECT 
2e0d0 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e  <i>expr-list</i>
2e0e0 22 2e 20 20 54 68 65 20 70 68 72 61 73 65 0a 22  ".  The phrase."
2e0f0 56 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c  VALUES(<i>expr-l
2e100 69 73 74 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28  ist-1</i>),...,(
2e110 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f  <i>expr-list-N</
2e120 69 3e 29 22 20 6d 65 61 6e 73 20 74 68 65 20 73  i>)" means the s
2e130 61 6d 65 0a 74 68 69 6e 67 20 61 73 20 22 53 45  ame.thing as "SE
2e140 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73  LECT <i>expr-lis
2e150 74 2d 31 3c 2f 69 3e 20 55 4e 49 4f 4e 20 41 4c  t-1</i> UNION AL
2e160 4c 20 2e 2e 2e 20 55 4e 49 4f 4e 20 41 4c 4c 0a  L ... UNION ALL.
2e170 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c  SELECT <i>expr-l
2e180 69 73 74 2d 4e 3c 2f 69 3e 22 2e 20 20 54 68 65  ist-N</i>".  The
2e190 72 65 20 69 73 20 6e 6f 20 61 64 76 61 6e 74 61  re is no advanta
2e1a0 67 65 20 74 6f 20 75 73 69 6e 67 20 6f 6e 65 20  ge to using one 
2e1b0 66 6f 72 6d 0a 6f 76 65 72 20 74 68 65 20 6f 74  form.over the ot
2e1c0 68 65 72 2e 20 20 42 6f 74 68 20 66 6f 72 6d 73  her.  Both forms
2e1d0 20 79 69 65 6c 64 20 74 68 65 20 73 61 6d 65 20   yield the same 
2e1e0 72 65 73 75 6c 74 20 61 6e 64 20 62 6f 74 68 20  result and both 
2e1f0 66 6f 72 6d 73 20 75 73 65 0a 74 68 65 20 73 61  forms use.the sa
2e200 6d 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d  me amount of mem
2e210 6f 72 79 20 61 6e 64 20 70 72 6f 63 65 73 73 69  ory and processi
2e220 6e 67 20 74 69 6d 65 2e 0a 0a 3c 70 3e 54 68 65  ng time...<p>The
2e230 72 65 20 61 72 65 20 73 6f 6d 65 20 72 65 73 74  re are some rest
2e240 72 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  rictions on the 
2e250 75 73 65 20 6f 66 20 61 20 56 41 4c 55 45 53 20  use of a VALUES 
2e260 63 6c 61 75 73 65 20 74 68 61 74 20 61 72 65 0a  clause that are.
2e270 6e 6f 74 20 73 68 6f 77 6e 20 6f 6e 20 74 68 65  not shown on the
2e280 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73   syntax diagrams
2e290 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a  :..<ul>.<li><p>.
2e2a0 41 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  A VALUES clause 
2e2b0 63 61 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c 6f 77  cannot be follow
2e2c0 65 64 20 62 79 20 5b 4f 52 44 45 52 20 42 59 5d  ed by [ORDER BY]
2e2d0 20 6f 72 20 5b 4c 49 4d 49 54 5d 2e 0a 0a 3c 6c   or [LIMIT]...<l
2e2e0 69 3e 3c 70 3e 0a 41 20 56 41 4c 55 45 53 20 63  i><p>.A VALUES c
2e2f0 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20  lause cannot be 
2e300 75 73 65 64 20 74 6f 67 65 74 68 65 72 20 77 69  used together wi
2e310 74 68 20 61 20 5b 57 49 54 48 5d 20 63 6c 61 75  th a [WITH] clau
2e320 73 65 20 69 6e 20 61 0a 5b 73 69 6d 70 6c 65 20  se in a.[simple 
2e330 53 45 4c 45 43 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a  SELECT]..</ul>..
2e340 0a 3c 68 33 3e 54 68 65 20 57 49 54 48 20 43 6c  .<h3>The WITH Cl
2e350 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 53 45  ause</h3>..<p>SE
2e360 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
2e370 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c  may be optionall
2e380 79 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20  y preceded by a 
2e390 73 69 6e 67 6c 65 0a 5b 57 49 54 48 20 63 6c 61  single.[WITH cla
2e3a0 75 73 65 5d 20 74 68 61 74 20 64 65 66 69 6e 65  use] that define
2e3b0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63  s one or more [c
2e3c0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
2e3d0 65 73 73 69 6f 6e 73 5d 0a 66 6f 72 20 75 73 65  essions].for use
2e3e0 20 77 69 74 68 69 6e 20 74 68 65 20 53 45 4c 45   within the SELE
2e3f0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a  CT statement....
2e400 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
2e410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e450 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 55 50 44  ####.Section UPD
2e460 41 54 45 20 75 70 64 61 74 65 20 7b 55 50 44 41  ATE update {UPDA
2e470 54 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a 52 65  TE *UPDATEs}..Re
2e480 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
2e490 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74  gram update-stmt
2e4a0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20  .</tcl>..<p>^An 
2e4b0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
2e4c0 20 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64 69   is used to modi
2e4d0 66 79 20 61 20 73 75 62 73 65 74 20 6f 66 20 74  fy a subset of t
2e4e0 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64  he values stored
2e4f0 20 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72   in .zero or mor
2e500 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 64 61  e rows of the da
2e510 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 64 65  tabase table ide
2e520 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 20 0a  ntified by the .
2e530 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61 62  <i>qualified-tab
2e540 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63  le-name</i> spec
2e550 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
2e560 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
2e570 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74  ement...<p>^If t
2e580 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
2e590 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76  ent does not hav
2e5a0 65 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  e a WHERE clause
2e5b0 2c 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68  , all rows in th
2e5c0 65 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f 64 69  e.table are modi
2e5d0 66 69 65 64 20 62 79 20 74 68 65 20 55 50 44 41  fied by the UPDA
2e5e0 54 45 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  TE. ^Otherwise, 
2e5f0 74 68 65 20 55 50 44 41 54 45 20 61 66 66 65 63  the UPDATE affec
2e600 74 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a 72 6f  ts only those.ro
2e610 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
2e620 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75   result of evalu
2e630 61 74 69 6e 67 20 74 68 65 20 57 48 45 52 45 20  ating the WHERE 
2e640 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
2e650 6e 20 61 73 20 61 20 0a 5b 62 6f 6f 6c 65 61 6e  n as a .[boolean
2e660 20 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c   expression|bool
2e670 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ean expression i
2e680 73 20 74 72 75 65 5d 2e 20 5e 49 74 20 69 73 20  s true]. ^It is 
2e690 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 69 66 20  not an error if 
2e6a0 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65  the.WHERE clause
2e6b0 20 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75 61   does not evalua
2e6c0 74 65 20 74 6f 20 74 72 75 65 20 66 6f 72 20 61  te to true for a
2e6d0 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61  ny row in the ta
2e6e0 62 6c 65 20 2d 20 74 68 69 73 20 6a 75 73 74 0a  ble - this just.
2e6f0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 55  means that the U
2e700 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
2e710 61 66 66 65 63 74 73 20 7a 65 72 6f 20 72 6f 77  affects zero row
2e720 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66  s...<p>The modif
2e730 69 63 61 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f  ications made to
2e740 20 65 61 63 68 20 72 6f 77 20 61 66 66 65 63 74   each row affect
2e750 65 64 20 62 79 20 61 6e 20 55 50 44 41 54 45 20  ed by an UPDATE 
2e760 73 74 61 74 65 6d 65 6e 74 20 61 72 65 0a 64 65  statement are.de
2e770 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
2e780 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65  list of assignme
2e790 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  nts following th
2e7a0 65 20 53 45 54 20 6b 65 79 77 6f 72 64 2e 20 45  e SET keyword. E
2e7b0 61 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73  ach.assignment s
2e7c0 70 65 63 69 66 69 65 73 20 61 20 63 6f 6c 75 6d  pecifies a colum
2e7d0 6e 20 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c 65  n name to the le
2e7e0 66 74 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73  ft of the equals
2e7f0 20 73 69 67 6e 20 61 6e 64 20 61 0a 73 63 61 6c   sign and a.scal
2e800 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f  ar expression to
2e810 20 74 68 65 20 72 69 67 68 74 2e 20 5e 46 6f 72   the right. ^For
2e820 20 65 61 63 68 20 61 66 66 65 63 74 65 64 20 72   each affected r
2e830 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63 6f  ow, the named co
2e840 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74 6f  lumns.are set to
2e850 20 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75 6e   the values foun
2e860 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  d by evaluating 
2e870 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
2e880 67 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65 73  g scalar .expres
2e890 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69 6e  sions. ^If a sin
2e8a0 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20  gle column-name 
2e8b0 61 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68 61  appears more tha
2e8c0 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c 69  n once in the li
2e8d0 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e 74  st of.assignment
2e8e0 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61 6c   expressions, al
2e8f0 6c 20 62 75 74 20 74 68 65 20 72 69 67 68 74 6d  l but the rightm
2e900 6f 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 69  ost occurrence i
2e910 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75  s ignored. ^Colu
2e920 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74 20  mns.that do not 
2e930 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c 69  appear in the li
2e940 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74  st of assignment
2e950 73 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f 64  s are left unmod
2e960 69 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61 6c  ified. ^The scal
2e970 61 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 6d  ar.expressions m
2e980 61 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75  ay refer to colu
2e990 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20 62  mns of the row b
2e9a0 65 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e 49  eing updated. ^I
2e9b0 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c 0a  n this case all.
2e9c0 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
2e9d0 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  ns are evaluated
2e9e0 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69   before any assi
2e9f0 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65  gnments are made
2ea00 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f  ...<p>^The optio
2ea10 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  nal conflict-cla
2ea20 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 75  use allows the u
2ea30 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20  ser to nominate 
2ea40 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e 73 74  a specific.const
2ea50 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
2ea60 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
2ea70 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e  thm to use durin
2ea80 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44 41 54  g this one UPDAT
2ea90 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72  E command..Refer
2eaa0 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f 6e 20   to the section 
2eab0 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e  entitled [ON CON
2eac0 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
2ead0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
2eae0 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  n...<h3>Restrict
2eaf0 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 53  ions on UPDATE S
2eb00 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
2eb10 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
2eb20 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h3>..<p>The fol
2eb30 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61  lowing additiona
2eb40 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63  l syntax restric
2eb50 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 55  tions apply to U
2eb60 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73  PDATE statements
2eb70 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68   that.occur with
2eb80 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61  in the body of a
2eb90 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
2eba0 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a  ] statement.  ..
2ebb0 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54  <ul>.  <li><p>^T
2ebc0 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65  he <i>table-name
2ebd0 3c 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61  </i> specified a
2ebe0 73 20 70 61 72 74 20 6f 66 20 61 6e 20 55 50 44  s part of an UPD
2ebf0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 77 69  ATE statement wi
2ec00 74 68 69 6e 0a 20 20 20 20 20 20 61 20 74 72 69  thin.      a tri
2ec10 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20 62  gger body must b
2ec20 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e  e unqualified. ^
2ec30 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  (In other words,
2ec40 20 74 68 65 0a 20 20 20 20 20 20 3c 69 3e 64 61   the.      <i>da
2ec50 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c  tabase-name</i><
2ec60 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f  b>.</b> prefix o
2ec70 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
2ec80 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 69   of the UPDATE i
2ec90 73 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c 6f  s.      not allo
2eca0 77 65 64 20 77 69 74 68 69 6e 20 74 72 69 67 67  wed within trigg
2ecb0 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20 74  ers.)^ ^Unless t
2ecc0 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63  he table to whic
2ecd0 68 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20  h the trigger.  
2ece0 20 20 20 20 69 73 20 61 74 74 61 63 68 65 64 20      is attached 
2ecf0 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64  is in the TEMP d
2ed00 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 61 62  atabase, the tab
2ed10 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  le being updated
2ed20 20 62 79 20 74 68 65 0a 20 20 20 20 20 20 74 72   by the.      tr
2ed30 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 6d 75  igger program mu
2ed40 73 74 20 72 65 73 69 64 65 20 69 6e 20 74 68 65  st reside in the
2ed50 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
2ed60 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61  s it. ^If the ta
2ed70 62 6c 65 0a 20 20 20 20 20 20 74 6f 20 77 68 69  ble.      to whi
2ed80 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
2ed90 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e  s attached is in
2eda0 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
2edb0 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20  se, then the.   
2edc0 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e     unqualified n
2edd0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
2ede0 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20 69   being updated i
2edf0 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68  s resolved in th
2ee00 65 20 73 61 6d 65 20 77 61 79 0a 20 20 20 20 20  e same way.     
2ee10 20 61 73 20 69 74 20 69 73 20 66 6f 72 20 61 20   as it is for a 
2ee20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d  top-level statem
2ee30 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69 6e  ent (by searchin
2ee40 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d 50  g first the TEMP
2ee50 20 64 61 74 61 62 61 73 65 2c 0a 20 20 20 20 20   database,.     
2ee60 20 74 68 65 6e 20 74 68 65 20 6d 61 69 6e 20 64   then the main d
2ee70 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e  atabase, then an
2ee80 79 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  y other database
2ee90 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74  s in the order t
2eea0 68 65 79 20 77 65 72 65 0a 20 20 20 20 20 20 61  hey were.      a
2eeb0 74 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c 69  ttached)...  <li
2eec0 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44  ><p>^The INDEXED
2eed0 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45   BY and NOT INDE
2eee0 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20  XED clauses are 
2eef0 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55  not allowed on U
2ef00 50 44 41 54 45 0a 20 20 20 20 20 20 73 74 61 74  PDATE.      stat
2ef10 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
2ef20 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c  iggers.</p>..  <
2ef30 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54  li><p>^The LIMIT
2ef40 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c   and ORDER BY cl
2ef50 61 75 73 65 73 20 66 6f 72 20 55 50 44 41 54 45  auses for UPDATE
2ef60 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64   are unsupported
2ef70 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 74 72   within.      tr
2ef80 69 67 67 65 72 73 2c 20 72 65 67 61 72 64 6c 65  iggers, regardle
2ef90 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c  ss of the compil
2efa0 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75 73  ation options us
2efb0 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69  ed to build SQLi
2efc0 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f  te..</ul>..<h3>O
2efd0 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e  ptional LIMIT an
2efe0 64 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75 73  d ORDER BY Claus
2eff0 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66  es</h3>..<p>^(If
2f000 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74   SQLite is built
2f010 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54   with the [SQLIT
2f020 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
2f030 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f  DELETE_LIMIT].co
2f040 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2f050 6e 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61  n then the synta
2f060 78 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  x of the UPDATE 
2f070 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 74  statement is ext
2f080 65 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69 6f  ended.with optio
2f090 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64  nal ORDER BY and
2f0a0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29 5e   LIMIT clauses)^
2f0b0 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
2f0c0 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
2f0d0 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74  gram update-stmt
2f0e0 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a  -limited</tcl>..
2f0f0 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45  <p>^If an UPDATE
2f100 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61   statement has a
2f110 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
2f120 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
2f130 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77  r of rows that.w
2f140 69 6c 6c 20 62 65 20 75 70 64 61 74 65 64 20 69  ill be updated i
2f150 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75  s found by evalu
2f160 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70  ating the accomp
2f170 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f  anying expressio
2f180 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74  n and casting.it
2f190 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76   to an integer v
2f1a0 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74 69 76  alue. ^A negativ
2f1b0 65 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72  e value is inter
2f1c0 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69  preted as "no li
2f1d0 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  mit"...<p>^If th
2f1e0 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
2f1f0 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
2f200 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c  non-negative val
2f210 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20  ue <i>N</i> and 
2f220 74 68 65 0a 55 50 44 41 54 45 20 73 74 61 74 65  the.UPDATE state
2f230 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45  ment has an ORDE
2f240 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
2f250 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 20  n all rows that 
2f260 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64  would be updated
2f270 20 69 6e 0a 74 68 65 20 61 62 73 65 6e 63 65 20   in.the absence 
2f280 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  of the LIMIT cla
2f290 75 73 65 20 61 72 65 20 73 6f 72 74 65 64 20 61  use are sorted a
2f2a0 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
2f2b0 4f 52 44 45 52 20 42 59 20 61 6e 64 20 74 68 65  ORDER BY and the
2f2c0 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20  .first <i>N</i> 
2f2d0 75 70 64 61 74 65 64 2e 20 5e 28 49 66 20 74 68  updated. ^(If th
2f2e0 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
2f2f0 6e 74 20 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f  nt also has an O
2f300 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68  FFSET clause,.th
2f310 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72  en it is similar
2f320 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  ly evaluated and
2f330 20 63 61 73 74 20 74 6f 20 61 6e 20 69 6e 74 65   cast to an inte
2f340 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74 68  ger value. If th
2f350 65 20 4f 46 46 53 45 54 0a 65 78 70 72 65 73 73  e OFFSET.express
2f360 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
2f370 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20   a non-negative 
2f380 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20  value <i>M</i>, 
2f390 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 3c  then the first <
2f3a0 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72 65  i>M</i>.rows are
2f3b0 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65   skipped and the
2f3c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c   following <i>N<
2f3d0 2f 69 3e 20 72 6f 77 73 20 75 70 64 61 74 65 64  /i> rows updated
2f3e0 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e   instead.)^..<p>
2f3f0 5e 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73  ^If the UPDATE s
2f400 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20  tatement has no 
2f410 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
2f420 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74   then all rows t
2f430 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 75 70 64  hat.would be upd
2f440 61 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65  ated in the abse
2f450 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  nce of the LIMIT
2f460 20 63 6c 61 75 73 65 20 61 72 65 20 61 73 73 65   clause are asse
2f470 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69  mbled in an.arbi
2f480 74 72 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f  trary order befo
2f490 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20  re applying the 
2f4a0 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54  LIMIT and OFFSET
2f4b0 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65   clauses to dete
2f4c0 72 6d 69 6e 65 20 0a 77 68 69 63 68 20 61 72 65  rmine .which are
2f4d0 20 61 63 74 75 61 6c 6c 79 20 75 70 64 61 74 65   actually update
2f4e0 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44  d...<p>^(The ORD
2f4f0 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20  ER BY clause on 
2f500 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  an UPDATE statem
2f510 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  ent is used only
2f520 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
2f530 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69  ich.rows fall wi
2f540 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20  thin the LIMIT. 
2f550 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  The order in whi
2f560 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64 69  ch rows are modi
2f570 66 69 65 64 20 69 73 20 61 72 62 69 74 72 61 72  fied is arbitrar
2f580 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66  y.and is not inf
2f590 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f  luenced by the O
2f5a0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29  RDER BY clause.)
2f5b0 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ^..<tcl>.#######
2f5c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f5d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f5e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f5f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f600 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
2f610 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56 41  VACUUM vacuum VA
2f620 43 55 55 4d 0a 0a 52 65 63 75 72 73 69 76 65 42  CUUM..RecursiveB
2f630 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63  ubbleDiagram vac
2f640 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  uum-stmt.</tcl>.
2f650 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55 55  .<p>.  The VACUU
2f660 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69 6c  M command rebuil
2f670 64 73 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  ds the entire da
2f680 74 61 62 61 73 65 2e 20 54 68 65 72 65 20 61 72  tabase. There ar
2f690 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65 61  e several .  rea
2f6a0 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61 74  sons an applicat
2f6b0 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68 69  ion might do thi
2f6c0 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20  s:..<ul>.  <li> 
2f6d0 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c 69  <p> ^Unless SQLi
2f6e0 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69 6e  te is running in
2f6f0 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46 55   "auto_vacuum=FU
2f700 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20 61  LL" mode, when a
2f710 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f 75   large.     amou
2f720 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20 64 65  nt of data is de
2f730 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64  leted from the d
2f740 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74 20  atabase file it 
2f750 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65 6d  leaves behind em
2f760 70 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c 20  pty.     space, 
2f770 6f 72 20 22 66 72 65 65 22 20 64 61 74 61 62 61  or "free" databa
2f780 73 65 20 70 61 67 65 73 2e 20 54 68 69 73 20 6d  se pages. This m
2f790 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
2f7a0 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20 20  e file might.   
2f7b0 20 20 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e    be larger than
2f7c0 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73 73   strictly necess
2f7d0 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41  ary. ^Running VA
2f7e0 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64 20  CUUM to rebuild 
2f7f0 74 68 65 20 0a 20 20 20 20 20 64 61 74 61 62 61  the .     databa
2f800 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69 73  se reclaims this
2f810 20 73 70 61 63 65 20 61 6e 64 20 72 65 64 75 63   space and reduc
2f820 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  es the size of t
2f830 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2f840 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46  ...  <li> <p> ^F
2f850 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73 2c  requent inserts,
2f860 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64 65   updates, and de
2f870 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65 20  letes can cause 
2f880 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2f890 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d 65  e.     to become
2f8a0 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77 68   fragmented - wh
2f8b0 65 72 65 20 64 61 74 61 20 66 6f 72 20 61 20 73  ere data for a s
2f8c0 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20 69  ingle table or i
2f8d0 6e 64 65 78 20 69 73 20 73 63 61 74 74 65 72 65  ndex is scattere
2f8e0 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20 74  d .     around t
2f8f0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2f900 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55  . ^Running VACUU
2f910 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74 20 65  M ensures that e
2f920 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20 20  ach table and.  
2f930 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72 67     index is larg
2f940 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74 69  ely stored conti
2f950 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20 74  guously within t
2f960 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2f970 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20 20  . ^In some.     
2f980 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d 61  cases, VACUUM ma
2f990 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74 68  y also reduce th
2f9a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72 74  e number of part
2f9b0 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67  ially filled pag
2f9c0 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20 64  es in.     the d
2f9d0 61 74 61 62 61 73 65 2c 20 72 65 64 75 63 69 6e  atabase, reducin
2f9e0 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  g the size of th
2f9f0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
2fa00 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e  further...  <li>
2fa10 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20   <p> ^Normally, 
2fa20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70 61  the database [pa
2fa30 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68 65  ge_size] and whe
2fa40 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
2fa50 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73 75  database.     su
2fa60 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61 63  pports [auto_vac
2fa70 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f 6e  uum] must be con
2fa80 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20 74  figured before t
2fa90 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2faa0 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c 6c   is.     actuall
2fab0 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77 65  y created. ^Howe
2fac0 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69 6e  ver, when not in
2fad0 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f   [write-ahead lo
2fae0 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20 20  g] mode, the .  
2faf0 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61     [page_size] a
2fb00 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75  nd/or [auto_vacu
2fb10 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20 6f  um] properties o
2fb20 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61  f an existing da
2fb30 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20 20  tabase may be.  
2fb40 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75 73     changed by us
2fb50 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69  ing the [page_si
2fb60 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f 73  ze pragma|page_s
2fb70 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20 20  ize]  and/or .  
2fb80 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 7c     [auto_vacuum|
2fb90 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75  pragma auto_vacu
2fba0 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64 20  um] pragmas and 
2fbb0 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  then immediately
2fbc0 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20 20   VACUUMing.     
2fbd0 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e 57  the database. ^W
2fbe0 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61 68  hen in [write-ah
2fbf0 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f  ead log] mode, o
2fc00 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76 61  nly the [auto_va
2fc10 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70 6f  cuum].     suppo
2fc20 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e 20  rt property can 
2fc30 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67  be changed using
2fc40 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a   VACUUM..</ul>..
2fc50 3c 70 3e 5e 28 56 41 43 55 55 4d 20 6f 6e 6c 79  <p>^(VACUUM only
2fc60 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d 61   works on the ma
2fc70 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 74 20  in database. It 
2fc80 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
2fc90 74 6f 20 56 41 43 55 55 4d 20 61 6e 0a 61 74 74  to VACUUM an.att
2fca0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 66  ached database f
2fcb0 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20  ile.)^..<p>^The 
2fcc0 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77  VACUUM command w
2fcd0 6f 72 6b 73 20 62 79 20 63 6f 70 79 69 6e 67 20  orks by copying 
2fce0 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
2fcf0 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 74  the database int
2fd00 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 64 61  o.a temporary da
2fd10 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
2fd20 74 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e 67  then overwriting
2fd30 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
2fd40 74 68 20 74 68 65 20 0a 63 6f 6e 74 65 6e 74 73  th the .contents
2fd50 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
2fd60 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e 20 6f 76  y file. ^When ov
2fd70 65 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72  erwriting the or
2fd80 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62 61  iginal, a rollba
2fd90 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b 77  ck.journal or [w
2fda0 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20  rite-ahead log] 
2fdb0 57 41 4c 20 66 69 6c 65 20 69 73 20 75 73 65 64  WAL file is used
2fdc0 20 6a 75 73 74 20 61 73 20 69 74 20 77 6f 75 6c   just as it woul
2fdd0 64 20 62 65 20 66 6f 72 20 61 6e 79 0a 6f 74 68  d be for any.oth
2fde0 65 72 20 64 61 74 61 62 61 73 65 20 74 72 61 6e  er database tran
2fdf0 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69 73 20 6d  saction. ^This m
2fe00 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20 56  eans that when V
2fe10 41 43 55 55 4d 69 6e 67 20 61 20 64 61 74 61 62  ACUUMing a datab
2fe20 61 73 65 2c 20 0a 61 73 20 6d 75 63 68 20 61 73  ase, .as much as
2fe30 20 74 77 69 63 65 20 74 68 65 20 73 69 7a 65 20   twice the size 
2fe40 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  of the original 
2fe50 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
2fe60 20 72 65 71 75 69 72 65 64 20 69 6e 20 66 72 65   required in fre
2fe70 65 0a 64 69 73 6b 20 73 70 61 63 65 2e 0a 0a 3c  e.disk space...<
2fe80 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f  p>^The VACUUM co
2fe90 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e 67 65  mmand may change
2fea0 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20 52 4f   the [ROWID | RO
2feb0 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69 65 73  WIDs] of entries
2fec0 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73 20 74   in any.tables t
2fed0 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  hat do not have 
2fee0 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49 4e 54  an explicit [INT
2fef0 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
2ff00 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 56  ]..</p>..<p>^A V
2ff10 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69 6c 20  ACUUM will fail 
2ff20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 6f  if there is an o
2ff30 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
2ff40 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65   or if there are
2ff50 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20 61 63 74   one or.more act
2ff60 69 76 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ive SQL statemen
2ff70 74 73 20 77 68 65 6e 20 69 74 20 69 73 20 72 75  ts when it is ru
2ff80 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20 53  n...<p>^(As of S
2ff90 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
2ffa0 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  1, an alternativ
2ffb0 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56  e to using the V
2ffc0 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f  ACUUM command to
2ffd0 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65 20 61  .reclaim space a
2ffe0 66 74 65 72 20 64 61 74 61 20 68 61 73 20 62 65  fter data has be
2fff0 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20 61 75  en deleted is au
30000 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20  to-vacuum mode, 
30010 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a 74 68  enabled using.th
30020 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  e [auto_vacuum] 
30030 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e 20  pragma.)^ ^When 
30040 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73  [auto_vacuum] is
30050 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64   enabled for a d
30060 61 74 61 62 61 73 65 0a 66 72 65 65 20 70 61 67  atabase.free pag
30070 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c 61 69  es may be reclai
30080 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65 74 69  med after deleti
30090 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69 6e 67  ng data, causing
300a0 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73 68 72   the file to shr
300b0 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65 62  ink,.without reb
300c0 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e 74 69  uilding the enti
300d0 72 65 20 64 61 74 61 62 61 73 65 20 75 73 69 6e  re database usin
300e0 67 20 56 41 43 55 55 4d 2e 20 20 48 6f 77 65 76  g VACUUM.  Howev
300f0 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f 5f  er, using.[auto_
30100 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61 64  vacuum] can lead
30110 20 74 6f 20 65 78 74 72 61 20 64 61 74 61 62 61   to extra databa
30120 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e 74  se file fragment
30130 61 74 69 6f 6e 2e 20 20 41 6e 64 20 5b 61 75 74  ation.  And [aut
30140 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e  o_vacuum].does n
30150 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74 69  ot compact parti
30160 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65  ally filled page
30170 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
30180 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f 65 73  e as VACUUM does
30190 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a  ...</p>...<tcl>.
301a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
301b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
301c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
301d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
301e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
301f0 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20  ection {INDEXED 
30200 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b 7b  BY} indexedby {{
30210 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54  INDEXED BY} {NOT
30220 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63   INDEXED}}..</tc
30230 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  l>.<p>^The INDEX
30240 45 44 20 42 59 20 70 68 72 61 73 65 20 66 6f 72  ED BY phrase for
30250 63 65 73 20 74 68 65 20 5b 53 51 4c 69 74 65 20  ces the [SQLite 
30260 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74  query planner] t
30270 6f 20 75 73 65 20 61 0a 70 61 72 74 69 63 75 6c  o use a.particul
30280 61 72 20 6e 61 6d 65 64 20 69 6e 64 65 78 20 6f  ar named index o
30290 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 53  n a [DELETE], [S
302a0 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41  ELECT], or [UPDA
302b0 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54  TE] statement..T
302c0 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
302d0 72 61 73 65 20 69 73 20 61 6e 20 65 78 74 65 6e  rase is an exten
302e0 73 69 6f 6e 20 74 68 61 74 20 69 73 20 70 61 72  sion that is par
302f0 74 69 63 75 6c 61 72 20 74 6f 20 53 51 4c 69 74  ticular to SQLit
30300 65 20 61 6e 64 0a 69 73 20 6e 6f 74 20 70 6f 72  e and.is not por
30310 74 61 62 6c 65 20 74 6f 20 6f 74 68 65 72 20 53  table to other S
30320 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
30330 6e 65 73 2e 0a 54 68 65 20 49 4e 44 45 58 45 44  nes..The INDEXED
30340 20 42 59 20 70 68 72 61 73 65 20 63 61 6e 20 62   BY phrase can b
30350 65 20 73 65 65 6e 20 69 6e 20 74 68 65 20 66 6f  e seen in the fo
30360 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 0a 64  llowing syntax.d
30370 69 61 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74  iagrams:</p>..<t
30380 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62  cl>.RecursiveBub
30390 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69  bleDiagram quali
303a0 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a  fied-table-name.
303b0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
303c0 22 49 4e 44 45 58 45 44 20 42 59 20 69 6e 64 65  "INDEXED BY inde
303d0 78 2d 6e 61 6d 65 22 20 70 68 72 61 73 65 20 73  x-name" phrase s
303e0 70 65 63 69 66 69 65 73 20 74 68 61 74 20 74 68  pecifies that th
303f0 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75  e named index.mu
30400 73 74 20 62 65 20 75 73 65 64 20 69 6e 20 6f 72  st be used in or
30410 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76  der to look up v
30420 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70 72 65  alues on the pre
30430 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49  ceding table..^I
30440 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f 65  f index-name doe
30450 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72 20 63  s not exist or c
30460 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 66 6f  annot be used fo
30470 72 20 74 68 65 20 71 75 65 72 79 2c 20 74 68 65  r the query, the
30480 6e 0a 74 68 65 20 70 72 65 70 61 72 61 74 69 6f  n.the preparatio
30490 6e 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61  n of the SQL sta
304a0 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e 28  tement fails..^(
304b0 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58 45 44  The "NOT INDEXED
304c0 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  " clause specifi
304d0 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64 65 78  es that no index
304e0 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64 20 77   shall be used w
304f0 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20 74 68  hen.accessing th
30500 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c  e preceding tabl
30510 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70  e, including imp
30520 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63 72 65  lied indices cre
30530 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20 61 6e  ate by.UNIQUE an
30540 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  d PRIMARY KEY co
30550 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f 77 65  nstraints.  Howe
30560 76 65 72 2c 20 74 68 65 20 49 4e 54 45 47 45 52  ver, the INTEGER
30570 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 63 61 6e   PRIMARY KEY.can
30580 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74   still be used t
30590 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65  o look up entrie
305a0 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54  s even when "NOT
305b0 20 49 4e 44 45 58 45 44 22 20 69 73 20 73 70 65   INDEXED" is spe
305c0 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c  cified.)^</p>..<
305d0 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62  p>Some SQL datab
305e0 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76  ase engines prov
305f0 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  ide non-standard
30600 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73   "hint" mechanis
30610 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20  ms which.can be 
30620 75 73 65 64 20 74 6f 20 67 69 76 65 20 74 68 65  used to give the
30630 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
30640 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61   clues about wha
30650 74 20 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f  t indices it sho
30660 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61  uld.use for a pa
30670 72 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65  rticular stateme
30680 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42  nt.  The INDEX B
30690 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69  Y clause of SQLi
306a0 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f  te is .<em>not</
306b0 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65  em> a hinting me
306c0 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73  chanism and it s
306d0 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65  hould not be use
306e0 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20  d as such..^The 
306f0 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
30700 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20  e does not give 
30710 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69  the optimizer hi
30720 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63 68 20  nts about which 
30730 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74  index.to use; it
30740 20 67 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d   gives the optim
30750 69 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d 65  izer a requireme
30760 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65  nt of which inde
30770 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68  x to use..^If th
30780 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
30790 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75  r is unable to u
307a0 73 65 20 74 68 65 20 69 6e 64 65 78 20 73 70 65  se the index spe
307b0 63 69 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e  cified by the.IN
307c0 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DEX BY clause, t
307d0 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 77 69  hen the query wi
307e0 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
307f0 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  error.</p>..<p>T
30800 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
30810 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c  ause is <em>not<
30820 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f  /em> intended fo
30830 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a  r use in tuning.
30840 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  the performance 
30850 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68 65  of a query.  The
30860 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49   intent of the I
30870 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
30880 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72   is.to raise a r
30890 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66  un-time error if
308a0 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65   a schema change
308b0 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70 70 69  , such as droppi
308c0 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61  ng or.creating a
308d0 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20  n index, causes 
308e0 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66  the query plan f
308f0 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74  or a time-sensit
30900 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61  ive query.to cha
30910 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45  nge.  The INDEXE
30920 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 64  D BY clause is d
30930 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20  esigned to help 
30940 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62  detect.undesirab
30950 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68  le query plan ch
30960 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65 67  anges during reg
30970 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e  ression testing.
30980 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20  .Developers are 
30990 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d  admonished to om
309a0 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e  it all use of IN
309b0 44 45 58 45 44 20 42 59 20 64 75 72 69 6e 67 0a  DEXED BY during.
309c0 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 69  application desi
309d0 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  gn, implementati
309e0 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e 64  on, testing, and
309f0 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44   tuning.  If.IND
30a00 45 58 45 44 20 42 59 20 69 73 20 74 6f 20 62 65  EXED BY is to be
30a10 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69 74   used at all, it
30a20 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65 72   should be inser
30a30 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 0a  ted at the very.
30a40 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65 6c  end of the devel
30a50 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20 77  opment process w
30a60 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77  hen "locking dow
30a70 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e  n" a design.</p>
30a80 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c  ..<h3>See Also:<
30a90 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  /h3>..<ol>.<li><
30aa0 70 3e 54 68 65 20 5b 71 75 65 72 79 20 70 6c 61  p>The [query pla
30ab0 6e 6e 65 72 20 63 68 65 63 6b 6c 69 73 74 5d 20  nner checklist] 
30ac0 64 65 73 63 72 69 62 65 73 20 73 74 65 70 73 20  describes steps 
30ad0 74 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  that application
30ae0 0a 64 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75  .developers shou
30af0 6c 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20  ld following to 
30b00 68 65 6c 70 20 72 65 73 6f 6c 76 65 20 71 75 65  help resolve que
30b10 72 79 20 70 6c 61 6e 6e 65 72 20 70 72 6f 62 6c  ry planner probl
30b20 65 6d 73 2e 0a 4e 6f 74 69 63 65 20 74 68 65 20  ems..Notice the 
30b30 74 68 61 74 20 74 68 65 20 75 73 65 20 6f 66 20  that the use of 
30b40 49 4e 44 45 58 45 44 20 42 59 20 69 73 20 61 20  INDEXED BY is a 
30b50 6c 61 73 74 20 72 65 73 6f 72 74 2c 20 74 6f 20  last resort, to 
30b60 62 65 20 75 73 65 64 20 6f 6e 6c 79 0a 77 68 65  be used only.whe
30b70 6e 20 61 6c 6c 20 6f 74 68 65 72 20 6d 65 61 73  n all other meas
30b80 75 72 65 73 20 66 61 69 6c 2e 3c 2f 70 3e 0a 0a  ures fail.</p>..
30b90 3c 6c 69 3e 3c 70 3e 5b 75 70 6c 75 73 63 6f 6e  <li><p>[upluscon
30ba0 74 72 6f 6c 7c 54 68 65 20 75 6e 61 72 79 20 22  trol|The unary "
30bb0 2b 22 20 6f 70 65 72 61 74 6f 72 5d 0a 63 61 6e  +" operator].can
30bc0 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 71   be used to disq
30bd0 75 61 6c 69 66 79 20 74 65 72 6d 73 20 69 6e 20  ualify terms in 
30be0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
30bf0 20 66 72 6f 6d 20 75 73 65 20 62 79 20 69 6e 64   from use by ind
30c00 69 63 65 73 2e 0a 43 61 72 65 66 75 6c 20 75 73  ices..Careful us
30c10 65 20 6f 66 20 75 6e 61 72 79 20 2b 20 63 61 6e  e of unary + can
30c20 20 73 6f 6d 65 74 69 6d 65 73 20 68 65 6c 70 20   sometimes help 
30c30 70 72 65 76 65 6e 74 20 74 68 65 20 71 75 65 72  prevent the quer
30c40 79 20 70 6c 61 6e 6e 65 72 20 66 72 6f 6d 0a 63  y planner from.c
30c50 68 6f 6f 73 69 6e 67 20 61 20 70 6f 6f 72 20 69  hoosing a poor i
30c60 6e 64 65 78 20 77 69 74 68 6f 75 74 20 72 65 73  ndex without res
30c70 74 72 69 63 74 69 6e 67 20 69 74 20 74 6f 20 75  tricting it to u
30c80 73 69 6e 67 20 6f 6e 65 20 73 70 65 63 69 66 69  sing one specifi
30c90 63 20 69 6e 64 65 78 2e 0a 43 61 72 65 66 75 6c  c index..Careful
30ca0 20 70 6c 61 63 65 6d 65 6e 74 20 6f 66 20 75 6e   placement of un
30cb0 61 72 79 20 2b 20 6f 70 65 72 61 74 6f 72 73 20  ary + operators 
30cc0 69 73 20 61 20 62 65 74 74 65 72 20 6d 65 74 68  is a better meth
30cd0 6f 64 20 66 6f 72 20 63 6f 6e 74 72 6f 6c 6c 69  od for controlli
30ce0 6e 67 20 0a 77 68 69 63 68 20 69 6e 64 69 63 65  ng .which indice
30cf0 73 20 61 72 65 20 75 73 65 64 20 62 79 20 61 20  s are used by a 
30d00 71 75 65 72 79 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e  query.</p>..<li>
30d10 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  <p>The [sqlite3_
30d20 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 43  stmt_status()] C
30d30 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 74  /C++ interface t
30d40 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 68 65  ogether with the
30d50 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  .[SQLITE_STMTSTA
30d60 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45  TUS_FULLSCAN_STE
30d70 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 53  P] and [SQLITE_S
30d80 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 20  TMTSTATUS_SORT] 
30d90 76 65 72 62 73 0a 63 61 6e 20 62 65 20 75 73 65  verbs.can be use
30da0 64 20 74 6f 20 64 65 74 65 63 74 20 61 74 20 72  d to detect at r
30db0 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e 20  un-time when an 
30dc0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 73  SQL statement is
30dd0 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66 65   not.making effe
30de0 63 74 69 76 65 20 75 73 65 20 6f 66 20 69 6e 64  ctive use of ind
30df0 69 63 65 73 2e 20 20 4d 61 6e 79 20 61 70 70 6c  ices.  Many appl
30e00 69 63 61 74 69 6f 6e 73 20 6d 61 79 20 70 72 65  ications may pre
30e10 66 65 72 20 74 6f 0a 75 73 65 20 74 68 65 20 5b  fer to.use the [
30e20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
30e30 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  tus()] interface
30e40 20 74 6f 20 64 65 74 65 63 74 20 69 6e 64 65 78   to detect index
30e50 20 6d 69 73 75 73 65 0a 72 61 74 68 65 72 20 74   misuse.rather t
30e60 68 61 6e 20 74 68 65 20 49 4e 44 45 58 45 44 20  han the INDEXED 
30e70 42 59 20 70 68 72 61 73 65 20 64 65 73 63 72 69  BY phrase descri
30e80 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 3c 2f  bed here.</p>.</
30e90 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ol>..<tcl>.#####
30ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30ee0 23 23 23 23 23 23 23 23 0a 23 20 41 20 6c 69 73  ########.# A lis
30ef0 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20  t of keywords.  
30f00 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72  A asterisk occur
30f10 73 20 61 66 74 65 72 20 74 68 65 20 6b 65 79 77  s after the keyw
30f20 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a  ord if it is on.
30f30 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c  # the fallback l
30f40 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f  ist..#.set keywo
30f50 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b  rd_list [lsort {
30f60 0a 20 20 20 41 42 4f 52 54 0a 20 20 20 41 43 54  .   ABORT.   ACT
30f70 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20 41 46  ION.   ADD.   AF
30f80 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c  TER.   ALL.   AL
30f90 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a 20  TER.   ANALYZE. 
30fa0 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41    AND.   AS.   A
30fb0 53 43 0a 20 20 20 41 54 54 41 43 48 0a 20 20 20  SC.   ATTACH.   
30fc0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
30fd0 20 42 45 46 4f 52 45 0a 20 20 20 42 45 47 49 4e   BEFORE.   BEGIN
30fe0 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20 42  .   BETWEEN.   B
30ff0 59 0a 20 20 20 43 41 53 43 41 44 45 0a 20 20 20  Y.   CASCADE.   
31000 43 41 53 45 0a 20 20 20 43 41 53 54 0a 20 20 20  CASE.   CAST.   
31010 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45  CHECK.   COLLATE
31020 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f  .   COLUMN.   CO
31030 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54  MMIT.   CONFLICT
31040 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20  .   CONSTRAINT. 
31050 20 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53    CREATE.   CROS
31060 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41 54  S.   CURRENT_DAT
31070 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  E.   CURRENT_TIM
31080 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  E.   CURRENT_TIM
31090 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41 42 41  ESTAMP.   DATABA
310a0 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a 20 20  SE.   DEFAULT.  
310b0 20 44 45 46 45 52 52 45 44 0a 20 20 20 44 45 46   DEFERRED.   DEF
310c0 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45 54  ERRABLE.   DELET
310d0 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44 45 54  E.   DESC.   DET
310e0 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43 54 0a  ACH.   DISTINCT.
310f0 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20     DROP.   END. 
31100 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45 0a 20    EACH.   ELSE. 
31110 20 20 45 53 43 41 50 45 0a 20 20 20 45 58 43 45    ESCAPE.   EXCE
31120 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45 0a  PT.   EXCLUSIVE.
31130 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58 50     EXISTS.   EXP
31140 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20 20  LAIN.   FAIL.   
31150 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20  FOR.   FOREIGN. 
31160 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20    FROM.   FULL. 
31170 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50 0a    GLOB.   GROUP.
31180 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46 0a     HAVING.   IF.
31190 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d 4d     IGNORE.   IMM
311a0 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20 20 20  EDIATE.   IN.   
311b0 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45 44  INDEX.   INDEXED
311c0 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20 20  .   INITIALLY.  
311d0 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52 54   INNER.   INSERT
311e0 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20 20 49  .   INSTEAD.   I
311f0 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54 4f  NTERSECT.   INTO
31200 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c  .   IS.   ISNULL
31210 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a  .   JOIN.   KEY.
31220 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45 0a     LEFT.   LIKE.
31230 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43     LIMIT.   MATC
31240 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20 20  H.   NATURAL.   
31250 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54  NO.   NOT.   NOT
31260 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20  NULL.   NULL.   
31270 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20 20  OF.   OFFSET.   
31280 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45  ON.   OR.   ORDE
31290 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50 4c  R.   OUTER.   PL
312a0 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20 20 20  AN.   PRAGMA.   
312b0 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52 59  PRIMARY.   QUERY
312c0 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52 45 43  .   RAISE.   REC
312d0 55 52 53 49 56 45 0a 20 20 20 52 45 46 45 52 45  URSIVE.   REFERE
312e0 4e 43 45 53 0a 20 20 20 52 45 47 45 58 50 0a 20  NCES.   REGEXP. 
312f0 20 20 52 45 49 4e 44 45 58 0a 20 20 20 52 45 4c    REINDEX.   REL
31300 45 41 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20  EASE.   RENAME. 
31310 20 20 52 45 50 4c 41 43 45 0a 20 20 20 52 45 53    REPLACE.   RES
31320 54 52 49 43 54 0a 20 20 20 52 49 47 48 54 0a 20  TRICT.   RIGHT. 
31330 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f    ROLLBACK.   RO
31340 57 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 0a 20  W.   SAVEPOINT. 
31350 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a    SELECT.   SET.
31360 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50     TABLE.   TEMP
31370 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 0a 20 20  .   TEMPORARY.  
31380 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54   THEN.   TO.   T
31390 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52  RANSACTION.   TR
313a0 49 47 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20  IGGER.   UNION. 
313b0 20 20 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41    UNIQUE.   UPDA
313c0 54 45 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56  TE.   USING.   V
313d0 41 43 55 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a  ACUUM.   VALUES.
313e0 20 20 20 56 49 45 57 0a 20 20 20 56 49 52 54 55     VIEW.   VIRTU
313f0 41 4c 0a 20 20 20 57 49 54 48 0a 20 20 20 57 49  AL.   WITH.   WI
31400 54 48 4f 55 54 0a 20 20 20 57 48 45 4e 0a 20 20  THOUT.   WHEN.  
31410 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75   WHERE.}]..hd_pu
31420 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22  ts {<DIV class="
31430 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53  pdf_section">}.S
31440 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b  ection {SQLite K
31450 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64  eywords} keyword
31460 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72 64  s {{*SQL keyword
31470 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d  } {SQL keywords}
31480 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49 56  }.hd_puts {</DIV
31490 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  >}.</tcl>..<p>Th
314a0 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 73  e SQL standard s
314b0 70 65 63 69 66 69 65 73 20 61 20 68 75 67 65 20  pecifies a huge 
314c0 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f 72  number of keywor
314d0 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f 74  ds which may not
314e0 0a 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20  .be used as the 
314f0 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73 2c  names of tables,
31500 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d 6e   indices, column
31510 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75 73  s, databases, us
31520 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63 74  er-defined.funct
31530 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73  ions, collations
31540 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  , virtual table 
31550 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79 20  modules, or any 
31560 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a 65  other named obje
31570 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66 20  ct..The list of 
31580 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20 6c  keywords is so l
31590 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70 65 6f  ong that few peo
315a0 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65 72  ple can remember
315b0 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d   them all..For m
315c0 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79 6f  ost SQL code, yo
315d0 75 72 20 73 61 66 65 73 74 20 62 65 74 20 69 73  ur safest bet is
315e0 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61 6e   to never use an
315f0 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  y English langua
31600 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20 6e  ge.word as the n
31610 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64 65  ame of a user-de
31620 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70  fined object.</p
31630 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e  >..<p>If you wan
31640 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77 6f  t to use a keywo
31650 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f  rd as a name, yo
31660 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65 20  u need to quote 
31670 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20 66  it.  There.are f
31680 6f 75 72 20 77 61 79 73 20 6f 66 20 71 75 6f 74  our ways of quot
31690 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  ing keywords in 
316a0 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e  SQLite:</p>..<p>
316b0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
316c0 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76  able>.<tr>.<td v
316d0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27  align="top"><b>'
316e0 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64  keyword'</b></td
316f0 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
31700 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
31710 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 20  yword in single 
31720 71 75 6f 74 65 73 20 69 73 20 61 20 73 74 72 69  quotes is a stri
31730 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e  ng literal.</td>
31740 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20  </tr>..<tr>.<td 
31750 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
31760 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74  "keyword"</b></t
31770 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64  d><td></td>..<td
31780 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 64  >^A keyword in d
31790 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73 20  ouble-quotes is 
317a0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f  an identifier.</
317b0 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c  td></tr>..<tr>.<
317c0 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
317d0 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64 26  <b>&#91;keyword&
317e0 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  #93;</b></td><td
317f0 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
31800 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20  eyword enclosed 
31810 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65  in square bracke
31820 74 73 20 69 73 20 0a 20 20 20 20 20 20 20 20 61  ts is .        a
31830 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54  n identifier.  T
31840 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64  his is not stand
31850 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71  ard SQL.  This q
31860 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  uoting mechanism
31870 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64  .        is used
31880 20 62 79 20 4d 53 20 41 63 63 65 73 73 20 61 6e   by MS Access an
31890 64 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e 64  d SQL Server and
318a0 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
318b0 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20  SQLite for.     
318c0 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79     compatibility
318d0 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  .</td></tr>..<tr
318e0 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
318f0 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f  p"><b>&#96;keywo
31900 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e  rd&#96;</b></td>
31910 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e  <td></td>..<td>^
31920 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73  A keyword enclos
31930 65 64 20 69 6e 20 67 72 61 76 65 20 61 63 63 65  ed in grave acce
31940 6e 74 73 20 28 41 53 43 49 49 20 63 6f 64 65 20  nts (ASCII code 
31950 39 36 29 20 69 73 20 0a 20 20 20 20 20 20 20 20  96) is .        
31960 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20  an identifier.  
31970 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e  This is not stan
31980 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20  dard SQL.  This 
31990 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73  quoting mechanis
319a0 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65  m.        is use
319b0 64 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20 69  d by MySQL and i
319c0 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51  s included in SQ
319d0 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20  Lite for.       
319e0 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c   compatibility.<
319f0 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  /td></tr>.</tabl
31a00 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
31a10 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65  .</p>..<p>For re
31a20 73 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63 6f  silience when co
31a30 6e 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68 69  nfronted with hi
31a40 73 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74 61  storical SQL sta
31a50 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a  tements, SQLite.
31a60 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62  will sometimes b
31a70 65 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67 20  end the quoting 
31a80 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e  rules above:</p>
31a90 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49  ..<ul>.<li><p>^I
31aa0 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 73  f a keyword in s
31ab0 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28 65 78  ingle.quotes (ex
31ac0 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f  : <b>'key'</b> o
31ad0 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29  r <b>'glob'</b>)
31ae0 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f   is used in a co
31af0 6e 74 65 78 74 20 77 68 65 72 65 0a 61 6e 20 69  ntext where.an i
31b00 64 65 6e 74 69 66 69 65 72 20 69 73 20 61 6c 6c  dentifier is all
31b10 6f 77 65 64 20 62 75 74 20 77 68 65 72 65 20 61  owed but where a
31b20 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
31b30 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20  is not allowed, 
31b40 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69  then.the token i
31b50 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20  s understood to 
31b60 62 65 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  be an identifier
31b70 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73 74   instead of a st
31b80 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f  ring literal..</
31b90 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
31ba0 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e  ^If a keyword in
31bb0 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20 28   double.quotes (
31bc0 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e  ex: <b>"key"</b>
31bd0 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62   or <b>"glob"</b
31be0 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20  >) is used in a 
31bf0 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 69 74  context where.it
31c00 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c   cannot be resol
31c10 76 65 64 20 74 6f 20 61 6e 20 69 64 65 6e 74 69  ved to an identi
31c20 66 69 65 72 20 62 75 74 20 77 68 65 72 65 20 61  fier but where a
31c30 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a   string literal.
31c40 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e  is allowed, then
31c50 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e   the token is un
31c60 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61  derstood to be a
31c70 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
31c80 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20 69 64  instead.of an id
31c90 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c  entifier.</p></l
31ca0 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f  i>.</ul>..<p>Pro
31cb0 67 72 61 6d 6d 65 72 73 20 61 72 65 20 63 61 75  grammers are cau
31cc0 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75 73  tioned not to us
31cd0 65 20 74 68 65 20 74 77 6f 20 65 78 63 65 70 74  e the two except
31ce0 69 6f 6e 73 20 64 65 73 63 72 69 62 65 64 20 69  ions described i
31cf0 6e 0a 74 68 65 20 70 72 65 76 69 6f 75 73 20 62  n.the previous b
31d00 75 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d 70 68  ullets.  We emph
31d10 61 73 69 7a 65 20 74 68 61 74 20 74 68 65 79 20  asize that they 
31d20 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74 68  exist only so th
31d30 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66  at old.and ill-f
31d40 6f 72 6d 65 64 20 53 51 4c 20 73 74 61 74 65 6d  ormed SQL statem
31d50 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20 63 6f  ents will run co
31d60 72 72 65 63 74 6c 79 2e 20 20 46 75 74 75 72 65  rrectly.  Future
31d70 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c   versions of.SQL
31d80 69 74 65 20 6d 69 67 68 74 20 72 61 69 73 65 20  ite might raise 
31d90 65 72 72 6f 72 73 20 69 6e 73 74 65 61 64 20 6f  errors instead o
31da0 66 20 61 63 63 65 70 74 69 6e 67 20 74 68 65 20  f accepting the 
31db0 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d  malformed.statem
31dc0 65 6e 74 73 20 63 6f 76 65 72 65 64 20 62 79 20  ents covered by 
31dd0 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61  the exceptions a
31de0 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53  bove.</p>..<p>.S
31df0 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20 6b  QLite adds new k
31e00 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d  eywords from tim
31e10 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20 69  e to time when i
31e20 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66  t takes on new f
31e30 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70  eatures..So to p
31e40 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f 64 65  revent your code
31e50 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b   from being brok
31e60 65 6e 20 62 79 20 66 75 74 75 72 65 20 65 6e 68  en by future enh
31e70 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73  ancements, you s
31e80 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71  hould.normally q
31e90 75 6f 74 65 20 61 6e 79 20 69 64 65 6e 74 69 66  uote any identif
31ea0 69 65 72 20 74 68 61 74 20 69 73 20 61 6e 20 45  ier that is an E
31eb0 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
31ec0 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f  word, even if.yo
31ed0 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f  u do not have to
31ee0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
31ef0 6c 69 73 74 20 62 65 6c 6f 77 20 73 68 6f 77 73  list below shows
31f00 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 6b 65   all possible ke
31f10 79 77 6f 72 64 73 20 75 73 65 64 20 62 79 20 61  ywords used by a
31f20 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53 51 4c 69  ny build of.SQLi
31f30 74 65 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  te regardless of
31f40 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f   [compile-time o
31f50 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20  ptions].  .Most 
31f60 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e 66 69  reasonable confi
31f70 67 75 72 61 74 69 6f 6e 73 20 75 73 65 20 6d 6f  gurations use mo
31f80 73 74 20 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  st or all of the
31f90 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62 75 74  se keywords,.but
31fa0 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73 20 6d   some keywords m
31fb0 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20 77 68  ay be omitted wh
31fc0 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20  en SQL language 
31fd0 66 65 61 74 75 72 65 73 20 61 72 65 0a 64 69 73  features are.dis
31fe0 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72 64 6c  abled..^(Regardl
31ff0 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ess of the compi
32000 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
32010 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65 6e 74  ation, any ident
32020 69 66 69 65 72 20 74 68 61 74 20 69 73 20 6e 6f  ifier that is no
32030 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77 69  t on.the followi
32040 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  ng <tcl>hd_puts 
32050 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72  [llength $keywor
32060 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c  d_list]</tcl> el
32070 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20 6e 6f  ement.list is no
32080 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f 20 74  t a keyword to t
32090 68 65 20 53 51 4c 20 70 61 72 73 65 72 20 69 6e  he SQL parser in
320a0 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c   SQLite:.</p>..<
320b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
320c0 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e  le width="100%">
320d0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
320e0 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  left" valign="to
320f0 70 22 20 77 69 64 74 68 3d 22 32 30 25 22 3e 0a  p" width="20%">.
32100 3c 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65  <tcl>.set n [lle
32110 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69  ngth $keyword_li
32120 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73  st].set nCol 5.s
32130 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28  et nRow [expr {(
32140 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f  $n+$nCol-1)/$nCo
32150 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65  l}].set i 0.fore
32160 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72  ach word $keywor
32170 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 24  d_list {.  if {$
32180 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20  i==$nRow} {.    
32190 68 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e 3c 74  hd_puts "</td><t
321a0 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22  d valign=\"top\"
321b0 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c 22 20   align=\"left\" 
321c0 77 69 64 74 68 3d 5c 22 32 30 25 5c 22 3e 22 0a  width=\"20%\">".
321d0 20 20 20 20 73 65 74 20 69 20 31 0a 20 20 7d 20      set i 1.  } 
321e0 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e 63 72 20  else {.    incr 
321f0 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20  i.  }.  hd_puts 
32200 22 24 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a 7d 0a  "$word<br>\n".}.
32210 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74 72  </tcl>.</td></tr
32220 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b  ></table></block
32230 71 75 6f 74 65 3e 29 5e 0a                       quote>)^.