Documentation Source Text

Hex Artifact Content
Login

Artifact 56f76ce56f9387d16db198a372dda37e3698e6c3:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 7b 57 49 54 48 20 63 6c 61 75  .    {{WITH clau
03d0: 73 65 7d 20 77 69 74 68 63 6c 61 75 73 65 7d 0a  se} withclause}.
03e0: 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d      {comment com
03f0: 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c 41  ment}.    {EXPLA
0400: 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20 20  IN explain}.    
0410: 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72  {expression expr
0420: 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54 52  }.    {{BEGIN TR
0430: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
0440: 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43 4f  action}.    {{CO
0450: 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e  MMIT TRANSACTION
0460: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f  } transaction CO
0470: 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44 20  MMIT}.    {{END 
0480: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
0490: 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54 7d  nsaction COMMIT}
04a0: 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20  .    {{ROLLBACK 
04b0: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
04c0: 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41 43  nsaction ROLLBAC
04d0: 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49 4e  K}.    {SAVEPOIN
04e0: 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20 20  T savepoint}.   
04f0: 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45 50   {{RELEASE SAVEP
0500: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
0510: 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20 7b  SAVEPOINT}.    {
0520: 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68 74  PRAGMA pragma.ht
0530: 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f 4e  ml}.    {{ON CON
0540: 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f  FLICT clause} co
0550: 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43 52  nflict}.    {{CR
0560: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
0570: 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52 4f  eview}.    {{DRO
0580: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
0590: 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20 54  }.    {{CREATE T
05a0: 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72  RIGGER} createtr
05b0: 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52 4f  igger}.    {{DRO
05c0: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
05d0: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41 54  rigger}.    {{AT
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
05f0: 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45 54  ttach}.    {{DET
0600: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
0610: 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45 49  tach}.      {REI
0620: 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20  NDEX reindex}.  
0630: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
0640: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20   altertable}.   
0650: 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c   {{ANALYZE} anal
0660: 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58  yze}.    {{INDEX
0670: 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
0680: 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74  }.    {{aggregat
0690: 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e functions} agg
06a0: 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20  func aggfunc}.  
06b0: 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f    {{core functio
06c0: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72  ns} corefunc cor
06d0: 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74  efunc}.    {{dat
06e0: 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
06f0: 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64  ions} datefunc d
0700: 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65  atefunc}.    {ke
0710: 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20  ywords keywords 
0720: 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a  {SQL keywords}}.
0730: 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f 73    }.  set lang_s
0740: 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78  ection_break [ex
0750: 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c  pr {([llength $l
0760: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
0770: 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61  ]+2)/3}].  forea
0780: 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73  ch {section} [ls
0790: 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69  ort -index 0 -di
07a0: 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73  ctionary $lang_s
07b0: 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20  ection_list] {. 
07c0: 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c   foreach {s_titl
07d0: 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73  e s_tag s_kw} $s
07e0: 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b  ection {}.  if {
07f0: 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20  $s_kw == ""} {. 
0800: 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74     set s_kw $s_t
0810: 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24  itle.  }.  if {$
0820: 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68  s_tag=="pragma.h
0830: 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  tml"} {.    set 
0840: 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65  url $s_tag.  } e
0850: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72  lse {.    set ur
0860: 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74  l lang_$s_tag.ht
0870: 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f  ml.  }.  hd_reso
0880: 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77  lve "<li>\[$s_kw
0890: 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e  |$s_title\]</li>
08a0: 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20  ".  incr i.  if 
08b0: 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69  {$i==$lang_secti
08c0: 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d  on_break || $i==
08d0: 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f  2*$lang_section_
08e0: 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f  break} {.    hd_
08f0: 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e  puts "</ul></td>
0900: 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
0910: 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c  \"><ul>".  }.}.<
0920: 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e  /tcl>.</ul></td>
0930: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  </tr></table>..<
0940: 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20  p>^The routines 
0950: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0960: 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33  _v2()], [sqlite3
0970: 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71  _prepare()],.[sq
0980: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
0990: 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  )], [sqlite3_pre
09a0: 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a 5b  pare16_v2()], .[
09b0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 2c  sqlite3_exec()],
09c0: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67 65   and [sqlite3_ge
09d0: 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65 70  t_table()] accep
09e0: 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  t.an SQL stateme
09f0: 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d  nt list (sql-stm
0a00: 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69 73  t-list) which is
0a10: 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70   a semicolon-sep
0a20: 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20 73  arated.list of s
0a30: 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a  tatements.</p>..
0a40: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
0a50: 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74  am sql-stmt-list
0a60: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20  </tcl>..<p>Each 
0a70: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  SQL statement in
0a80: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6c   the statement l
0a90: 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ist is an instan
0aa0: 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77  ce of the.follow
0ab0: 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ing:</p>..<tcl>B
0ac0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
0ad0: 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63  -stmt</tcl>..<tc
0ae0: 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72  l>.proc Operator
0af0: 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75   {name} {.  retu
0b00: 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  rn "<font color=
0b10: 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67  \"#2c2cf0\"><big
0b20: 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f  >$name</big></fo
0b30: 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74  nt>".}.proc Nont
0b40: 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b  erminal {name} {
0b50: 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66  .  return "<i><f
0b60: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33  ont color=\"#ff3
0b70: 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e  434\">$name</fon
0b80: 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b  t></i>".}.proc K
0b90: 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a  eyword {name} {.
0ba0: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0bb0: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0bc0: 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a  ">$name</font>".
0bd0: 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b  }.proc Example {
0be0: 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74  text} {.  hd_put
0bf0: 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  s "<blockquote><
0c00: 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c  pre>$text</pre><
0c10: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a  /blockquote>".}.
0c20: 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e  .proc Section {n
0c30: 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72  ame label keywor
0c40: 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44  ds} {.  global D
0c50: 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61  OC.  hd_close_ma
0c60: 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69  in.  hd_open_mai
0c70: 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74  n lang_$label.ht
0c80: 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20 22  ml.  hd_header "
0c90: 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61 6e  SQLite Query Lan
0ca0: 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24 44  guage: $name" $D
0cb0: 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e  OC/pages/lang.in
0cc0: 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f  .  eval hd_keywo
0cd0: 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20  rds $keywords.  
0ce0: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b 65  if {[lsearch $ke
0cf0: 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d 3d  ywords $name] ==
0d00: 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68 20   -1 && [lsearch 
0d10: 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d 65  $keywords *$name
0d20: 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65  ] == -1} {.    e
0d30: 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  val hd_keywords 
0d40: 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20  { $name }.  }.  
0d50: 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c 69  hd_puts {<h1 ali
0d60: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c 20  gn="center">SQL 
0d70: 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79  As Understood By
0d80: 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20 20   SQLite</h1>}.  
0d90: 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20 68  hd_puts {<p><a h
0da0: 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e  ref="lang.html">
0db0: 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a 20  [Top]</a></p>}. 
0dc0: 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24 6e   hd_puts "<h2>$n
0dd0: 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23 23  ame</h2>".}..###
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e20: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
0e30: 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c  tion {ALTER TABL
0e40: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b  E} altertable {{
0e50: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a 41  ALTER TABLE} {*A
0e60: 4c 54 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  LTER}}..Recursiv
0e70: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
0e80: 6c 74 65 72 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  lter-table-stmt.
0e90: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 53 51 4c 69 74  </tcl>..<p>SQLit
0ea0: 65 20 73 75 70 70 6f 72 74 73 20 61 20 6c 69 6d  e supports a lim
0eb0: 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20 41  ited subset of A
0ec0: 4c 54 45 52 20 54 41 42 4c 45 2e 0a 54 68 65 20  LTER TABLE..The 
0ed0: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
0ee0: 61 6e 64 20 69 6e 20 53 51 4c 69 74 65 20 61 6c  and in SQLite al
0ef0: 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74 6f  lows the user to
0f00: 20 72 65 6e 61 6d 65 20 61 20 74 61 62 6c 65 0a   rename a table.
0f10: 6f 72 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  or to add a new 
0f20: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
0f30: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 3c 2f 70  sting table..</p
0f40: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f50: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 69 73  AME TO syntax is
0f60: 20 75 73 65 64 20 74 6f 20 72 65 6e 61 6d 65 20   used to rename 
0f70: 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  the table identi
0f80: 66 69 65 64 20 62 79 20 0a 3c 69 3e 26 23 39 31  fied by .<i>&#91
0f90: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26  ;database-name.&
0fa0: 23 39 33 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  #93;table-name</
0fb0: 69 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62  i> to <i>new-tab
0fc0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54  le-name</i>.)^.T
0fd0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e  his command .can
0fe0: 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d  not be used to m
0ff0: 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65 74 77  ove a table betw
1000: 65 65 6e 20 61 74 74 61 63 68 65 64 20 64 61 74  een attached dat
1010: 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20  abases, only to 
1020: 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20  rename .a table 
1030: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
1040: 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
1050: 70 3e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  p> ^If the table
1060: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68   being renamed h
1070: 61 73 20 74 72 69 67 67 65 72 73 20 6f 72 20 69  as triggers or i
1080: 6e 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65  ndices, then the
1090: 73 65 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68  se remain.attach
10a0: 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ed to the table 
10b0: 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
10c0: 6e 20 72 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77  n renamed.  ^How
10d0: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
10e0: 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66 69  re.any view defi
10f0: 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74  nitions, or stat
1100: 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20  ements executed 
1110: 62 79 20 74 72 69 67 67 65 72 73 20 74 68 61 74  by triggers that
1120: 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74 61   refer to.the ta
1130: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1140: 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74  d, these are not
1150: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d   automatically m
1160: 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65 20 74  odified to use t
1170: 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d  he new.table nam
1180: 65 2e 20 49 66 20 74 68 69 73 20 69 73 20 72 65  e. If this is re
1190: 71 75 69 72 65 64 2c 20 74 68 65 20 74 72 69 67  quired, the trig
11a0: 67 65 72 73 20 6f 72 20 76 69 65 77 20 64 65 66  gers or view def
11b0: 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62 65  initions must be
11c0: 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63  .dropped and rec
11d0: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
11e0: 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d 65  e new table name
11f0: 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a   by hand..</p>..
1200: 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  <p>^If [foreign 
1210: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1220: 20 61 72 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b   are .[foreign_k
1230: 65 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61  eys pragma | ena
1240: 62 6c 65 64 5d 20 77 68 65 6e 20 61 20 74 61 62  bled] when a tab
1250: 6c 65 20 69 73 20 72 65 6e 61 6d 65 64 2c 20 74  le is renamed, t
1260: 68 65 6e 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e  hen any.[foreign
1270: 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52 45  -key-clause | RE
1280: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 73  FERENCES clauses
1290: 5d 20 69 6e 20 61 6e 79 20 74 61 62 6c 65 20 28  ] in any table (
12a0: 65 69 74 68 65 72 20 74 68 65 0a 74 61 62 6c 65  either the.table
12b0: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f   being renamed o
12c0: 72 20 73 6f 6d 65 20 6f 74 68 65 72 20 74 61 62  r some other tab
12d0: 6c 65 29 0a 74 68 61 74 20 72 65 66 65 72 20 74  le).that refer t
12e0: 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
12f0: 67 20 72 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f  g renamed are mo
1300: 64 69 66 69 65 64 20 74 6f 20 72 65 66 65 72 20  dified to refer 
1310: 0a 74 6f 20 74 68 65 20 72 65 6e 61 6d 65 64 20  .to the renamed 
1320: 74 61 62 6c 65 20 62 79 20 69 74 73 20 6e 65 77  table by its new
1330: 20 6e 61 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65   name...<p> ^The
1340: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74   ADD COLUMN synt
1350: 61 78 0a 69 73 20 75 73 65 64 20 74 6f 20 61 64  ax.is used to ad
1360: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74  d a new column t
1370: 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  o an existing ta
1380: 62 6c 65 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f  ble..^The new co
1390: 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79 73 20 61  lumn is always a
13a0: 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65  ppended to the e
13b0: 6e 64 20 6f 66 20 74 68 65 20 6c 69 73 74 20 6f  nd of the list o
13c0: 66 20 65 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d  f existing colum
13d0: 6e 73 2e 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d  ns..The [column-
13e0: 64 65 66 5d 20 72 75 6c 65 20 64 65 66 69 6e 65  def] rule define
13f0: 73 20 74 68 65 20 63 68 61 72 61 63 74 65 72 69  s the characteri
1400: 73 74 69 63 73 20 6f 66 20 74 68 65 20 6e 65 77  stics of the new
1410: 20 63 6f 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e   column..^(The n
1420: 65 77 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61  ew column may ta
1430: 6b 65 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  ke any of the fo
1440: 72 6d 73 20 70 65 72 6d 69 73 73 69 62 6c 65 20  rms permissible 
1450: 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54 41 42  in a [CREATE TAB
1460: 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77  LE].statement, w
1470: 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ith the followin
1480: 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 3a 29  g restrictions:)
1490: 5e 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20  ^.<ul>.<li>^The 
14a0: 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68  column may not h
14b0: 61 76 65 20 61 20 50 52 49 4d 41 52 59 20 4b 45  ave a PRIMARY KE
14c0: 59 20 6f 72 20 55 4e 49 51 55 45 20 63 6f 6e 73  Y or UNIQUE cons
14d0: 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69  traint.</li>.<li
14e0: 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79  >^The column may
14f0: 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65 66 61   not have a defa
1500: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43 55 52  ult value of CUR
1510: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
1520: 4e 54 5f 44 41 54 45 2c 20 0a 20 20 20 20 43 55  NT_DATE, .    CU
1530: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c  RRENT_TIMESTAMP,
1540: 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
1550: 6e 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73  n in parentheses
1560: 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61  .</li>.<li>^If a
1570: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
1580: 61 69 6e 74 20 69 73 20 73 70 65 63 69 66 69 65  aint is specifie
1590: 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75  d, then the colu
15a0: 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 0a 20  mn must have a. 
15b0: 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65     default value
15c0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c   other than NULL
15d0: 2e 0a 3c 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69  ..<li>^If [forei
15e0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
15f0: 74 73 5d 20 61 72 65 20 5b 66 6f 72 65 69 67 6e  ts] are [foreign
1600: 5f 6b 65 79 73 20 70 72 61 67 6d 61 20 7c 20 65  _keys pragma | e
1610: 6e 61 62 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20  nabled] and.    
1620: 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20  a column with a 
1630: 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61  [foreign-key-cla
1640: 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45 53  use | REFERENCES
1650: 20 63 6c 61 75 73 65 5d 0a 20 20 20 20 69 73 20   clause].    is 
1660: 61 64 64 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d  added, the colum
1670: 6e 20 6d 75 73 74 20 68 61 76 65 20 61 20 64 65  n must have a de
1680: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e  fault value of N
1690: 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  ULL..</ul>..<p>^
16a0: 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 77  Note also that w
16b0: 68 65 6e 20 61 64 64 69 6e 67 20 61 20 5b 43 48  hen adding a [CH
16c0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 5d 2c  ECK constraint],
16d0: 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74   the CHECK const
16e0: 72 61 69 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73  raint.is not tes
16f0: 74 65 64 20 61 67 61 69 6e 73 74 20 70 72 65 65  ted against pree
1700: 78 69 73 74 69 6e 67 20 72 6f 77 73 20 6f 66 20  xisting rows of 
1710: 74 68 65 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73  the table..^This
1720: 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 61   can result in a
1730: 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
1740: 61 69 6e 73 20 64 61 74 61 20 74 68 61 74 0a 69  ains data that.i
1750: 73 20 69 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  s in violation o
1760: 66 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e 73  f the CHECK cons
1770: 74 72 61 69 6e 74 2e 20 20 46 75 74 75 72 65 20  traint.  Future 
1780: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
1790: 74 65 20 6d 69 67 68 74 0a 63 68 61 6e 67 65 20  te might.change 
17a0: 74 6f 20 76 61 6c 69 64 61 74 65 20 43 48 45 43  to validate CHEC
17b0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 73  K constraints as
17c0: 20 74 68 65 79 20 61 72 65 20 61 64 64 65 64 2e   they are added.
17d0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 65 78  </p>..<p> The ex
17e0: 65 63 75 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20  ecution time of 
17f0: 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  the ALTER TABLE 
1800: 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 64 65 70  command is indep
1810: 65 6e 64 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d  endent of.the am
1820: 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69 6e 20  ount of data in 
1830: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
1840: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
1850: 61 6e 64 20 72 75 6e 73 20 61 73 20 71 75 69 63  and runs as quic
1860: 6b 6c 79 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77  kly.on a table w
1870: 69 74 68 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72  ith 10 million r
1880: 6f 77 73 20 61 73 20 69 74 20 64 6f 65 73 20 6f  ows as it does o
1890: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 31  n a table with 1
18a0: 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41   row..</p>..<p>A
18b0: 66 74 65 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20  fter ADD COLUMN 
18c0: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20  has been run on 
18d0: 61 20 64 61 74 61 62 61 73 65 2c 20 74 68 61 74  a database, that
18e0: 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 6e   database will n
18f0: 6f 74 0a 62 65 20 72 65 61 64 61 62 6c 65 20 62  ot.be readable b
1900: 79 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  y SQLite version
1910: 20 33 2e 31 2e 33 20 61 6e 64 20 65 61 72 6c 69   3.1.3 and earli
1920: 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  er.</p>..<tcl>.#
1930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1980: 63 74 69 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20  ction {ANALYZE} 
1990: 61 6e 61 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a  analyze ANALYZE.
19a0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
19b0: 44 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a 65 2d  Diagram analyze-
19c0: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
19d0: 20 5e 54 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f   ^The ANALYZE co
19e0: 6d 6d 61 6e 64 20 67 61 74 68 65 72 73 20 73 74  mmand gathers st
19f0: 61 74 69 73 74 69 63 73 20 61 62 6f 75 74 20 74  atistics about t
1a00: 61 62 6c 65 73 20 61 6e 64 0a 69 6e 64 69 63 65  ables and.indice
1a10: 73 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 65  s and stores the
1a20: 20 63 6f 6c 6c 65 63 74 65 64 20 69 6e 66 6f 72   collected infor
1a30: 6d 61 74 69 6f 6e 0a 69 6e 20 5b 69 6e 74 65 72  mation.in [inter
1a40: 6e 61 6c 20 74 61 62 6c 65 73 5d 20 6f 66 20 74  nal tables] of t
1a50: 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 72  he database wher
1a60: 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  e the query opti
1a70: 6d 69 7a 65 72 20 63 61 6e 0a 61 63 63 65 73 73  mizer can.access
1a80: 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   the information
1a90: 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 68   and use it to h
1aa0: 65 6c 70 20 6d 61 6b 65 20 62 65 74 74 65 72 20  elp make better 
1ab0: 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 63  query planning c
1ac0: 68 6f 69 63 65 73 2e 0a 5e 49 66 20 6e 6f 20 61  hoices..^If no a
1ad0: 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67 69 76  rguments are giv
1ae0: 65 6e 2c 20 61 6c 6c 20 61 74 74 61 63 68 65 64  en, all attached
1af0: 20 64 61 74 61 62 61 73 65 73 20 61 72 65 0a 61   databases are.a
1b00: 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 61 20  nalyzed.  ^If a 
1b10: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73  database name is
1b20: 20 67 69 76 65 6e 20 61 73 20 74 68 65 20 61 72   given as the ar
1b30: 67 75 6d 65 6e 74 2c 20 74 68 65 6e 20 61 6c 6c  gument, then all
1b40: 20 74 61 62 6c 65 73 0a 61 6e 64 20 69 6e 64 69   tables.and indi
1b50: 63 65 73 20 69 6e 20 74 68 61 74 20 6f 6e 65 20  ces in that one 
1b60: 64 61 74 61 62 61 73 65 20 61 72 65 20 61 6e 61  database are ana
1b70: 6c 79 7a 65 64 2e 20 20 0a 5e 49 66 20 74 68 65  lyzed.  .^If the
1b80: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 74   argument is a t
1b90: 61 62 6c 65 20 6e 61 6d 65 2c 20 74 68 65 6e 20  able name, then 
1ba0: 6f 6e 6c 79 20 74 68 61 74 20 74 61 62 6c 65 20  only that table 
1bb0: 61 6e 64 20 74 68 65 0a 69 6e 64 69 63 65 73 20  and the.indices 
1bc0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1bd0: 74 68 61 74 20 74 61 62 6c 65 20 61 72 65 20 61  that table are a
1be0: 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 74 68  nalyzed.  ^If th
1bf0: 65 20 61 72 67 75 6d 65 6e 74 0a 69 73 20 61 6e  e argument.is an
1c00: 20 69 6e 64 65 78 20 6e 61 6d 65 2c 20 74 68 65   index name, the
1c10: 6e 20 6f 6e 6c 79 20 74 68 61 74 20 6f 6e 65 20  n only that one 
1c20: 69 6e 64 65 78 20 69 73 20 61 6e 61 6c 79 7a 65  index is analyze
1c30: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65  d.</p>..<p> ^The
1c40: 20 64 65 66 61 75 6c 74 20 69 6d 70 6c 65 6d 65   default impleme
1c50: 6e 74 61 74 69 6f 6e 20 73 74 6f 72 65 73 20 61  ntation stores a
1c60: 6c 6c 20 73 74 61 74 69 73 74 69 63 73 20 69 6e  ll statistics in
1c70: 20 61 20 73 69 6e 67 6c 65 0a 74 61 62 6c 65 20   a single.table 
1c80: 6e 61 6d 65 64 20 22 5b 73 71 6c 69 74 65 5f 73  named "[sqlite_s
1c90: 74 61 74 31 5d 22 2e 20 20 5e 49 66 20 53 51 4c  tat1]".  ^If SQL
1ca0: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
1cb0: 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45  with the.[SQLITE
1cc0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 6f  _ENABLE_STAT3] o
1cd0: 70 74 69 6f 6e 20 61 6e 64 20 77 69 74 68 6f 75  ption and withou
1ce0: 74 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  t the [SQLITE_EN
1cf0: 41 42 4c 45 5f 53 54 41 54 34 5d 0a 6f 70 74 69  ABLE_STAT4].opti
1d00: 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74 69 6f  on, then additio
1d10: 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20 64 61  nal histogram da
1d20: 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65 64 20  ta is.collected 
1d30: 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20 5b 73  and stored in [s
1d40: 71 6c 69 74 65 5f 73 74 61 74 33 5d 2e 0a 20 5e  qlite_stat3].. ^
1d50: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
1d60: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a 5b  piled with the.[
1d70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
1d80: 41 54 34 5d 20 6f 70 74 69 6f 6e 2c 20 74 68 65  AT4] option, the
1d90: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
1da0: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
1db0: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
1dc0: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
1dd0: 74 61 74 34 5d 2e 0a 4f 6c 64 65 72 20 76 65 72  tat4]..Older ver
1de0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1df0: 77 6f 75 6c 64 20 6d 61 6b 65 20 75 73 65 20 6f  would make use o
1e00: 66 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 73 74  f the [sqlite_st
1e10: 61 74 32 5d 20 74 61 62 6c 65 0a 77 68 65 6e 20  at2] table.when 
1e20: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 5b 53  compiled with [S
1e30: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
1e40: 54 32 5d 20 62 75 74 20 61 6c 6c 20 72 65 63 65  T2] but all rece
1e50: 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53  nt versions of.S
1e60: 51 4c 69 74 65 20 69 67 6e 6f 72 65 20 74 68 65  QLite ignore the
1e70: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
1e80: 62 6c 65 2e 0a 46 75 74 75 72 65 20 65 6e 68 61  ble..Future enha
1e90: 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65  ncements may cre
1ea0: 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 5b  ate.additional [
1eb0: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 5d  internal tables]
1ec0: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
1ed0: 61 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63 65  ame pattern exce
1ee0: 70 74 20 77 69 74 68 0a 66 69 6e 61 6c 20 64 69  pt with.final di
1ef0: 67 69 74 20 6c 61 72 67 65 72 20 74 68 61 6e 20  git larger than 
1f00: 22 34 22 2e 0a 41 6c 6c 20 6f 66 20 74 68 65 73  "4"..All of thes
1f10: 65 20 74 61 62 6c 65 73 20 61 72 65 20 63 6f 6c  e tables are col
1f20: 6c 65 63 74 69 76 65 6c 79 20 72 65 66 65 72 72  lectively referr
1f30: 65 64 20 74 6f 20 61 73 20 22 73 74 61 74 69 73  ed to as "statis
1f40: 74 69 63 73 20 74 61 62 6c 65 73 22 2e 0a 3c 2f  tics tables"..</
1f50: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 63 6f 6e  p>..<p> ^The con
1f60: 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61 74  tent of the stat
1f70: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 63 61  istics tables ca
1f80: 6e 20 62 65 20 71 75 65 72 69 65 64 20 75 73 69  n be queried usi
1f90: 6e 67 20 5b 53 45 4c 45 43 54 5d 0a 61 6e 64 20  ng [SELECT].and 
1fa0: 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64 20 75  can be changed u
1fb0: 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54 45  sing the [DELETE
1fc0: 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 61 6e 64  ], [INSERT], and
1fd0: 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d 61 6e   [UPDATE] comman
1fe0: 64 73 2e 0a 5e 28 54 68 65 20 5b 44 52 4f 50 20  ds..^(The [DROP 
1ff0: 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 77  TABLE] command w
2000: 6f 72 6b 73 20 6f 6e 20 73 74 61 74 69 73 74 69  orks on statisti
2010: 63 73 20 74 61 62 6c 65 73 0a 61 73 20 6f 66 20  cs tables.as of 
2020: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
2030: 2e 37 2e 39 2e 29 5e 0a 5e 54 68 65 20 5b 41 4c  .7.9.)^.^The [AL
2040: 54 45 52 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61  TER TABLE] comma
2050: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b  nd does not work
2060: 20 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 74   on statistics t
2070: 61 62 6c 65 73 2e 0a 41 70 70 72 6f 70 72 69 61  ables..Appropria
2080: 74 65 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62  te care should b
2090: 65 20 75 73 65 64 20 77 68 65 6e 20 63 68 61 6e  e used when chan
20a0: 67 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ging the content
20b0: 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74 69   of the statisti
20c0: 63 73 0a 74 61 62 6c 65 73 20 61 73 20 69 6e 76  cs.tables as inv
20d0: 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e  alid content can
20e0: 20 63 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f   cause SQLite to
20f0: 20 73 65 6c 65 63 74 20 69 6e 65 66 66 69 63 69   select ineffici
2100: 65 6e 74 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e  ent.query plans.
2110: 20 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61    Generally spea
2120: 6b 69 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64  king, one should
2130: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20   not modify the 
2140: 63 6f 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20 73  content of.the s
2150: 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73  tatistics tables
2160: 20 62 79 20 61 6e 79 20 6d 65 63 68 61 6e 69 73   by any mechanis
2170: 6d 20 6f 74 68 65 72 20 74 68 61 6e 20 69 6e 76  m other than inv
2180: 6f 6b 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a  oking the.ANALYZ
2190: 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 53 65 65  E command.  .See
21a0: 20 22 5b 4d 61 6e 75 61 6c 20 43 6f 6e 74 72 6f   "[Manual Contro
21b0: 6c 20 4f 66 20 51 75 65 72 79 20 50 6c 61 6e 73  l Of Query Plans
21c0: 20 55 73 69 6e 67 20 53 51 4c 49 54 45 5f 53 54   Using SQLITE_ST
21d0: 41 54 20 54 61 62 6c 65 73 5d 22 20 66 6f 72 0a  AT Tables]" for.
21e0: 66 75 72 74 68 65 72 20 69 6e 66 6f 72 6d 61 74  further informat
21f0: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 53  ion.</p>..<p> ^S
2200: 74 61 74 69 73 74 69 63 73 20 67 61 74 68 65 72  tatistics gather
2210: 65 64 20 62 79 20 41 4e 41 4c 59 5a 45 20 61 72  ed by ANALYZE ar
2220: 65 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61  e not automatica
2230: 6c 6c 79 20 75 70 64 61 74 65 64 20 61 73 0a 74  lly updated as.t
2240: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
2250: 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  e database chang
2260: 65 73 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74  es.  If the cont
2270: 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  ent of the datab
2280: 61 73 65 0a 63 68 61 6e 67 65 73 20 73 69 67 6e  ase.changes sign
2290: 69 66 69 63 61 6e 74 6c 79 2c 20 6f 72 20 69 66  ificantly, or if
22a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
22b0: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
22c0: 65 6e 20 6f 6e 65 20 73 68 6f 75 6c 64 0a 63 6f  en one should.co
22d0: 6e 73 69 64 65 72 20 72 65 72 75 6e 6e 69 6e 67  nsider rerunning
22e0: 20 74 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d   the ANALYZE com
22f0: 6d 61 6e 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  mand in order to
2300: 20 75 70 64 61 74 65 20 74 68 65 20 73 74 61 74   update the stat
2310: 69 73 74 69 63 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  istics.</p>..<p>
2320: 20 54 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   The query plann
2330: 65 72 20 6c 6f 61 64 73 20 74 68 65 20 63 6f 6e  er loads the con
2340: 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61 74  tent of the stat
2350: 69 73 74 69 63 73 20 74 61 62 6c 65 73 0a 69 6e  istics tables.in
2360: 74 6f 20 6d 65 6d 6f 72 79 20 77 68 65 6e 20 74  to memory when t
2370: 68 65 20 73 63 68 65 6d 61 20 69 73 20 72 65 61  he schema is rea
2380: 64 2e 20 20 5e 48 65 6e 63 65 2c 20 77 68 65 6e  d.  ^Hence, when
2390: 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a   an application.
23a0: 63 68 61 6e 67 65 73 20 74 68 65 20 73 74 61 74  changes the stat
23b0: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 64 69  istics tables di
23c0: 72 65 63 74 6c 79 2c 20 53 51 4c 69 74 65 20 77  rectly, SQLite w
23d0: 69 6c 6c 20 6e 6f 74 20 69 6d 6d 65 64 69 61 74  ill not immediat
23e0: 65 6c 79 0a 6e 6f 74 69 63 65 20 74 68 65 20 63  ely.notice the c
23f0: 68 61 6e 67 65 73 2e 20 5e 41 6e 20 61 70 70 6c  hanges. ^An appl
2400: 69 63 61 74 69 6f 6e 0a 63 61 6e 20 66 6f 72 63  ication.can forc
2410: 65 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  e the query plan
2420: 6e 65 72 20 74 6f 20 72 65 72 65 61 64 20 74 68  ner to reread th
2430: 65 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62  e statistics tab
2440: 6c 65 73 20 62 79 20 72 75 6e 6e 69 6e 67 0a 3c  les by running.<
2450: 62 3e 41 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65  b>ANALYZE sqlite
2460: 5f 6d 61 73 74 65 72 3c 2f 62 3e 2e 20 3c 2f 70  _master</b>. </p
2470: 3e 0a 0a 3c 70 3e 20 0a 0a 3c 74 63 6c 3e 0a 23  >..<p> ..<tcl>.#
2480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
24d0: 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44 41  ction {ATTACH DA
24e0: 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20 2a  TABASE} attach *
24f0: 41 54 54 41 43 48 0a 0a 52 65 63 75 72 73 69 76  ATTACH..Recursiv
2500: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
2510: 74 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c  ttach-stmt.</tcl
2520: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54 54 41  >..<p> ^The ATTA
2530: 43 48 20 44 41 54 41 42 41 53 45 20 73 74 61 74  CH DATABASE stat
2540: 65 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f 74 68  ement adds anoth
2550: 65 72 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c  er database .fil
2560: 65 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  e to the current
2570: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
2580: 63 74 69 6f 6e 5d 2e 20 0a 5e 54 68 65 20 66 69  ction]. .^The fi
2590: 6c 65 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64  lename for the d
25a0: 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 61 74  atabase to be at
25b0: 74 61 63 68 65 64 20 69 73 20 74 68 65 20 76 61  tached is the va
25c0: 6c 75 65 20 6f 66 0a 74 68 65 20 65 78 70 72 65  lue of.the expre
25d0: 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72  ssion that occur
25e0: 73 20 62 65 66 6f 72 65 20 74 68 65 20 41 53 20  s before the AS 
25f0: 6b 65 79 77 6f 72 64 2e 0a 5e 54 68 65 20 66 69  keyword..^The fi
2600: 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61  lename of the da
2610: 74 61 62 61 73 65 20 66 6f 6c 6c 6f 77 73 20 74  tabase follows t
2620: 68 65 20 73 61 6d 65 20 73 65 6d 61 6e 74 69 63  he same semantic
2630: 73 20 61 73 20 74 68 65 0a 66 69 6c 65 6e 61 6d  s as the.filenam
2640: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 5b 73  e argument to [s
2650: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 5d 20 61  qlite3_open()] a
2660: 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  nd [sqlite3_open
2670: 5f 76 32 28 29 5d 3b 20 74 68 65 0a 73 70 65 63  _v2()]; the.spec
2680: 69 61 6c 20 6e 61 6d 65 20 22 5b 3a 6d 65 6d 6f  ial name "[:memo
2690: 72 79 3a 5d 22 20 72 65 73 75 6c 74 73 20 69 6e  ry:]" results in
26a0: 20 61 6e 20 5b 69 6e 2d 6d 65 6d 6f 72 79 20 64   an [in-memory d
26b0: 61 74 61 62 61 73 65 5d 20 61 6e 64 20 61 6e 0a  atabase] and an.
26c0: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 72 65 73  empty string res
26d0: 75 6c 74 73 20 69 6e 20 61 20 6e 65 77 20 74 65  ults in a new te
26e0: 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65  mporary database
26f0: 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20  ..^The filename 
2700: 61 72 67 75 6d 65 6e 74 20 63 61 6e 20 62 65 20  argument can be 
2710: 61 20 5b 55 52 49 20 66 69 6c 65 6e 61 6d 65 5d  a [URI filename]
2720: 20 69 66 20 55 52 49 20 66 69 6c 65 6e 61 6d 65   if URI filename
2730: 20 70 72 6f 63 65 73 73 69 6e 67 0a 69 73 20 65   processing.is e
2740: 6e 61 62 6c 65 20 6f 6e 20 74 68 65 20 64 61 74  nable on the dat
2750: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2760: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 62  .  The default b
2770: 65 68 61 76 69 6f 72 20 69 73 20 66 6f 72 0a 55  ehavior is for.U
2780: 52 49 20 66 69 6c 65 6e 61 6d 65 73 20 74 6f 20  RI filenames to 
2790: 62 65 20 64 69 73 61 62 6c 65 64 2c 20 68 6f 77  be disabled, how
27a0: 65 76 65 72 20 74 68 61 74 20 6d 69 67 68 74 20  ever that might 
27b0: 63 68 61 6e 67 65 20 69 6e 20 61 20 66 75 74 75  change in a futu
27c0: 72 65 20 72 65 6c 65 61 73 65 0a 6f 66 20 53 51  re release.of SQ
27d0: 4c 69 74 65 2c 20 73 6f 20 61 70 70 6c 69 63 61  Lite, so applica
27e0: 74 69 6f 6e 20 64 65 76 65 6c 6f 70 65 72 73 20  tion developers 
27f0: 61 72 65 20 61 64 76 69 73 65 64 20 74 6f 20 70  are advised to p
2800: 6c 61 6e 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e  lan accordingly.
2810: 0a 0a 3c 70 3e 54 68 65 20 6e 61 6d 65 20 74 68  ..<p>The name th
2820: 61 74 20 6f 63 63 75 72 73 20 61 66 74 65 72 20  at occurs after 
2830: 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20 69  the AS keyword i
2840: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
2850: 65 20 64 61 74 61 62 61 73 65 0a 75 73 65 64 20  e database.used 
2860: 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51  internally by SQ
2870: 4c 69 74 65 2e 0a 5e 54 68 65 20 64 61 74 61 62  Lite..^The datab
2880: 61 73 65 2d 6e 61 6d 65 73 20 27 6d 61 69 6e 27  ase-names 'main'
2890: 20 61 6e 64 20 0a 27 74 65 6d 70 27 20 72 65 66   and .'temp' ref
28a0: 65 72 20 74 6f 20 74 68 65 20 6d 61 69 6e 20 64  er to the main d
28b0: 61 74 61 62 61 73 65 20 61 6e 64 20 74 68 65 20  atabase and the 
28c0: 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f  database used fo
28d0: 72 20 0a 74 65 6d 70 6f 72 61 72 79 20 74 61 62  r .temporary tab
28e0: 6c 65 73 2e 20 20 5e 54 68 65 20 6d 61 69 6e 20  les.  ^The main 
28f0: 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73  and temp databas
2900: 65 73 20 63 61 6e 6e 6f 74 20 62 65 20 61 74 74  es cannot be att
2910: 61 63 68 65 64 20 6f 72 0a 64 65 74 61 63 68 65  ached or.detache
2920: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 61  d.</p>..<p> ^(Ta
2930: 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74 61 63  bles in an attac
2940: 68 65 64 20 64 61 74 61 62 61 73 65 20 63 61 6e  hed database can
2950: 20 62 65 20 72 65 66 65 72 72 65 64 20 74 6f 20   be referred to 
2960: 75 73 69 6e 67 20 74 68 65 20 73 79 6e 74 61 78  using the syntax
2970: 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61   .<i>database-na
2980: 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  me.table-name</i
2990: 3e 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 6e 61  >.)^  ^If the na
29a0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
29b0: 69 73 20 75 6e 69 71 75 65 0a 61 63 72 6f 73 73  is unique.across
29c0: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
29d0: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
29e0: 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61  main and temp da
29f0: 74 61 62 61 73 65 73 2c 20 74 68 65 6e 20 74 68  tabases, then th
2a00: 65 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61  e.<i>database-na
2a10: 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73  me</i> prefix is
2a20: 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2e 20 20   not required.  
2a30: 5e 49 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  ^If two or more 
2a40: 74 61 62 6c 65 73 20 69 6e 0a 64 69 66 66 65 72  tables in.differ
2a50: 65 6e 74 20 64 61 74 61 62 61 73 65 73 20 68 61  ent databases ha
2a60: 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ve the same name
2a70: 20 61 6e 64 20 74 68 65 20 0a 3c 69 3e 64 61 74   and the .<i>dat
2a80: 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70  abase-name</i> p
2a90: 72 65 66 69 78 20 69 73 20 6e 6f 74 20 75 73 65  refix is not use
2aa0: 64 20 6f 6e 20 61 20 74 61 62 6c 65 20 72 65 66  d on a table ref
2ab0: 65 72 65 6e 63 65 2c 20 74 68 65 6e 20 74 68 65  erence, then the
2ac0: 0a 74 61 62 6c 65 20 63 68 6f 73 65 6e 20 69 73  .table chosen is
2ad0: 20 74 68 65 20 6f 6e 65 20 69 6e 20 74 68 65 20   the one in the 
2ae0: 64 61 74 61 62 61 73 65 20 74 68 61 74 20 77 61  database that wa
2af0: 73 20 6c 65 61 73 74 20 72 65 63 65 6e 74 6c 79  s least recently
2b00: 20 61 74 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a   attached.</p>..
2b10: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
2b20: 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
2b30: 69 70 6c 65 20 61 74 74 61 63 68 65 64 20 64 61  iple attached da
2b40: 74 61 62 61 73 65 73 20 61 72 65 20 61 74 6f 6d  tabases are atom
2b50: 69 63 2c 0a 61 73 73 75 6d 69 6e 67 20 74 68 61  ic,.assuming tha
2b60: 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
2b70: 61 73 65 20 69 73 20 6e 6f 74 20 22 5b 3a 6d 65  ase is not "[:me
2b80: 6d 6f 72 79 3a 5d 22 20 61 6e 64 20 74 68 65 20  mory:]" and the 
2b90: 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20  .[journal_mode] 
2ba0: 69 73 20 6e 6f 74 20 5b 57 41 4c 5d 2e 20 20 5e  is not [WAL].  ^
2bb0: 28 49 66 20 74 68 65 20 6d 61 69 6e 0a 64 61 74  (If the main.dat
2bc0: 61 62 61 73 65 20 69 73 20 22 3a 6d 65 6d 6f 72  abase is ":memor
2bd0: 79 3a 22 20 6f 72 20 69 66 20 74 68 65 20 6a 6f  y:" or if the jo
2be0: 75 72 6e 61 6c 5f 6d 6f 64 65 20 69 73 20 57 41  urnal_mode is WA
2bf0: 4c 2c 20 74 68 65 6e 20 0a 74 72 61 6e 73 61 63  L, then .transac
2c00: 74 69 6f 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74  tions continue t
2c10: 6f 20 62 65 20 61 74 6f 6d 69 63 20 77 69 74 68  o be atomic with
2c20: 69 6e 20 65 61 63 68 20 69 6e 64 69 76 69 64 75  in each individu
2c30: 61 6c 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  al.database file
2c40: 2e 20 42 75 74 20 69 66 20 74 68 65 20 68 6f 73  . But if the hos
2c50: 74 20 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68  t computer crash
2c60: 65 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  es in the middle
2c70: 0a 6f 66 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 77  .of a [COMMIT] w
2c80: 68 65 72 65 20 74 77 6f 20 6f 72 20 6d 6f 72 65  here two or more
2c90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
2ca0: 61 72 65 20 75 70 64 61 74 65 64 2c 0a 73 6f 6d  are updated,.som
2cb0: 65 20 6f 66 20 74 68 6f 73 65 20 66 69 6c 65 73  e of those files
2cc0: 20 6d 69 67 68 74 20 67 65 74 20 74 68 65 20 63   might get the c
2cd0: 68 61 6e 67 65 73 20 77 68 65 72 65 20 6f 74 68  hanges where oth
2ce0: 65 72 73 0a 6d 69 67 68 74 20 6e 6f 74 2e 29 5e  ers.might not.)^
2cf0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 72  .</p>..<p> ^Ther
2d00: 65 20 69 73 20 61 20 6c 69 6d 69 74 2c 20 73 65  e is a limit, se
2d10: 74 20 75 73 69 6e 67 20 5b 73 71 6c 69 74 65 33  t using [sqlite3
2d20: 5f 6c 69 6d 69 74 28 29 5d 20 61 6e 64 20 0a 5b  _limit()] and .[
2d30: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 41 54 54  SQLITE_LIMIT_ATT
2d40: 41 43 48 45 44 5d 2c 20 74 6f 20 74 68 65 20 6e  ACHED], to the n
2d50: 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61 73  umber of databas
2d60: 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a 73  es that can be.s
2d70: 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 20 61 74  imultaneously at
2d80: 74 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e 67  tached to a sing
2d90: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
2da0: 65 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63  ection.</p>..<tc
2db0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
2dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e00: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 42 45 47 49  ##.Section {BEGI
2e10: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74  N TRANSACTION} t
2e20: 72 61 6e 73 61 63 74 69 6f 6e 20 7b 2a 42 45 47  ransaction {*BEG
2e30: 49 4e 20 43 4f 4d 4d 49 54 20 52 4f 4c 4c 42 41  IN COMMIT ROLLBA
2e40: 43 4b 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  CK}..RecursiveBu
2e50: 62 62 6c 65 44 69 61 67 72 61 6d 20 62 65 67 69  bbleDiagram begi
2e60: 6e 2d 73 74 6d 74 20 63 6f 6d 6d 69 74 2d 73 74  n-stmt commit-st
2e70: 6d 74 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74  mt rollback-stmt
2e80: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f  .</tcl>..<p>.^No
2e90: 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20   changes can be 
2ea0: 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61 74 61  made to the data
2eb0: 62 61 73 65 20 65 78 63 65 70 74 20 77 69 74 68  base except with
2ec0: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
2ed0: 2e 0a 5e 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74  ..^Any command t
2ee0: 68 61 74 20 63 68 61 6e 67 65 73 20 74 68 65 20  hat changes the 
2ef0: 64 61 74 61 62 61 73 65 20 28 62 61 73 69 63 61  database (basica
2f00: 6c 6c 79 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d  lly, any SQL com
2f10: 6d 61 6e 64 0a 6f 74 68 65 72 20 74 68 61 6e 20  mand.other than 
2f20: 5b 53 45 4c 45 43 54 5d 29 20 77 69 6c 6c 20 61  [SELECT]) will a
2f30: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61  utomatically sta
2f40: 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
2f50: 20 69 66 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61   if.one is not a
2f60: 6c 72 65 61 64 79 20 69 6e 20 65 66 66 65 63 74  lready in effect
2f70: 2e 20 20 5e 41 75 74 6f 6d 61 74 69 63 61 6c 6c  .  ^Automaticall
2f80: 79 20 73 74 61 72 74 65 64 20 74 72 61 6e 73 61  y started transa
2f90: 63 74 69 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d 69  ctions.are commi
2fa0: 74 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  tted when the la
2fb0: 73 74 20 71 75 65 72 79 20 66 69 6e 69 73 68 65  st query finishe
2fc0: 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72  s..</p>..<p>.^Tr
2fd0: 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62  ansactions can b
2fe0: 65 20 73 74 61 72 74 65 64 20 6d 61 6e 75 61 6c  e started manual
2ff0: 6c 79 20 75 73 69 6e 67 20 74 68 65 20 42 45 47  ly using the BEG
3000: 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20 5e 28 53  IN.command.  ^(S
3010: 75 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  uch transactions
3020: 20 75 73 75 61 6c 6c 79 20 70 65 72 73 69 73 74   usually persist
3030: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a   until the next.
3040: 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41  COMMIT or ROLLBA
3050: 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 42 75 74  CK command.  But
3060: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77   a transaction w
3070: 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42 41  ill also .ROLLBA
3080: 43 4b 20 69 66 20 74 68 65 20 64 61 74 61 62 61  CK if the databa
3090: 73 65 20 69 73 20 63 6c 6f 73 65 64 20 6f 72 20  se is closed or 
30a0: 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  if an error occu
30b0: 72 73 0a 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42  rs.and the ROLLB
30c0: 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACK conflict res
30d0: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
30e0: 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 29  m is specified.)
30f0: 5e 0a 53 65 65 20 74 68 65 20 64 6f 63 75 6d 65  ^.See the docume
3100: 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 5b  ntation on the [
3110: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61  ON CONFLICT].cla
3120: 75 73 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  use for addition
3130: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  al information a
3140: 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c 42 41 43  bout the ROLLBAC
3150: 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  K.conflict resol
3160: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e  ution algorithm.
3170: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 45 4e 44 20  .</p>..<p>.^END 
3180: 54 52 41 4e 53 41 43 54 49 4f 4e 20 69 73 20 61  TRANSACTION is a
3190: 6e 20 61 6c 69 61 73 20 66 6f 72 20 43 4f 4d 4d  n alias for COMM
31a0: 49 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28  IT..</p>..<p> ^(
31b0: 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 72 65  Transactions cre
31c0: 61 74 65 64 20 75 73 69 6e 67 20 42 45 47 49 4e  ated using BEGIN
31d0: 2e 2e 2e 43 4f 4d 4d 49 54 20 64 6f 20 6e 6f 74  ...COMMIT do not
31e0: 20 6e 65 73 74 2e 29 5e 0a 5e 46 6f 72 20 6e 65   nest.)^.^For ne
31f0: 73 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  sted transaction
3200: 73 2c 20 75 73 65 20 74 68 65 20 5b 53 41 56 45  s, use the [SAVE
3210: 50 4f 49 4e 54 5d 20 61 6e 64 20 5b 52 45 4c 45  POINT] and [RELE
3220: 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 54  ASE] commands..T
3230: 68 65 20 22 54 4f 20 53 41 56 45 50 4f 49 4e 54  he "TO SAVEPOINT
3240: 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 22 20 63 6c   <i>name</i>" cl
3250: 61 75 73 65 20 6f 66 20 74 68 65 20 52 4f 4c 4c  ause of the ROLL
3260: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 73 68 6f  BACK command sho
3270: 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e 74 61 78  wn.in the syntax
3280: 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 20 69   diagram above i
3290: 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63 61 62 6c  s only applicabl
32a0: 65 20 74 6f 20 5b 53 41 56 45 50 4f 49 4e 54 5d  e to [SAVEPOINT]
32b0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20  .transactions.  
32c0: 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 69  ^An attempt to i
32d0: 6e 76 6f 6b 65 20 74 68 65 20 42 45 47 49 4e 20  nvoke the BEGIN 
32e0: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 0a 61  command within.a
32f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c   transaction wil
3300: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l fail with an e
3310: 72 72 6f 72 2c 20 72 65 67 61 72 64 6c 65 73 73  rror, regardless
3320: 20 6f 66 20 77 68 65 74 68 65 72 0a 74 68 65 20   of whether.the 
3330: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20  transaction was 
3340: 73 74 61 72 74 65 64 20 62 79 20 5b 53 41 56 45  started by [SAVE
3350: 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70 72 69 6f  POINT] or a prio
3360: 72 20 42 45 47 49 4e 2e 0a 5e 54 68 65 20 43 4f  r BEGIN..^The CO
3370: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64  MMIT command and
3380: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
3390: 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 74 68  mmand without th
33a0: 65 20 54 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b  e TO clause.work
33b0: 20 74 68 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41   the same on [SA
33c0: 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63  VEPOINT] transac
33d0: 74 69 6f 6e 73 20 61 73 20 74 68 65 79 20 64 6f  tions as they do
33e0: 20 77 69 74 68 20 74 72 61 6e 73 61 63 74 69 6f   with transactio
33f0: 6e 73 0a 73 74 61 72 74 65 64 20 62 79 20 42 45  ns.started by BE
3400: 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  GIN.</p>..<tcl>h
3410: 64 5f 66 72 61 67 6d 65 6e 74 20 69 6d 6d 6d 65  d_fragment immme
3420: 64 69 61 74 65 20 7b 42 45 47 49 4e 20 49 4d 4d  diate {BEGIN IMM
3430: 45 44 49 41 54 45 7d 20 7b 42 45 47 49 4e 20 45  EDIATE} {BEGIN E
3440: 58 43 4c 55 53 49 56 45 7d 3c 2f 74 63 6c 3e 0a  XCLUSIVE}</tcl>.
3450: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
3460: 73 20 63 61 6e 20 62 65 20 64 65 66 65 72 72 65  s can be deferre
3470: 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72  d, immediate, or
3480: 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 5e 54   exclusive.  .^T
3490: 68 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73  he default trans
34a0: 61 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72 20  action behavior 
34b0: 69 73 20 64 65 66 65 72 72 65 64 2e 0a 5e 44 65  is deferred..^De
34c0: 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61  ferred means tha
34d0: 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61  t no locks are a
34e0: 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64  cquired.on the d
34f0: 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68  atabase until th
3500: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69  e database is fi
3510: 72 73 74 20 61 63 63 65 73 73 65 64 2e 20 20 5e  rst accessed.  ^
3520: 54 68 75 73 20 77 69 74 68 20 61 0a 64 65 66 65  Thus with a.defe
3530: 72 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  rred transaction
3540: 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74 61 74  , the BEGIN stat
3550: 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64 6f 65  ement itself doe
3560: 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
3570: 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20 20 5e 4c  .filesystem.  ^L
3580: 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63 71  ocks.are not acq
3590: 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20  uired until the 
35a0: 66 69 72 73 74 20 72 65 61 64 20 6f 72 20 77 72  first read or wr
35b0: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ite operation.  
35c0: 5e 54 68 65 20 66 69 72 73 74 20 72 65 61 64 0a  ^The first read.
35d0: 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e 73  operation agains
35e0: 74 20 61 20 64 61 74 61 62 61 73 65 20 63 72 65  t a database cre
35f0: 61 74 65 73 20 61 20 5b 53 48 41 52 45 44 5d 20  ates a [SHARED] 
3600: 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66 69 72  lock and the fir
3610: 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69  st.write operati
3620: 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b 52 45  on creates a [RE
3630: 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20 20 20  SERVED] lock.   
3640: 5e 42 65 63 61 75 73 65 20 74 68 65 20 61 63 71  ^Because the acq
3650: 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b  uisition of.lock
3660: 73 20 69 73 20 64 65 66 65 72 72 65 64 20 75 6e  s is deferred un
3670: 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65 65  til they are nee
3680: 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73 69  ded, it is possi
3690: 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
36a0: 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65  .thread or proce
36b0: 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65 20  ss could create 
36c0: 61 20 73 65 70 61 72 61 74 65 20 74 72 61 6e 73  a separate trans
36d0: 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74 65  action and write
36e0: 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73 65   to.the database
36f0: 20 61 66 74 65 72 20 74 68 65 20 42 45 47 49 4e   after the BEGIN
3700: 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   on the current 
3710: 74 68 72 65 61 64 20 68 61 73 20 65 78 65 63 75  thread has execu
3720: 74 65 64 2e 0a 5e 49 66 20 74 68 65 20 74 72 61  ted..^If the tra
3730: 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65  nsaction is imme
3740: 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52 45 53  diate, then [RES
3750: 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65  ERVED] locks.are
3760: 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c   acquired on all
3770: 20 64 61 74 61 62 61 73 65 73 20 61 73 20 73 6f   databases as so
3780: 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e 20  on as the BEGIN 
3790: 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63 75  command is.execu
37a0: 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61 69  ted, without wai
37b0: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61 74  ting for the.dat
37c0: 61 62 61 73 65 20 74 6f 20 62 65 20 75 73 65 64  abase to be used
37d0: 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45 47 49  .  ^After a BEGI
37e0: 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a 6e 6f  N IMMEDIATE, .no
37f0: 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65   other [database
3800: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77 69 6c   connection] wil
3810: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69  l be able to wri
3820: 74 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  te to the databa
3830: 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e  se or.do a BEGIN
3840: 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20 42 45   IMMEDIATE or BE
3850: 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e 20 20  GIN EXCLUSIVE.  
3860: 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73  ^Other processes
3870: 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f   can continue.to
3880: 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64   read from the d
3890: 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65 72  atabase, however
38a0: 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69 76 65  .  ^An exclusive
38b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75   transaction cau
38c0: 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20  ses.[EXCLUSIVE] 
38d0: 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75  locks to be acqu
38e0: 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61  ired on all data
38f0: 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72 20 61  bases.  ^After a
3900: 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49 56 45   BEGIN.EXCLUSIVE
3910: 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61  , no other [data
3920: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
3930: 20 65 78 63 65 70 74 20 66 6f 72 20 5b 72 65 61   except for [rea
3940: 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d 0a 63  d_uncommitted].c
3950: 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c 6c 20  onnections will 
3960: 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20  be able to read 
3970: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
3980: 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63   no other connec
3990: 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65 78 63  tion without.exc
39a0: 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  eption will be a
39b0: 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74 68 65  ble to write the
39c0: 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20   database until 
39d0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
39e0: 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70  is.complete..</p
39f0: 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c  >..<p>.^(An impl
3a00: 69 63 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  icit transaction
3a10: 20 28 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   (a transaction 
3a20: 74 68 61 74 20 69 73 20 73 74 61 72 74 65 64 20  that is started 
3a30: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e  automatically,.n
3a40: 6f 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ot a transaction
3a50: 20 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49   started by BEGI
3a60: 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 20  N) is committed 
3a70: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
3a80: 65 6e 0a 74 68 65 20 6c 61 73 74 20 61 63 74 69  en.the last acti
3a90: 76 65 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e  ve statement fin
3aa0: 69 73 68 65 73 2e 20 20 41 20 73 74 61 74 65 6d  ishes.  A statem
3ab0: 65 6e 74 20 66 69 6e 69 73 68 65 73 20 77 68 65  ent finishes whe
3ac0: 6e 20 69 74 73 0a 70 72 65 70 61 72 65 64 20 73  n its.prepared s
3ad0: 74 61 74 65 6d 65 6e 74 20 69 73 20 5b 73 71 6c  tatement is [sql
3ae0: 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c 20 72  ite3_reset() | r
3af0: 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69 74 65  eset] or.[sqlite
3b00: 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c 20 66  3_finalize() | f
3b10: 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e 20 6f  inalized].  An o
3b20: 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f  pen [sqlite3_blo
3b30: 62 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e 63 72  b] used for.incr
3b40: 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f  emental BLOB I/O
3b50: 20 63 6f 75 6e 74 73 20 61 73 20 61 6e 20 75 6e   counts as an un
3b60: 66 69 6e 69 73 68 65 64 20 73 74 61 74 65 6d 65  finished stateme
3b70: 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65  nt.  The [sqlite
3b80: 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68 65 73  3_blob].finishes
3b90: 20 77 68 65 6e 20 69 74 20 69 73 20 5b 73 71 6c   when it is [sql
3ba0: 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28  ite3_blob_close(
3bb0: 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c  ) | closed].)^.<
3bc0: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65 78  /p>..<p>.^The ex
3bd0: 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20 63 6f  plicit COMMIT co
3be0: 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d 65 64  mmand runs immed
3bf0: 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69 66 20  iately, even if 
3c00: 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64 69 6e  there are.pendin
3c10: 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  g [SELECT] state
3c20: 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76 65 72  ments.  ^However
3c30: 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 20 70  , if there are p
3c40: 65 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f 70 65  ending.write ope
3c50: 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 43 4f 4d  rations, the COM
3c60: 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c  MIT command.will
3c70: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
3c80: 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45  ror code [SQLITE
3c90: 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70  _BUSY]..</p>..<p
3ca0: 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  >.^An attempt to
3cb0: 20 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54 20   execute COMMIT 
3cc0: 6d 69 67 68 74 20 61 6c 73 6f 20 72 65 73 75 6c  might also resul
3cd0: 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f  t in an [SQLITE_
3ce0: 42 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f 64  BUSY] return cod
3cf0: 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65 72 20  e.if an another 
3d00: 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73  thread or proces
3d10: 73 20 68 61 73 20 61 20 5b 73 68 61 72 65 64 20  s has a [shared 
3d20: 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61 74  lock] on the dat
3d30: 61 62 61 73 65 0a 74 68 61 74 20 70 72 65 76 65  abase.that preve
3d40: 6e 74 65 64 20 74 68 65 20 64 61 74 61 62 61 73  nted the databas
3d50: 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70 64  e from being upd
3d60: 61 74 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f 4d  ated.  ^When COM
3d70: 4d 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68 69  MIT fails in thi
3d80: 73 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e 73  s.way, the trans
3d90: 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61  action remains a
3da0: 63 74 69 76 65 20 61 6e 64 20 74 68 65 20 43 4f  ctive and the CO
3db0: 4d 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74 72  MMIT can be retr
3dc0: 69 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72 20  ied later.after 
3dd0: 74 68 65 20 72 65 61 64 65 72 20 68 61 73 20 68  the reader has h
3de0: 61 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20 63  ad a chance to c
3df0: 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  lear..</p>..<p>.
3e00: 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69  ^The ROLLBACK wi
3e10: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
3e20: 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49  error code [SQLI
3e30: 54 45 5f 42 55 53 59 5d 20 69 66 20 74 68 65 72  TE_BUSY] if ther
3e40: 65 0a 61 72 65 20 61 6e 79 20 70 65 6e 64 69 6e  e.are any pendin
3e50: 67 20 71 75 65 72 69 65 73 2e 20 20 5e 42 6f 74  g queries.  ^Bot
3e60: 68 20 72 65 61 64 2d 6f 6e 6c 79 20 61 6e 64 20  h read-only and 
3e70: 72 65 61 64 2f 77 72 69 74 65 20 71 75 65 72 69  read/write queri
3e80: 65 73 20 77 69 6c 6c 0a 63 61 75 73 65 20 61 20  es will.cause a 
3e90: 52 4f 4c 4c 42 41 43 4b 20 74 6f 20 66 61 69 6c  ROLLBACK to fail
3ea0: 2e 20 20 41 20 52 4f 4c 4c 42 41 43 4b 20 6d 75  .  A ROLLBACK mu
3eb0: 73 74 20 66 61 69 6c 20 69 66 20 74 68 65 72 65  st fail if there
3ec0: 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 72 65 61   are pending.rea
3ed0: 64 20 6f 70 65 72 61 74 69 6f 6e 73 20 28 75 6e  d operations (un
3ee0: 6c 69 6b 65 20 43 4f 4d 4d 49 54 20 77 68 69 63  like COMMIT whic
3ef0: 68 20 63 61 6e 20 73 75 63 63 65 65 64 29 20 62  h can succeed) b
3f00: 65 63 61 75 73 65 20 62 61 64 20 74 68 69 6e 67  ecause bad thing
3f10: 73 0a 77 69 6c 6c 20 68 61 70 70 65 6e 20 69 66  s.will happen if
3f20: 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 69   the in-memory i
3f30: 6d 61 67 65 20 6f 66 20 74 68 65 20 64 61 74 61  mage of the data
3f40: 62 61 73 65 20 69 73 20 63 68 61 6e 67 65 64 20  base is changed 
3f50: 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 0a 61  out from under.a
3f60: 6e 20 61 63 74 69 76 65 20 71 75 65 72 79 2e 0a  n active query..
3f70: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52  </p>..<p>.If [PR
3f80: 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
3f90: 65 5d 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46  e] is set to OFF
3fa0: 20 28 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67   (thus disabling
3fb0: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f   the rollback jo
3fc0: 75 72 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e  urnal.file) then
3fd0: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66   the behavior of
3fe0: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
3ff0: 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e  mmand is undefin
4000: 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65  ed..</p>..<h3>Re
4010: 73 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73  sponse To Errors
4020: 20 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61   Within A Transa
4030: 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20  ction</h3>..<p> 
4040: 5e 28 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e  ^(If certain kin
4050: 64 73 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63  ds of errors occ
4060: 75 72 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  ur within a tran
4070: 73 61 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61  saction, the.tra
4080: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20  nsaction may or 
4090: 6d 61 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65  may not be rolle
40a0: 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63  d back automatic
40b0: 61 6c 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72  ally.  The.error
40c0: 73 20 74 68 61 74 20 63 61 6e 20 63 61 75 73 65  s that can cause
40d0: 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
40e0: 6c 6c 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c  llback include:<
40f0: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b  /p>..<ul>.<li> [
4100: 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61  SQLITE_FULL]: da
4110: 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66  tabase or disk f
4120: 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ull.<li> [SQLITE
4130: 5f 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f  _IOERR]: disk I/
4140: 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51  O error.<li> [SQ
4150: 4c 49 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61  LITE_BUSY]: data
4160: 62 61 73 65 20 69 6e 20 75 73 65 20 62 79 20 61  base in use by a
4170: 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c  nother process.<
4180: 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45  li> [SQLITE_NOME
4190: 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72  M]: out or memor
41a0: 79 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49  y.<li> [SQLITE_I
41b0: 4e 54 45 52 52 55 50 54 5d 3a 20 70 72 6f 63 65  NTERRUPT]: proce
41c0: 73 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 69  ssing [sqlite3_i
41d0: 6e 74 65 72 72 75 70 74 7c 69 6e 74 65 72 72 75  nterrupt|interru
41e0: 70 74 65 64 5d 0a 20 20 20 20 20 62 79 20 61 70  pted].     by ap
41f0: 70 6c 69 63 61 74 69 6f 6e 20 72 65 71 75 65 73  plication reques
4200: 74 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e  t.</ul>)^..<p>.^
4210: 46 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65  For all of these
4220: 20 65 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20   errors, SQLite 
4230: 61 74 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f  attempts to undo
4240: 20 6a 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74   just the one st
4250: 61 74 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77  atement.it was w
4260: 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65  orking on and le
4270: 61 76 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d  ave changes from
4280: 20 70 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74   prior statement
4290: 73 20 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d  s within the.sam
42a0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e  e transaction in
42b0: 74 61 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  tact and continu
42c0: 65 20 77 69 74 68 20 74 68 65 20 74 72 61 6e 73  e with the trans
42d0: 61 63 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65  action.  ^Howeve
42e0: 72 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r, .depending on
42f0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62   the statement b
4300: 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61  eing evaluated a
4310: 6e 64 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20  nd the point at 
4320: 77 68 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20  which the.error 
4330: 6f 63 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74  occurs, it might
4340: 20 62 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f   be necessary fo
4350: 72 20 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c  r SQLite to roll
4360: 62 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20  back and.cancel 
4370: 74 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73  the entire trans
4380: 61 63 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70  action.  ^An app
4390: 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c  lication can tel
43a0: 6c 20 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f  l which.course o
43b0: 66 20 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20  f action SQLite 
43c0: 74 6f 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68  took by using th
43d0: 65 0a 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  e.[sqlite3_get_a
43e0: 75 74 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c  utocommit()] C-l
43f0: 61 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61 63  anguage interfac
4400: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73  e.</p>..<p>It is
4410: 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61   recommended tha
4420: 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72  t applications r
4430: 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72  espond to the er
4440: 72 6f 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76  rors.listed abov
4450: 65 20 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20  e by explicitly 
4460: 69 73 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41  issuing a ROLLBA
4470: 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66  CK command.  ^If
4480: 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f   the .transactio
4490: 6e 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  n has already be
44a0: 65 6e 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61  en rolled back a
44b0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20  utomatically.by 
44c0: 74 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e  the error respon
44d0: 73 65 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c  se, then the ROL
44e0: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69  LBACK command wi
44f0: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a  ll fail with an.
4500: 65 72 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61  error, but no ha
4510: 72 6d 20 69 73 20 63 61 75 73 65 64 20 62 79 20  rm is caused by 
4520: 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75  this.</p>..<p>Fu
4530: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
4540: 20 53 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65   SQLite may exte
4550: 6e 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  nd the list of e
4560: 72 72 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68  rrors which.migh
4570: 74 20 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69  t cause automati
4580: 63 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f  c transaction ro
4590: 6c 6c 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20  llback.  Future 
45a0: 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69  versions of.SQLi
45b0: 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  te might change 
45c0: 74 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e  the error respon
45d0: 73 65 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c  se.  In particul
45e0: 61 72 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73  ar, we may.choos
45f0: 65 20 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68  e to simplify th
4600: 65 20 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66  e interface in f
4610: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f  uture versions o
4620: 66 20 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73  f SQLite by.caus
4630: 69 6e 67 20 74 68 65 20 65 72 72 6f 72 73 20 61  ing the errors a
4640: 62 6f 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e  bove to force an
4650: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72   unconditional r
4660: 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74  ollback.</p>..<t
4670: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
4680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46c0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56  ###.Section {SAV
46d0: 45 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e  EPOINT} savepoin
46e0: 74 20 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c  t {SAVEPOINT REL
46f0: 45 41 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65  EASE}..Recursive
4700: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61  BubbleDiagram sa
4710: 76 65 70 6f 69 6e 74 2d 73 74 6d 74 20 72 65 6c  vepoint-stmt rel
4720: 65 61 73 65 2d 73 74 6d 74 20 72 6f 6c 6c 62 61  ease-stmt rollba
4730: 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ck-stmt.</tcl>..
4740: 3c 70 3e 20 5e 53 41 56 45 50 4f 49 4e 54 73 20  <p> ^SAVEPOINTs 
4750: 61 72 65 20 61 20 6d 65 74 68 6f 64 20 6f 66 20  are a method of 
4760: 63 72 65 61 74 69 6e 67 20 74 72 61 6e 73 61 63  creating transac
4770: 74 69 6f 6e 73 2c 20 73 69 6d 69 6c 61 72 20 74  tions, similar t
4780: 6f 0a 5b 42 45 47 49 4e 5d 20 61 6e 64 20 5b 43  o.[BEGIN] and [C
4790: 4f 4d 4d 49 54 5d 2c 20 65 78 63 65 70 74 20 74  OMMIT], except t
47a0: 68 61 74 20 74 68 65 20 53 41 56 45 50 4f 49 4e  hat the SAVEPOIN
47b0: 54 20 61 6e 64 20 52 45 4c 45 41 53 45 20 63 6f  T and RELEASE co
47c0: 6d 6d 61 6e 64 73 0a 61 72 65 20 6e 61 6d 65 64  mmands.are named
47d0: 20 61 6e 64 20 6d 61 79 20 62 65 20 6e 65 73 74   and may be nest
47e0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68  ed.</p>..<p> ^Th
47f0: 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d  e SAVEPOINT comm
4800: 61 6e 64 20 73 74 61 72 74 73 20 61 20 6e 65 77  and starts a new
4810: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74   transaction wit
4820: 68 20 61 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 74  h a name..^The t
4830: 72 61 6e 73 61 63 74 69 6f 6e 20 6e 61 6d 65 73  ransaction names
4840: 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 75 6e 69   need not be uni
4850: 71 75 65 2e 0a 5e 28 41 20 53 41 56 45 50 4f 49  que..^(A SAVEPOI
4860: 4e 54 20 63 61 6e 20 62 65 20 73 74 61 72 74 65  NT can be starte
4870: 64 20 65 69 74 68 65 72 20 77 69 74 68 69 6e 20  d either within 
4880: 6f 72 20 6f 75 74 73 69 64 65 20 6f 66 0a 61 20  or outside of.a 
4890: 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49  [BEGIN]...[COMMI
48a0: 54 5d 2e 29 5e 20 20 5e 28 57 68 65 6e 20 61 20  T].)^  ^(When a 
48b0: 53 41 56 45 50 4f 49 4e 54 20 69 73 20 74 68 65  SAVEPOINT is the
48c0: 20 6f 75 74 65 72 2d 6d 6f 73 74 20 73 61 76 65   outer-most save
48d0: 70 6f 69 6e 74 0a 61 6e 64 20 69 74 20 69 73 20  point.and it is 
48e0: 6e 6f 74 20 77 69 74 68 69 6e 20 61 20 5b 42 45  not within a [BE
48f0: 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20  GIN]...[COMMIT] 
4900: 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
4910: 72 20 69 73 20 74 68 65 0a 73 61 6d 65 20 61 73  r is the.same as
4920: 20 42 45 47 49 4e 20 44 45 46 45 52 52 45 44 20   BEGIN DEFERRED 
4930: 54 52 41 4e 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f  TRANSACTION.)^</
4940: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c  p>..<p>^The ROLL
4950: 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20  BACK TO command 
4960: 72 65 76 65 72 74 73 20 74 68 65 20 73 74 61 74  reverts the stat
4970: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
4980: 65 20 62 61 63 6b 20 74 6f 20 77 68 61 74 0a 69  e back to what.i
4990: 74 20 77 61 73 20 6a 75 73 74 20 61 66 74 65 72  t was just after
49a0: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
49b0: 6e 67 20 53 41 56 45 50 4f 49 4e 54 2e 20 20 5e  ng SAVEPOINT.  ^
49c0: 4e 6f 74 65 20 74 68 61 74 20 75 6e 6c 69 6b 65  Note that unlike
49d0: 20 74 68 61 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c   that.plain [ROL
49e0: 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28  LBACK] command (
49f0: 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f 20 6b  without the TO k
4a00: 65 79 77 6f 72 64 29 20 74 68 65 20 52 4f 4c 4c  eyword) the ROLL
4a10: 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a  BACK TO command.
4a20: 64 6f 65 73 20 6e 6f 74 20 63 61 6e 63 65 6c 20  does not cancel 
4a30: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
4a40: 20 20 5e 49 6e 73 74 65 61 64 20 6f 66 20 63 61    ^Instead of ca
4a50: 6e 63 65 6c 6c 69 6e 67 20 74 68 65 20 74 72 61  ncelling the tra
4a60: 6e 73 61 63 74 69 6f 6e 2c 0a 74 68 65 20 52 4f  nsaction,.the RO
4a70: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
4a80: 64 20 72 65 73 74 61 72 74 73 20 74 68 65 20 74  d restarts the t
4a90: 72 61 6e 73 61 63 74 69 6f 6e 20 61 67 61 69 6e  ransaction again
4aa0: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
4ab0: 67 2e 0a 5e 41 6c 6c 20 69 6e 74 65 72 76 65 6e  g..^All interven
4ac0: 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 73 20 61  ing SAVEPOINTs a
4ad0: 72 65 20 63 61 6e 63 65 6c 65 64 2c 20 68 6f 77  re canceled, how
4ae0: 65 76 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ever.</p>..<p>^T
4af0: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
4b00: 6e 64 20 69 73 20 6c 69 6b 65 20 61 20 5b 43 4f  nd is like a [CO
4b10: 4d 4d 49 54 5d 20 66 6f 72 20 61 20 53 41 56 45  MMIT] for a SAVE
4b20: 50 4f 49 4e 54 2e 0a 5e 54 68 65 20 52 45 4c 45  POINT..^The RELE
4b30: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73  ASE command caus
4b40: 65 73 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74  es all savepoint
4b50: 73 20 62 61 63 6b 20 74 6f 20 61 6e 64 20 69 6e  s back to and in
4b60: 63 6c 75 64 69 6e 67 20 74 68 65 20 0a 6d 6f 73  cluding the .mos
4b70: 74 20 72 65 63 65 6e 74 20 73 61 76 65 70 6f 69  t recent savepoi
4b80: 6e 74 20 77 69 74 68 20 61 20 6d 61 74 63 68 69  nt with a matchi
4b90: 6e 67 20 6e 61 6d 65 20 74 6f 20 62 65 20 72 65  ng name to be re
4ba0: 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 0a  moved from the .
4bb0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
4bc0: 6b 2e 20 20 5e 54 68 65 20 52 45 4c 45 41 53 45  k.  ^The RELEASE
4bd0: 20 6f 66 20 61 6e 20 69 6e 6e 65 72 20 74 72 61   of an inner tra
4be0: 6e 73 61 63 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f  nsaction.does no
4bf0: 74 20 63 61 75 73 65 20 61 6e 79 20 63 68 61 6e  t cause any chan
4c00: 67 65 73 20 74 6f 20 62 65 20 77 72 69 74 74 65  ges to be writte
4c10: 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  n to the databas
4c20: 65 20 66 69 6c 65 3b 20 69 74 20 6d 65 72 65 6c  e file; it merel
4c30: 79 0a 72 65 6d 6f 76 65 73 20 73 61 76 65 70 6f  y.removes savepo
4c40: 69 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 74 72  ints from the tr
4c50: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
4c60: 73 75 63 68 20 74 68 61 74 20 69 74 20 69 73 0a  such that it is.
4c70: 6e 6f 20 6c 6f 6e 67 65 72 20 70 6f 73 73 69 62  no longer possib
4c80: 6c 65 20 74 6f 20 52 4f 4c 4c 42 41 43 4b 20 54  le to ROLLBACK T
4c90: 4f 20 74 68 6f 73 65 20 73 61 76 65 70 6f 69 6e  O those savepoin
4ca0: 74 73 2e 0a 5e 49 66 20 61 20 52 45 4c 45 41 53  ts..^If a RELEAS
4cb0: 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73  E command releas
4cc0: 65 73 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  es the outermost
4cd0: 20 73 61 76 65 70 6f 69 6e 74 2c 20 73 6f 0a 74   savepoint, so.t
4ce0: 68 61 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  hat the transact
4cf0: 69 6f 6e 20 73 74 61 63 6b 20 62 65 63 6f 6d 65  ion stack become
4d00: 73 20 65 6d 70 74 79 2c 20 74 68 65 6e 20 52 45  s empty, then RE
4d10: 4c 45 41 53 45 20 69 73 20 74 68 65 20 73 61 6d  LEASE is the sam
4d20: 65 0a 61 73 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e  e.as [COMMIT]..^
4d30: 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d  The [COMMIT] com
4d40: 6d 61 6e 64 20 6d 61 79 20 62 65 20 75 73 65 64  mand may be used
4d50: 20 74 6f 20 72 65 6c 65 61 73 65 20 61 6c 6c 20   to release all 
4d60: 73 61 76 65 70 6f 69 6e 74 73 20 61 6e 64 0a 63  savepoints and.c
4d70: 6f 6d 6d 69 74 20 74 68 65 20 74 72 61 6e 73 61  ommit the transa
4d80: 63 74 69 6f 6e 20 65 76 65 6e 20 69 66 20 74 68  ction even if th
4d90: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61  e transaction wa
4da0: 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73 74 61  s originally sta
4db0: 72 74 65 64 0a 62 79 20 61 20 53 41 56 45 50 4f  rted.by a SAVEPO
4dc0: 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 69 6e 73 74  INT command inst
4dd0: 65 61 64 20 6f 66 20 61 20 5b 42 45 47 49 4e 5d  ead of a [BEGIN]
4de0: 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c   command.</p>..<
4df0: 70 3e 5e 49 66 20 74 68 65 20 73 61 76 65 70 6f  p>^If the savepo
4e00: 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52 45  int-name in a RE
4e10: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 64 6f  LEASE command do
4e20: 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79  es not match any
4e30: 0a 73 61 76 65 70 6f 69 6e 74 20 63 75 72 72 65  .savepoint curre
4e40: 6e 74 6c 79 20 69 6e 20 74 68 65 20 74 72 61 6e  ntly in the tran
4e50: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 20 74  saction stack, t
4e60: 68 65 6e 20 6e 6f 20 73 61 76 65 70 6f 69 6e 74  hen no savepoint
4e70: 73 20 61 72 65 0a 72 65 6c 65 61 73 65 64 2c 20  s are.released, 
4e80: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
4e90: 75 6e 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 74  unchanged, and t
4ea0: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
4eb0: 6e 64 20 72 65 74 75 72 6e 73 0a 61 6e 20 65 72  nd returns.an er
4ec0: 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f  ror.</p>..<p>^No
4ed0: 74 65 20 74 68 61 74 20 61 6e 20 69 6e 6e 65 72  te that an inner
4ee0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67   transaction mig
4ef0: 68 74 20 63 6f 6d 6d 69 74 20 28 75 73 69 6e 67  ht commit (using
4f00: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
4f10: 6d 61 6e 64 29 0a 62 75 74 20 74 68 65 6e 20 6c  mand).but then l
4f20: 61 74 65 72 20 68 61 76 65 20 69 74 73 20 77 6f  ater have its wo
4f30: 72 6b 20 75 6e 64 6f 6e 65 20 62 79 20 61 20 52  rk undone by a R
4f40: 4f 4c 4c 42 41 43 4b 20 69 6e 20 61 6e 20 6f 75  OLLBACK in an ou
4f50: 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ter transaction.
4f60: 0a 5e 41 20 70 6f 77 65 72 20 66 61 69 6c 75 72  .^A power failur
4f70: 65 20 6f 72 20 70 72 6f 67 72 61 6d 20 63 72 61  e or program cra
4f80: 73 68 20 6f 72 20 4f 53 20 63 72 61 73 68 20 77  sh or OS crash w
4f90: 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20 6f 75  ill cause the ou
4fa0: 74 65 72 2d 6d 6f 73 74 0a 74 72 61 6e 73 61 63  ter-most.transac
4fb0: 74 69 6f 6e 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  tion to rollback
4fc0: 2c 20 75 6e 64 6f 69 6e 67 20 61 6c 6c 20 63 68  , undoing all ch
4fd0: 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20  anges that have 
4fe0: 6f 63 63 75 72 72 65 64 20 77 69 74 68 69 6e 0a  occurred within.
4ff0: 74 68 61 74 20 6f 75 74 65 72 20 74 72 61 6e 73  that outer trans
5000: 61 63 74 69 6f 6e 2c 20 65 76 65 6e 20 63 68 61  action, even cha
5010: 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20 73  nges that have s
5020: 75 70 70 6f 73 65 64 6c 79 20 62 65 65 6e 20 22  upposedly been "
5030: 63 6f 6d 6d 69 74 74 65 64 22 0a 62 79 20 74 68  committed".by th
5040: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
5050: 64 2e 20 20 5e 43 6f 6e 74 65 6e 74 20 69 73 20  d.  ^Content is 
5060: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 63 6f 6d  not actually com
5070: 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 64 69  mitted on the di
5080: 73 6b 20 0a 75 6e 74 69 6c 20 74 68 65 20 6f 75  sk .until the ou
5090: 74 65 72 6d 6f 73 74 20 74 72 61 6e 73 61 63 74  termost transact
50a0: 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e  ion commits.</p>
50b0: 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 73  ..<p>There are s
50c0: 65 76 65 72 61 6c 20 77 61 79 73 20 6f 66 20 74  everal ways of t
50d0: 68 69 6e 6b 69 6e 67 20 61 62 6f 75 74 20 74 68  hinking about th
50e0: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
50f0: 64 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69  d:</p>..<ul>.<li
5100: 3e 3c 70 3e 0a 53 6f 6d 65 20 70 65 6f 70 6c 65  ><p>.Some people
5110: 20 76 69 65 77 20 52 45 4c 45 41 53 45 20 61 73   view RELEASE as
5120: 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
5130: 6f 66 20 43 4f 4d 4d 49 54 20 66 6f 72 20 61 20  of COMMIT for a 
5140: 53 41 56 45 50 4f 49 4e 54 2e 0a 54 68 69 73 20  SAVEPOINT..This 
5150: 69 73 20 61 6e 20 61 63 63 65 70 74 61 62 6c 65  is an acceptable
5160: 20 70 6f 69 6e 74 20 6f 66 20 76 69 65 77 20 61   point of view a
5170: 73 20 6c 6f 6e 67 20 61 73 20 6f 6e 65 20 72 65  s long as one re
5180: 6d 65 6d 62 65 72 73 20 74 68 61 74 20 74 68 65  members that the
5190: 0a 63 68 61 6e 67 65 73 20 63 6f 6d 6d 69 74 74  .changes committ
51a0: 65 64 20 62 79 20 61 6e 20 69 6e 6e 65 72 20 74  ed by an inner t
51b0: 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74  ransaction might
51c0: 20 6c 61 74 65 72 20 62 65 20 75 6e 64 6f 6e 65   later be undone
51d0: 20 62 79 20 61 0a 72 6f 6c 6c 62 61 63 6b 20 69   by a.rollback i
51e0: 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e 73  n an outer trans
51f0: 61 63 74 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e  action.</p></li>
5200: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65  ..<li><p>.Anothe
5210: 72 20 76 69 65 77 20 6f 66 20 52 45 4c 45 41 53  r view of RELEAS
5220: 45 20 69 73 20 74 68 61 74 20 69 74 20 6d 65 72  E is that it mer
5230: 67 65 73 20 61 20 6e 61 6d 65 64 20 74 72 61 6e  ges a named tran
5240: 73 61 63 74 69 6f 6e 20 69 6e 74 6f 20 69 74 73  saction into its
5250: 0a 70 61 72 65 6e 74 20 74 72 61 6e 73 61 63 74  .parent transact
5260: 69 6f 6e 2c 20 73 6f 20 74 68 61 74 20 74 68 65  ion, so that the
5270: 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69   named transacti
5280: 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e  on and its paren
5290: 74 20 62 65 63 6f 6d 65 0a 74 68 65 20 73 61 6d  t become.the sam
52a0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  e transaction.  
52b0: 41 66 74 65 72 20 52 45 4c 45 41 53 45 2c 20 74  After RELEASE, t
52c0: 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63  he named transac
52d0: 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 72  tion and its par
52e0: 65 6e 74 0a 77 69 6c 6c 20 63 6f 6d 6d 69 74 20  ent.will commit 
52f0: 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 6f 67 65  or rollback toge
5300: 74 68 65 72 2c 20 77 68 61 74 65 76 65 72 20 74  ther, whatever t
5310: 68 65 69 72 20 66 61 74 65 20 6d 61 79 20 62 65  heir fate may be
5320: 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  ..</p></li>..<li
5330: 3e 3c 70 3e 0a 4f 6e 65 20 63 61 6e 20 61 6c 73  ><p>.One can als
5340: 6f 20 74 68 69 6e 6b 20 6f 66 20 73 61 76 65 70  o think of savep
5350: 6f 69 6e 74 73 20 61 73 0a 22 6d 61 72 6b 73 22  oints as."marks"
5360: 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74   in the transact
5370: 69 6f 6e 20 74 69 6d 65 6c 69 6e 65 2e 20 20 49  ion timeline.  I
5380: 6e 20 74 68 69 73 20 76 69 65 77 2c 20 74 68 65  n this view, the
5390: 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61   SAVEPOINT comma
53a0: 6e 64 0a 63 72 65 61 74 65 73 20 61 20 6e 65 77  nd.creates a new
53b0: 20 6d 61 72 6b 2c 20 74 68 65 20 52 4f 4c 4c 42   mark, the ROLLB
53c0: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72  ACK TO command r
53d0: 65 77 69 6e 64 73 20 74 68 65 20 74 69 6d 65 6c  ewinds the timel
53e0: 69 6e 65 20 62 61 63 6b 0a 74 6f 20 61 20 70 6f  ine back.to a po
53f0: 69 6e 74 20 6a 75 73 74 20 61 66 74 65 72 20 74  int just after t
5400: 68 65 20 6e 61 6d 65 64 20 6d 61 72 6b 2c 20 61  he named mark, a
5410: 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  nd the RELEASE c
5420: 6f 6d 6d 61 6e 64 0a 65 72 61 73 65 73 20 6d 61  ommand.erases ma
5430: 72 6b 73 20 66 72 6f 6d 20 74 68 65 20 74 69 6d  rks from the tim
5440: 65 6c 69 6e 65 20 77 69 74 68 6f 75 74 20 61 63  eline without ac
5450: 74 75 61 6c 6c 79 20 6d 61 6b 69 6e 67 20 61 6e  tually making an
5460: 79 0a 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  y.changes to the
5470: 20 64 61 74 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c   database..</p><
5480: 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68  /li>.</ul>....<h
5490: 33 3e 54 72 61 6e 73 61 63 74 69 6f 6e 20 4e 65  3>Transaction Ne
54a0: 73 74 69 6e 67 20 52 75 6c 65 73 3c 2f 68 33 3e  sting Rules</h3>
54b0: 0a 0a 3c 70 3e 5e 54 68 65 20 6c 61 73 74 20 74  ..<p>^The last t
54c0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 72 74  ransaction start
54d0: 65 64 20 77 69 6c 6c 20 62 65 20 74 68 65 20 66  ed will be the f
54e0: 69 72 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e  irst.transaction
54f0: 20 63 6f 6d 6d 69 74 74 65 64 20 6f 72 20 72 6f   committed or ro
5500: 6c 6c 65 64 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a  lled back.</p>..
5510: 3c 70 3e 5e 54 68 65 20 5b 42 45 47 49 4e 5d 20  <p>^The [BEGIN] 
5520: 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 77 6f 72  command only wor
5530: 6b 73 20 69 66 20 74 68 65 20 74 72 61 6e 73 61  ks if the transa
5540: 63 74 69 6f 6e 20 73 74 61 63 6b 20 69 73 20 65  ction stack is e
5550: 6d 70 74 79 2c 20 6f 72 0a 69 6e 20 6f 74 68 65  mpty, or.in othe
5560: 72 20 77 6f 72 64 73 20 69 66 20 74 68 65 72 65  r words if there
5570: 20 61 72 65 20 6e 6f 20 70 65 6e 64 69 6e 67 20   are no pending 
5580: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e  transactions.  ^
5590: 49 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  If the transacti
55a0: 6f 6e 0a 73 74 61 63 6b 20 69 73 20 6e 6f 74 20  on.stack is not 
55b0: 65 6d 70 74 79 20 77 68 65 6e 20 74 68 65 20 5b  empty when the [
55c0: 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69  BEGIN] command i
55d0: 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 65 6e 20  s invoked, then 
55e0: 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c  the command.fail
55f0: 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e  s with an error.
5600: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43  </p>..<p>^The [C
5610: 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 63  OMMIT] command c
5620: 6f 6d 6d 69 74 73 20 61 6c 6c 20 6f 75 74 73 74  ommits all outst
5630: 61 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74 69  anding transacti
5640: 6f 6e 73 20 61 6e 64 20 6c 65 61 76 65 73 0a 74  ons and leaves.t
5650: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
5660: 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a  tack empty.</p>.
5670: 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41 53 45  .<p>^The RELEASE
5680: 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74 73 20   command starts 
5690: 77 69 74 68 20 74 68 65 20 6d 6f 73 74 20 72 65  with the most re
56a0: 63 65 6e 74 20 61 64 64 69 74 69 6f 6e 20 74 6f  cent addition to
56b0: 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e   the.transaction
56c0: 20 73 74 61 63 6b 20 61 6e 64 20 72 65 6c 65 61   stack and relea
56d0: 73 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20 62  ses savepoints b
56e0: 61 63 6b 77 61 72 64 73 20 0a 69 6e 20 74 69 6d  ackwards .in tim
56f0: 65 20 75 6e 74 69 6c 20 69 74 20 72 65 6c 65 61  e until it relea
5700: 73 65 73 20 61 20 73 61 76 65 70 6f 69 6e 74 20  ses a savepoint 
5710: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
5720: 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a  savepoint-name..
5730: 5e 50 72 69 6f 72 20 73 61 76 65 70 6f 69 6e 74  ^Prior savepoint
5740: 73 2c 20 65 76 65 6e 20 73 61 76 65 70 6f 69 6e  s, even savepoin
5750: 74 73 20 77 69 74 68 20 6d 61 74 63 68 69 6e 67  ts with matching
5760: 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 73   savepoint-names
5770: 2c 20 61 72 65 0a 75 6e 63 68 61 6e 67 65 64 2e  , are.unchanged.
5780: 0a 5e 49 66 20 74 68 65 20 52 45 4c 45 41 53 45  .^If the RELEASE
5790: 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20   command causes 
57a0: 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  the.transaction 
57b0: 73 74 61 63 6b 20 74 6f 20 62 65 63 6f 6d 65 20  stack to become 
57c0: 65 6d 70 74 79 20 28 69 66 20 74 68 65 20 52 45  empty (if the RE
57d0: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65  LEASE command re
57e0: 6c 65 61 73 65 73 20 74 68 65 0a 6f 75 74 65 72  leases the.outer
57f0: 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  most transaction
5800: 20 66 72 6f 6d 20 74 68 65 20 73 74 61 63 6b 29   from the stack)
5810: 20 74 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61   then the transa
5820: 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f  ction commits.</
5830: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c  p>..<p>^The [ROL
5840: 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77  LBACK] command w
5850: 69 74 68 6f 75 74 20 61 20 54 4f 20 63 6c 61 75  ithout a TO clau
5860: 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 73 20 61  se rolls backs a
5870: 6c 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a  ll transactions.
5880: 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65 20 74  and leaves the t
5890: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
58a0: 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e   empty.</p>..<p>
58b0: 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f  ^The ROLLBACK co
58c0: 6d 6d 61 6e 64 20 77 69 74 68 20 61 20 54 4f 20  mmand with a TO 
58d0: 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62 61 63  clause rolls bac
58e0: 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 67  k transactions g
58f0: 6f 69 6e 67 0a 62 61 63 6b 77 61 72 64 73 20 69  oing.backwards i
5900: 6e 20 74 69 6d 65 20 62 61 63 6b 20 74 6f 20 74  n time back to t
5910: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 53  he most recent S
5920: 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20 61 20  AVEPOINT with a 
5930: 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e  matching name..^
5940: 54 68 65 20 53 41 56 45 50 4f 49 4e 54 20 77 69  The SAVEPOINT wi
5950: 74 68 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  th the matching 
5960: 6e 61 6d 65 20 72 65 6d 61 69 6e 73 20 6f 6e 20  name remains on 
5970: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
5980: 73 74 61 63 6b 2c 0a 62 75 74 20 61 6c 6c 20 64  stack,.but all d
5990: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
59a0: 74 68 61 74 20 6f 63 63 75 72 72 65 64 20 61 66  that occurred af
59b0: 74 65 72 20 74 68 61 74 20 53 41 56 45 50 4f 49  ter that SAVEPOI
59c0: 4e 54 20 77 61 73 20 63 72 65 61 74 65 64 0a 61  NT was created.a
59d0: 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  re rolled back. 
59e0: 20 5e 49 66 20 74 68 65 20 73 61 76 65 70 6f 69   ^If the savepoi
59f0: 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52 4f 4c  nt-name in a ROL
5a00: 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64  LBACK TO command
5a10: 20 64 6f 65 73 20 6e 6f 74 0a 6d 61 74 63 68 20   does not.match 
5a20: 61 6e 79 20 53 41 56 45 50 4f 49 4e 54 20 6f 6e  any SAVEPOINT on
5a30: 20 74 68 65 20 73 74 61 63 6b 2c 20 74 68 65 6e   the stack, then
5a40: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
5a50: 6d 6d 61 6e 64 20 66 61 69 6c 73 20 77 69 74 68  mmand fails with
5a60: 20 61 6e 0a 65 72 72 6f 72 20 61 6e 64 20 6c 65   an.error and le
5a70: 61 76 65 73 20 74 68 65 20 73 74 61 74 65 20 6f  aves the state o
5a80: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  f the database u
5a90: 6e 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c  nchanged.</p>..<
5aa0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
5ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5af0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 63 6f 6d  ####.Section com
5b00: 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f  ment comment {co
5b10: 6d 6d 65 6e 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d  mment *comments}
5b20: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
5b30: 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74  eDiagram comment
5b40: 2d 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a  -syntax.</tcl>..
5b50: 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65  <p>^Comments are
5b60: 20 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64   not SQL command
5b70: 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75 72  s, but can occur
5b80: 20 77 69 74 68 69 6e 20 74 68 65 20 74 65 78 74   within the text
5b90: 20 6f 66 0a 53 51 4c 20 71 75 65 72 69 65 73 20   of.SQL queries 
5ba0: 70 61 73 73 65 64 20 74 6f 20 5b 73 71 6c 69 74  passed to [sqlit
5bb0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d  e3_prepare_v2()]
5bc0: 20 61 6e 64 20 72 65 6c 61 74 65 64 20 69 6e 74   and related int
5bd0: 65 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e  erfaces..^Commen
5be0: 74 73 20 61 72 65 20 74 72 65 61 74 65 64 20 61  ts are treated a
5bf0: 73 20 77 68 69 74 65 73 70 61 63 65 20 62 79 20  s whitespace by 
5c00: 74 68 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f 6d  the parser..^Com
5c10: 6d 65 6e 74 73 20 63 61 6e 20 62 65 67 69 6e 20  ments can begin 
5c20: 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70  anywhere whitesp
5c30: 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e  ace .can be foun
5c40: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73  d, including ins
5c50: 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ide expressions 
5c60: 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69 70  that span multip
5c70: 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a  le lines..</p>..
5c80: 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74 73  <p>^SQL comments
5c90: 20 62 65 67 69 6e 20 77 69 74 68 20 74 77 6f 20   begin with two 
5ca0: 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d 22 20  consecutive "-" 
5cb0: 63 68 61 72 61 63 74 65 72 73 20 28 41 53 43 49  characters (ASCI
5cc0: 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78 74 65  I 0x2d).and exte
5cd0: 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63  nd up to and inc
5ce0: 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20  luding the next 
5cf0: 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63 74 65  newline characte
5d00: 72 20 28 41 53 43 49 49 20 30 78 30 61 29 0a 6f  r (ASCII 0x0a).o
5d10: 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20  r until the end 
5d20: 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65  of input, whiche
5d30: 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e  ver comes first.
5d40: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c  </p>..<p>^C-styl
5d50: 65 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e  e comments begin
5d60: 0a 77 69 74 68 20 22 2f 2a 22 20 61 6e 64 20 65  .with "/*" and e
5d70: 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20  xtend up to and 
5d80: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65  including the ne
5d90: 78 74 20 22 2a 2f 22 20 63 68 61 72 61 63 74 65  xt "*/" characte
5da0: 72 20 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20  r pair.or until 
5db0: 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
5dc0: 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65  , whichever come
5dd0: 73 20 66 69 72 73 74 2e 20 20 5e 43 2d 73 74 79  s first.  ^C-sty
5de0: 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20  le comments.can 
5df0: 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69  span multiple li
5e00: 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43  nes. </p>..<p>^C
5e10: 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65  omments can appe
5e20: 61 72 20 61 6e 79 77 68 65 72 65 20 77 68 69 74  ar anywhere whit
5e30: 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63 75 72  espace can occur
5e40: 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69  ,.including insi
5e50: 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  de expressions a
5e60: 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  nd in the middle
5e70: 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73 74   of other SQL st
5e80: 61 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65  atements..^Comme
5e90: 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e  nts do not nest.
5ea0: 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
5eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ef0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
5f00: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44  tion {CREATE IND
5f10: 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78 20  EX} createindex 
5f20: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 7d  {{CREATE INDEX}}
5f30: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
5f40: 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d  eDiagram create-
5f50: 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c  index-stmt.</tcl
5f60: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54  >..<p>^The CREAT
5f70: 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20  E INDEX command 
5f80: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
5f90: 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41 54 45  keywords "CREATE
5fa0: 20 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77 65 64   INDEX" followed
5fb0: 0a 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  .by the name of 
5fc0: 74 68 65 20 6e 65 77 20 69 6e 64 65 78 2c 20 74  the new index, t
5fd0: 68 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e 22 2c  he keyword "ON",
5fe0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 70   the name of a p
5ff0: 72 65 76 69 6f 75 73 6c 79 0a 63 72 65 61 74 65  reviously.create
6000: 64 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  d table that is 
6010: 74 6f 20 62 65 20 69 6e 64 65 78 65 64 2c 20 61  to be indexed, a
6020: 6e 64 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  nd a parenthesiz
6030: 65 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 73  ed list of names
6040: 20 6f 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of.columns in t
6050: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72  he table that ar
6060: 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 69  e used for the i
6070: 6e 64 65 78 20 6b 65 79 2e 0a 49 66 20 74 68 65  ndex key..If the
6080: 20 6f 70 74 69 6f 6e 61 6c 20 57 48 45 52 45 20   optional WHERE 
6090: 63 6c 61 75 73 65 20 69 73 20 69 6e 63 6c 75 64  clause is includ
60a0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 64  ed, then the ind
60b0: 65 78 20 69 73 20 61 20 22 5b 70 61 72 74 69 61  ex is a "[partia
60c0: 6c 20 69 6e 64 65 78 5d 22 2e 0a 3c 2f 70 3e 0a  l index]"..</p>.
60d0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
60e0: 74 20 7b 64 65 73 63 69 64 78 7d 20 7b 64 65 73  t {descidx} {des
60f0: 63 65 6e 64 69 6e 67 20 69 6e 64 69 63 65 73 7d  cending indices}
6100: 20 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64   {descending ind
6110: 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61  ex}</tcl>.<p>^Ea
6120: 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63  ch column name c
6130: 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  an be followed b
6140: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 22 41 53  y one of the "AS
6150: 43 22 20 6f 72 20 22 44 45 53 43 22 20 6b 65 79  C" or "DESC" key
6160: 77 6f 72 64 73 0a 74 6f 20 69 6e 64 69 63 61 74  words.to indicat
6170: 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e  e sort order.  ^
6180: 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6d  The sort order m
6190: 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65  ay or may not be
61a0: 20 69 67 6e 6f 72 65 64 20 64 65 70 65 6e 64 69   ignored dependi
61b0: 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ng.on the databa
61c0: 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2c 20  se file format, 
61d0: 61 6e 64 20 69 6e 20 70 61 72 74 69 63 75 6c 61  and in particula
61e0: 72 20 74 68 65 20 5b 73 63 68 65 6d 61 20 66 6f  r the [schema fo
61f0: 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54  rmat number]..^T
6200: 68 65 20 22 6c 65 67 61 63 79 22 20 73 63 68 65  he "legacy" sche
6210: 6d 61 20 66 6f 72 6d 61 74 20 28 31 29 20 69 67  ma format (1) ig
6220: 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72 74  nores index.sort
6230: 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 64 65   order.  ^The de
6240: 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 73  scending index s
6250: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 34 29  chema format (4)
6260: 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72   takes index sor
6270: 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63  t order.into acc
6280: 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65 72 73  ount.  Only vers
6290: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 33  ions of SQLite 3
62a0: 2e 33 2e 30 20 61 6e 64 20 6c 61 74 65 72 20 61  .3.0 and later a
62b0: 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64 65 72  re able to under
62c0: 73 74 61 6e 64 0a 74 68 65 20 64 65 73 63 65 6e  stand.the descen
62d0: 64 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 6d 61  ding index forma
62e0: 74 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  t. For compatibi
62f0: 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20 6f 66  lity, version of
6300: 20 53 51 4c 69 74 65 20 62 65 74 77 65 65 6e 20   SQLite between 
6310: 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e 39 20  3.3.0.and 3.7.9 
6320: 75 73 65 20 74 68 65 20 6c 65 67 61 63 79 20 73  use the legacy s
6330: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62 79 20  chema format by 
6340: 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20 6e 65  default.  The ne
6350: 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  wer schema forma
6360: 74 20 69 73 0a 75 73 65 64 20 62 79 20 64 65 66  t is.used by def
6370: 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f 6e 20  ault in version 
6380: 33 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74 65 72  3.7.10 and later
6390: 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f 66  ..^The [legacy_f
63a0: 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d  ile_format pragm
63b0: 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  a] can be used t
63c0: 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74 68 65  o change set the
63d0: 20 73 70 65 63 69 66 69 63 0a 62 65 68 61 76 69   specific.behavi
63e0: 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72 73 69  or for any versi
63f0: 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70  on of SQLite.</p
6400: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41  >..<p>^The COLLA
6410: 54 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f 6e  TE clause option
6420: 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65  ally following e
6430: 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ach column name 
6440: 64 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c 61 74  defines a.collat
6450: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 75 73 65  ing sequence use
6460: 64 20 66 6f 72 20 74 65 78 74 20 65 6e 74 72 69  d for text entri
6470: 65 73 20 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d  es in that colum
6480: 6e 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20  n..^The default 
6490: 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e  collating.sequen
64a0: 63 65 20 69 73 20 74 68 65 20 63 6f 6c 6c 61 74  ce is the collat
64b0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 66  ing sequence def
64c0: 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20 63 6f  ined for that co
64d0: 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45  lumn in the.[CRE
64e0: 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
64f0: 6d 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20 6e 6f  ment.  ^Or if no
6500: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
6510: 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69 73 65  nce is otherwise
6520: 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62 75   defined,.the bu
6530: 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f  ilt-in BINARY co
6540: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
6550: 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c   is used.</p>..<
6560: 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61  p>There are no a
6570: 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73 20  rbitrary limits 
6580: 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  on the number of
6590: 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 63 61   indices that ca
65a0: 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20 74 6f  n be.attached to
65b0: 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 2e   a single table.
65c0: 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f    ^(The number o
65d0: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20  f columns in an 
65e0: 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74 65  index is .limite
65f0: 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73  d to the value s
6600: 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33 5f 6c  et by.[sqlite3_l
6610: 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f 4c 49  imit]([SQLITE_LI
6620: 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29  MIT_COLUMN],...)
6630: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  .)^</p>..<tcl>hd
6640: 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65  _fragment unique
6650: 69 64 78 20 7b 75 6e 69 71 75 65 20 69 6e 64 65  idx {unique inde
6660: 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66 20  x}</tcl>.<p>^If 
6670: 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f  the UNIQUE keywo
6680: 72 64 20 61 70 70 65 61 72 73 20 62 65 74 77 65  rd appears betwe
6690: 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49 4e  en CREATE and IN
66a0: 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63 61  DEX then duplica
66b0: 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65 73  te.index entries
66c0: 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64   are not allowed
66d0: 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74 20  .  ^Any attempt 
66e0: 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70 6c  to insert a dupl
66f0: 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c  icate entry.will
6700: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72   result in an er
6710: 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20 70  ror.  ^For the p
6720: 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71 75  urposes of uniqu
6730: 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20 4e  e indices, all N
6740: 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20 63  ULL values.are c
6750: 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64 69 66  onsidered to dif
6760: 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20  ferent from all 
6770: 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65  other NULL value
6780: 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20 75  s and are thus u
6790: 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20 6f  nique..This is o
67a0: 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70 6f  ne of the two po
67b0: 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65 74  ssible interpret
67c0: 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 51  ations of the SQ
67d0: 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28 74  L-92 standard.(t
67e0: 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20 74  he language in t
67f0: 68 65 20 73 74 61 6e 64 61 72 64 20 69 73 20 61  he standard is a
6800: 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69 73  mbiguous) and is
6810: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   the interpretat
6820: 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ion.followed by 
6830: 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53 51  PostgreSQL, MySQ
6840: 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e 64  L, Firebird, and
6850: 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72 6d   Oracle.  Inform
6860: 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66 74  ix and.Microsoft
6870: 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c 6c   SQL Server foll
6880: 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e 74  ow the other int
6890: 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
68a0: 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e  he standard.</p>
68b0: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
68c0: 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49  ional IF NOT EXI
68d0: 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72  STS clause is pr
68e0: 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65  esent and anothe
68f0: 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68 65  r index.with the
6900: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61   same name alrea
6910: 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20  dy exists, then 
6920: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63  this command bec
6930: 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70  omes a no-op.</p
6940: 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20 61  >..<p>^Indexes a
6950: 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68 20  re removed with 
6960: 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d  the [DROP INDEX]
6970: 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a   command.</p>...
6980: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
6990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69d0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52  ####.Section {CR
69e0: 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72 65  EATE TABLE} {cre
69f0: 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45 41  atetable} {{CREA
6a00: 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75  TE TABLE}}..Recu
6a10: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
6a20: 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d  am create-table-
6a30: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
6a40: 54 68 65 20 22 43 52 45 41 54 45 20 54 41 42 4c  The "CREATE TABL
6a50: 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  E" command is us
6a60: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  ed to create a n
6a70: 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20 53  ew table in an S
6a80: 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65 2e  QLite .database.
6a90: 20 41 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   A CREATE TABLE 
6aa0: 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69 65  command specifie
6ab0: 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  s the following 
6ac0: 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 74 68  attributes of th
6ad0: 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c 75  e.new table:..<u
6ae0: 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65 20  l>.  <li><p>The 
6af0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20  name of the new 
6b00: 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  table...  <li><p
6b10: 3e 20 54 68 65 20 64 61 74 61 62 61 73 65 20 69  > The database i
6b20: 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65 77 20  n which the new 
6b30: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
6b40: 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65 20  . Tables may be 
6b50: 0a 20 20 20 20 20 20 63 72 65 61 74 65 64 20 69  .      created i
6b60: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
6b70: 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61  ase, the temp da
6b80: 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61 6e  tabase, or in an
6b90: 79 20 61 74 74 61 63 68 65 64 0a 20 20 20 20 20  y attached.     
6ba0: 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c 6c   database...  <l
6bb0: 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20 6f  i><p> The name o
6bc0: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  f each column in
6bd0: 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   the table...  <
6be0: 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c 61  li><p> The decla
6bf0: 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63 68  red type of each
6c00: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74   column in the t
6c10: 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  able...  <li><p>
6c20: 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   A default value
6c30: 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 66   or expression f
6c40: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
6c50: 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20  n the table...  
6c60: 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c  <li><p> A defaul
6c70: 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
6c80: 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74 68  ence to use with
6c90: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a 20   each column... 
6ca0: 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e 61   <li><p> Optiona
6cb0: 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20 4b  lly, a PRIMARY K
6cc0: 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  EY for the table
6cd0: 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63 6f  . Both single co
6ce0: 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20 20  lumn and.       
6cf0: 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74 69  composite (multi
6d00: 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69 6d  ple column) prim
6d10: 61 72 79 20 6b 65 79 73 20 61 72 65 20 73 75 70  ary keys are sup
6d20: 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e 3c  ported...  <li><
6d30: 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c 20  p> A set of SQL 
6d40: 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20  constraints for 
6d50: 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c 69  each table. SQLi
6d60: 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49 51  te supports UNIQ
6d70: 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20 4e  UE, NOT.       N
6d80: 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20 46  ULL, CHECK and F
6d90: 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
6da0: 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e 3c  raints...  <li><
6db0: 70 3e 20 57 68 65 74 68 65 72 20 74 68 65 20 74  p> Whether the t
6dc0: 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f  able is a [WITHO
6dd0: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e  UT ROWID] table.
6de0: 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79  .</ul>..<p>Every
6df0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
6e00: 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70 65  atement must spe
6e10: 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72 20  cify a name for 
6e20: 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a 20  the new table.. 
6e30: 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20 74   ^(Table names t
6e40: 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22  hat begin with "
6e50: 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65 73  sqlite_" are res
6e60: 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72 6e  erved for intern
6e70: 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73 20  al use. It.  is 
6e80: 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65  an error to atte
6e90: 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20  mpt to create a 
6ea0: 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61 6d  table with a nam
6eb0: 65 20 74 68 61 74 20 73 74 61 72 74 73 20 77 69  e that starts wi
6ec0: 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e 29  th.  "sqlite_".)
6ed0: 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74  ^..<p> ^If a &lt
6ee0: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
6ef0: 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  t; is specified,
6f00: 20 69 74 20 6d 75 73 74 20 62 65 20 65 69 74 68   it must be eith
6f10: 65 72 20 22 6d 61 69 6e 22 2c 20 0a 20 20 22 74  er "main", .  "t
6f20: 65 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e 61 6d  emp", or the nam
6f30: 65 20 6f 66 20 61 6e 20 5b 41 54 54 41 43 48 20  e of an [ATTACH 
6f40: 44 41 54 41 42 41 53 45 7c 61 74 74 61 63 68 65  DATABASE|attache
6f50: 64 20 64 61 74 61 62 61 73 65 5d 2e 20 5e 49 6e  d database]. ^In
6f60: 20 74 68 69 73 20 63 61 73 65 0a 20 20 74 68 65   this case.  the
6f70: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63 72   new table is cr
6f80: 65 61 74 65 64 20 69 6e 20 74 68 65 20 6e 61 6d  eated in the nam
6f90: 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49 66  ed database. ^If
6fa0: 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22   the "TEMP" or "
6fb0: 54 45 4d 50 4f 52 41 52 59 22 0a 20 20 6b 65 79  TEMPORARY".  key
6fc0: 77 6f 72 64 20 6f 63 63 75 72 73 20 62 65 74 77  word occurs betw
6fd0: 65 65 6e 20 74 68 65 20 22 43 52 45 41 54 45 22  een the "CREATE"
6fe0: 20 61 6e 64 20 22 54 41 42 4c 45 22 20 74 68 65   and "TABLE" the
6ff0: 6e 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  n the new table 
7000: 69 73 0a 20 20 63 72 65 61 74 65 64 20 69 6e 20  is.  created in 
7010: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
7020: 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72  e. ^It is an err
7030: 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f  or to specify bo
7040: 74 68 20 61 20 0a 20 20 26 6c 74 3b 64 61 74 61  th a .  &lt;data
7050: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 61 6e  base-name&gt; an
7060: 64 20 74 68 65 20 54 45 4d 50 20 6f 72 20 54 45  d the TEMP or TE
7070: 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 2c  MPORARY keyword,
7080: 20 75 6e 6c 65 73 73 20 74 68 65 0a 20 20 26 6c   unless the.  &l
7090: 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26  t;database-name&
70a0: 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20 5e  gt; is "temp". ^
70b0: 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e  If no database n
70c0: 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64  ame is specified
70d0: 20 61 6e 64 20 74 68 65 0a 20 20 54 45 4d 50 20   and the.  TEMP 
70e0: 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70  keyword is not p
70f0: 72 65 73 65 6e 74 20 74 68 65 6e 20 74 68 65 20  resent then the 
7100: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
7110: 20 69 6e 20 74 68 65 20 6d 61 69 6e 0a 20 20 64   in the main.  d
7120: 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 0a 20 20  atabase...<p>.  
7130: 5e 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20 61  ^It is usually a
7140: 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65 6d  n error to attem
7150: 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  pt to create a n
7160: 65 77 20 74 61 62 6c 65 20 69 6e 20 61 20 64 61  ew table in a da
7170: 74 61 62 61 73 65 20 74 68 61 74 0a 20 20 61 6c  tabase that.  al
7180: 72 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20 61  ready contains a
7190: 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f 72   table, index or
71a0: 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d   view of the sam
71b0: 65 20 6e 61 6d 65 2e 20 5e 48 6f 77 65 76 65 72  e name. ^However
71c0: 2c 20 69 66 20 74 68 65 0a 20 20 22 49 46 20 4e  , if the.  "IF N
71d0: 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75 73  OT EXISTS" claus
71e0: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  e is specified a
71f0: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43 52  s part of the CR
7200: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
7210: 6d 65 6e 74 20 61 6e 64 0a 20 20 61 20 74 61 62  ment and.  a tab
7220: 6c 65 20 6f 72 20 76 69 65 77 20 6f 66 20 74 68  le or view of th
7230: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65  e same name alre
7240: 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 20  ady exists, the 
7250: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d  CREATE TABLE com
7260: 6d 61 6e 64 0a 20 20 73 69 6d 70 6c 79 20 68 61  mand.  simply ha
7270: 73 20 6e 6f 20 65 66 66 65 63 74 20 28 61 6e 64  s no effect (and
7280: 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67   no error messag
7290: 65 20 69 73 20 72 65 74 75 72 6e 65 64 29 2e 20  e is returned). 
72a0: 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 73 74 69  ^An error is sti
72b0: 6c 6c 0a 20 20 72 65 74 75 72 6e 65 64 20 69 66  ll.  returned if
72c0: 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 6e 6f   the table canno
72d0: 74 20 62 65 20 63 72 65 61 74 65 64 20 62 65 63  t be created bec
72e0: 61 75 73 65 20 6f 66 20 61 6e 20 65 78 69 73 74  ause of an exist
72f0: 69 6e 67 20 69 6e 64 65 78 2c 20 65 76 65 6e 20  ing index, even 
7300: 0a 20 20 69 66 20 74 68 65 20 22 49 46 20 4e 4f  .  if the "IF NO
7310: 54 20 45 58 49 53 54 53 22 20 63 6c 61 75 73 65  T EXISTS" clause
7320: 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a   is specified...
7330: 3c 70 3e 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e  <p>^It is not an
7340: 20 65 72 72 6f 72 20 74 6f 20 63 72 65 61 74 65   error to create
7350: 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 68 61   a table that ha
7360: 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  s the same name 
7370: 61 73 20 61 6e 20 0a 20 20 65 78 69 73 74 69 6e  as an .  existin
7380: 67 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  g [CREATE TRIGGE
7390: 52 7c 74 72 69 67 67 65 72 5d 2e 0a 0a 3c 70 3e  R|trigger]...<p>
73a0: 5e 54 61 62 6c 65 73 20 61 72 65 20 72 65 6d 6f  ^Tables are remo
73b0: 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44  ved using the [D
73c0: 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ROP TABLE] state
73d0: 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c 68 33  ment.  </p>..<h3
73e0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  >CREATE TABLE ..
73f0: 2e 20 41 53 20 53 45 4c 45 43 54 20 53 74 61 74  . AS SELECT Stat
7400: 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ements</h3>..<p>
7410: 5e 28 41 20 22 43 52 45 41 54 45 20 54 41 42 4c  ^(A "CREATE TABL
7420: 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 22  E ... AS SELECT"
7430: 20 73 74 61 74 65 6d 65 6e 74 20 63 72 65 61 74   statement creat
7440: 65 73 20 61 6e 64 20 70 6f 70 75 6c 61 74 65 73  es and populates
7450: 20 61 20 64 61 74 61 62 61 73 65 0a 74 61 62 6c   a database.tabl
7460: 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72  e based on the r
7470: 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45  esults of a SELE
7480: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20  CT statement.)^ 
7490: 5e 28 54 68 65 20 74 61 62 6c 65 20 68 61 73 20  ^(The table has 
74a0: 74 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72 20  the same.number 
74b0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68  of columns as th
74c0: 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  e rows returned 
74d0: 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  by the SELECT st
74e0: 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61 6d  atement. The nam
74f0: 65 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d 6e  e of.each column
7500: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
7510: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
7520: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f  corresponding co
7530: 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73 75  lumn in the resu
7540: 6c 74 0a 73 65 74 20 6f 66 20 74 68 65 20 53 45  lt.set of the SE
7550: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29  LECT statement.)
7560: 5e 20 5e 28 54 68 65 20 64 65 63 6c 61 72 65 64  ^ ^(The declared
7570: 20 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f   type of each co
7580: 6c 75 6d 6e 20 69 73 20 64 65 74 65 72 6d 69 6e  lumn is determin
7590: 65 64 0a 62 79 20 74 68 65 20 5b 65 78 70 72 65  ed.by the [expre
75a0: 73 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d 20  ssion affinity] 
75b0: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
75c0: 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20  ding expression 
75d0: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
75e0: 74 0a 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  t.of the SELECT 
75f0: 73 74 61 74 65 6d 65 6e 74 2c 20 61 73 20 66 6f  statement, as fo
7600: 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65  llows:.</p>..<ce
7610: 6e 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72 64  nter><table bord
7620: 65 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e  er=1>.  <tr><th>
7630: 45 78 70 72 65 73 73 69 6f 6e 20 41 66 66 69 6e  Expression Affin
7640: 69 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e  ity   <th>Column
7650: 20 44 65 63 6c 61 72 65 64 20 54 79 70 65 0a 20   Declared Type. 
7660: 20 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20 20 20   <tr><td>TEXT   
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c                 <
7680: 74 64 3e 22 54 45 58 54 22 0a 20 20 3c 74 72 3e  td>"TEXT".  <tr>
7690: 3c 74 64 3e 4e 55 4d 45 52 49 43 20 20 20 20 20  <td>NUMERIC     
76a0: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 4e            <td>"N
76b0: 55 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49 4e  UM".  <tr><td>IN
76c0: 54 45 47 45 52 20 20 20 20 20 20 20 20 20 20 20  TEGER           
76d0: 20 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20 20      <td>"INT".  
76e0: 3c 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20 20  <tr><td>REAL    
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74                <t
7700: 64 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e 3c  d>"REAL".  <tr><
7710: 74 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20 20 20  td>NONE         
7720: 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 22 20           <td>"" 
7730: 28 65 6d 70 74 79 20 73 74 72 69 6e 67 29 0a 3c  (empty string).<
7740: 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e  /table></center>
7750: 29 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c 65  )^..<p>^(A table
7760: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   created using C
7770: 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 68  REATE TABLE AS h
7780: 61 73 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b 45  as no PRIMARY KE
7790: 59 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72 61  Y and no.constra
77a0: 69 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64  ints of any kind
77b0: 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61  . The default va
77c0: 6c 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  lue of each colu
77d0: 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65 20  mn is NULL. The 
77e0: 64 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f  default.collatio
77f0: 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  n sequence for e
7800: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
7810: 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 42  e new table is B
7820: 49 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61  INARY.)^..<p>^Ta
7830: 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69  bles created usi
7840: 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ng CREATE TABLE 
7850: 41 53 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  AS are initially
7860: 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20   populated with 
7870: 74 68 65 0a 72 6f 77 73 20 6f 66 20 64 61 74 61  the.rows of data
7880: 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
7890: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
78a0: 74 2e 20 5e 52 6f 77 73 20 61 72 65 20 61 73 73  t. ^Rows are ass
78b0: 69 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75 73  igned contiguous
78c0: 6c 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72 6f  ly.ascending [ro
78d0: 77 69 64 5d 20 76 61 6c 75 65 73 2c 20 73 74 61  wid] values, sta
78e0: 72 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69 6e  rting with 1, in
78f0: 20 74 68 65 20 5b 6f 72 64 65 72 20 62 79 7c 6f   the [order by|o
7900: 72 64 65 72 5d 20 74 68 61 74 20 74 68 65 79 0a  rder] that they.
7910: 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  are returned by 
7920: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
7930: 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ment...<tcl>hd_f
7940: 72 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63 6f  ragment {tableco
7950: 6c 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65  ldef} {column de
7960: 66 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d  finition} {colum
7970: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f  n definitions}</
7980: 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20  tcl>.<h3>Column 
7990: 44 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e  Definitions</h3>
79a0: 0a 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20 69  ..<p>Unless it i
79b0: 73 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  s a CREATE TABLE
79c0: 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 73   ... AS SELECT s
79d0: 74 61 74 65 6d 65 6e 74 2c 20 61 20 43 52 45 41  tatement, a CREA
79e0: 54 45 20 54 41 42 4c 45 20 69 6e 63 6c 75 64 65  TE TABLE include
79f0: 73 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63  s.one or more [c
7a00: 6f 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e  olumn-def|column
7a10: 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f   definitions], o
7a20: 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77  ptionally follow
7a30: 65 64 20 62 79 20 61 20 6c 69 73 74 20 6f 66 0a  ed by a list of.
7a40: 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e  [table-constrain
7a50: 74 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  t|table constrai
7a60: 6e 74 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c 75  nts].  Each colu
7a70: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 6f  mn definition co
7a80: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 0a 6e 61  nsists of the.na
7a90: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  me of the column
7aa0: 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c  , optionally fol
7ab0: 6c 6f 77 65 64 20 62 79 20 74 68 65 20 64 65 63  lowed by the dec
7ac0: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68  lared type of th
7ad0: 65 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f  e column,.then o
7ae0: 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69 6f  ne or more optio
7af0: 6e 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73  nal [column-cons
7b00: 74 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f  traint|column co
7b10: 6e 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63 6c  nstraints]. Incl
7b20: 75 64 65 64 20 69 6e 0a 74 68 65 20 64 65 66 69  uded in.the defi
7b30: 6e 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d  nition of "colum
7b40: 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 66  n constraints" f
7b50: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
7b60: 6f 66 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a  of the previous.
7b70: 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20 74 68  statement are th
7b80: 65 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44 45  e COLLATE and DE
7b90: 46 41 55 4c 54 20 63 6c 61 75 73 65 73 2c 20 65  FAULT clauses, e
7ba0: 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73 65  ven though these
7bb0: 20 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79 0a   are not really.
7bc0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 74  constraints in t
7bd0: 68 65 20 73 65 6e 73 65 20 74 68 61 74 20 74 68  he sense that th
7be0: 65 79 20 64 6f 20 6e 6f 74 20 72 65 73 74 72 69  ey do not restri
7bf0: 63 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74  ct the data that
7c00: 20 74 68 65 20 74 61 62 6c 65 20 6d 61 79 0a 63   the table may.c
7c10: 6f 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74 68 65  ontain. The othe
7c20: 72 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20  r constraints - 
7c30: 4e 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c  NOT NULL, CHECK,
7c40: 20 55 4e 49 51 55 45 2c 20 50 52 49 4d 41 52 59   UNIQUE, PRIMARY
7c50: 20 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49 47 4e   KEY and.FOREIGN
7c60: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73   KEY constraints
7c70: 20 2d 20 69 6d 70 6f 73 65 20 72 65 73 74 72 69   - impose restri
7c80: 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74 61  ctions on the ta
7c90: 62 6c 65 73 20 64 61 74 61 2c 20 61 6e 64 20 61  bles data, and a
7ca0: 72 65 20 61 72 65 0a 64 65 73 63 72 69 62 65 64  re are.described
7cb0: 20 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61 69   under [constrai
7cc0: 6e 74 73 7c 53 51 4c 20 44 61 74 61 20 43 6f 6e  nts|SQL Data Con
7cd0: 73 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77 2e  straints] below.
7ce0: 0a 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73  ..<p>^Unlike mos
7cf0: 74 20 53 51 4c 20 64 61 74 61 62 61 73 65 73 2c  t SQL databases,
7d00: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
7d10: 20 72 65 73 74 72 69 63 74 20 74 68 65 20 74 79   restrict the ty
7d20: 70 65 20 6f 66 20 64 61 74 61 20 74 68 61 74 0a  pe of data that.
7d30: 6d 61 79 20 62 65 20 69 6e 73 65 72 74 65 64 20  may be inserted 
7d40: 69 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62 61  into a column ba
7d50: 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d  sed on the colum
7d60: 6e 73 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  ns declared type
7d70: 2e 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69 74  . Instead,.SQLit
7d80: 65 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63 20  e uses [dynamic 
7d90: 74 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64 65  typing]. ^The de
7da0: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 61  clared type of a
7db0: 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 20   column is used 
7dc0: 74 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to.determine the
7dd0: 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74   [affinity] of t
7de0: 68 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a  he column only..
7df0: 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54 20  .<p>The DEFAULT 
7e00: 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
7e10: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
7e20: 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65 20   to use for the 
7e30: 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61 6c  column if no.val
7e40: 75 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c 79  ue is explicitly
7e50: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
7e60: 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e 67   user when doing
7e70: 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e 49   an [INSERT]. ^I
7e80: 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65 78  f there.is no ex
7e90: 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20 63  plicit DEFAULT c
7ea0: 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74  lause attached t
7eb0: 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  o a column defin
7ec0: 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ition, then the 
7ed0: 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f  .default value o
7ee0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  f the column is 
7ef0: 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c 69  NULL. ^(An expli
7f00: 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75  cit DEFAULT clau
7f10: 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a 74  se may specify.t
7f20: 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 20  hat the default 
7f30: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 61  value is NULL, a
7f40: 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74   string constant
7f50: 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e  , a blob constan
7f60: 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d 62  t, a.signed-numb
7f70: 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73 74  er, or any const
7f80: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 65  ant expression e
7f90: 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e  nclosed in paren
7fa0: 74 68 65 73 65 73 2e 20 41 6e 20 65 78 70 6c 69  theses. An expli
7fb0: 63 69 74 0a 64 65 66 61 75 6c 74 20 76 61 6c 75  cit.default valu
7fc0: 65 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 6e  e may also be on
7fd0: 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c  e of the special
7fe0: 20 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e   case-independen
7ff0: 74 20 6b 65 79 77 6f 72 64 73 0a 43 55 52 52 45  t keywords.CURRE
8000: 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54  NT_TIME, CURRENT
8010: 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45 4e 54  _DATE or CURRENT
8020: 5f 54 49 4d 45 53 54 41 4d 50 2e 29 5e 20 5e 46  _TIMESTAMP.)^ ^F
8030: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
8040: 6f 66 20 74 68 65 0a 44 45 46 41 55 4c 54 20 63  of the.DEFAULT c
8050: 6c 61 75 73 65 2c 20 61 6e 20 65 78 70 72 65 73  lause, an expres
8060: 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72  sion is consider
8070: 65 64 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f 76  ed constant prov
8080: 69 64 65 64 20 74 68 61 74 20 69 74 20 64 6f 65  ided that it doe
8090: 73 0a 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  s.not contain an
80a0: 79 20 73 75 62 2d 71 75 65 72 69 65 73 20 6f 72  y sub-queries or
80b0: 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74   string constant
80c0: 73 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 64 6f  s enclosed in do
80d0: 75 62 6c 65 20 71 75 6f 74 65 73 2e 0a 0a 3c 70  uble quotes...<p
80e0: 3e 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20 72  >^(Each time a r
80f0: 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  ow is inserted i
8100: 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 79  nto the table by
8110: 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
8120: 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73 20  ment that .does 
8130: 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70 6c  not provide expl
8140: 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72 20  icit values for 
8150: 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  all table column
8160: 73 20 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f  s the values sto
8170: 72 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20 72  red in.the new r
8180: 6f 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e 65  ow are determine
8190: 64 20 62 79 20 74 68 65 69 72 20 64 65 66 61 75  d by their defau
81a0: 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73 20  lt values)^, as 
81b0: 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20  follows:..<ul>. 
81c0: 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
81d0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
81e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61   the column is a
81f0: 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c 20   constant NULL, 
8200: 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20 20  text, blob or.  
8210: 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 20    signed-number 
8220: 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61 74  value, then that
8230: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 64   value is used d
8240: 69 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20 6e  irectly in the n
8250: 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c  ew row...  <li><
8260: 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c  p>^If the defaul
8270: 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c  t value of a col
8280: 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
8290: 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68 65  sion in parenthe
82a0: 73 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74 68  ses, then.    th
82b0: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
82c0: 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
82d0: 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73 65  or each row inse
82e0: 72 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 73  rted and the res
82f0: 75 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69 6e  ults.    used in
8300: 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20   the new row... 
8310: 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
8320: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
8330: 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55 52   a column is CUR
8340: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
8350: 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20 43  NT_DATE or.    C
8360: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
8370: 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
8380: 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65 77   used in the new
8390: 20 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a 20   row is a text. 
83a0: 20 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f     representatio
83b0: 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  n of the current
83c0: 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f 72   UTC date and/or
83d0: 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52 52   time. ^For CURR
83e0: 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20 20  ENT_TIME, the.  
83f0: 20 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20    format of the 
8400: 76 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d 3a  value is "HH:MM:
8410: 53 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e  SS". ^For CURREN
8420: 54 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d 4d  T_DATE, "YYYY-MM
8430: 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20 66  -DD". ^The.    f
8440: 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45 4e  ormat for CURREN
8450: 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20 22  T_TIMESTAMP is "
8460: 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
8470: 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  :SS"..</ul>..<p>
8480: 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61  ^The COLLATE cla
8490: 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68  use specifies th
84a0: 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f 6c  e name of a [col
84b0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d  lating sequence]
84c0: 20 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20 64   to use as.the d
84d0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
84e0: 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74 68   sequence for th
84f0: 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f  e column. ^If no
8500: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
8510: 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68  is.specified, th
8520: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
8530: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20  ion sequence is 
8540: 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54  [BINARY]...<p>^T
8550: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
8560: 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20  umns in a table 
8570: 69 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74 68  is limited by th
8580: 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f  e [SQLITE_MAX_CO
8590: 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69  LUMN].compile-ti
85a0: 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e 41  me parameter. ^A
85b0: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61   single row of a
85c0: 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73 74   table cannot st
85d0: 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b 53  ore more than.[S
85e0: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
85f0: 5d 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 2e  ] bytes of data.
8600: 20 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65 20   ^Both of these 
8610: 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c 6f  limits can be lo
8620: 77 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d 65  wered at.runtime
8630: 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69   using the [sqli
8640: 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f 43  te3_limit()] C/C
8650: 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70  ++ interface.</p
8660: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
8670: 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73  ent {constraints
8680: 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c  } {constraints}<
8690: 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44 61  /tcl>.<h3>SQL Da
86a0: 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c 2f  ta Constraints</
86b0: 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  h3>..<tcl>hd_fra
86c0: 67 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f 6e  gment primkeycon
86d0: 73 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 7d  st {PRIMARY KEY}
86e0: 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f   {PRIMARY KEY co
86f0: 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a  nstraint}</tcl>.
8700: 3c 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20 69  <p>^Each table i
8710: 6e 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61 76  n SQLite may hav
8720: 65 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62  e at most one <b
8730: 3e 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e  >PRIMARY KEY</b>
8740: 2e 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79 77  . ^If the.  keyw
8750: 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45 59  ords PRIMARY KEY
8760: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61 20   are added to a 
8770: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
8780: 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d  n, then the prim
8790: 61 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74 68  ary key.  for th
87a0: 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74 73  e table consists
87b0: 20 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65 20   of that single 
87c0: 63 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20  column. ^Or, if 
87d0: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c  a PRIMARY KEY cl
87e0: 61 75 73 65 20 0a 20 20 69 73 20 73 70 65 63 69  ause .  is speci
87f0: 66 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c 65  fied as a [table
8800: 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68  -constraint], th
8810: 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  en the primary k
8820: 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 0a  ey of the table.
8830: 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68    consists of th
8840: 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e  e list of column
8850: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
8860: 61 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d 41  art of the PRIMA
8870: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20  RY KEY clause.. 
8880: 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 72 61   ^An error is ra
8890: 69 73 65 64 20 69 66 20 6d 6f 72 65 20 74 68 61  ised if more tha
88a0: 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b 45  n one PRIMARY KE
88b0: 59 20 63 6c 61 75 73 65 20 61 70 70 65 61 72 73  Y clause appears
88c0: 20 69 6e 20 61 0a 20 20 43 52 45 41 54 45 20 54   in a.  CREATE T
88d0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  ABLE statement. 
88e0: 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b 45   ^The PRIMARY KE
88f0: 59 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66 6f  Y is optional fo
8900: 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  r ordinary table
8910: 73 0a 20 20 62 75 74 20 69 73 20 72 65 71 75 69  s.  but is requi
8920: 72 65 64 20 66 6f 72 20 5b 57 49 54 48 4f 55 54  red for [WITHOUT
8930: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a   ROWID] tables..
8940: 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20 68  .<p>If a table h
8950: 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  as a single colu
8960: 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61  mn primary key a
8970: 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  nd the declared 
8980: 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20 20 63  type of that.  c
8990: 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45  olumn is "INTEGE
89a0: 52 22 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  R" and the table
89b0: 20 69 73 20 6e 6f 74 20 61 20 5b 57 49 54 48 4f   is not a [WITHO
89c0: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c  UT ROWID] table,
89d0: 0a 20 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75  .  then the colu
89e0: 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73 20 61  mn is known as a
89f0: 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n [INTEGER PRIMA
8a00: 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65 20 62  RY KEY]..  See b
8a10: 65 6c 6f 77 20 66 6f 72 20 61 20 64 65 73 63 72  elow for a descr
8a20: 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 70  iption of the sp
8a30: 65 63 69 61 6c 20 70 72 6f 70 65 72 74 69 65 73  ecial properties
8a40: 20 61 6e 64 20 62 65 68 61 76 69 6f 72 73 0a 20   and behaviors. 
8a50: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
8a60: 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49   an [INTEGER PRI
8a70: 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e  MARY KEY]...<p>^
8a80: 45 61 63 68 20 72 6f 77 20 69 6e 20 61 20 74 61  Each row in a ta
8a90: 62 6c 65 20 77 69 74 68 20 61 20 70 72 69 6d 61  ble with a prima
8aa0: 72 79 20 6b 65 79 20 6d 75 73 74 20 68 61 76 65  ry key must have
8ab0: 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e   a unique combin
8ac0: 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65  ation.  of value
8ad0: 73 20 69 6e 20 69 74 73 20 70 72 69 6d 61 72 79  s in its primary
8ae0: 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e 46   key columns. ^F
8af0: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
8b00: 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 0a 20  of determining. 
8b10: 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73 20   the uniqueness 
8b20: 6f 66 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76  of primary key v
8b30: 61 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61 6c 75  alues, NULL valu
8b40: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
8b50: 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 0a  d distinct from.
8b60: 20 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75    all other valu
8b70: 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74  es, including ot
8b80: 68 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66 20 61  her NULLs. ^If a
8b90: 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55  n [INSERT] or [U
8ba0: 50 44 41 54 45 5d 0a 20 20 73 74 61 74 65 6d 65  PDATE].  stateme
8bb0: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 6d  nt attempts to m
8bc0: 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65 20  odify the table 
8bd0: 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61 74 20  content so that 
8be0: 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  two or more rows
8bf0: 0a 20 20 66 65 61 74 75 72 65 20 69 64 65 6e 74  .  feature ident
8c00: 69 63 61 6c 20 70 72 69 6d 61 72 79 20 6b 65 79  ical primary key
8c10: 20 76 61 6c 75 65 73 2c 20 69 74 20 69 73 20 61   values, it is a
8c20: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
8c30: 61 74 69 6f 6e 2e 0a 20 20 41 63 63 6f 72 64 69  ation..  Accordi
8c40: 6e 67 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74  ng to the SQL st
8c50: 61 6e 64 61 72 64 2c 20 50 52 49 4d 41 52 59 20  andard, PRIMARY 
8c60: 4b 45 59 20 73 68 6f 75 6c 64 20 61 6c 77 61 79  KEY should alway
8c70: 73 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c  s imply NOT NULL
8c80: 2e 0a 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c  ..  Unfortunatel
8c90: 79 2c 20 64 75 65 20 74 6f 20 61 20 62 75 67 20  y, due to a bug 
8ca0: 69 6e 20 73 6f 6d 65 20 65 61 72 6c 79 20 76 65  in some early ve
8cb0: 72 73 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20  rsions, this is 
8cc0: 6e 6f 74 20 74 68 65 0a 20 20 63 61 73 65 20 69  not the.  case i
8cd0: 6e 20 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73  n SQLite. ^Unles
8ce0: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  s the column is 
8cf0: 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an [INTEGER PRIM
8d00: 41 52 59 20 4b 45 59 5d 20 6f 72 0a 20 20 74 68  ARY KEY] or.  th
8d10: 65 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49  e table is a [WI
8d20: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
8d30: 6c 65 20 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  le or the column
8d40: 20 69 73 20 64 65 63 6c 61 72 65 64 20 4e 4f 54   is declared NOT
8d50: 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69 74 65 20   NULL,.  SQLite 
8d60: 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75  allows NULL valu
8d70: 65 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20  es in a PRIMARY 
8d80: 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c  KEY column.  SQL
8d90: 69 74 65 20 63 6f 75 6c 64 20 62 65 20 66 69 78  ite could be fix
8da0: 65 64 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20  ed to.  conform 
8db0: 74 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 2c  to the standard,
8dc0: 20 62 75 74 20 64 6f 69 6e 67 20 73 6f 20 6d 69   but doing so mi
8dd0: 67 68 74 20 62 72 65 61 6b 20 6c 65 67 61 63 79  ght break legacy
8de0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20   applications.. 
8df0: 20 48 65 6e 63 65 2c 20 69 74 20 68 61 73 20 62   Hence, it has b
8e00: 65 65 6e 20 64 65 63 69 64 65 64 20 74 6f 20 6d  een decided to m
8e10: 65 72 65 6c 79 20 64 6f 63 75 6d 65 6e 74 20 74  erely document t
8e20: 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c  he fact that SQL
8e30: 69 74 65 0a 20 20 61 6c 6c 6f 77 69 6e 67 20 4e  ite.  allowing N
8e40: 55 4c 4c 73 20 69 6e 20 6d 6f 73 74 20 50 52 49  ULLs in most PRI
8e50: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73  MARY KEY columns
8e60: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
8e70: 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e 73 74 20  ent uniqueconst 
8e80: 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69 71 75 65  {UNIQUE} {unique
8e90: 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63   constraint}</tc
8ea0: 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55 4e 49 51  l>.<p>^A <b>UNIQ
8eb0: 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e  UE</b> constrain
8ec0: 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  t is similar to 
8ed0: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  a PRIMARY KEY co
8ee0: 6e 73 74 72 61 69 6e 74 2c 20 65 78 63 65 70 74  nstraint, except
8ef0: 0a 20 20 74 68 61 74 20 61 20 73 69 6e 67 6c 65  .  that a single
8f00: 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20   table may have 
8f10: 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 55 4e  any number of UN
8f20: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73  IQUE constraints
8f30: 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20 20 55 4e  . ^For each.  UN
8f40: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
8f50: 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 65 61  on the table, ea
8f60: 63 68 20 72 6f 77 20 6d 75 73 74 20 63 6f 6e 74  ch row must cont
8f70: 61 69 6e 20 61 20 75 6e 69 71 75 65 20 63 6f 6d  ain a unique com
8f80: 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61  bination.  of va
8f90: 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  lues in the colu
8fa0: 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20 62  mns identified b
8fb0: 79 20 74 68 65 20 55 4e 49 51 55 45 20 63 6f 6e  y the UNIQUE con
8fc0: 73 74 72 61 69 6e 74 2e 20 0a 20 20 5e 46 6f 72  straint. .  ^For
8fd0: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
8fe0: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
8ff0: 6e 74 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  nts, NULL values
9000: 0a 20 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  .  are considere
9010: 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  d distinct from 
9020: 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  all other values
9030: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65  , including othe
9040: 72 20 4e 55 4c 4c 73 2e 0a 0a 3c 70 3e 5e 49 6e  r NULLs...<p>^In
9050: 20 6d 6f 73 74 20 63 61 73 65 73 2c 20 55 4e 49   most cases, UNI
9060: 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20  QUE and PRIMARY 
9070: 4b 45 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74  KEY.  constraint
9080: 73 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65  s are implemente
9090: 64 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 20  d by creating a 
90a0: 75 6e 69 71 75 65 20 69 6e 64 65 78 20 69 6e 20  unique index in 
90b0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
90c0: 28 54 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20  (The exceptions 
90d0: 61 72 65 20 5b 49 4e 54 45 47 45 52 20 50 52 49  are [INTEGER PRI
90e0: 4d 41 52 59 20 4b 45 59 5d 20 61 6e 64 20 50 52  MARY KEY] and PR
90f0: 49 4d 41 52 59 20 4b 45 59 73 20 6f 6e 20 0a 20  IMARY KEYs on . 
9100: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
9110: 20 74 61 62 6c 65 73 2e 29 0a 20 20 48 65 6e 63   tables.).  Henc
9120: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e, the following
9130: 20 73 63 68 65 6d 61 73 20 61 72 65 20 6c 6f 67   schemas are log
9140: 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e  ically equivalen
9150: 74 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69  t:..  <ol>.  <li
9160: 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45  ><p>CREATE TABLE
9170: 20 74 31 28 61 2c 20 62 20 55 4e 49 51 55 45 29   t1(a, b UNIQUE)
9180: 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54  ;.  <li><p>CREAT
9190: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20  E TABLE t1(a, b 
91a0: 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20  PRIMARY KEY);.  
91b0: 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41  <li><p>CREATE TA
91c0: 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 3c 62 72  BLE t1(a, b);<br
91d0: 3e 0a 20 20 20 20 20 20 20 20 20 43 52 45 41 54  >.         CREAT
91e0: 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74  E UNIQUE INDEX t
91f0: 31 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 3c  1b ON t1(b);.  <
9200: 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /ol>..<tcl>hd_fr
9210: 61 67 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d  agment {ckconst}
9220: 20 7b 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20   {CHECK} {CHECK 
9230: 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48 45  constraint} {CHE
9240: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c  CK constraints}<
9250: 2f 74 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e  /tcl>.<p>^(A <b>
9260: 43 48 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72  CHECK</b> constr
9270: 61 69 6e 74 20 6d 61 79 20 62 65 20 61 74 74 61  aint may be atta
9280: 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  ched to a column
9290: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20   definition or. 
92a0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20   specified as a 
92b0: 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  table constraint
92c0: 2e 20 49 6e 20 70 72 61 63 74 69 63 65 20 69 74  . In practice it
92d0: 20 6d 61 6b 65 73 20 6e 6f 20 64 69 66 66 65 72   makes no differ
92e0: 65 6e 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20  ence.)^ ^(Each. 
92f0: 20 74 69 6d 65 20 61 20 6e 65 77 20 72 6f 77 20   time a new row 
9300: 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
9310: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 61 6e   the table or an
9320: 20 65 78 69 73 74 69 6e 67 20 72 6f 77 20 69 73   existing row is
9330: 20 75 70 64 61 74 65 64 2c 0a 20 20 74 68 65 20   updated,.  the 
9340: 65 78 70 72 65 73 73 69 6f 6e 20 61 73 73 6f 63  expression assoc
9350: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
9360: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
9370: 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e   is evaluated an
9380: 64 0a 20 20 63 61 73 74 20 74 6f 20 61 20 4e 55  d.  cast to a NU
9390: 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74  MERIC value in t
93a0: 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61  he same way as a
93b0: 20 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f   [CAST expressio
93c0: 6e 5d 2e 20 49 66 20 74 68 65 20 0a 20 20 72 65  n]. If the .  re
93d0: 73 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e  sult is zero (in
93e0: 74 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72  teger value 0 or
93f0: 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29   real value 0.0)
9400: 2c 20 74 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  , then a constra
9410: 69 6e 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20  int.  violation 
9420: 68 61 73 20 6f 63 63 75 72 72 65 64 2e 29 5e 20  has occurred.)^ 
9430: 5e 49 66 20 74 68 65 20 43 48 45 43 4b 20 65 78  ^If the CHECK ex
9440: 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
9450: 65 73 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20  es to NULL, or. 
9460: 20 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a   any other non-z
9470: 65 72 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73  ero value, it is
9480: 20 6e 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e   not a constrain
9490: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e  t violation..  ^
94a0: 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  The expression o
94b0: 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  f a CHECK constr
94c0: 61 69 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  aint may not con
94d0: 74 61 69 6e 20 61 20 73 75 62 71 75 65 72 79 2e  tain a subquery.
94e0: 0a 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74  ..<p>CHECK const
94f0: 72 61 69 6e 74 73 20 68 61 76 65 20 62 65 65 6e  raints have been
9500: 20 73 75 70 70 6f 72 74 65 64 20 73 69 6e 63 65   supported since
9510: 20 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30 5d   [version 3.3.0]
9520: 2e 20 50 72 69 6f 72 20 74 6f 0a 20 20 76 65 72  . Prior to.  ver
9530: 73 69 6f 6e 20 33 2e 33 2e 30 2c 20 43 48 45 43  sion 3.3.0, CHEC
9540: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65  K constraints we
9550: 72 65 20 70 61 72 73 65 64 20 62 75 74 20 6e 6f  re parsed but no
9560: 74 20 65 6e 66 6f 72 63 65 64 2e 0a 0a 3c 74 63  t enforced...<tc
9570: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 6e  l>hd_fragment {n
9580: 6f 74 6e 75 6c 6c 63 6f 6e 73 74 7d 20 7b 4e 4f  otnullconst} {NO
9590: 54 20 4e 55 4c 4c 7d 20 7b 4e 4f 54 20 4e 55 4c  T NULL} {NOT NUL
95a0: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74  L constraint}</t
95b0: 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54  cl>.<p>^A <b>NOT
95c0: 20 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72   NULL</b> constr
95d0: 61 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65  aint may only be
95e0: 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 63   attached to a c
95f0: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
9600: 2c 0a 20 20 6e 6f 74 20 73 70 65 63 69 66 69 65  ,.  not specifie
9610: 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e  d as a table con
9620: 73 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20 73 75  straint.  Not su
9630: 72 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28 61 20  rprisingly, ^(a 
9640: 4e 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74  NOT NULL.  const
9650: 72 61 69 6e 74 20 64 69 63 74 61 74 65 73 20 74  raint dictates t
9660: 68 61 74 20 74 68 65 20 61 73 73 6f 63 69 61 74  hat the associat
9670: 65 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  ed column may no
9680: 74 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55 4c 4c  t contain a NULL
9690: 20 76 61 6c 75 65 2e 0a 20 20 41 74 74 65 6d 70   value..  Attemp
96a0: 74 69 6e 67 20 74 6f 20 73 65 74 20 74 68 65 20  ting to set the 
96b0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20  column value to 
96c0: 4e 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65 72 74  NULL when insert
96d0: 69 6e 67 20 61 20 6e 65 77 20 72 6f 77 20 6f 72  ing a new row or
96e0: 0a 20 20 75 70 64 61 74 69 6e 67 20 61 6e 20 65  .  updating an e
96f0: 78 69 73 74 69 6e 67 20 6f 6e 65 20 63 61 75 73  xisting one caus
9700: 65 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  es a constraint 
9710: 76 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70  violation.)^..<p
9720: 3e 45 78 61 63 74 6c 79 20 68 6f 77 20 61 20 63  >Exactly how a c
9730: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
9740: 69 6f 6e 20 69 73 20 64 65 61 6c 74 20 77 69 74  ion is dealt wit
9750: 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  h is determined 
9760: 62 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66 6c 69  by the.  [confli
9770: 63 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73 74 72  ct clause|constr
9780: 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
9790: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
97a0: 68 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50 52 49  hm]. Each .  PRI
97b0: 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45  MARY KEY, UNIQUE
97c0: 2c 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64 20 43  , NOT NULL and C
97d0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
97e0: 68 61 73 20 61 20 64 65 66 61 75 6c 74 20 63 6f  has a default co
97f0: 6e 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c 75 74  nflict.  resolut
9800: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20 5e  ion algorithm. ^
9810: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49  PRIMARY KEY, UNI
9820: 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c  QUE and NOT NULL
9830: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 61 79   constraints may
9840: 20 62 65 0a 20 20 65 78 70 6c 69 63 69 74 6c 79   be.  explicitly
9850: 20 61 73 73 69 67 6e 65 64 20 61 20 64 65 66 61   assigned a defa
9860: 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
9870: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
9880: 6d 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 0a 20  m by including. 
9890: 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61   a [conflict-cla
98a0: 75 73 65 5d 20 69 6e 20 74 68 65 69 72 20 64 65  use] in their de
98b0: 66 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20  finitions. ^Or, 
98c0: 69 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  if a constraint 
98d0: 64 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64 6f 65  definition.  doe
98e0: 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 20  s not include a 
98f0: 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65  [conflict-clause
9900: 5d 20 6f 72 20 69 74 20 69 73 20 61 20 43 48 45  ] or it is a CHE
9910: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74  CK constraint, t
9920: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 63 6f 6e  he default.  con
9930: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
9940: 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42   algorithm is AB
9950: 4f 52 54 2e 20 5e 44 69 66 66 65 72 65 6e 74 20  ORT. ^Different 
9960: 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 74 68  constraints with
9970: 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 74 61  in the.  same ta
9980: 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66  ble may have dif
9990: 66 65 72 65 6e 74 20 64 65 66 61 75 6c 74 20 63  ferent default c
99a0: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
99b0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e 20 53  on algorithms. S
99c0: 65 65 0a 20 20 74 68 65 20 73 65 63 74 69 6f 6e  ee.  the section
99d0: 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46   titled [ON CONF
99e0: 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69  LICT] for additi
99f0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
9a00: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
9a10: 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47  ent rowid {INTEG
9a20: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20  ER PRIMARY KEY} 
9a30: 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c  ROWID rowid</tcl
9a40: 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e 64  >.<h3>ROWIDs and
9a50: 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49   the INTEGER PRI
9a60: 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c  MARY KEY</h3>..<
9a70: 70 3e 5e 45 78 63 65 70 74 20 66 6f 72 20 5b 57  p>^Except for [W
9a80: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
9a90: 62 6c 65 73 2c 20 61 6c 6c 20 72 6f 77 73 20 77  bles, all rows w
9aa0: 69 74 68 69 6e 20 53 51 4c 69 74 65 20 74 61 62  ithin SQLite tab
9ab0: 6c 65 73 0a 68 61 76 65 20 61 20 36 34 2d 62 69  les.have a 64-bi
9ac0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
9ad0: 20 6b 65 79 20 74 68 61 74 20 75 6e 69 71 75 65   key that unique
9ae0: 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68  ly identifies th
9af0: 65 20 72 6f 77 20 77 69 74 68 69 6e 20 69 74 73  e row within its
9b00: 20 74 61 62 6c 65 2e 0a 54 68 69 73 20 69 6e 74   table..This int
9b10: 65 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79 0a  eger is usually.
9b20: 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77 69  called the "rowi
9b30: 64 22 2e 20 5e 54 68 65 20 72 6f 77 69 64 20 76  d". ^The rowid v
9b40: 61 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63 65  alue can be acce
9b50: 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f  ssed using one o
9b60: 66 20 74 68 65 20 73 70 65 63 69 61 6c 0a 63 61  f the special.ca
9b70: 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6e  se-independent n
9b80: 61 6d 65 73 20 22 72 6f 77 69 64 22 2c 20 22 6f  ames "rowid", "o
9b90: 69 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64 5f  id", or "_rowid_
9ba0: 22 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  " in place of a 
9bb0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66  column name..^If
9bc0: 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e   a table contain
9bd0: 73 20 61 20 75 73 65 72 20 64 65 66 69 6e 65 64  s a user defined
9be0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22 72   column named "r
9bf0: 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20  owid", "oid" or 
9c00: 22 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e 20  "_rowid_",.then 
9c10: 74 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79 73  that name always
9c20: 20 72 65 66 65 72 73 20 74 68 65 20 65 78 70 6c   refers the expl
9c30: 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20  icitly declared 
9c40: 63 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f  column and canno
9c50: 74 20 62 65 20 75 73 65 64 0a 74 6f 20 72 65 74  t be used.to ret
9c60: 72 69 65 76 65 20 74 68 65 20 69 6e 74 65 67 65  rieve the intege
9c70: 72 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a 0a  r rowid value...
9c80: 3c 70 3e 54 68 65 20 72 6f 77 69 64 20 28 61 6e  <p>The rowid (an
9c90: 64 20 22 6f 69 64 22 20 61 6e 64 20 22 5f 72 6f  d "oid" and "_ro
9ca0: 77 69 64 5f 22 29 20 69 73 20 6f 6d 69 74 74 65  wid_") is omitte
9cb0: 64 20 69 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f  d in [WITHOUT RO
9cc0: 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 57 49 54  WID] tables..WIT
9cd0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
9ce0: 73 20 61 72 65 20 6f 6e 6c 79 20 61 76 61 69 6c  s are only avail
9cf0: 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 5b  able in SQLite [
9d00: 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32 5d 20 61  version 3.8.2] a
9d10: 6e 64 20 6c 61 74 65 72 2e 0a 41 20 74 61 62 6c  nd later..A tabl
9d20: 65 20 74 68 61 74 20 6c 61 63 6b 73 20 74 68 65  e that lacks the
9d30: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 63   WITHOUT ROWID c
9d40: 6c 61 75 73 65 20 69 73 20 63 61 6c 6c 65 64 20  lause is called 
9d50: 61 20 22 72 6f 77 69 64 20 74 61 62 6c 65 22 2e  a "rowid table".
9d60: 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f  ..<p>The data fo
9d70: 72 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20 69  r rowid tables i
9d80: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 42 2d  s stored as a B-
9d90: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 63  Tree structure c
9da0: 6f 6e 74 61 69 6e 69 6e 67 0a 6f 6e 65 20 65 6e  ontaining.one en
9db0: 74 72 79 20 66 6f 72 20 65 61 63 68 20 74 61 62  try for each tab
9dc0: 6c 65 20 72 6f 77 2c 20 75 73 69 6e 67 20 74 68  le row, using th
9dd0: 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 73  e rowid value as
9de0: 20 74 68 65 20 6b 65 79 2e 20 54 68 69 73 20 6d   the key. This m
9df0: 65 61 6e 73 20 74 68 61 74 0a 72 65 74 72 69 65  eans that.retrie
9e00: 76 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e 67 20  ving or sorting 
9e10: 72 65 63 6f 72 64 73 20 62 79 20 72 6f 77 69 64  records by rowid
9e20: 20 69 73 20 66 61 73 74 2e 20 53 65 61 72 63 68   is fast. Search
9e30: 69 6e 67 20 66 6f 72 20 61 20 72 65 63 6f 72 64  ing for a record
9e40: 20 77 69 74 68 20 61 0a 73 70 65 63 69 66 69 63   with a.specific
9e50: 20 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72 20 61   rowid, or for a
9e60: 6c 6c 20 72 65 63 6f 72 64 73 20 77 69 74 68 20  ll records with 
9e70: 72 6f 77 69 64 73 20 77 69 74 68 69 6e 20 61 20  rowids within a 
9e80: 73 70 65 63 69 66 69 65 64 20 72 61 6e 67 65 20  specified range 
9e90: 69 73 0a 61 72 6f 75 6e 64 20 74 77 69 63 65 20  is.around twice 
9ea0: 61 73 20 66 61 73 74 20 61 73 20 61 20 73 69 6d  as fast as a sim
9eb0: 69 6c 61 72 20 73 65 61 72 63 68 20 6d 61 64 65  ilar search made
9ec0: 20 62 79 20 73 70 65 63 69 66 79 69 6e 67 20 61   by specifying a
9ed0: 6e 79 20 6f 74 68 65 72 20 50 52 49 4d 41 52 59  ny other PRIMARY
9ee0: 0a 4b 45 59 20 6f 72 20 69 6e 64 65 78 65 64 20  .KEY or indexed 
9ef0: 76 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74  value...<p> ^Wit
9f00: 68 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 20  h one exception 
9f10: 6e 6f 74 65 64 20 62 65 6c 6f 77 2c 20 69 66 20  noted below, if 
9f20: 61 20 72 6f 77 69 64 20 74 61 62 6c 65 20 68 61  a rowid table ha
9f30: 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
9f40: 74 68 61 74 20 63 6f 6e 73 69 73 74 73 0a 6f 66  that consists.of
9f50: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
9f60: 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65   and the declare
9f70: 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 20 63  d type of that c
9f80: 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45  olumn is "INTEGE
9f90: 52 22 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72  R" in any mixtur
9fa0: 65 20 6f 66 0a 75 70 70 65 72 20 61 6e 64 20 6c  e of.upper and l
9fb0: 6f 77 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20  ower case, then 
9fc0: 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d  the column becom
9fd0: 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  es an alias for 
9fe0: 74 68 65 20 72 6f 77 69 64 2e 20 53 75 63 68 20  the rowid. Such 
9ff0: 61 0a 63 6f 6c 75 6d 6e 20 69 73 20 75 73 75 61  a.column is usua
a000: 6c 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20  lly referred to 
a010: 61 73 20 61 6e 20 22 69 6e 74 65 67 65 72 20 70  as an "integer p
a020: 72 69 6d 61 72 79 20 6b 65 79 22 2e 20 41 20 50  rimary key". A P
a030: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d  RIMARY KEY colum
a040: 6e 0a 6f 6e 6c 79 20 62 65 63 6f 6d 65 73 20 61  n.only becomes a
a050: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
a060: 79 20 6b 65 79 20 69 66 20 74 68 65 20 64 65 63  y key if the dec
a070: 6c 61 72 65 64 20 74 79 70 65 20 6e 61 6d 65 20  lared type name 
a080: 69 73 20 65 78 61 63 74 6c 79 0a 22 49 4e 54 45  is exactly."INTE
a090: 47 45 52 22 2e 20 20 5e 4f 74 68 65 72 20 69 6e  GER".  ^Other in
a0a0: 74 65 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73  teger type names
a0b0: 20 6c 69 6b 65 20 22 49 4e 54 22 20 6f 72 20 22   like "INT" or "
a0c0: 42 49 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52  BIGINT" or "SHOR
a0d0: 54 20 49 4e 54 45 47 45 52 22 0a 6f 72 20 22 55  T INTEGER".or "U
a0e0: 4e 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22  NSIGNED INTEGER"
a0f0: 20 63 61 75 73 65 73 20 74 68 65 20 70 72 69 6d   causes the prim
a100: 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74  ary key column t
a110: 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f  o behave as an o
a120: 72 64 69 6e 61 72 79 0a 74 61 62 6c 65 20 63 6f  rdinary.table co
a130: 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74 65 67 65  lumn with intege
a140: 72 20 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e 64  r [affinity] and
a150: 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c   a unique index,
a160: 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73   not as an alias
a170: 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64 2e 0a   for.the rowid..
a180: 0a 3c 70 3e 20 54 68 65 20 65 78 63 65 70 74 69  .<p> The excepti
a190: 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f  on mentioned abo
a1a0: 76 65 20 69 73 20 74 68 61 74 20 5e 69 66 20 74  ve is that ^if t
a1b0: 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f  he declaration o
a1c0: 66 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a  f a column with.
a1d0: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 22 49  declared type "I
a1e0: 4e 54 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73  NTEGER" includes
a1f0: 20 61 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59   an "PRIMARY KEY
a200: 20 44 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69   DESC" clause, i
a210: 74 20 64 6f 65 73 20 6e 6f 74 0a 62 65 63 6f 6d  t does not.becom
a220: 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  e an alias for t
a230: 68 65 20 72 6f 77 69 64 20 61 6e 64 20 69 73 20  he rowid and is 
a240: 6e 6f 74 20 63 6c 61 73 73 69 66 69 65 64 20 61  not classified a
a250: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  s an integer pri
a260: 6d 61 72 79 20 6b 65 79 2e 0a 54 68 69 73 20 71  mary key..This q
a270: 75 69 72 6b 20 69 73 20 6e 6f 74 20 62 79 20 64  uirk is not by d
a280: 65 73 69 67 6e 2e 20 49 74 20 69 73 20 64 75 65  esign. It is due
a290: 20 74 6f 20 61 20 62 75 67 20 69 6e 20 65 61 72   to a bug in ear
a2a0: 6c 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ly versions of S
a2b0: 51 4c 69 74 65 2e 0a 42 75 74 20 66 69 78 69 6e  QLite..But fixin
a2c0: 67 20 74 68 65 20 62 75 67 20 63 6f 75 6c 64 20  g the bug could 
a2d0: 72 65 73 75 6c 74 20 69 6e 20 62 61 63 6b 77 61  result in backwa
a2e0: 72 64 73 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c  rds incompatibil
a2f0: 69 74 69 65 73 2e 0a 48 65 6e 63 65 2c 20 74 68  ities..Hence, th
a300: 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68 61 76  e original behav
a310: 69 6f 72 20 68 61 73 20 62 65 65 6e 20 72 65 74  ior has been ret
a320: 61 69 6e 65 64 20 28 61 6e 64 20 64 6f 63 75 6d  ained (and docum
a330: 65 6e 74 65 64 29 20 62 65 63 61 75 73 65 0a 62  ented) because.b
a340: 65 68 61 76 69 6f 72 20 69 6e 20 61 20 63 6f 72  ehavior in a cor
a350: 6e 65 72 20 63 61 73 65 20 69 73 20 66 61 72 20  ner case is far 
a360: 62 65 74 74 65 72 20 74 68 61 6e 20 61 20 63 6f  better than a co
a370: 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72 65 61  mpatibility brea
a380: 6b 2e 20 20 54 68 69 73 20 6d 65 61 6e 73 0a 74  k.  This means.t
a390: 68 61 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77  hat ^(the follow
a3a0: 69 6e 67 20 74 68 72 65 65 20 74 61 62 6c 65 20  ing three table 
a3b0: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c  declarations all
a3c0: 20 63 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d   cause the colum
a3d0: 6e 20 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61  n "x" to be an.a
a3e0: 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77  lias for the row
a3f0: 69 64 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70  id (an integer p
a400: 72 69 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75  rimary key):..<u
a410: 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  l>.<li><tt>CREAT
a420: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
a430: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
a440: 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e  ASC, y, z);</tt>
a450: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
a460: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
a470: 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59  R, y, z, PRIMARY
a480: 20 4b 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74   KEY(x ASC));</t
a490: 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  t>.<li><tt>CREAT
a4a0: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
a4b0: 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41  GER, y, z, PRIMA
a4c0: 52 59 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b  RY KEY(x DESC));
a4d0: 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  </tt>.</ul>)^..<
a4e0: 70 3e 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c  p>But ^(the foll
a4f0: 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f  owing declaratio
a500: 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c  n does not resul
a510: 74 20 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61  t in "x" being a
a520: 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20  n alias for.the 
a530: 72 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  rowid:.<ul>.<li>
a540: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
a550: 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49   t(x INTEGER PRI
a560: 4d 41 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79  MARY KEY DESC, y
a570: 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e  , z);</tt>.</ul>
a580: 29 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61  )^..<p>^Rowid va
a590: 6c 75 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69  lues may be modi
a5a0: 66 69 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50  fied using an UP
a5b0: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
a5c0: 6e 20 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61  n the same.way a
a5d0: 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75  s any other colu
a5e0: 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69  mn value can, ei
a5f0: 74 68 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f  ther using one o
a600: 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61  f the built-in a
a610: 6c 69 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c  liases.("rowid",
a620: 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69   "oid" or "_rowi
a630: 64 5f 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67  d_") or by using
a640: 20 61 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65   an alias create
a650: 64 20 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a  d by an integer.
a660: 70 72 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69  primary key. ^Si
a670: 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45  milarly, an INSE
a680: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  RT statement may
a690: 20 70 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65   provide a value
a6a0: 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72   to use as the.r
a6b0: 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f  owid for each ro
a6c0: 77 20 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e  w inserted. ^(Un
a6d0: 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69  like normal SQLi
a6e0: 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69  te columns, an i
a6f0: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b  nteger primary.k
a700: 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75  ey or rowid colu
a710: 6d 6e 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  mn must contain 
a720: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20  integer values. 
a730: 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
a740: 6b 65 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c  key or rowid.col
a750: 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c  umns are not abl
a760: 65 20 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69  e to hold floati
a770: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c  ng point values,
a780: 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c   strings, BLOBs,
a790: 20 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70   or NULLs.)^..<p
a7a0: 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20 73  >^If an UPDATE s
a7b0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
a7c0: 73 20 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65  s to set an inte
a7d0: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
a7e0: 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a  or rowid column.
a7f0: 74 6f 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f  to a NULL or blo
a800: 62 20 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61  b value, or to a
a810: 20 73 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20   string or real 
a820: 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f  value that canno
a830: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a  t be losslessly.
a840: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
a850: 69 6e 74 65 67 65 72 2c 20 61 20 22 64 61 74 61  integer, a "data
a860: 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65  type mismatch" e
a870: 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20  rror occurs and 
a880: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73  the statement.is
a890: 20 61 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e   aborted. ^If an
a8a0: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
a8b0: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e  t attempts to in
a8c0: 73 65 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75  sert a blob valu
a8d0: 65 2c 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f  e, or a string.o
a8e0: 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61  r real value tha
a8f0: 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73  t cannot be loss
a900: 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
a910: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69   to an integer i
a920: 6e 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70  nto an.integer p
a930: 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f  rimary key or ro
a940: 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64  wid column, a "d
a950: 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68  atatype mismatch
a960: 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61  " error occurs a
a970: 6e 64 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74  nd the.statement
a980: 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70   is aborted...<p
a990: 3e 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73  >^If an INSERT s
a9a0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
a9b0: 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55  s to insert a NU
a9c0: 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20  LL value into a 
a9d0: 72 6f 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72  rowid or.integer
a9e0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
a9f0: 75 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20  umn, the system 
aa00: 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67  chooses an integ
aa10: 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20  er value to use 
aa20: 61 73 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74  as the.rowid aut
aa30: 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65  omatically. A de
aa40: 74 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69  tailed descripti
aa50: 6f 6e 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69  on of how this i
aa60: 73 20 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64  s done is provid
aa70: 65 64 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f  ed.<a href="auto
aa80: 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61  inc.html">separa
aa90: 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  tely</a>.</p>..<
aaa0: 70 3e 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20  p>^(The [parent 
aab0: 6b 65 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69  key] of a [forei
aac0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
aad0: 74 5d 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  t] is not allowe
aae0: 64 20 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77  d to.use the row
aaf0: 69 64 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20  id.  The parent 
ab00: 6b 65 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61  key must used na
ab10: 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79  med columns only
ab20: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  .)^</p>..<tcl>.#
ab30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab70: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
ab80: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52  ction {CREATE TR
ab90: 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69  IGGER} createtri
aba0: 67 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52  gger {{CREATE TR
abb0: 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69  IGGER}}..Recursi
abc0: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
abd0: 63 72 65 61 74 65 2d 74 72 69 67 67 65 72 2d 73  create-trigger-s
abe0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
abf0: 54 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  The CREATE TRIGG
ac00: 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ER statement is 
ac10: 75 73 65 64 20 74 6f 20 61 64 64 20 74 72 69 67  used to add trig
ac20: 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74  gers to the .dat
ac30: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 54  abase schema. ^T
ac40: 72 69 67 67 65 72 73 20 61 72 65 20 64 61 74 61  riggers are data
ac50: 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20  base operations 
ac60: 0a 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61  .that are automa
ac70: 74 69 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65  tically performe
ac80: 64 20 77 68 65 6e 20 61 20 73 70 65 63 69 66 69  d when a specifi
ac90: 65 64 20 64 61 74 61 62 61 73 65 20 65 76 65 6e  ed database even
aca0: 74 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a  t.occurs.  </p>.
acb0: 0a 3c 70 3e 5e 41 20 74 72 69 67 67 65 72 20 6d  .<p>^A trigger m
acc0: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
acd0: 74 6f 20 66 69 72 65 20 77 68 65 6e 65 76 65 72  to fire whenever
ace0: 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e   a [DELETE], [IN
acf0: 53 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54  SERT],.or [UPDAT
ad00: 45 5d 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c  E] of a.particul
ad10: 61 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  ar database tabl
ad20: 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65  e occurs, or whe
ad30: 6e 65 76 65 72 20 61 6e 20 5b 55 50 44 41 54 45  never an [UPDATE
ad40: 5d 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f  ] occurs on.on o
ad50: 6e 65 20 6f 72 20 6d 6f 72 65 20 73 70 65 63 69  ne or more speci
ad60: 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  fied columns of 
ad70: 61 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  a table.</p>..<p
ad80: 3e 5e 41 74 20 74 68 69 73 20 74 69 6d 65 20 53  >^At this time S
ad90: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f  QLite supports o
ada0: 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57  nly FOR EACH ROW
adb0: 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46   triggers, not F
adc0: 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e  OR EACH.STATEMEN
add0: 54 20 74 72 69 67 67 65 72 73 2e 20 5e 48 65 6e  T triggers. ^Hen
ade0: 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70  ce explicitly sp
adf0: 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43  ecifying FOR EAC
ae00: 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61  H ROW is optiona
ae10: 6c 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f 57  l..^FOR EACH ROW
ae20: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
ae30: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
ae40: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
ae50: 65 20 74 72 69 67 67 65 72 0a 6d 61 79 20 62 65  e trigger.may be
ae60: 20 65 78 65 63 75 74 65 64 20 28 64 65 70 65 6e   executed (depen
ae70: 64 69 6e 67 20 6f 6e 20 74 68 65 20 57 48 45 4e  ding on the WHEN
ae80: 20 63 6c 61 75 73 65 29 20 66 6f 72 20 65 61 63   clause) for eac
ae90: 68 20 64 61 74 61 62 61 73 65 20 72 6f 77 20 62  h database row b
aea0: 65 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20 75  eing.inserted, u
aeb0: 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65  pdated or delete
aec0: 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
aed0: 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74  nt causing the t
aee0: 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2e 3c  rigger to fire.<
aef0: 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20 74  /p>..<p>^(Both t
af00: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61  he WHEN clause a
af10: 6e 64 20 74 68 65 20 74 72 69 67 67 65 72 20 61  nd the trigger a
af20: 63 74 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73  ctions may acces
af30: 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74  s elements of .t
af40: 68 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73  he row being ins
af50: 65 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f  erted, deleted o
af60: 72 20 75 70 64 61 74 65 64 20 75 73 69 6e 67 20  r updated using 
af70: 72 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68  references of th
af80: 65 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e  e form ."NEW.<i>
af90: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22  column-name</i>"
afa0: 20 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c   and "OLD.<i>col
afb0: 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77  umn-name</i>", w
afc0: 68 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e  here.<i>column-n
afd0: 61 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e  ame</i> is the n
afe0: 61 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ame of a column 
aff0: 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74  from the table t
b000: 68 61 74 20 74 68 65 20 74 72 69 67 67 65 72 0a  hat the trigger.
b010: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
b020: 74 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64 20  th.)^ ^(OLD and 
b030: 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 6d  NEW references m
b040: 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
b050: 69 6e 20 74 72 69 67 67 65 72 73 20 6f 6e 0a 65  in triggers on.e
b060: 76 65 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20  vents for which 
b070: 74 68 65 79 20 61 72 65 20 72 65 6c 65 76 61 6e  they are relevan
b080: 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  t, as follows:</
b090: 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
b0a0: 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
b0b0: 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  10>.<tr>.<td val
b0c0: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
b0d0: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
b0e0: 30 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c  0><i>INSERT</i><
b0f0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
b100: 22 74 6f 70 22 3e 4e 45 57 20 72 65 66 65 72 65  "top">NEW refere
b110: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
b120: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
b130: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
b140: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
b150: 64 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54  dth=120><i>UPDAT
b160: 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76  E</i></td>.<td v
b170: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20  align="top">NEW 
b180: 61 6e 64 20 4f 4c 44 20 72 65 66 65 72 65 6e 63  and OLD referenc
b190: 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64  es are valid</td
b1a0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
b1b0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
b1c0: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
b1d0: 68 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c  h=120><i>DELETE<
b1e0: 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  /i></td>.<td val
b1f0: 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65  ign="top">OLD re
b200: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
b210: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f  id</td>.</tr>.</
b220: 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c  table>.</p>)^..<
b230: 70 3e 5e 49 66 20 61 20 57 48 45 4e 20 63 6c 61  p>^If a WHEN cla
b240: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
b250: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
b260: 6e 74 73 20 73 70 65 63 69 66 69 65 64 0a 61 72  nts specified.ar
b270: 65 20 6f 6e 6c 79 20 65 78 65 63 75 74 65 64 20  e only executed 
b280: 66 6f 72 20 72 6f 77 73 20 66 6f 72 20 77 68 69  for rows for whi
b290: 63 68 20 74 68 65 20 57 48 45 4e 0a 63 6c 61 75  ch the WHEN.clau
b2a0: 73 65 20 69 73 20 74 72 75 65 2e 20 5e 49 66 20  se is true. ^If 
b2b0: 6e 6f 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69  no WHEN clause i
b2c0: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20  s supplied, the 
b2d0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 61  SQL statements.a
b2e0: 72 65 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  re executed for 
b2f0: 61 6c 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c  all rows.</p>..<
b300: 70 3e 5e 54 68 65 20 42 45 46 4f 52 45 20 6f 72  p>^The BEFORE or
b310: 20 41 46 54 45 52 20 6b 65 79 77 6f 72 64 20 64   AFTER keyword d
b320: 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74  etermines when t
b330: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
b340: 6e 73 0a 77 69 6c 6c 20 62 65 20 65 78 65 63 75  ns.will be execu
b350: 74 65 64 20 72 65 6c 61 74 69 76 65 20 74 6f 20  ted relative to 
b360: 74 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d  the insertion, m
b370: 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f 72 20 72  odification or r
b380: 65 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61 73  emoval of the.as
b390: 73 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70  sociated row.</p
b3a0: 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f  >..<p>^An [ON CO
b3b0: 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 6d  NFLICT] clause m
b3c0: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
b3d0: 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 5b 55  as part of an [U
b3e0: 50 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52  PDATE] or [INSER
b3f0: 54 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  T].action within
b400: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 74 68 65   the body of the
b410: 20 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65 76   trigger..^Howev
b420: 65 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e  er if an [ON CON
b430: 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69 73  FLICT] clause is
b440: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
b450: 72 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74 65  rt of .the state
b460: 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65  ment causing the
b470: 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65   trigger to fire
b480: 2c 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74 20  , then conflict 
b490: 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20  handling.policy 
b4a0: 6f 66 20 74 68 65 20 6f 75 74 65 72 20 73 74 61  of the outer sta
b4b0: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 69  tement is used i
b4c0: 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  nstead.</p>..<p>
b4d0: 5e 54 72 69 67 67 65 72 73 20 61 72 65 20 61 75  ^Triggers are au
b4e0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52 4f  tomatically [DRO
b4f0: 50 20 54 52 49 47 47 45 52 20 7c 20 64 72 6f 70  P TRIGGER | drop
b500: 70 65 64 5d 0a 77 68 65 6e 20 74 68 65 20 74 61  ped].when the ta
b510: 62 6c 65 20 74 68 61 74 20 74 68 65 79 20 61 72  ble that they ar
b520: 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69  e .associated wi
b530: 74 68 20 28 74 68 65 20 3c 69 3e 74 61 62 6c 65  th (the <i>table
b540: 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65 29  -name</i> table)
b550: 20 69 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c 45   is .[DROP TABLE
b560: 20 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e 48   | dropped].  ^H
b570: 6f 77 65 76 65 72 20 69 66 20 74 68 65 20 74 72  owever if the tr
b580: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65  igger actions re
b590: 66 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61  ference.other ta
b5a0: 62 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67 65  bles, the trigge
b5b0: 72 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64  r is not dropped
b5c0: 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20   or modified if 
b5d0: 74 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c  those other.tabl
b5e0: 65 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42  es are [DROP TAB
b5f0: 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72  LE | dropped] or
b600: 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20   [ALTER TABLE | 
b610: 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a  modified].</p>..
b620: 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65  <p>^Triggers are
b630: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
b640: 68 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52  he [DROP TRIGGER
b650: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  ] statement.</p>
b660: 0a 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73  ..<h3>Syntax Res
b670: 74 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44  trictions On UPD
b680: 41 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64  ATE, DELETE, and
b690: 20 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e   INSERT Statemen
b6a0: 74 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72  ts Within.    Tr
b6b0: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
b6c0: 5e 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b  ^The [UPDATE], [
b6d0: 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e  DELETE], and [IN
b6e0: 53 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73  SERT].statements
b6f0: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
b700: 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a   do not support.
b710: 74 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20  the full syntax 
b720: 66 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44  for [UPDATE], [D
b730: 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53  ELETE], and [INS
b740: 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  ERT] statements.
b750: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a    The following.
b760: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70  restrictions app
b770: 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  ly:</p>..<ul>.<l
b780: 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61  i><p>.  ^(The na
b790: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
b7a0: 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69  to be modified i
b7b0: 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b  n an [UPDATE], [
b7c0: 44 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53  DELETE], or [INS
b7d0: 45 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74  ERT].  statement
b7e0: 20 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75   must be an unqu
b7f0: 61 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61  alified table na
b800: 6d 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  me.  In other wo
b810: 72 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20  rds, one must.  
b820: 75 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62  use just "<i>tab
b830: 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20  lename</i>" not 
b840: 22 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e  "<i>database</i>
b850: 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65  <b>.</b><i>table
b860: 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e  name</i>".  when
b870: 20 73 70 65 63 69 66 79 69 6e 67 20 74 68 65 20   specifying the 
b880: 74 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74  table.)^  ^The t
b890: 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66  able to be modif
b8a0: 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69  ied must exist i
b8b0: 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74  n the.  same dat
b8c0: 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
b8d0: 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
b8e0: 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
b8f0: 69 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c  is attached..  <
b900: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
b910: 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54  >.  ^The "INSERT
b920: 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f   INTO <i>table</
b930: 69 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  i> DEFAULT VALUE
b940: 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b  S" form of the [
b950: 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e  INSERT] statemen
b960: 74 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  t.  is not suppo
b970: 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  rted..  </p></li
b980: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68  >..<li><p>.  ^Th
b990: 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
b9a0: 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
b9b0: 75 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  uses are not sup
b9c0: 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41  ported for [UPDA
b9d0: 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54  TE] and.  [DELET
b9e0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  E] statements.. 
b9f0: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
ba00: 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45  <p>.  ^(The ORDE
ba10: 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
ba20: 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54  lauses on [UPDAT
ba30: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
ba40: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e  statements are n
ba50: 6f 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20  ot.  supported. 
ba60: 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
ba70: 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d  MIT are not norm
ba80: 61 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66  ally supported f
ba90: 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20  or [UPDATE] or. 
baa0: 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79   [DELETE] in any
bab0: 20 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e   context but can
bac0: 20 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20   be enabled for 
bad0: 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d  top-level statem
bae0: 65 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65  ents.  using the
baf0: 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
bb00: 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
bb10: 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  MIT] compile-tim
bb20: 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76  e option.  Howev
bb30: 65 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69  er,.  that compi
bb40: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f  le-time option o
bb50: 6e 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74  nly applies to t
bb60: 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45  op-level [UPDATE
bb70: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20  ] and [DELETE]. 
bb80: 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74   statements, not
bb90: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
bba0: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
bbb0: 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
bbc0: 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  s.)^.  </p></li>
bbd0: 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  .</ul>..<tcl>hd_
bbe0: 66 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64  fragment instead
bbf0: 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53  _of_trigger {INS
bc00: 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41  TEAD OF} {INSTEA
bc10: 44 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74  D OF trigger}</t
bc20: 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20  cl>.<h3>INSTEAD 
bc30: 4f 46 20 74 72 69 67 67 65 72 3c 2f 68 33 3e 0a  OF trigger</h3>.
bc40: 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d 61  .<p>^Triggers ma
bc50: 79 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20  y be created on 
bc60: 5b 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c  [views], as well
bc70: 20 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61 62   as ordinary tab
bc80: 6c 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79 69  les, by.specifyi
bc90: 6e 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69 6e  ng INSTEAD OF in
bca0: 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47   the CREATE TRIG
bcb0: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a  GER statement. .
bcc0: 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ^If one or more 
bcd0: 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45  ON INSERT, ON DE
bce0: 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54  LETE.or ON UPDAT
bcf0: 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20 64  E triggers are d
bd00: 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65 77  efined on a view
bd10: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f 74  , then it is not
bd20: 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78 65   an.error to exe
bd30: 63 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c 20  cute an INSERT, 
bd40: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
bd50: 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68   statement on th
bd60: 65 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63 74  e view, .respect
bd70: 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61 64  ively.  ^Instead
bd80: 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20 49  ,.executing an I
bd90: 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72  NSERT, DELETE or
bda0: 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20 76   UPDATE on the v
bdb0: 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20 61  iew causes the a
bdc0: 73 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67 65  ssociated.trigge
bdd0: 72 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68 65  rs to fire. ^The
bde0: 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e 64   real tables und
bdf0: 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65 77  erlying the view
be00: 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65   are not modifie
be10: 64 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69 62  d.(except possib
be20: 6c 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20 62  ly explicitly, b
be30: 79 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67  y a trigger prog
be40: 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e  ram).</p>..<p>^N
be50: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5b 73 71  ote that the [sq
be60: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
be70: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f   and [sqlite3_to
be80: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69  tal_changes()] i
be90: 6e 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74  nterfaces.do not
bea0: 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f   count INSTEAD O
beb0: 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67  F trigger firing
bec0: 73 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e  s, but the.[coun
bed0: 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61  t_changes pragma
bee0: 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53  ] does count INS
bef0: 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20  TEAD OF trigger 
bf00: 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33  firing.</p>..<h3
bf10: 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a  >Examples</h3>..
bf20: 3c 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68  <p>^(Assuming th
bf30: 61 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f  at customer reco
bf40: 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  rds are stored i
bf50: 6e 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73  n the "customers
bf60: 22 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61  " table, and.tha
bf70: 74 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20  t order records 
bf80: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
bf90: 65 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65  e "orders" table
bfa0: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
bfb0: 74 72 69 67 67 65 72 0a 65 6e 73 75 72 65 73 20  trigger.ensures 
bfc0: 74 68 61 74 20 61 6c 6c 20 61 73 73 6f 63 69 61  that all associa
bfd0: 74 65 64 20 6f 72 64 65 72 73 20 61 72 65 20 72  ted orders are r
bfe0: 65 64 69 72 65 63 74 65 64 20 77 68 65 6e 20 61  edirected when a
bff0: 20 63 75 73 74 6f 6d 65 72 20 63 68 61 6e 67 65   customer change
c000: 73 0a 68 69 73 20 6f 72 20 68 65 72 20 61 64 64  s.his or her add
c010: 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ress:</p>..<tcl>
c020: 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45  Example {.CREATE
c030: 20 54 52 49 47 47 45 52 20 75 70 64 61 74 65 5f   TRIGGER update_
c040: 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73  customer_address
c050: 20 55 50 44 41 54 45 20 4f 46 20 61 64 64 72 65   UPDATE OF addre
c060: 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73 20  ss ON customers 
c070: 0a 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50 44  .  BEGIN.    UPD
c080: 41 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61  ATE orders SET a
c090: 64 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64 64  ddress = new.add
c0a0: 72 65 73 73 20 57 48 45 52 45 20 63 75 73 74 6f  ress WHERE custo
c0b0: 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e  mer_name = old.n
c0c0: 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74  ame;.  END;.}</t
c0d0: 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 69  cl>..<p>With thi
c0e0: 73 20 74 72 69 67 67 65 72 20 69 6e 73 74 61 6c  s trigger instal
c0f0: 6c 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20 74  led, executing t
c100: 68 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f 70  he statement:</p
c110: 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20  >..<tcl>Example 
c120: 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65  {.UPDATE custome
c130: 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d  rs SET address =
c140: 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48   '1 Main St.' WH
c150: 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b  ERE name = 'Jack
c160: 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e   Jones';.}</tcl>
c170: 0a 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20  ..<p>causes the 
c180: 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20  following to be 
c190: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78  automatically ex
c1a0: 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63  ecuted:</p>..<tc
c1b0: 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41  l>Example {.UPDA
c1c0: 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64  TE orders SET ad
c1d0: 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20  dress = '1 Main 
c1e0: 53 74 2e 27 20 57 48 45 52 45 20 63 75 73 74 6f  St.' WHERE custo
c1f0: 6d 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b  mer_name = 'Jack
c200: 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e   Jones';.}</tcl>
c210: 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
c220: 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72  ment undef_befor
c230: 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46  e {undefined BEF
c240: 4f 52 45 20 74 72 69 67 67 65 72 20 62 65 68 61  ORE trigger beha
c250: 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  vior}</tcl>.<h3>
c260: 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20  Cautions On The 
c270: 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72  Use Of BEFORE tr
c280: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
c290: 49 66 20 61 20 42 45 46 4f 52 45 20 55 50 44 41  If a BEFORE UPDA
c2a0: 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c  TE or BEFORE DEL
c2b0: 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69  ETE trigger modi
c2c0: 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  fies or deletes 
c2d0: 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74  a row.that was t
c2e0: 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70 64 61  o have been upda
c2f0: 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20  ted or deleted, 
c300: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
c310: 6f 66 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  of the subsequen
c320: 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65  t.update or dele
c330: 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  te operation is 
c340: 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74  undefined.  Furt
c350: 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45  hermore, if a BE
c360: 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64  FORE trigger.mod
c370: 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73  ifies or deletes
c380: 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20   a row, then it 
c390: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65  is undefined whe
c3a0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45  ther or not AFTE
c3b0: 52 20 74 72 69 67 67 65 72 73 0a 74 68 61 74 20  R triggers.that 
c3c0: 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72  would have other
c3d0: 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73  wise run on thos
c3e0: 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66  e rows will in f
c3f0: 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c  act run..</p>..<
c400: 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e  p>The value of N
c410: 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65  EW.rowid is unde
c420: 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52  fined in a BEFOR
c430: 45 20 49 4e 53 45 52 54 20 74 72 69 67 67 65 72  E INSERT trigger
c440: 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f   in which.the ro
c450: 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69  wid is not expli
c460: 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20  citly set to an 
c470: 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70  integer.</p>..<p
c480: 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68 65 20  >Because of the 
c490: 62 65 68 61 76 69 6f 72 73 20 64 65 73 63 72 69  behaviors descri
c4a0: 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72  bed above, progr
c4b0: 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75  ammers are encou
c4c0: 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20  raged to.prefer 
c4d0: 41 46 54 45 52 20 74 72 69 67 67 65 72 73 20 6f  AFTER triggers o
c4e0: 76 65 72 20 42 45 46 4f 52 45 20 74 72 69 67 67  ver BEFORE trigg
c4f0: 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 68  ers.</p>..<h3>Th
c500: 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
c510: 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  on</h3>..<p>^(A 
c520: 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63  special SQL func
c530: 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79  tion RAISE() may
c540: 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
c550: 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
c560: 6d 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f  m,)^.with the fo
c570: 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f  llowing syntax</
c580: 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65  p> ..<tcl>Bubble
c590: 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75  Diagram raise-fu
c5a0: 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70  nction</tcl>..<p
c5b0: 3e 5e 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52  >^(When one of R
c5c0: 41 49 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e  AISE(ROLLBACK,..
c5d0: 2e 29 2c 20 52 41 49 53 45 28 41 42 4f 52 54 2c  .), RAISE(ABORT,
c5e0: 2e 2e 2e 29 20 6f 72 20 52 41 49 53 45 28 46 41  ...) or RAISE(FA
c5f0: 49 4c 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65  IL,...).is calle
c600: 64 20 64 75 72 69 6e 67 20 74 72 69 67 67 65 72  d during trigger
c610: 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69  -program.executi
c620: 6f 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69 65  on, the specifie
c630: 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d [ON CONFLICT] 
c640: 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65  processing is pe
c650: 72 66 6f 72 6d 65 64 0a 74 68 65 20 63 75 72 72  rformed.the curr
c660: 65 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e  ent query termin
c670: 61 74 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72  ates.)^.An error
c680: 20 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45   code of [SQLITE
c690: 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20  _CONSTRAINT] is 
c6a0: 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
c6b0: 61 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f  application,.alo
c6c0: 6e 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ng with the spec
c6d0: 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
c6e0: 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68  age.</p>..<p>^Wh
c6f0: 65 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29  en RAISE(IGNORE)
c700: 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20   is called, the 
c710: 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65  remainder of the
c720: 20 63 75 72 72 65 6e 74 20 74 72 69 67 67 65 72   current trigger
c730: 20 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74   program,.the st
c740: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75  atement that cau
c750: 73 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20  sed the trigger 
c760: 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75  program to execu
c770: 74 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65  te and any subse
c780: 71 75 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72  quent.trigger pr
c790: 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c  ograms that woul
c7a0: 64 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63  d have been exec
c7b0: 75 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e  uted are abandon
c7c0: 65 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73 65  ed. ^No database
c7d0: 0a 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f 6c  .changes are rol
c7e0: 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74  led back.  ^If t
c7f0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  he statement tha
c800: 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69  t caused the tri
c810: 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20  gger program.to 
c820: 65 78 65 63 75 74 65 20 69 73 20 69 74 73 65 6c  execute is itsel
c830: 66 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  f part of a trig
c840: 67 65 72 20 70 72 6f 67 72 61 6d 2c 20 74 68 65  ger program, the
c850: 6e 20 74 68 61 74 20 74 72 69 67 67 65 72 20 70  n that trigger p
c860: 72 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73 20 65  rogram.resumes e
c870: 78 65 63 75 74 69 6f 6e 20 61 74 20 74 68 65 20  xecution at the 
c880: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
c890: 20 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e   next step..</p>
c8a0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
c8b0: 6e 74 20 74 65 6d 70 74 72 69 67 20 7b 54 45 4d  nt temptrig {TEM
c8c0: 50 20 74 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f  P triggers on no
c8d0: 6e 2d 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f  n-TEMP tables}</
c8e0: 74 63 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72  tcl>.<h3>TEMP Tr
c8f0: 69 67 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45  iggers on Non-TE
c900: 4d 50 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a  MP Tables</h3>..
c910: 3c 70 3e 5e 28 41 20 74 72 69 67 67 65 72 20 6e  <p>^(A trigger n
c920: 6f 72 6d 61 6c 6c 79 20 65 78 69 73 74 73 20 69  ormally exists i
c930: 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
c940: 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65  ase as the table
c950: 20 6e 61 6d 65 64 0a 61 66 74 65 72 20 74 68 65   named.after the
c960: 20 22 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e   "ON" keyword in
c970: 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47   the CREATE TRIG
c980: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  GER statement.  
c990: 45 78 63 65 70 74 2c 20 69 74 20 69 73 0a 70 6f  Except, it is.po
c9a0: 73 73 69 62 6c 65 20 74 6f 20 63 72 65 61 74 65  ssible to create
c9b0: 20 61 20 54 45 4d 50 20 54 52 49 47 47 45 52 20   a TEMP TRIGGER 
c9c0: 6f 6e 20 61 20 74 61 62 6c 65 20 69 6e 20 61 6e  on a table in an
c9d0: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 2e 29  other database.)
c9e0: 5e 20 20 0a 53 75 63 68 20 61 20 74 72 69 67 67  ^  .Such a trigg
c9f0: 65 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72  er will only fir
ca00: 65 20 77 68 65 6e 20 63 68 61 6e 67 65 73 0a 61  e when changes.a
ca10: 72 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 74  re made to the t
ca20: 61 72 67 65 74 20 74 61 62 6c 65 20 62 79 20 74  arget table by t
ca30: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74  he application t
ca40: 68 61 74 20 64 65 66 69 6e 65 64 20 74 68 65 20  hat defined the 
ca50: 74 72 69 67 67 65 72 2e 0a 4f 74 68 65 72 20 61  trigger..Other a
ca60: 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74  pplications that
ca70: 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61   modify the data
ca80: 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  base will not be
ca90: 20 61 62 6c 65 20 74 6f 20 73 65 65 20 74 68 65   able to see the
caa0: 0a 54 45 4d 50 20 74 72 69 67 67 65 72 20 61 6e  .TEMP trigger an
cab0: 64 20 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72  d hence cannot r
cac0: 75 6e 20 74 68 65 20 74 72 69 67 67 65 72 2e 3c  un the trigger.<
cad0: 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66  /p>..<p>When def
cae0: 69 6e 69 6e 67 20 61 20 54 45 4d 50 20 74 72 69  ining a TEMP tri
caf0: 67 67 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45  gger on a non-TE
cb00: 4d 50 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20  MP table, it is 
cb10: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65  important to.spe
cb20: 63 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73  cify the databas
cb30: 65 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f  e holding the no
cb40: 6e 2d 54 45 4d 50 20 74 61 62 6c 65 2e 20 20 46  n-TEMP table.  F
cb50: 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74  or example,.in t
cb60: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
cb70: 74 65 6d 65 6e 74 2c 20 69 74 20 69 73 20 69 6d  tement, it is im
cb80: 70 6f 72 74 61 6e 74 20 74 6f 20 73 61 79 20 22  portant to say "
cb90: 6d 61 69 6e 2e 74 61 62 31 22 20 69 6e 73 74 65  main.tab1" inste
cba0: 61 64 0a 6f 66 20 6a 75 73 74 20 22 74 61 62 31  ad.of just "tab1
cbb0: 22 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ":</p>..<blockqu
cbc0: 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
cbd0: 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 65 78   TEMP TRIGGER ex
cbe0: 31 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f  1 AFTER INSERT O
cbf0: 4e 20 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61  N <b>main.</b>ta
cc00: 62 31 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70  b1 BEGIN ....</p
cc10: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
cc20: 0a 0a 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f 20  ..<p>Failure to 
cc30: 73 70 65 63 69 66 79 20 74 68 65 20 64 61 74 61  specify the data
cc40: 62 61 73 65 20 6e 61 6d 65 20 6f 6e 20 74 68 65  base name on the
cc50: 20 74 61 72 67 65 74 20 74 61 62 6c 65 20 63 6f   target table co
cc60: 75 6c 64 20 72 65 73 75 6c 74 0a 69 6e 20 74 68  uld result.in th
cc70: 65 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 62  e TEMP trigger b
cc80: 65 69 6e 67 20 72 65 61 74 74 61 63 68 65 64 20  eing reattached 
cc90: 74 6f 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  to a table with 
cca0: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e  the same name in
ccb0: 0a 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73  .another databas
ccc0: 65 20 77 68 65 6e 65 76 65 72 20 61 6e 79 20 73  e whenever any s
ccd0: 63 68 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63  chema change occ
cce0: 75 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  urs.</p>..<tcl>.
ccf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
cd40: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
cd50: 56 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65  VIEW} {createvie
cd60: 77 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57  w} {{CREATE VIEW
cd70: 7d 20 76 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a  } view *views}..
cd80: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
cd90: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69  iagram create-vi
cda0: 65 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ew-stmt.</tcl>..
cdb0: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56  <p>^The CREATE V
cdc0: 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69  IEW command assi
cdd0: 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20  gns a name to a 
cde0: 70 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53  pre-packaged .[S
cdf0: 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
ce00: 2e 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65  . .^Once the vie
ce10: 77 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74  w is created, it
ce20: 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
ce30: 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a  the FROM clause.
ce40: 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45  of another [SELE
ce50: 43 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  CT] in place of 
ce60: 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f  a table name..</
ce70: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22  p>..<p>^If the "
ce80: 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52  TEMP" or "TEMPOR
ce90: 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63  ARY" keyword occ
cea0: 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22  urs in between "
ceb0: 43 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45  CREATE".and "VIE
cec0: 57 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77  W" then the view
ced0: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
cee0: 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65   is only visible
cef0: 20 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20   to the.process 
cf00: 74 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20  that opened the 
cf10: 64 61 74 61 62 61 73 65 20 61 6e 64 20 69 73 20  database and is 
cf20: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
cf30: 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64  leted when.the d
cf40: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
cf50: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20  d.</p>..<p> ^If 
cf60: 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e  a &lt;database-n
cf70: 61 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69  ame&gt; is speci
cf80: 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76  fied, then the v
cf90: 69 65 77 20 69 73 20 63 72 65 61 74 65 64 20 69  iew is created i
cfa0: 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74  n .the named dat
cfb0: 61 62 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e  abase. ^It is an
cfc0: 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66   error to specif
cfd0: 79 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74  y both a &lt;dat
cfe0: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61  abase-name&gt;.a
cff0: 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77  nd the TEMP keyw
d000: 6f 72 64 20 6f 6e 20 61 20 56 49 45 57 2c 20 75  ord on a VIEW, u
d010: 6e 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61  nless the &lt;da
d020: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
d030: 69 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e  is "temp"..^If n
d040: 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  o database name 
d050: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e  is specified, an
d060: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
d070: 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  rd is not presen
d080: 74 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20 63  t,.the VIEW is c
d090: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61  reated in the ma
d0a0: 69 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e  in database.</p>
d0b0: 0a 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74  ..<p>^You cannot
d0c0: 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45   [DELETE], [INSE
d0d0: 52 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d  RT], or [UPDATE]
d0e0: 20 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73   a view.  ^Views
d0f0: 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a   are read-only .
d100: 69 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77  in SQLite.  ^How
d110: 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61  ever, in many ca
d120: 73 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20  ses you can use 
d130: 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74  an.[INSTEAD OF t
d140: 72 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76  rigger] on the v
d150: 69 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73  iew to accomplis
d160: 68 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e  h .the same thin
d170: 67 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72  g.  ^Views are r
d180: 65 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65  emoved .with the
d190: 20 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d   [DROP VIEW] com
d1a0: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  mand.</p>..<tcl>
d1b0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
d1c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
d200: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
d210: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b  VIRTUAL TABLE} {
d220: 63 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52  createvtab} {{CR
d230: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
d240: 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  LE}}..RecursiveB
d250: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65  ubbleDiagram cre
d260: 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c  ate-virtual-tabl
d270: 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-stmt.</tcl>..<
d280: 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62  p>A [virtual tab
d290: 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66  le] is an interf
d2a0: 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e  ace to an extern
d2b0: 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f  al storage or co
d2c0: 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65  mputation.engine
d2d0: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f   that appears to
d2e0: 20 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20   be a table but 
d2f0: 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c  does not actuall
d300: 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74  y store informat
d310: 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62  ion.in the datab
d320: 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
d330: 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f  p>In general, yo
d340: 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e  u can do anythin
d350: 67 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61  g with a [virtua
d360: 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61  l table] that ca
d370: 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61  n be done.with a
d380: 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
d390: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79  , except that ^y
d3a0: 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65  ou cannot create
d3b0: 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67   indices or trig
d3c0: 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61  gers on a.virtua
d3d0: 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20  l table.  ^Some 
d3e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
d3f0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69  plementations mi
d400: 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74  ght impose addit
d410: 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f  ional.restrictio
d420: 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ns.  For example
d430: 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74  , many virtual t
d440: 61 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f  ables are read-o
d450: 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  nly.</p>..<p>The
d460: 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65   &lt;module-name
d470: 26 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65  &gt; is the name
d480: 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   of an object th
d490: 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68  at implements.th
d4a0: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
d4b0: 20 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c    ^The &lt;modul
d4c0: 65 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20  e-name&gt; must 
d4d0: 62 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69  be registered wi
d4e0: 74 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61  th.the SQLite da
d4f0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
d500: 6e 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33  n using.[sqlite3
d510: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
d520: 5d 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72  ] or [sqlite3_cr
d530: 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29  eate_module_v2()
d540: 5d 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69  ].prior to issui
d550: 6e 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49  ng the CREATE VI
d560: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
d570: 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75  ement..^The modu
d580: 6c 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72  le takes zero or
d590: 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61   more comma-sepa
d5a0: 72 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e  rated arguments.
d5b0: 0a 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20  .^The arguments 
d5c0: 63 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75  can be just abou
d5d0: 74 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f  t any text as lo
d5e0: 6e 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c  ng as it has bal
d5f0: 61 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65  anced.parenthese
d600: 73 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74  s.  The argument
d610: 20 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69   syntax is suffi
d620: 63 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20  ciently general 
d630: 74 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e  that the.argumen
d640: 74 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  ts can be made t
d650: 6f 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c  o appear as [col
d660: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d  umn definitions]
d670: 20 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61   in a traditiona
d680: 6c 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  l.[CREATE TABLE]
d690: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53   statement.  .^S
d6a0: 51 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65  QLite passes the
d6b0: 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74   module argument
d6c0: 73 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68  s directly.to th
d6d0: 65 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20  e [xCreate] and 
d6e0: 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f  [xConnect] metho
d6f0: 64 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  ds of the module
d700: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a   implementation.
d710: 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65  without any inte
d720: 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20  rpretation.  It 
d730: 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62  is the responsib
d740: 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64  ility.of the mod
d750: 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
d760: 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20  on to parse and 
d770: 69 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77  interpret its ow
d780: 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e  n arguments.</p>
d790: 0a 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20  ..<p>^A virtual 
d7a0: 74 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79  table is destroy
d7b0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64  ed using the ord
d7c0: 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c  inary.[DROP TABL
d7d0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
d7e0: 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20  here is no.DROP 
d7f0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74  VIRTUAL TABLE st
d800: 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74  atement.</p>..<t
d810: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
d820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d860: 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54  ##.Section DELET
d870: 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45  E delete {DELETE
d880: 20 2a 44 45 4c 45 54 45 73 7d 0a 0a 52 65 63 75   *DELETEs}..Recu
d890: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
d8a0: 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 0a 3c  am delete-stmt.<
d8b0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45  /tcl>..<p>The DE
d8c0: 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d  LETE command rem
d8d0: 6f 76 65 73 20 72 65 63 6f 72 64 73 20 66 72 6f  oves records fro
d8e0: 6d 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e  m the table iden
d8f0: 74 69 66 69 65 64 20 62 79 20 74 68 65 0a 20 20  tified by the.  
d900: 20 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61   <i>qualified-ta
d910: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 0a 0a  ble-name</i>. ..
d920: 3c 70 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45  <p>^If the WHERE
d930: 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70   clause is not p
d940: 72 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f  resent, all reco
d950: 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  rds in the table
d960: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20   are deleted..  
d970: 20 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c 61   ^If a WHERE cla
d980: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
d990: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65   then only those
d9a0: 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
d9b0: 74 68 65 0a 20 20 20 72 65 73 75 6c 74 20 6f 66  the.   result of
d9c0: 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
d9d0: 57 48 45 52 45 20 63 6c 61 75 73 65 20 61 73 20  WHERE clause as 
d9e0: 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  a [boolean expre
d9f0: 73 73 69 6f 6e 7c 0a 20 20 20 62 6f 6f 6c 65 61  ssion|.   boolea
da00: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
da10: 74 72 75 65 5d 20 61 72 65 20 64 65 6c 65 74 65  true] are delete
da20: 64 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  d...<h3>Restrict
da30: 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53  ions on DELETE S
da40: 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
da50: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
da60: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h3>..<p>The fol
da70: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
da80: 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c  ons apply to DEL
da90: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74  ETE statements t
daa0: 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e  hat occur within
dab0: 20 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20   the.   body of 
dac0: 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
dad0: 52 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c  R] statement:..<
dae0: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  ul>.  <li><p>^Th
daf0: 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
db00: 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73  /i> specified as
db10: 20 70 61 72 74 20 6f 66 20 61 20 44 45 4c 45 54   part of a DELET
db20: 45 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  E statement with
db30: 69 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65 72  in.    a trigger
db40: 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e   body must be un
db50: 71 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e  qualified.  ^(In
db60: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
db70: 65 0a 20 20 20 20 3c 69 3e 64 61 74 61 62 61 73  e.    <i>databas
db80: 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  e-name</i><b>.</
db90: 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65  b> prefix on the
dba0: 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e   table name is n
dbb0: 6f 74 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20  ot allowed .    
dbc0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
dbd0: 29 5e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  )^ ^If the table
dbe0: 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
dbf0: 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65  igger is attache
dc00: 64 20 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20  d is.    not in 
dc10: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
dc20: 65 2c 20 74 68 65 6e 20 44 45 4c 45 54 45 20 73  e, then DELETE s
dc30: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
dc40: 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20   the trigger.   
dc50: 20 62 6f 64 79 20 6d 75 73 74 20 6f 70 65 72 61   body must opera
dc60: 74 65 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74  te on tables wit
dc70: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
dc80: 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66  abase as it. ^If
dc90: 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 74   the table.    t
dca0: 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
dcb0: 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20  ger is attached 
dcc0: 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64  is in the TEMP d
dcd0: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
dce0: 65 0a 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65  e.    unqualifie
dcf0: 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
dd00: 62 6c 65 20 62 65 69 6e 67 20 64 65 6c 65 74 65  ble being delete
dd10: 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e  d is resolved in
dd20: 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
dd30: 0a 20 20 20 20 69 74 20 69 73 20 66 6f 72 20 61  .    it is for a
dd40: 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
dd50: 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69  ment (by searchi
dd60: 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d  ng first the TEM
dd70: 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  P database, then
dd80: 0a 20 20 20 20 74 68 65 20 6d 61 69 6e 20 64 61  .    the main da
dd90: 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79  tabase, then any
dda0: 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73   other databases
ddb0: 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
ddc0: 65 79 20 77 65 72 65 0a 20 20 20 20 61 74 74 61  ey were.    atta
ddd0: 63 68 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c  ched)..    .  <l
dde0: 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  i><p>^The INDEXE
ddf0: 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
de00: 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
de10: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20   not allowed on 
de20: 44 45 4c 45 54 45 0a 20 20 20 20 73 74 61 74 65  DELETE.    state
de30: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
de40: 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c  ggers.</p>..  <l
de50: 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  i><p>^The LIMIT 
de60: 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
de70: 75 73 65 73 20 28 64 65 73 63 72 69 62 65 64 20  uses (described 
de80: 62 65 6c 6f 77 29 20 61 72 65 20 75 6e 73 75 70  below) are unsup
de90: 70 6f 72 74 65 64 20 66 6f 72 0a 20 20 20 20 44  ported for.    D
dea0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
deb0: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
dec0: 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33  .</p>.</ul>..<h3
ded0: 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20  >Optional LIMIT 
dee0: 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
def0: 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  uses</h3>..<p>^(
df00: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
df10: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b  piled with the [
df20: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
df30: 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
df40: 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  T].compile-time 
df50: 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  option, then the
df60: 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44   syntax of the D
df70: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
df80: 69 73 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74  is.extended by t
df90: 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f  he addition of o
dfa0: 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59  ptional ORDER BY
dfb0: 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
dfc0: 65 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  es:)^</p>..<tcl>
dfd0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
dfe0: 6c 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65  lete-stmt-limite
dff0: 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20  d</tcl>..<p>^If 
e000: 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  a DELETE stateme
e010: 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63  nt has a LIMIT c
e020: 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d  lause, the maxim
e030: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  um number of row
e040: 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 64  s that.will be d
e050: 65 6c 65 74 65 64 20 69 73 20 66 6f 75 6e 64 20  eleted is found 
e060: 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
e070: 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65  e accompanying e
e080: 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61  xpression and ca
e090: 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69  sting.it to an i
e0a0: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 49  nteger value. ^I
e0b0: 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
e0c0: 74 68 65 20 65 76 61 6c 75 61 74 69 6e 67 20 74  the evaluating t
e0d0: 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a  he LIMIT clause.
e0e0: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
e0f0: 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
e100: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  o an integer val
e110: 75 65 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  ue, it is an err
e120: 6f 72 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76 65  or. ^A .negative
e130: 20 4c 49 4d 49 54 20 76 61 6c 75 65 20 69 73 20   LIMIT value is 
e140: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22  interpreted as "
e150: 6e 6f 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20  no limit". ^(If 
e160: 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
e170: 6d 65 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20 61  ment .also has a
e180: 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  n OFFSET clause,
e190: 20 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69   then it is simi
e1a0: 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20  larly evaluated 
e1b0: 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 0a 69  and cast to an.i
e1c0: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 41 67  nteger value. Ag
e1d0: 61 69 6e 2c 20 69 74 20 69 73 20 61 6e 20 65 72  ain, it is an er
e1e0: 72 6f 72 20 69 66 20 74 68 65 20 76 61 6c 75 65  ror if the value
e1f0: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
e200: 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20  essly.converted 
e210: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e  to an integer.)^
e220: 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f   ^If there is no
e230: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
e240: 6f 72 20 74 68 65 20 63 61 6c 63 75 6c 61 74 65  or the calculate
e250: 64 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  d.integer value 
e260: 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
e270: 20 65 66 66 65 63 74 69 76 65 20 4f 46 46 53 45   effective OFFSE
e280: 54 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e  T value is zero.
e290: 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 44 45  ..<p>^(If the DE
e2a0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  LETE statement h
e2b0: 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63  as an ORDER BY c
e2c0: 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
e2d0: 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20  rows that would 
e2e0: 0a 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74  .be deleted in t
e2f0: 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
e300: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
e310: 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64  re sorted accord
e320: 69 6e 67 20 74 6f 20 74 68 65 20 0a 4f 52 44 45  ing to the .ORDE
e330: 52 20 42 59 2e 20 54 68 65 20 66 69 72 73 74 20  R BY. The first 
e340: 3c 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77  <i>M</i> rows, w
e350: 68 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73  here <i>M</i> is
e360: 20 74 68 65 20 76 61 6c 75 65 20 66 6f 75 6e 64   the value found
e370: 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   by.evaluating t
e380: 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
e390: 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65   expression, are
e3a0: 20 73 6b 69 70 70 65 64 2c 20 61 6e 64 20 74 68   skipped, and th
e3b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e  e following .<i>
e3c0: 4e 3c 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e  N</i>, where <i>
e3d0: 4e 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c  N</i> is the val
e3e0: 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ue of the LIMIT 
e3f0: 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20  expression, are 
e400: 64 65 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74  deleted.)^.^If t
e410: 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
e420: 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73  an <i>N</i> rows
e430: 20 72 65 6d 61 69 6e 69 6e 67 20 61 66 74 65 72   remaining after
e440: 20 74 61 6b 69 6e 67 20 74 68 65 20 4f 46 46 53   taking the OFFS
e450: 45 54 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61  ET clause.into a
e460: 63 63 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74 68  ccount, or if th
e470: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 65  e LIMIT clause e
e480: 76 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6e 65  valuated to a ne
e490: 67 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68  gative value, th
e4a0: 65 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67  en all.remaining
e4b0: 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65   rows are delete
e4c0: 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44  d...<p>^If the D
e4d0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
e4e0: 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20  has no ORDER BY 
e4f0: 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c  clause, then all
e500: 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64   rows that.would
e510: 20 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74   be deleted in t
e520: 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
e530: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
e540: 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20  re assembled in 
e550: 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64  an.arbitrary ord
e560: 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69  er before applyi
e570: 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64  ng the LIMIT and
e580: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20   OFFSET clauses 
e590: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 74 68  to determine .th
e5a0: 65 20 73 75 62 73 65 74 20 74 68 61 74 20 61 72  e subset that ar
e5b0: 65 20 61 63 74 75 61 6c 6c 79 20 64 65 6c 65 74  e actually delet
e5c0: 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52  ed...<p>^(The OR
e5d0: 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
e5e0: 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
e5f0: 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  ent is used only
e600: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
e610: 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69  ich.rows fall wi
e620: 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20  thin the LIMIT. 
e630: 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  The order in whi
e640: 63 68 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65  ch rows are dele
e650: 74 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ted is arbitrary
e660: 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c  .and is not infl
e670: 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52  uenced by the OR
e680: 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e  DER BY clause.)^
e690: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
e6a0: 6e 74 20 74 72 75 6e 63 61 74 65 6f 70 74 20 7b  nt truncateopt {
e6b0: 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
e6c0: 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ation}</tcl>.<h3
e6d0: 3e 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f 70  >The Truncate Op
e6e0: 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a  timization</h3>.
e6f0: 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57 48  .<p>^When the WH
e700: 45 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ERE is omitted f
e710: 72 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74 61  rom a DELETE sta
e720: 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 74  tement and the t
e730: 61 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65 74  able.being delet
e740: 65 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67 65  ed has no trigge
e750: 72 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20  rs,.SQLite uses 
e760: 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  an optimization 
e770: 74 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e 74  to erase the ent
e780: 69 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e  ire table conten
e790: 74 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  t.without having
e7a0: 20 74 6f 20 76 69 73 69 74 20 65 61 63 68 20 72   to visit each r
e7b0: 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ow of the table 
e7c0: 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68  individually..Th
e7d0: 69 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f 70  is "truncate" op
e7e0: 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73  timization makes
e7f0: 20 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e 20   the delete run 
e800: 6d 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72 69  much faster..Pri
e810: 6f 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76 65  or to SQLite [ve
e820: 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74 68  rsion 3.6.5], th
e830: 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d  e truncate optim
e840: 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61  ization.also mea
e850: 6e 74 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c  nt that the [sql
e860: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20  ite3_changes()] 
e870: 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74  and.[sqlite3_tot
e880: 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e  al_changes()] in
e890: 74 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65  terfaces.and the
e8a0: 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20   [count_changes 
e8b0: 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74  pragma].will not
e8c0: 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e   actually return
e8d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
e8e0: 65 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54  eleted rows.  .T
e8f0: 68 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20  hat problem has 
e900: 62 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66  been fixed as of
e910: 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d   [version 3.6.5]
e920: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63  ...<p>^The trunc
e930: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
e940: 20 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e   can be permanen
e950: 74 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72  tly disabled for
e960: 20 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20   all queries.by 
e970: 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69  recompiling.SQLi
e980: 74 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  te with the [SQL
e990: 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54  ITE_OMIT_TRUNCAT
e9a0: 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20  E_OPTIMIZATION] 
e9b0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69  compile-time swi
e9c0: 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  tch.</p>..<p>The
e9d0: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
e9e0: 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20  zation can also 
e9f0: 62 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72  be disabled at r
ea00: 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65  untime using.the
ea10: 20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75   [sqlite3_set_au
ea20: 74 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65  thorizer()] inte
ea30: 72 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61  rface.  ^If an a
ea40: 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61  uthorizer callba
ea50: 63 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49  ck.returns [SQLI
ea60: 54 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61  TE_IGNORE] for a
ea70: 6e 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  n [SQLITE_DELETE
ea80: 5d 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74  ] action code, t
ea90: 68 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f  hen.the DELETE o
eaa0: 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72  peration will pr
eab0: 6f 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72  oceed but the tr
eac0: 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74  uncate optimizat
ead0: 69 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61  ion will.be bypa
eae0: 73 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69  ssed and rows wi
eaf0: 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e  ll be deleted on
eb00: 65 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c  e by one.</p>..<
eb10: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
eb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb60: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45  ####.Section {DE
eb70: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
eb80: 65 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a 52  etach *DETACH..R
eb90: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
eba0: 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d  agram detach-stm
ebb0: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
ebc0: 69 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74  is statement det
ebd0: 61 63 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f  aches an additio
ebe0: 6e 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e  nal database con
ebf0: 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73  nection previous
ec00: 6c 79 20 0a 61 74 74 61 63 68 65 64 20 75 73 69  ly .attached usi
ec10: 6e 67 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20  ng the [ATTACH] 
ec20: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 57 68  statement.  .^Wh
ec30: 65 6e 20 6e 6f 74 20 69 6e 20 5b 73 68 61 72 65  en not in [share
ec40: 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20 0a  d cache mode], .
ec50: 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
ec60: 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  o have the same 
ec70: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74  database file at
ec80: 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65 20  tached multiple 
ec90: 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69 66  times using .dif
eca0: 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e  ferent names, an
ecb0: 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65 20  d detaching one 
ecc0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20  connection to a 
ecd0: 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65 20  file will leave 
ece0: 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74 61  the .others inta
ecf0: 63 74 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68 61  ct.</p>.^In [sha
ed00: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c  red cache mode],
ed10: 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 61   attempting to a
ed20: 74 74 61 63 68 20 74 68 65 20 73 61 6d 65 20 64  ttach the same d
ed30: 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 6f 72  atabase file mor
ed40: 65 0a 74 68 61 6e 20 6f 6e 63 65 20 72 65 73 75  e.than once resu
ed50: 6c 74 73 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e  lts in an error.
ed60: 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65  ..<p>^This state
ed70: 6d 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69  ment will fail i
ed80: 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74  f SQLite is in t
ed90: 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74  he middle of a t
eda0: 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a  ransaction.</p>.
edb0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
edc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ede0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee00: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
ee10: 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70  DROP INDEX} drop
ee20: 69 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44  index {{DROP IND
ee30: 45 58 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  EX}}..RecursiveB
ee40: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
ee50: 70 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74  p-index-stmt.</t
ee60: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f  cl>..<p>^The DRO
ee70: 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  P INDEX statemen
ee80: 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64  t removes an ind
ee90: 65 78 20 61 64 64 65 64 0a 77 69 74 68 20 74 68  ex added.with th
eea0: 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d  e [CREATE INDEX]
eeb0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
eec0: 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c 65   index is comple
eed0: 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f  tely removed fro
eee0: 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65  m.the disk.  The
eef0: 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63   only way to rec
ef00: 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69  over the index i
ef10: 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65  s to reenter the
ef20: 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52  .appropriate [CR
ef30: 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d  EATE INDEX] comm
ef40: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  and.</p>..<tcl>.
ef50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
efa0: 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42  ection {DROP TAB
efb0: 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b  LE} droptable {{
efc0: 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 52 65  DROP TABLE}}..Re
efd0: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
efe0: 67 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d  gram drop-table-
eff0: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
f000: 5e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20  ^The DROP TABLE 
f010: 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65  statement remove
f020: 73 20 61 20 74 61 62 6c 65 20 61 64 64 65 64 20  s a table added 
f030: 77 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45  with the.[CREATE
f040: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
f050: 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65  t.  The name spe
f060: 63 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61  cified is the.ta
f070: 62 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20  ble name.  ^The 
f080: 64 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69 73  dropped table is
f090: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f   completely remo
f0a0: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ved from the dat
f0b0: 61 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61 6e  abase .schema an
f0c0: 64 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 2e  d the disk file.
f0d0: 20 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20    The table can 
f0e0: 6e 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64  not be recovered
f0f0: 2e 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73  .  .^All indices
f100: 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73   and triggers.as
f110: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
f120: 65 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f  e table are also
f130: 20 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   deleted.</p>..<
f140: 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  p>^The optional 
f150: 49 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  IF EXISTS clause
f160: 20 73 75 70 70 72 65 73 73 65 73 20 74 68 65 20   suppresses the 
f170: 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64  error that would
f180: 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74   normally.result
f190: 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 64 6f   if the table do
f1a0: 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70  es not exist.</p
f1b0: 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69  >..<p>^If [forei
f1c0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
f1d0: 74 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2c  ts] are enabled,
f1e0: 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f   a DROP TABLE co
f1f0: 6d 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20 61  mmand performs a
f200: 6e 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45  n.implicit [DELE
f210: 54 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d  TE | DELETE FROM
f220: 20 26 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63 6f   &lt;tbl&gt;] co
f230: 6d 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d  mmand before rem
f240: 6f 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20  oving the.table 
f250: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
f260: 65 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74  e schema. ^Any t
f270: 72 69 67 67 65 72 73 20 61 74 74 61 63 68 65 64  riggers attached
f280: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72   to the table ar
f290: 65 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74  e.dropped from t
f2a0: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
f2b0: 6d 61 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d  ma before the im
f2c0: 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52  plicit DELETE FR
f2d0: 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 0a  OM &lt;tbl&gt; .
f2e0: 69 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20  is executed, so 
f2f0: 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73  this cannot caus
f300: 65 20 61 6e 79 20 74 72 69 67 67 65 72 73 20 74  e any triggers t
f310: 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72  o fire. By contr
f320: 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69  ast, ^an.implici
f330: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
f340: 74 3b 74 62 6c 26 67 74 3b 20 64 6f 65 73 20 63  t;tbl&gt; does c
f350: 61 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67 75  ause any configu
f360: 72 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65 79  red.[foreign key
f370: 20 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61 6b   actions] to tak
f380: 65 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74 68  e place. .^If th
f390: 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54  e implicit DELET
f3a0: 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67  E FROM &lt;tbl&g
f3b0: 74 3b 20 65 78 65 63 75 74 65 64 0a 61 73 20 70  t; executed.as p
f3c0: 61 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41  art of a DROP TA
f3d0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c  BLE command viol
f3e0: 61 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61  ates any immedia
f3f0: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
f400: 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65  onstraints,.an e
f410: 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
f420: 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
f430: 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e  s not dropped. ^
f440: 49 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74  If .the implicit
f450: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74   DELETE FROM &lt
f460: 3b 74 62 6c 26 67 74 3b 20 63 61 75 73 65 73 20  ;tbl&gt; causes 
f470: 61 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f  any .deferred fo
f480: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
f490: 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c  aints to be viol
f4a0: 61 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69  ated, and the vi
f4b0: 6f 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65  olations still.e
f4c0: 78 69 73 74 20 77 68 65 6e 20 74 68 65 20 74 72  xist when the tr
f4d0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d  ansaction is com
f4e0: 6d 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72  mitted, an error
f4f0: 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 74 20   is returned at 
f500: 74 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d  the time.of comm
f510: 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  it...<tcl>.#####
f520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f560: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
f570: 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d  n {DROP TRIGGER}
f580: 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44   droptrigger {{D
f590: 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52  ROP TRIGGER}}..R
f5a0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
f5b0: 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67  agram drop-trigg
f5c0: 65 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  er-stmt.</tcl>..
f5d0: 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 52 49  <p>^The DROP TRI
f5e0: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72  GGER statement r
f5f0: 65 6d 6f 76 65 73 20 61 20 74 72 69 67 67 65 72  emoves a trigger
f600: 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20   created by the 
f610: 0a 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52  .[CREATE TRIGGER
f620: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e  ] statement. ^On
f630: 63 65 20 72 65 6d 6f 76 65 64 2c 20 74 68 65 20  ce removed, the 
f640: 74 72 69 67 67 65 72 20 64 65 66 69 6e 69 74 69  trigger definiti
f650: 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20  on is no.longer 
f660: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 73  present in the s
f670: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 6f 72  qlite_master (or
f680: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
f690: 74 65 72 29 20 74 61 62 6c 65 20 61 6e 64 20 69  ter) table and i
f6a0: 73 0a 6e 6f 74 20 66 69 72 65 64 20 62 79 20 61  s.not fired by a
f6b0: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 20 49 4e  ny subsequent IN
f6c0: 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
f6d0: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
f6e0: 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  s...<p>^Note tha
f6f0: 74 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61  t triggers are a
f700: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f  utomatically dro
f710: 70 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73  pped when the as
f720: 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69  sociated table i
f730: 73 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c  s.dropped...<tcl
f740: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
f750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f790: 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56  .Section {DROP V
f7a0: 49 45 57 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b  IEW} dropview {{
f7b0: 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63  DROP VIEW}}..Rec
f7c0: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
f7d0: 72 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74  ram drop-view-st
f7e0: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
f7f0: 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61  he DROP VIEW sta
f800: 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61  tement removes a
f810: 20 76 69 65 77 20 63 72 65 61 74 65 64 20 62 79   view created by
f820: 20 74 68 65 20 5b 43 52 45 41 54 45 20 56 49 45   the [CREATE VIE
f830: 57 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e  W] .  statement.
f840: 20 5e 54 68 65 20 76 69 65 77 20 64 65 66 69 6e   ^The view defin
f850: 69 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64  ition is removed
f860: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
f870: 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 0a  se schema, but .
f880: 20 20 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61    no actual data
f890: 20 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69   in the underlyi
f8a0: 6e 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69  ng base tables i
f8b0: 73 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e  s modified...<p>
f8c0: 5e 28 54 68 65 20 76 69 65 77 20 74 6f 20 64 72  ^(The view to dr
f8d0: 6f 70 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  op is identified
f8e0: 20 62 79 20 74 68 65 20 76 69 65 77 2d 6e 61 6d   by the view-nam
f8f0: 65 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a  e and optional .
f900: 20 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 20    database-name 
f910: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
f920: 74 20 6f 66 20 74 68 65 20 44 52 4f 50 20 56 49  t of the DROP VI
f930: 45 57 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  EW statement. Th
f940: 69 73 20 0a 20 20 72 65 66 65 72 65 6e 63 65 20  is .  reference 
f950: 69 73 20 72 65 73 6f 6c 76 65 64 20 75 73 69 6e  is resolved usin
f960: 67 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 70  g the standard p
f970: 72 6f 63 65 64 75 72 65 20 66 6f 72 20 5b 6f 62  rocedure for [ob
f980: 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d  ject resolution]
f990: 2e 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74  .)^..<p>.  ^If t
f9a0: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65  he specified vie
f9b0: 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e  w cannot be foun
f9c0: 64 20 61 6e 64 20 74 68 65 20 49 46 20 45 58 49  d and the IF EXI
f9d0: 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  STS clause is no
f9e0: 74 20 0a 20 20 70 72 65 73 65 6e 74 2c 20 69 74  t .  present, it
f9f0: 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49   is an error. ^I
fa00: 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  f the specified 
fa10: 76 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66  view cannot be f
fa20: 6f 75 6e 64 20 61 6e 64 20 61 6e 20 49 46 0a 20  ound and an IF. 
fa30: 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
fa40: 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  s present in the
fa50: 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65   DROP VIEW state
fa60: 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 73  ment, then the s
fa70: 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 61 20  tatement.  is a 
fa80: 6e 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23  no-op....<tcl>.#
fa90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
faa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
fae0: 63 74 69 6f 6e 20 7b 44 61 74 61 62 61 73 65 20  ction {Database 
faf0: 4f 62 6a 65 63 74 20 4e 61 6d 65 20 52 65 73 6f  Object Name Reso
fb00: 6c 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d  lution} {naming}
fb10: 20 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75   {{object resolu
fb20: 74 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  tion}}.</tcl>..<
fb30: 70 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65 2c 20  p>.  In SQLite, 
fb40: 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63  a database objec
fb50: 74 20 28 61 20 74 61 62 6c 65 2c 20 69 6e 64 65  t (a table, inde
fb60: 78 2c 20 74 72 69 67 67 65 72 20 6f 72 20 76 69  x, trigger or vi
fb70: 65 77 29 20 69 73 20 69 64 65 6e 74 69 66 69 65  ew) is identifie
fb80: 64 0a 20 20 62 79 20 74 68 65 20 6e 61 6d 65 20  d.  by the name 
fb90: 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20 61 6e  of the object an
fba0: 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
fbb0: 65 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20  e database that 
fbc0: 69 74 20 72 65 73 69 64 65 73 20 69 6e 2e 20 0a  it resides in. .
fbd0: 20 20 44 61 74 61 62 61 73 65 20 6f 62 6a 65 63    Database objec
fbe0: 74 73 20 6d 61 79 20 72 65 73 69 64 65 20 69 6e  ts may reside in
fbf0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
fc00: 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74  se, the temp dat
fc10: 61 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61  abase, or in.  a
fc20: 6e 20 5b 41 54 54 41 43 48 7c 61 74 74 61 63 68  n [ATTACH|attach
fc30: 65 64 20 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c  ed database]...<
fc40: 70 3e 0a 20 20 54 68 65 20 73 79 6e 74 61 78 20  p>.  The syntax 
fc50: 6f 66 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42  of the [DROP TAB
fc60: 4c 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58  LE], [DROP INDEX
fc70: 5d 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20  ], [DROP VIEW], 
fc80: 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a  [DROP TRIGGER],.
fc90: 20 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c    [REINDEX], [AL
fca0: 54 45 52 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d  TER TABLE] and m
fcb0: 61 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e  any other comman
fcc0: 64 73 20 61 6c 6c 20 70 65 72 6d 69 74 20 74 68  ds all permit th
fcd0: 65 20 75 73 65 72 20 74 6f 0a 20 20 73 70 65 63  e user to.  spec
fce0: 69 66 79 20 61 20 64 61 74 61 62 61 73 65 20 6f  ify a database o
fcf0: 62 6a 65 63 74 20 65 69 74 68 65 72 20 62 79 20  bject either by 
fd00: 69 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20  its name alone, 
fd10: 6f 72 20 62 79 20 61 20 63 6f 6d 62 69 6e 61 74  or by a combinat
fd20: 69 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d  ion of.  its nam
fd30: 65 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f  e and the name o
fd40: 66 20 69 74 73 20 64 61 74 61 62 61 73 65 2e 20  f its database. 
fd50: 5e 28 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65  ^(If no database
fd60: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
fd70: 20 70 61 72 74 0a 20 20 6f 66 20 74 68 65 20 6f   part.  of the o
fd80: 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c  bject reference,
fd90: 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61   then SQLite sea
fda0: 72 63 68 65 73 20 74 68 65 20 6d 61 69 6e 2c 20  rches the main, 
fdb0: 74 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61 74 74  temp and all att
fdc0: 61 63 68 65 64 0a 20 20 64 61 74 61 62 61 73 65  ached.  database
fdd0: 73 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20  s for an object 
fde0: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
fdf0: 6e 61 6d 65 2e 20 54 68 65 20 74 65 6d 70 20 64  name. The temp d
fe00: 61 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63  atabase is searc
fe10: 68 65 64 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c  hed.  first, fol
fe20: 6c 6f 77 65 64 20 62 79 20 74 68 65 20 6d 61 69  lowed by the mai
fe30: 6e 20 64 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c  n database, foll
fe40: 6f 77 65 64 20 61 6c 6c 20 61 74 74 61 63 68 65  owed all attache
fe50: 64 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  d databases in t
fe60: 68 65 0a 20 20 6f 72 64 65 72 20 74 68 61 74 20  he.  order that 
fe70: 74 68 65 79 20 77 65 72 65 20 61 74 74 61 63 68  they were attach
fe80: 65 64 2e 20 54 68 65 20 72 65 66 65 72 65 6e 63  ed. The referenc
fe90: 65 20 72 65 73 6f 6c 76 65 73 20 74 6f 20 74 68  e resolves to th
fea0: 65 20 66 69 72 73 74 20 6d 61 74 63 68 0a 20 20  e first match.  
feb0: 66 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61  found.)^ For exa
fec0: 6d 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20  mple:..<pre>^(. 
fed0: 20 20 20 20 20 2f 2a 20 41 64 64 20 61 20 74 61       /* Add a ta
fee0: 62 6c 65 20 6e 61 6d 65 64 20 27 74 31 27 20 74  ble named 't1' t
fef0: 6f 20 74 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e  o the temp, main
ff00: 20 61 6e 64 20 61 6e 20 61 74 74 61 63 68 65 64   and an attached
ff10: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20   database */.   
ff20: 20 20 20 41 54 54 41 43 48 20 27 66 69 6c 65 2e     ATTACH 'file.
ff30: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
ff40: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
ff50: 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43  1(x, y);.      C
ff60: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
ff70: 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20   t1(x, y);.     
ff80: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75   CREATE TABLE au
ff90: 78 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20  x.t1(x, y);..   
ffa0: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
ffb0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f  ;         /* Dro
ffc0: 70 20 74 61 62 6c 65 20 69 6e 20 74 65 6d 70 20  p table in temp 
ffd0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20  database */.    
ffe0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
fff0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70           /* Drop
10000 20 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64   table in main d
10010 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20  atabase */.     
10020 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20   DROP TABLE t1; 
10030 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20          /* Drop 
10040 74 61 62 6c 65 20 69 6e 20 61 75 78 20 64 61 74  table in aux dat
10050 61 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65  abase */.)^</pre
10060 3e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61 20 64  >..<p>.  ^If a d
10070 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20  atabase name is 
10080 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
10090 74 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 72  t of an object r
100a0 65 66 65 72 65 6e 63 65 2c 20 69 74 20 6d 75 73  eference, it mus
100b0 74 20 62 65 0a 20 20 65 69 74 68 65 72 20 22 6d  t be.  either "m
100c0 61 69 6e 22 2c 20 6f 72 20 22 74 65 6d 70 22 20  ain", or "temp" 
100d0 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  or the name of a
100e0 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
100f0 61 73 65 2e 20 5e 4c 69 6b 65 20 6f 74 68 65 72  ase. ^Like other
10100 0a 20 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65  .  SQL identifie
10110 72 73 2c 20 64 61 74 61 62 61 73 65 20 6e 61 6d  rs, database nam
10120 65 73 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65  es are case-inse
10130 6e 73 69 74 69 76 65 2e 20 5e 49 66 20 61 20 64  nsitive. ^If a d
10140 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 20 20 69  atabase name.  i
10150 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
10160 6e 20 6f 6e 6c 79 20 74 68 65 20 6e 61 6d 65 64  n only the named
10170 20 64 61 74 61 62 61 73 65 20 69 73 20 73 65 61   database is sea
10180 72 63 68 65 64 20 66 6f 72 20 74 68 65 20 6e 61  rched for the na
10190 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e  med object...<p>
101a0 0a 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72  .  Most object r
101b0 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e  eferences may on
101c0 6c 79 20 72 65 73 6f 6c 76 65 20 74 6f 20 61 20  ly resolve to a 
101d0 73 70 65 63 69 66 69 63 20 74 79 70 65 20 6f 66  specific type of
101e0 20 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20 20 65   object (for.  e
101f0 78 61 6d 70 6c 65 20 61 20 72 65 66 65 72 65 6e  xample a referen
10200 63 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ce that is part 
10210 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20  of a DROP TABLE 
10220 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e  statement may on
10230 6c 79 20 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20  ly resolve.  to 
10240 61 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  a table object, 
10250 6e 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20 74 72  not an index, tr
10260 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 2e 20  igger or view). 
10270 48 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d 65 20  However in some 
10280 63 6f 6e 74 65 78 74 73 20 0a 20 20 28 65 2e 67  contexts .  (e.g
10290 2e 20 5b 52 45 49 4e 44 45 58 5d 29 20 61 6e 20  . [REINDEX]) an 
102a0 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65  object reference
102b0 20 6d 61 79 20 62 65 20 72 65 73 6f 6c 76 65 20   may be resolve 
102c0 74 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  to more than one
102d0 20 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63   type.  of objec
102e0 74 2e 20 5e 57 68 65 6e 20 73 65 61 72 63 68 69  t. ^When searchi
102f0 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
10300 6d 61 73 20 66 6f 72 20 61 20 6e 61 6d 65 64 20  mas for a named 
10310 6f 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74 73 20  object, objects 
10320 6f 66 0a 20 20 74 79 70 65 73 20 74 68 61 74 20  of.  types that 
10330 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69  cannot be used i
10340 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66  n the context of
10350 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 61   the reference a
10360 72 65 20 61 6c 77 61 79 73 20 0a 20 20 69 67 6e  re always .  ign
10370 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ored...<tcl>.###
10380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
103a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
103b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
103c0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
103d0 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c  ion EXPLAIN expl
103e0 61 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62  ain EXPLAIN..Bub
103f0 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73  bleDiagram sql-s
10400 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
10410 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  An SQL statement
10420 20 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64   can be preceded
10430 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20   by the keyword 
10440 22 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20  "EXPLAIN" or.by 
10450 74 68 65 20 70 68 72 61 73 65 20 22 45 58 50 4c  the phrase "EXPL
10460 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e  AIN QUERY PLAN".
10470 20 20 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69    ^Either modifi
10480 63 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  cation causes th
10490 65 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e.SQL statement 
104a0 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
104b0 75 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75  uery and to retu
104c0 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  rn information a
104d0 62 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c  bout.how the SQL
104e0 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
104f0 20 68 61 76 65 20 6f 70 65 72 61 74 65 64 20 69   have operated i
10500 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  f the EXPLAIN ke
10510 79 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20  yword or.phrase 
10520 68 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64  had been omitted
10530 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75  .</p>..<p>The ou
10540 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49  tput from EXPLAI
10550 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55  N and EXPLAIN QU
10560 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65  ERY PLAN is inte
10570 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63  nded for.interac
10580 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e  tive analysis an
10590 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e  d troubleshootin
105a0 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74  g only.  The det
105b0 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74  ails of the .out
105c0 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73  put format are s
105d0 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65  ubject to change
105e0 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73   from one releas
105f0 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74  e of SQLite to t
10600 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61  he next..Applica
10610 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74  tions should not
10620 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20   use EXPLAIN or 
10630 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
10640 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65  AN since.their e
10650 78 61 63 74 20 62 65 68 61 76 69 6f 72 20 69 73  xact behavior is
10660 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e   variable and on
10670 6c 79 20 70 61 72 74 69 61 6c 6c 79 20 64 6f 63  ly partially doc
10680 75 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  umented.</p>..<p
10690 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41  >^When the EXPLA
106a0 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61  IN keyword appea
106b0 72 73 20 62 79 20 69 74 73 65 6c 66 20 69 74 20  rs by itself it 
106c0 63 61 75 73 65 73 20 74 68 65 20 73 74 61 74 65  causes the state
106d0 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61  ment.to behave a
106e0 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20 72  s a query that r
106f0 65 74 75 72 6e 73 20 74 68 65 20 73 65 71 75 65  eturns the seque
10700 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c  nce of .[virtual
10710 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63   machine instruc
10720 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20  tions] it would 
10730 68 61 76 65 20 75 73 65 64 20 74 6f 20 65 78 65  have used to exe
10740 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64  cute the command
10750 20 68 61 64 0a 74 68 65 20 45 58 50 4c 41 49 4e   had.the EXPLAIN
10760 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62 65 65   keyword not bee
10770 6e 20 70 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e  n present. ^When
10780 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45   the EXPLAIN QUE
10790 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65 0a 61  RY PLAN phrase.a
107a0 70 70 65 61 72 73 2c 20 74 68 65 20 73 74 61 74  ppears, the stat
107b0 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 20 68 69  ement returns hi
107c0 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61  gh-level informa
107d0 74 69 6f 6e 20 72 65 67 61 72 64 69 6e 67 20 74  tion regarding t
107e0 68 65 20 71 75 65 72 79 0a 70 6c 61 6e 20 74 68  he query.plan th
107f0 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  at would have be
10800 65 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20 45 58  en used...The EX
10810 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
10820 20 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65 73 63   command is desc
10830 72 69 62 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61  ribed in .[expla
10840 69 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f  in query plan|mo
10850 72 65 20 64 65 74 61 69 6c 20 68 65 72 65 5d 2e  re detail here].
10860 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
10870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
108a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
108b0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 65  ######.Section e
108c0 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 20 7b  xpression expr {
108d0 2a 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78 70  *expression {exp
108e0 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d  ression syntax}}
108f0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
10900 65 44 69 61 67 72 61 6d 20 65 78 70 72 0a 3c 2f  eDiagram expr.</
10910 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65  tcl>..<p>This se
10920 63 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65  ction is differe
10930 6e 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65  nt from the othe
10940 72 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20  rs.  Most other 
10950 73 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73  sections of.this
10960 20 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20   document talks 
10970 61 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c  about a particul
10980 61 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20  ar SQL command. 
10990 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f   This section do
109a0 65 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75  es.not talk abou
109b0 74 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63  t a standalone c
109c0 6f 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74  ommand but about
109d0 20 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77   "expressions" w
109e0 68 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d  hich are .subcom
109f0 70 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20  ponents of most 
10a00 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c  other commands.<
10a10 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
10a20 67 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20  gment binaryops 
10a30 7b 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72  {binary operator
10a40 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65  s}</tcl>.<h3>Ope
10a50 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
10a60 28 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61  (SQLite understa
10a70 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nds the followin
10a80 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  g binary operato
10a90 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  rs, in order fro
10aa0 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77  m.highest to low
10ab0 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c  est precedence:<
10ac0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
10ad0 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
10ae0 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
10af0 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25  g>||.*    /    %
10b00 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b  .+    -.&lt;&lt;
10b10 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61     &gt;&gt;   &a
10b20 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20  mp;    |.&lt;   
10b30 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20   &lt;=   &gt;   
10b40 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20   &gt;=.=    ==  
10b50 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20   !=   &lt;&gt;  
10b60 20 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e   </big>IS   IS N
10b70 4f 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20  OT   IN   LIKE  
10b80 20 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20   GLOB   MATCH   
10b90 52 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52  REGEXP.AND   .OR
10ba0 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f  </font>.</pre></
10bb0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
10bc0 70 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e  p>^(Supported un
10bd0 61 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61  ary prefix opera
10be0 74 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c  tors are these:<
10bf0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
10c00 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
10c10 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
10c20 67 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20  g>-    +    ~   
10c30 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74   NOT</big></font
10c40 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  >.</pre></blockq
10c50 75 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  uote>)^..<tcl>hd
10c60 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74  _fragment collat
10c70 65 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65  eop {COLLATE ope
10c80 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  rator}</tcl>.<p>
10c90 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65  ^The COLLATE ope
10ca0 72 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79  rator is a unary
10cb0 20 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f   postfix.operato
10cc0 72 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61  r that assigns a
10cd0 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
10ce0 65 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72  ence] to an expr
10cf0 65 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c  ession..^The COL
10d00 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61  LATE operator ha
10d10 73 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65  s a higher prece
10d20 64 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72  dence (binds mor
10d30 65 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20  e tightly) than 
10d40 61 6e 79 0a 62 69 6e 61 72 79 20 6f 70 65 72 61  any.binary opera
10d50 74 6f 72 20 61 6e 64 20 61 6e 79 20 75 6e 61 72  tor and any unar
10d60 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f  y prefix operato
10d70 72 20 65 78 63 65 70 74 20 22 7e 22 2e 0a 28 43  r except "~"..(C
10d80 4f 4c 4c 41 54 45 20 61 6e 64 20 22 7e 22 20 61  OLLATE and "~" a
10d90 72 65 20 61 73 73 6f 63 69 61 74 69 76 65 20 73  re associative s
10da0 6f 20 74 68 65 69 72 20 62 69 6e 64 69 6e 67 20  o their binding 
10db0 6f 72 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d  order does not m
10dc0 61 74 74 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c  atter.).^The col
10dd0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
10de0 73 65 74 20 62 79 20 74 68 65 20 43 4f 4c 4c 41  set by the COLLA
10df0 54 45 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 72  TE operator over
10e00 72 69 64 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74  rides the.collat
10e10 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 74  ing sequence det
10e20 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 43  ermined by the C
10e30 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e  OLLATE clause in
10e40 20 61 20 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e   a table.[column
10e50 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65   definition]..Se
10e60 65 20 74 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67  e the [collating
10e70 20 73 65 71 75 65 6e 63 65 7c 20 64 65 74 61 69   sequence| detai
10e80 6c 65 64 20 64 69 73 63 75 73 73 69 6f 6e 20 6f  led discussion o
10e90 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  n collating sequ
10ea0 65 6e 63 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64  ences].in the [d
10eb0 61 74 61 74 79 70 65 20 7c 20 44 61 74 61 74 79  atatype | Dataty
10ec0 70 65 20 49 6e 20 53 51 4c 69 74 65 33 5d 20 64  pe In SQLite3] d
10ed0 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69  ocument for addi
10ee0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
10ef0 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  on..</p>..<tcl>h
10f00 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65  d_puts ".<p>^The
10f10 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20   unary operator 
10f20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20  [Operator +] is 
10f30 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61  a no-op.  ^It ca
10f40 6e 20 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20  n be applied.to 
10f50 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73  strings, numbers
10f60 2c 20 62 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20  , blobs or NULL 
10f70 61 6e 64 20 69 74 20 61 6c 77 61 79 73 20 72 65  and it always re
10f80 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 0a 77  turns a result.w
10f90 69 74 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ith the same val
10fa0 75 65 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e  ue as the operan
10fb0 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c  d.</p>"</tcl>..<
10fc0 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72  p>Note that ther
10fd0 65 20 61 72 65 20 74 77 6f 20 76 61 72 69 61 74  e are two variat
10fe0 69 6f 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61  ions of the equa
10ff0 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c  ls and not equal
11000 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20 5e 45  s.operators.  ^E
11010 71 75 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74  quals can be eit
11020 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75  her..<tcl>.hd_pu
11030 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d  ts "[Operator =]
11040 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d   or [Operator ==
11050 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61  ]..^The non-equa
11060 6c 73 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20  ls operator can 
11070 62 65 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61  be either.[Opera
11080 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72  tor !=] or [Oper
11090 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d  ator {&lt;&gt;}]
110a0 2e 0a 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72  ..^The [Operator
110b0 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73   ||] operator is
110c0 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22   \"concatenate\"
110d0 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65   - it joins toge
110e0 74 68 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72  ther.the two str
110f0 69 6e 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72  ings of its oper
11100 61 6e 64 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61  ands..^The opera
11110 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d  tor [Operator %]
11120 20 6f 75 74 70 75 74 73 20 74 68 65 20 76 61 6c   outputs the val
11130 75 65 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a  ue of its left .
11140 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69  operand modulo i
11150 74 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  ts right operand
11160 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72  .</p>..<p>^The r
11170 65 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e  esult of any bin
11180 61 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20  ary operator is 
11190 65 69 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63  either a numeric
111a0 20 76 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c   value or .NULL,
111b0 20 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20   except for the 
111c0 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f  [Operator ||] co
111d0 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72  ncatenation oper
111e0 61 74 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79  ator which alway
111f0 73 20 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20  s .evaluates to 
11200 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
11210 20 74 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e   text value.</p>
11220 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  "..hd_fragment {
11230 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65  isisnot} {IS ope
11240 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f  rator} {IS NOT o
11250 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74  perator}..hd_put
11260 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72  s "<p>^The [Oper
11270 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70  ator IS] and [Op
11280 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d  erator {IS NOT}]
11290 20 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a   operators work.
112a0 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d  like [Operator =
112b0 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20  ] and [Operator 
112c0 21 3d 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20  !=] except when 
112d0 6f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74  one or both of t
112e0 68 65 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he.operands are 
112f0 4e 55 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63  NULL. ^In this c
11300 61 73 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65  ase, if both ope
11310 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20  rands are NULL, 
11320 74 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72  then the.IS oper
11330 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74  ator evaluates t
11340 6f 20 31 20 28 74 72 75 65 29 20 61 6e 64 20 74  o 1 (true) and t
11350 68 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74  he IS NOT operat
11360 6f 72 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20  or evaluates.to 
11370 30 20 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f  0 (false). ^If o
11380 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
11390 4c 4c 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72  LL and the other
113a0 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68   is not, then th
113b0 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76  e.IS operator ev
113c0 61 6c 75 61 74 65 73 20 74 6f 20 30 20 28 66 61  aluates to 0 (fa
113d0 6c 73 65 29 20 61 6e 64 20 74 68 65 20 49 53 20  lse) and the IS 
113e0 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20  NOT operator is 
113f0 31 20 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73  1 (true)..^It is
11400 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f   not possible fo
11410 72 20 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f  r an IS or IS NO
11420 54 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  T expression to 
11430 65 76 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c  evaluate to NULL
11440 2e 0a 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70  ..^Operators [Op
11450 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b  erator IS] and [
11460 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54  Operator {IS NOT
11470 7d 5d 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  }] have the same
11480 20 0a 70 72 65 63 65 64 65 6e 63 65 20 61 73 20   .precedence as 
11490 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a  [Operator =]."..
114a0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
114b0 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72   litvalue {liter
114c0 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a  al value}</tcl>.
114d0 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75  <h3>Literal Valu
114e0 65 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e 41 20 6c  es</h3>.<p>.^A l
114f0 69 74 65 72 61 6c 20 76 61 6c 75 65 20 69 73 20  iteral value is 
11500 61 20 63 6f 6e 73 74 61 6e 74 20 6f 66 20 73 6f  a constant of so
11510 6d 65 20 6b 69 6e 64 2e 0a 5e 4c 69 74 65 72 61  me kind..^Litera
11520 6c 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20  l values may be 
11530 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61 74 69  integers, floati
11540 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73  ng point numbers
11550 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42 73  , strings,.BLOBs
11560 2c 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f 70 3e 0a  , or NULLs.</p>.
11570 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66  .<p>The syntax f
11580 6f 72 20 69 6e 74 65 67 65 72 20 61 6e 64 20 66  or integer and f
11590 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69  loating point li
115a0 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69  terals (collecti
115b0 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69  vely."numeric li
115c0 74 65 72 61 6c 73 22 29 20 69 73 20 73 68 6f 77  terals") is show
115d0 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n by the followi
115e0 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a  ng diagram:</p>.
115f0 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
11600 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65  ram numeric-lite
11610 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e  ral</tcl>..<p>.^
11620 28 49 66 20 61 20 6e 75 6d 65 72 69 63 20 6c 69  (If a numeric li
11630 74 65 72 61 6c 20 68 61 73 20 61 20 64 65 63 69  teral has a deci
11640 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20  mal point or an 
11650 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63  exponentiation.c
11660 6c 61 75 73 65 2c 20 74 68 65 6e 20 69 74 20 69  lause, then it i
11670 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
11680 6e 74 20 6c 69 74 65 72 61 6c 2e 20 20 4f 74 68  nt literal.  Oth
11690 65 72 77 69 73 65 20 69 73 20 69 74 20 69 73 20  erwise is it is 
116a0 61 6e 20 0a 69 6e 74 65 67 65 72 20 6c 69 74 65  an .integer lite
116b0 72 61 6c 2e 29 5e 20 20 5e 54 68 65 20 22 45 22  ral.)^  ^The "E"
116c0 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
116d0 62 65 67 69 6e 73 20 74 68 65 20 65 78 70 6f 6e  begins the expon
116e0 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65  entiation.clause
116f0 20 6f 66 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   of a floating p
11700 6f 69 6e 74 20 6c 69 74 65 72 61 6c 20 63 61 6e  oint literal can
11710 20 62 65 20 65 69 74 68 65 72 20 75 70 70 65 72   be either upper
11720 20 6f 72 20 6c 6f 77 65 72 20 63 61 73 65 2e 0a   or lower case..
11730 5e 28 54 68 65 20 22 2e 22 20 63 68 61 72 61 63  ^(The "." charac
11740 74 65 72 20 69 73 20 61 6c 77 61 79 73 20 75 73  ter is always us
11750 65 64 20 0a 61 73 20 74 68 65 20 64 65 63 69 6d  ed .as the decim
11760 61 6c 20 70 6f 69 6e 74 20 65 76 65 6e 20 69 66  al point even if
11770 20 74 68 65 20 6c 6f 63 61 6c 65 20 73 65 74 74   the locale sett
11780 69 6e 67 20 73 70 65 63 69 66 69 65 73 20 22 2c  ing specifies ",
11790 22 20 66 6f 72 0a 74 68 69 73 20 72 6f 6c 65 20  " for.this role 
117a0 2d 20 74 68 65 20 75 73 65 20 6f 66 20 22 2c 22  - the use of ","
117b0 20 66 6f 72 20 74 68 65 20 64 65 63 69 6d 61 6c   for the decimal
117c0 20 70 6f 69 6e 74 20 77 6f 75 6c 64 20 72 65 73   point would res
117d0 75 6c 74 20 69 6e 0a 73 79 6e 74 61 63 74 69 63  ult in.syntactic
117e0 20 61 6d 62 69 67 75 69 74 79 2e 29 5e 3c 2f 70   ambiguity.)^</p
117f0 3e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72 69 6e 67  >..<p> ^A string
11800 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f 72   constant is for
11810 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67  med by enclosing
11820 20 74 68 65 0a 73 74 72 69 6e 67 20 69 6e 20 73   the.string in s
11830 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 28 27 29  ingle quotes (')
11840 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 71 75 6f  .  ^A single quo
11850 74 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 74  te within the st
11860 72 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f  ring can.be enco
11870 64 65 64 20 62 79 20 70 75 74 74 69 6e 67 20 74  ded by putting t
11880 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73  wo single quotes
11890 20 69 6e 20 61 20 72 6f 77 20 2d 20 61 73 20 69   in a row - as i
118a0 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c  n Pascal..C-styl
118b0 65 20 65 73 63 61 70 65 73 20 75 73 69 6e 67 20  e escapes using 
118c0 74 68 65 20 62 61 63 6b 73 6c 61 73 68 20 63 68  the backslash ch
118d0 61 72 61 63 74 65 72 20 61 72 65 20 6e 6f 74 20  aracter are not 
118e0 73 75 70 70 6f 72 74 65 64 20 62 65 63 61 75 73  supported becaus
118f0 65 0a 74 68 65 79 20 61 72 65 20 6e 6f 74 20 73  e.they are not s
11900 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 5e 42 4c  tandard SQL..^BL
11910 4f 42 20 6c 69 74 65 72 61 6c 73 20 61 72 65 20  OB literals are 
11920 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 20  string literals 
11930 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65 78 61 64  containing hexad
11940 65 63 69 6d 61 6c 20 64 61 74 61 20 61 6e 64 0a  ecimal data and.
11950 70 72 65 63 65 64 65 64 20 62 79 20 61 20 73 69  preceded by a si
11960 6e 67 6c 65 20 22 78 22 20 6f 72 20 22 58 22 20  ngle "x" or "X" 
11970 63 68 61 72 61 63 74 65 72 2e 20 20 5e 28 46 6f  character.  ^(Fo
11980 72 20 65 78 61 6d 70 6c 65 3a 3c 2f 70 3e 0a 0a  r example:</p>..
11990 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
119a0 3e 0a 58 27 35 33 35 31 34 43 36 39 37 34 36 35  >.X'53514C697465
119b0 27 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  '.</pre></blockq
119c0 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 41 20  uote>)^..<p>.^A 
119d0 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20 63 61  literal value ca
119e0 6e 20 61 6c 73 6f 20 62 65 20 74 68 65 20 74 6f  n also be the to
119f0 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e  ken "NULL"..</p>
11a00 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
11a10 6e 74 20 76 61 72 70 61 72 61 6d 20 70 61 72 61  nt varparam para
11a20 6d 65 74 65 72 20 70 61 72 61 6d 65 74 65 72 73  meter parameters
11a30 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65   {bound paramete
11a40 72 7d 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65  r} {bound parame
11a50 74 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ters}</tcl>.<h3>
11a60 50 61 72 61 6d 65 74 65 72 73 3c 2f 68 33 3e 0a  Parameters</h3>.
11a70 3c 70 3e 0a 41 20 22 76 61 72 69 61 62 6c 65 22  <p>.A "variable"
11a80 20 6f 72 20 22 70 61 72 61 6d 65 74 65 72 22 20   or "parameter" 
11a90 74 6f 6b 65 6e 0a 73 70 65 63 69 66 69 65 73 20  token.specifies 
11aa0 61 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 69 6e  a placeholder in
11ab0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
11ac0 66 6f 72 20 61 20 0a 76 61 6c 75 65 20 74 68 61  for a .value tha
11ad0 74 20 69 73 20 66 69 6c 6c 65 64 20 69 6e 20 61  t is filled in a
11ae0 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20  t runtime using 
11af0 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e  the.[sqlite3_bin
11b00 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74  d_blob() | sqlit
11b10 65 33 5f 62 69 6e 64 28 29 5d 20 66 61 6d 69 6c  e3_bind()] famil
11b20 79 20 6f 66 20 43 2f 43 2b 2b 20 69 6e 74 65 72  y of C/C++ inter
11b30 66 61 63 65 73 2e 0a 50 61 72 61 6d 65 74 65 72  faces..Parameter
11b40 73 20 63 61 6e 20 74 61 6b 65 20 73 65 76 65 72  s can take sever
11b50 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a  al forms:.</p>..
11b60 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
11b70 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  ble>.<tr>.<td al
11b80 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
11b90 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62  gn="top"><b>?</b
11ba0 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e  ><i>NNN</i></td>
11bb0 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
11bc0 2f 74 64 3e 0a 3c 74 64 3e 5e 28 41 20 71 75 65  /td>.<td>^(A que
11bd0 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f  stion mark follo
11be0 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20  wed by a number 
11bf0 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73  <i>NNN</i> holds
11c00 20 61 20 73 70 6f 74 20 66 6f 72 20 74 68 65 0a   a spot for the.
11c10 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65 74 65 72  NNN-th parameter
11c20 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62 65 20 62  .  NNN must be b
11c30 65 74 77 65 65 6e 20 31 20 61 6e 64 20 5b 53 51  etween 1 and [SQ
11c40 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
11c50 45 5f 4e 55 4d 42 45 52 5d 2e 29 5e 0a 3c 2f 74  E_NUMBER].)^.</t
11c60 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
11c70 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
11c80 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
11c90 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  ?</b></td><td wi
11ca0 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
11cb0 74 64 3e 5e 41 20 71 75 65 73 74 69 6f 6e 20 6d  td>^A question m
11cc0 61 72 6b 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ark that is not 
11cd0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75  followed by a nu
11ce0 6d 62 65 72 20 63 72 65 61 74 65 73 20 61 20 70  mber creates a p
11cf0 61 72 61 6d 65 74 65 72 0a 77 69 74 68 20 61 20  arameter.with a 
11d00 6e 75 6d 62 65 72 20 6f 6e 65 20 67 72 65 61 74  number one great
11d10 65 72 20 74 68 61 6e 20 74 68 65 20 6c 61 72 67  er than the larg
11d20 65 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75  est parameter nu
11d30 6d 62 65 72 20 61 6c 72 65 61 64 79 20 61 73 73  mber already ass
11d40 69 67 6e 65 64 2e 0a 5e 49 66 20 74 68 69 73 20  igned..^If this 
11d50 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65  means the parame
11d60 74 65 72 20 6e 75 6d 62 65 72 20 69 73 20 67 72  ter number is gr
11d70 65 61 74 65 72 20 74 68 61 6e 0a 5b 53 51 4c 49  eater than.[SQLI
11d80 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
11d90 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 20 61  NUMBER], it is a
11da0 6e 20 65 72 72 6f 72 2e 0a 3c 2f 74 64 3e 0a 3c  n error..</td>.<
11db0 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
11dc0 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
11dd0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62  gn="top"><b>:</b
11de0 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64  ><i>AAAA</i></td
11df0 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
11e00 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c  </td>.<td>^A col
11e10 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  on followed by a
11e20 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  n identifier nam
11e30 65 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66  e holds a spot f
11e40 6f 72 20 61 20 0a 5b 73 71 6c 69 74 65 33 5f 62  or a .[sqlite3_b
11e50 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
11e60 6d 65 7c 6e 61 6d 65 64 20 70 61 72 61 6d 65 74  me|named paramet
11e70 65 72 5d 20 77 69 74 68 20 74 68 65 20 6e 61 6d  er] with the nam
11e80 65 20 3a 41 41 41 41 2e 20 20 0a 5e 28 4e 61 6d  e :AAAA.  .^(Nam
11e90 65 64 20 70 61 72 61 6d 65 74 65 72 73 20 61 72  ed parameters ar
11ea0 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e  e also numbered.
11eb0 20 54 68 65 20 6e 75 6d 62 65 72 20 61 73 73 69   The number assi
11ec0 67 6e 65 64 20 69 73 20 6f 6e 65 20 67 72 65 61  gned is one grea
11ed0 74 65 72 20 74 68 61 6e 0a 74 68 65 20 6c 61 72  ter than.the lar
11ee0 67 65 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e  gest parameter n
11ef0 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20 61 73  umber already as
11f00 73 69 67 6e 65 64 2e 29 5e 20 5e 49 66 20 74 68  signed.)^ ^If th
11f10 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72  is means the par
11f20 61 6d 65 74 65 72 0a 77 6f 75 6c 64 20 62 65 20  ameter.would be 
11f30 61 73 73 69 67 6e 65 64 20 61 20 6e 75 6d 62 65  assigned a numbe
11f40 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 5b  r greater than [
11f50 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
11f60 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20  BLE_NUMBER], it 
11f70 69 73 0a 61 6e 20 65 72 72 6f 72 2e 20 54 6f 20  is.an error. To 
11f80 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c  avoid confusion,
11f90 20 69 74 20 69 73 20 62 65 73 74 20 74 6f 20 61   it is best to a
11fa0 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65  void mixing name
11fb0 64 20 61 6e 64 20 6e 75 6d 62 65 72 65 64 0a 70  d and numbered.p
11fc0 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a  arameters.</td>.
11fd0 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  </tr>.<tr>.<td a
11fe0 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
11ff0 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f  ign="top"><b>@</
12000 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74  b><i>AAAA</i></t
12010 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
12020 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22  ></td>.<td>^An "
12030 61 74 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65  at" sign works e
12040 78 61 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f  xactly like a co
12050 6c 6f 6e 2c 20 65 78 63 65 70 74 20 74 68 61 74  lon, except that
12060 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a 74 68 65   the name of.the
12070 20 70 61 72 61 6d 65 74 65 72 20 63 72 65 61 74   parameter creat
12080 65 64 20 69 73 20 40 41 41 41 41 2e 3c 2f 74 64  ed is @AAAA.</td
12090 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
120a0 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
120b0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24  align="top"><b>$
120c0 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c  </b><i>AAAA</i><
120d0 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
120e0 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20  0"></td>.<td>^A 
120f0 64 6f 6c 6c 61 72 2d 73 69 67 6e 20 66 6f 6c 6c  dollar-sign foll
12100 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74  owed by an ident
12110 69 66 69 65 72 20 6e 61 6d 65 20 61 6c 73 6f 20  ifier name also 
12120 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72  holds a spot for
12130 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74   a named.paramet
12140 65 72 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65  er with the name
12150 20 24 41 41 41 41 2e 20 20 5e 28 54 68 65 20 69   $AAAA.  ^(The i
12160 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 69  dentifier name i
12170 6e 20 74 68 69 73 20 63 61 73 65 20 63 61 6e 20  n this case can 
12180 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f 72 20 6d  include.one or m
12190 6f 72 65 20 6f 63 63 75 72 72 65 6e 63 65 73 20  ore occurrences 
121a0 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61 20 73 75  of "::" and a su
121b0 66 66 69 78 20 65 6e 63 6c 6f 73 65 64 20 69 6e  ffix enclosed in
121c0 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61 69 6e   "(...)" contain
121d0 69 6e 67 0a 61 6e 79 20 74 65 78 74 20 61 74 20  ing.any text at 
121e0 61 6c 6c 2e 29 5e 20 20 54 68 69 73 20 73 79 6e  all.)^  This syn
121f0 74 61 78 20 69 73 20 74 68 65 20 66 6f 72 6d 20  tax is the form 
12200 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20 6e 61  of a variable na
12210 6d 65 20 69 6e 20 74 68 65 0a 5b 68 74 74 70 3a  me in the.[http:
12220 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 20 7c 20  //www.tcl.tk/ | 
12230 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20  Tcl programming 
12240 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65 20  language].  The 
12250 70 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69 73  presence.of this
12260 20 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73 20   syntax results 
12270 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68  from the fact th
12280 61 74 20 53 51 4c 69 74 65 20 69 73 20 72 65 61  at SQLite is rea
12290 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74 65  lly a .[Tcl exte
122a0 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73 20  nsion] that has 
122b0 65 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68 65  escaped into the
122c0 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72   wild.</td>.</tr
122d0 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  >.</table>.</blo
122e0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61  ckquote>..<p>^Pa
122f0 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 61 72  rameters that ar
12300 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 76  e not assigned v
12310 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71 6c  alues using.[sql
12320 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29  ite3_bind_blob()
12330 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28   | sqlite3_bind(
12340 29 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a 61  )] are treated.a
12350 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e  s NULL.</p>..<p>
12360 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 72  ^The maximum par
12370 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73  ameter number is
12380 20 73 65 74 20 61 74 20 63 6f 6d 70 69 6c 65 2d   set at compile-
12390 74 69 6d 65 20 62 79 0a 74 68 65 20 5b 53 51 4c  time by.the [SQL
123a0 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
123b0 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72 6f 2e 20  _NUMBER] macro. 
123c0 20 5e 28 41 6e 20 69 6e 64 69 76 69 64 75 61 6c   ^(An individual
123d0 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
123e0 63 74 69 6f 6e 73 5d 0a 44 20 63 61 6e 20 72 65  ctions].D can re
123f0 64 75 63 65 20 69 74 73 20 6d 61 78 69 6d 75 6d  duce its maximum
12400 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
12410 72 20 62 65 6c 6f 77 20 74 68 65 20 63 6f 6d 70  r below the comp
12420 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d 75 6d  ile-time maximum
12430 0a 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69  .using the [sqli
12440 74 65 33 5f 6c 69 6d 69 74 5d 28 44 2c 20 5b 53  te3_limit](D, [S
12450 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49  QLITE_LIMIT_VARI
12460 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 2e 2e 2e  ABLE_NUMBER],...
12470 29 20 69 6e 74 65 72 66 61 63 65 2e 29 5e 0a 3c  ) interface.)^.<
12480 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
12490 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b 45 20  gment like LIKE 
124a0 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c 68 33  ESCAPE</tcl>.<h3
124b0 3e 54 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c  >The LIKE and GL
124c0 4f 42 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33  OB operators</h3
124d0 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f  >.<p>^The LIKE o
124e0 70 65 72 61 74 6f 72 20 64 6f 65 73 20 61 20 70  perator does a p
124f0 61 74 74 65 72 6e 20 6d 61 74 63 68 69 6e 67 20  attern matching 
12500 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54 68 65  comparison. ^The
12510 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68 65 20   operand.to the 
12520 72 69 67 68 74 20 6f 66 20 74 68 65 20 4c 49 4b  right of the LIK
12530 45 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 74 61  E operator conta
12540 69 6e 73 20 74 68 65 20 70 61 74 74 65 72 6e 20  ins the pattern 
12550 61 6e 64 20 74 68 65 20 6c 65 66 74 20 68 61 6e  and the left han
12560 64 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61 69  d.operand contai
12570 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 74 6f  ns the string to
12580 20 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20 74   match against t
12590 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74 63  he pattern...<tc
125a0 6c 3e 68 64 5f 70 75 74 73 20 22 5e 41 20 70 65  l>hd_puts "^A pe
125b0 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c 22  rcent symbol (\"
125c0 25 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45  %\") in the LIKE
125d0 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73   pattern matches
125e0 20 61 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f 66   any.sequence of
125f0 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68   zero or more ch
12600 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20  aracters in the 
12610 73 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75 6e 64  string.  ^An und
12620 65 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22 29 20  erscore.(\"_\") 
12630 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
12640 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 20  ern matches any 
12650 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
12660 20 69 6e 20 74 68 65 0a 73 74 72 69 6e 67 2e 20   in the.string. 
12670 20 5e 28 41 6e 79 20 6f 74 68 65 72 20 63 68 61   ^(Any other cha
12680 72 61 63 74 65 72 20 6d 61 74 63 68 65 73 20 69  racter matches i
12690 74 73 65 6c 66 20 6f 72 20 69 74 73 20 6c 6f 77  tself or its low
126a0 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a 65 71  er/upper case.eq
126b0 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e 20 63  uivalent (i.e. c
126c0 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20  ase-insensitive 
126d0 6d 61 74 63 68 69 6e 67 29 2e 29 5e 20 20 28 41  matching).)^  (A
126e0 20 62 75 67 3a 20 5e 53 51 4c 69 74 65 20 6f 6e   bug: ^SQLite on
126f0 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75  ly.understands u
12700 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20  pper/lower case 
12710 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
12720 74 65 72 73 20 62 79 20 64 65 66 61 75 6c 74 2e  ters by default.
12730 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f 70 65 72    ^The.LIKE oper
12740 61 74 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e  ator is case sen
12750 73 69 74 69 76 65 20 62 79 20 64 65 66 61 75 6c  sitive by defaul
12760 74 20 66 6f 72 20 75 6e 69 63 6f 64 65 20 63 68  t for unicode ch
12770 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 72  aracters that ar
12780 65 0a 62 65 79 6f 6e 64 20 74 68 65 20 41 53 43  e.beyond the ASC
12790 49 49 20 72 61 6e 67 65 2e 20 20 46 6f 72 20 65  II range.  For e
127a0 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20 65 78 70  xample,.^the exp
127b0 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26 6e  ression <b>'a'&n
127c0 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41  bsp;LIKE&nbsp;'A
127d0 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20 62 75  '</b>.is TRUE bu
127e0 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e  t <b>'&aelig;'&n
127f0 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26  bsp;LIKE&nbsp;'&
12800 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46  AElig;'</b> is F
12810 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74 63 6c 3e  ALSE.)<p>"</tcl>
12820 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
12830 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
12840 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
12850 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  then the express
12860 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ion.following th
12870 65 20 45 53 43 41 50 45 20 6b 65 79 77 6f 72 64  e ESCAPE keyword
12880 20 6d 75 73 74 20 65 76 61 6c 75 61 74 65 20 74   must evaluate t
12890 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 69  o a string consi
128a0 73 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67 6c  sting of.a singl
128b0 65 20 63 68 61 72 61 63 74 65 72 2e 20 5e 54 68  e character. ^Th
128c0 69 73 20 63 68 61 72 61 63 74 65 72 20 6d 61 79  is character may
128d0 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20   be used in the 
128e0 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a 74 6f 20  LIKE pattern.to 
128f0 69 6e 63 6c 75 64 65 20 6c 69 74 65 72 61 6c 20  include literal 
12900 70 65 72 63 65 6e 74 20 6f 72 20 75 6e 64 65 72  percent or under
12910 73 63 6f 72 65 20 63 68 61 72 61 63 74 65 72 73  score characters
12920 2e 20 5e 54 68 65 20 65 73 63 61 70 65 0a 63 68  . ^The escape.ch
12930 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77 65 64  aracter followed
12940 20 62 79 20 61 20 70 65 72 63 65 6e 74 20 73 79   by a percent sy
12950 6d 62 6f 6c 20 28 25 29 2c 20 75 6e 64 65 72 73  mbol (%), unders
12960 63 6f 72 65 20 28 5f 29 2c 20 6f 72 20 61 20 73  core (_), or a s
12970 65 63 6f 6e 64 0a 69 6e 73 74 61 6e 63 65 20 6f  econd.instance o
12980 66 20 74 68 65 20 65 73 63 61 70 65 20 63 68 61  f the escape cha
12990 72 61 63 74 65 72 20 69 74 73 65 6c 66 20 6d 61  racter itself ma
129a0 74 63 68 65 73 20 61 0a 6c 69 74 65 72 61 6c 20  tches a.literal 
129b0 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20  percent symbol, 
129c0 75 6e 64 65 72 73 63 6f 72 65 2c 20 6f 72 20 61  underscore, or a
129d0 20 73 69 6e 67 6c 65 20 65 73 63 61 70 65 20 63   single escape c
129e0 68 61 72 61 63 74 65 72 2c 0a 72 65 73 70 65 63  haracter,.respec
129f0 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e 54 68 65  tively...<p>^The
12a00 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70 65 72   infix LIKE oper
12a10 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e  ator is implemen
12a20 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ted by calling t
12a30 68 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  he.application-d
12a40 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74  efined SQL funct
12a50 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c  ions [like(<i>Y<
12a60 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f  /i>,<i>X</i>)] o
12a70 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e  r.[like(<i>Y</i>
12a80 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f  ,<i>X</i>,<i>Z</
12a90 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  i>)]</a>.</p>..<
12aa0 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72  p>^The LIKE oper
12ab0 61 74 6f 72 20 63 61 6e 20 62 65 20 6d 61 64 65  ator can be made
12ac0 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20   case sensitive 
12ad0 75 73 69 6e 67 20 74 68 65 0a 5b 63 61 73 65 5f  using the.[case_
12ae0 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65 20 70  sensitive_like p
12af0 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63  ragma].</p>..<tc
12b00 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 67 6c  l>hd_fragment gl
12b10 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70  ob GLOB</tcl>.<p
12b20 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70 65 72 61  >^The GLOB opera
12b30 74 6f 72 20 69 73 20 73 69 6d 69 6c 61 72 20 74  tor is similar t
12b40 6f 20 4c 49 4b 45 20 62 75 74 20 75 73 65 73 20  o LIKE but uses 
12b50 74 68 65 20 55 6e 69 78 0a 66 69 6c 65 20 67 6c  the Unix.file gl
12b60 6f 62 62 69 6e 67 20 73 79 6e 74 61 78 20 66 6f  obbing syntax fo
12b70 72 20 69 74 73 20 77 69 6c 64 63 61 72 64 73 2e  r its wildcards.
12b80 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42 20 69 73    ^Also, GLOB is
12b90 20 63 61 73 65 0a 73 65 6e 73 69 74 69 76 65 2c   case.sensitive,
12ba0 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20 20 5e   unlike LIKE.  ^
12bb0 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20 4c 49  Both GLOB and LI
12bc0 4b 45 20 6d 61 79 20 62 65 20 70 72 65 63 65 64  KE may be preced
12bd0 65 64 20 62 79 0a 74 68 65 20 4e 4f 54 20 6b 65  ed by.the NOT ke
12be0 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74 20  yword to invert 
12bf0 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68 65  the sense of the
12c00 20 74 65 73 74 2e 20 20 5e 54 68 65 20 69 6e 66   test.  ^The inf
12c10 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74 6f  ix GLOB .operato
12c20 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  r is implemented
12c30 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20   by calling the 
12c40 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62 28 3c  function.[glob(<
12c50 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
12c60 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20 6d 6f  )] and can be mo
12c70 64 69 66 69 65 64 20 62 79 20 6f 76 65 72 72 69  dified by overri
12c80 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63 74 69  ding.that functi
12c90 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  on.</p>..<tcl>hd
12ca0 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65 78 70  _fragment regexp
12cb0 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a 3c 70   REGEXP</tcl>.<p
12cc0 3e 5e 54 68 65 20 52 45 47 45 58 50 20 6f 70 65  >^The REGEXP ope
12cd0 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63 69  rator is a speci
12ce0 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68  al syntax for th
12cf0 65 20 72 65 67 65 78 70 28 29 0a 75 73 65 72 20  e regexp().user 
12d00 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e 6f 20 72  function.  ^No r
12d10 65 67 65 78 70 28 29 20 75 73 65 72 20 66 75 6e  egexp() user fun
12d20 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ction is defined
12d30 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64 20   by default.and 
12d40 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52 45  so use of the RE
12d50 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77 69  GEXP operator wi
12d60 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73 75  ll normally resu
12d70 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20 6d  lt in an.error m
12d80 65 73 73 61 67 65 2e 20 20 5e 49 66 20 61 6e 20  essage.  ^If an 
12d90 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66  [application-def
12da0 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f  ined SQL functio
12db0 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67 65 78 70  n] named "regexp
12dc0 22 0a 69 73 20 61 64 64 65 64 20 61 74 20 72 75  ".is added at ru
12dd0 6e 2d 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65  n-time, then the
12de0 20 22 3c 69 3e 58 3c 2f 69 3e 20 52 45 47 45 58   "<i>X</i> REGEX
12df0 50 20 3c 69 3e 59 3c 2f 69 3e 22 20 6f 70 65 72  P <i>Y</i>" oper
12e00 61 74 6f 72 20 77 69 6c 6c 0a 62 65 20 69 6d 70  ator will.be imp
12e10 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 61  lemented as a ca
12e20 6c 6c 20 74 6f 20 22 72 65 67 65 78 70 28 3c 69  ll to "regexp(<i
12e30 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29  >Y</i>,<i>X</i>)
12e40 22 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ".</p>..<tcl>hd_
12e50 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d  fragment match M
12e60 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  ATCH</tcl>.<p>^T
12e70 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f  he MATCH operato
12e80 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73  r is a special s
12e90 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d 61  yntax for the ma
12ea0 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69 6f  tch().applicatio
12eb0 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
12ec0 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c  on.  ^The defaul
12ed0 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69  t match() functi
12ee0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
12ef0 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63 65  n.raises an exce
12f00 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74  ption and is not
12f10 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20 66   really useful f
12f20 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42 75  or anything..^Bu
12f30 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e  t extensions can
12f40 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d 61   override the ma
12f50 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  tch() function w
12f60 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c  ith more.helpful
12f70 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63   logic.</p>..<tc
12f80 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 65  l>hd_fragment be
12f90 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f 74  tween BETWEEN</t
12fa0 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54 57  cl>.<h3>The BETW
12fb0 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33  EEN operator</h3
12fc0 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57 45  >.<p>^(The BETWE
12fd0 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 6c  EN operator is l
12fe0 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c  ogically equival
12ff0 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f 66  ent to a pair of
13000 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22 3c   comparisons.."<
13010 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57 45  i>x</i> <b>BETWE
13020 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20  EN</b> <i>y</i> 
13030 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c  <b>AND</b> <i>z<
13040 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61 6c  /i>" is .equival
13050 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69  ent to ."<i>x</i
13060 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e  ><b>&gt;=</b><i>
13070 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e  y</i> <b>AND</b>
13080 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b   <i>x</i><b>&lt;
13090 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65  =</b><i>z</i>" e
130a0 78 63 65 70 74 0a 74 68 61 74 20 77 69 74 68 20  xcept.that with 
130b0 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69 3e  BETWEEN, the <i>
130c0 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e  x</i> expression
130d0 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61 74   is only evaluat
130e0 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65 20  ed once.)^.^The 
130f0 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74 68  precedence of th
13100 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
13110 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  or is the same a
13120 73 20 74 68 65 20 70 72 65 63 65 64 65 6e 63 65  s the precedence
13130 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c 62  .as operators <b
13140 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 21  >==</b> and <b>!
13150 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b  =</b> and <b>LIK
13160 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70 73  E</b> and groups
13170 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 0a   left to right..
13180 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
13190 74 20 63 61 73 65 20 7b 43 41 53 45 20 65 78 70  t case {CASE exp
131a0 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c  ression}</tcl>.<
131b0 68 33 3e 54 68 65 20 43 41 53 45 20 65 78 70 72  h3>The CASE expr
131c0 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41  ession</h3>.<p>A
131d0 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
131e0 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20 73   serves a role s
131f0 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48 45  imilar to IF-THE
13200 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72 0a  N-ELSE in other.
13210 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67  programming lang
13220 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68 65  uages.  ..<p>The
13230 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65 73   optional expres
13240 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72 73  sion that occurs
13250 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20   in between the 
13260 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e 64  CASE keyword and
13270 20 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e 20   the.first WHEN 
13280 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c 65  keyword is calle
13290 64 20 74 68 65 20 22 62 61 73 65 22 20 65 78 70  d the "base" exp
132a0 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65 20  ression. ^There 
132b0 61 72 65 20 74 77 6f 20 62 61 73 69 63 20 66 6f  are two basic fo
132c0 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45 20  rms.of the CASE 
132d0 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f 73  expression: thos
132e0 65 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78  e with a base ex
132f0 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 6f  pression and tho
13300 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e  se without...<p>
13310 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 6f  ^In a CASE witho
13320 75 74 20 61 20 62 61 73 65 20 65 78 70 72 65 73  ut a base expres
13330 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e 20  sion, each WHEN 
13340 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
13350 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65 20  aluated.and the 
13360 72 65 73 75 6c 74 20 74 72 65 61 74 65 64 20 61  result treated a
13370 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74 61  s a boolean, sta
13380 72 74 69 6e 67 20 77 69 74 68 20 74 68 65 20 6c  rting with the l
13390 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e 74  eftmost and cont
133a0 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72 69  inuing.to the ri
133b0 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74  ght. ^The result
133c0 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
133d0 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 65  ression is the e
133e0 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65  valuation of the
133f0 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   THEN.expression
13400 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
13410 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57  s to the first W
13420 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74  HEN expression t
13430 68 61 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f  hat evaluates to
13440 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e  .true. ^Or, if n
13450 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
13460 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
13470 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74 68  uate to true, th
13480 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61 6c  e result of.eval
13490 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20  uating the ELSE 
134a0 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 61  expression, if a
134b0 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73  ny. ^If there is
134c0 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73 73   no ELSE express
134d0 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20  ion and.none of 
134e0 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73  the WHEN express
134f0 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20 74  ions are true, t
13500 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c 20  hen the overall 
13510 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
13520 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73 75  .<p>^A NULL resu
13530 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  lt is considered
13540 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76 61   untrue when eva
13550 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65 72  luating WHEN ter
13560 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41  ms...<p>^In a CA
13570 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20 65  SE with a base e
13580 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 62  xpression, the b
13590 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ase expression i
135a0 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73 74  s evaluated just
135b0 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72 65  .once and the re
135c0 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65 64  sult is compared
135d0 20 61 67 61 69 6e 73 74 20 74 68 65 20 65 76 61   against the eva
135e0 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68 20  luation of each 
135f0 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f 6e  WHEN .expression
13600 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
13610 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74  ght. ^The result
13620 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
13630 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 0a  ression is the .
13640 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68  evaluation of th
13650 65 20 54 48 45 4e 20 65 78 70 72 65 73 73 69 6f  e THEN expressio
13660 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  n that correspon
13670 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ds to the first 
13680 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20  WHEN.expression 
13690 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 63 6f  for which the co
136a0 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
136b0 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f  . ^Or, if none o
136c0 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72 65  f the WHEN.expre
136d0 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20  ssions evaluate 
136e0 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61 6c  to a value equal
136f0 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70   to the base exp
13700 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65 73  ression, the res
13710 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult.of evaluatin
13720 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65  g the ELSE expre
13730 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e  ssion, if any. ^
13740 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45  If there is no E
13750 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61  LSE expression a
13760 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57  nd.none of the W
13770 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  HEN expressions 
13780 70 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c 74  produce a result
13790 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61   equal to the ba
137a0 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a 74  se expression,.t
137b0 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c  he overall resul
137c0 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e  t is NULL...<p>^
137d0 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 61  When comparing a
137e0 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
137f0 20 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e 20   against a WHEN 
13800 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
13810 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73  same.collating s
13820 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69 74  equence, affinit
13830 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64  y, and NULL-hand
13840 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c 79  ling rules apply
13850 20 61 73 20 69 66 20 74 68 65 0a 62 61 73 65 20   as if the.base 
13860 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 57  expression and W
13870 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  HEN expression a
13880 72 65 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  re respectively 
13890 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72 69  the left- and.ri
138a0 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64  ght-hand operand
138b0 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62 3e  s of an <big><b>
138c0 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65 72  =</b></big> oper
138d0 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74 68  ator.</p> ^If th
138e0 65 20 62 61 73 65 20 0a 65 78 70 72 65 73 73 69  e base .expressi
138f0 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  on is NULL then 
13900 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
13910 65 20 43 41 53 45 20 69 73 20 61 6c 77 61 79 73  e CASE is always
13920 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66 20   the result .of 
13930 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45  evaluating the E
13940 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  LSE expression i
13950 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72 20  f it exists, or 
13960 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73 20  NULL if it does 
13970 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66  not...<p>^Both f
13980 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53 45  orms of the CASE
13990 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 20   expression use 
139a0 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d 63  lazy, or short-c
139b0 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61 74  ircuit, .evaluat
139c0 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f  ion...<p>^(The o
139d0 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62  nly difference b
139e0 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c 6f  etween the follo
139f0 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65 78  wing two CASE ex
13a00 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 61  pressions is tha
13a10 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20  t .the <i>x</i> 
13a20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
13a30 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79 20  aluated exactly 
13a40 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72 73  once in the firs
13a50 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a 6d  t example but .m
13a60 69 67 68 74 20 62 65 20 65 76 61 6c 75 61 74 65  ight be evaluate
13a70 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
13a80 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a 0a   in the second:.
13a90 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43  .<ul><pre>.<li>C
13aa0 41 53 45 20 78 20 57 48 45 4e 20 77 31 20 54 48  ASE x WHEN w1 TH
13ab0 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54 48  EN r1 WHEN w2 TH
13ac0 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e  EN r2 ELSE r3 EN
13ad0 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e 20  D.<li>CASE WHEN 
13ae0 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48 45  x=w1 THEN r1 WHE
13af0 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20 45  N x=w2 THEN r2 E
13b00 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72 65  LSE r3 END.</pre
13b10 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e  ></ul>)^...<tcl>
13b20 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f  hd_fragment in_o
13b30 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d 20  p {IN operator} 
13b40 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72  {NOT IN operator
13b50 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
13b60 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70  IN and NOT IN op
13b70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e  erators</h3>.<p>
13b80 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20  ^The IN and NOT 
13b90 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61 6b  IN operators tak
13ba0 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c 61  e a single scala
13bb0 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65  r operand on the
13bc0 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63 74  .left and a vect
13bd0 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68  or operand on th
13be0 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20 62  e right.formed b
13bf0 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c 69  y an explicit li
13c00 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f  st of zero or mo
13c10 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62 79  re scalars or by
13c20 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71 75   a .single subqu
13c30 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72  ery..^When the r
13c40 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20  ight operand of 
13c50 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  an IN or NOT IN 
13c60 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 75  operator is a su
13c70 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62 71  bquery, the.subq
13c80 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20 61  uery must have a
13c90 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20 63   single result c
13ca0 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68 65  olumn..^When the
13cb0 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 69   right operand i
13cc0 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c 20  s an empty set, 
13cd0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  the result of IN
13ce0 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74 68   is false and th
13cf0 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54 20  e.result of NOT 
13d00 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67 61  IN is true, rega
13d10 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c 65  rdless of the le
13d20 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20 65  ft operand and e
13d30 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74 20  ven if the.left 
13d40 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
13d50 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .^(The result of
13d60 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
13d70 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65 74   operator is det
13d80 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 66  ermined by the f
13d90 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78 3a  ollowing.matrix:
13da0 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c  ..<center>.<tabl
13db0 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  e border=1>.<tr>
13dc0 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e  .<th>Left operan
13dd0 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74  d <br>is NULL.<t
13de0 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20  h>Right operand 
13df0 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55 4c  <br>contains NUL
13e00 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72  L.<th>Right oper
13e10 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65 6d  and <br>is an em
13e20 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66 74  pty set.<th>Left
13e30 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20 3c   operand found <
13e40 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74 20  br>within right 
13e50 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73 75  operand.<th>Resu
13e60 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70 65  lt of <br>IN ope
13e70 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c 74  rator.<th>Result
13e80 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f   of <br>NOT IN o
13e90 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64  perator.<tr>.<td
13ea0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13eb0 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
13ec0 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
13ed0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
13ee0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13ef0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13f00 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
13f10 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13f20 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61  >true.<tr>.<td a
13f30 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f  lign="center">do
13f40 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74  es not matter.<t
13f50 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13f60 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
13f70 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61  enter">yes.<td a
13f80 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
13f90 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13fa0 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c  er">false.<td al
13fb0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75  ign="center">tru
13fc0 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  e.<tr>.<td align
13fd0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
13fe0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13ff0 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
14000 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
14010 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
14020 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64  "center">yes.<td
14030 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
14040 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  true.<td align="
14050 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
14060 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
14070 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
14080 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a  gn="center">yes.
14090 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
140a0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
140b0 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
140c0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
140d0 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ULL.<td align="c
140e0 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e  enter">NULL.<tr>
140f0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
14100 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67  er">yes.<td alig
14110 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20  n="center">does 
14120 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61  not matter.<td a
14130 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
14140 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
14150 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
14160 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
14170 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20  enter">NULL.<td 
14180 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
14190 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  ULL.</table>.</c
141a0 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f  enter>)^..<p>^No
141b0 74 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 61  te that SQLite a
141c0 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e 74  llows the parent
141d0 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20  hesized list of 
141e0 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f 6e  scalar values on
141f0 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20  .the right-hand 
14200 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72  side of an IN or
14210 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
14220 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79 20   to be an empty 
14230 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f 74  list but.most ot
14240 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
14250 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
14260 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32 20  s and the SQL92 
14270 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65  standard require
14280 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f 6e  .the list to con
14290 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f 6e  tain at least on
142a0 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  e element.</p>..
142b0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
142c0 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20 6f   in_op {EXISTS o
142d0 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45 58  perator} {NOT EX
142e0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c 2f  ISTS operator}</
142f0 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58 49  tcl>.<h3>The EXI
14300 53 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33  STS operator</h3
14310 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53 54  >..<p>^The EXIST
14320 53 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61 79  S operator alway
14330 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6f  s evaluates to o
14340 6e 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ne of the intege
14350 72 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64 20  r values 0 .and 
14360 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67  1. ^If executing
14370 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
14380 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64 20  ement specified 
14390 61 73 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  as the right-han
143a0 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74 68  d .operand of th
143b0 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
143c0 72 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6f  r would return o
143d0 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 2c  ne or more rows,
143e0 20 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54 53   then the.EXISTS
143f0 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
14400 74 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65 78  tes to 1. ^If ex
14410 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45  ecuting the SELE
14420 43 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 0a  CT would return.
14430 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c 20  no rows at all, 
14440 74 68 65 6e 20 74 68 65 20 45 58 49 53 54 53 20  then the EXISTS 
14450 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
14460 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54  es to 0. ..<p>^T
14470 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
14480 75 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f 77  umns in each row
14490 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
144a0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
144b0 74 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20 74  t.(if any) and t
144c0 68 65 20 73 70 65 63 69 66 69 63 20 76 61 6c 75  he specific valu
144d0 65 73 20 72 65 74 75 72 6e 65 64 20 68 61 76 65  es returned have
144e0 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68   no effect on th
144f0 65 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68 65  e results.of the
14500 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
14510 2e 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61 72  . ^In particular
14520 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69 6e  , rows containin
14530 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  g NULL values ar
14540 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61 6e  e.not handled an
14550 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66 72  y differently fr
14560 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20  om rows without 
14570 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c 68  NULL values...<h
14580 33 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65 72  3>Scalar Subquer
14590 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20  ies</h3>..<p>^A 
145a0 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
145b0 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70  nt enclosed in p
145c0 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 61  arentheses may a
145d0 70 70 65 61 72 20 61 73 20 61 20 73 63 61 6c 61  ppear as a scala
145e0 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20 5b  r.quantity. ^A [
145f0 53 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73 20  SELECT] used as 
14600 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74  a scalar quantit
14610 79 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61 20  y must return a 
14620 72 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68 20  result set.with 
14630 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
14640 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
14650 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
14660 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
14670 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 69  he.only column i
14680 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 20  n the first row 
14690 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
146a0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
146b0 2e 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54  . ^If the SELECT
146c0 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74 68   .yields more th
146d0 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72 6f  an one result ro
146e0 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74 65  w, all rows afte
146f0 72 20 74 68 65 20 66 69 72 73 74 20 61 72 65 20  r the first are 
14700 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68 65  ignored. ^If.the
14710 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20 6e   SELECT yields n
14720 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65  o rows, then the
14730 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65 78   value of the ex
14740 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c  pression is NULL
14750 2e 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f 66  ..^(The LIMIT of
14760 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65   a scalar subque
14770 72 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e 0a  ry is always 1..
14780 41 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54 20  Any other LIMIT 
14790 76 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20 74  value given in t
147a0 68 65 20 53 51 4c 20 74 65 78 74 20 69 73 20 69  he SQL text is i
147b0 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41  gnored.)^..<p>^A
147c0 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45 4c  ll types of [SEL
147d0 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20  ECT] statement, 
147e0 69 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65 67  including aggreg
147f0 61 74 65 20 61 6e 64 20 63 6f 6d 70 6f 75 6e 64  ate and compound
14800 20 53 45 4c 45 43 54 0a 71 75 65 72 69 65 73 20   SELECT.queries 
14810 28 71 75 65 72 69 65 73 20 77 69 74 68 20 6b 65  (queries with ke
14820 79 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f  ywords like UNIO
14830 4e 20 6f 72 20 45 58 43 45 50 54 29 20 61 72 65  N or EXCEPT) are
14840 20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63 61 6c   allowed as scal
14850 61 72 0a 73 75 62 71 75 65 72 69 65 73 2e 0a 0a  ar.subqueries...
14860 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d 6e  <h3>Table Column
14870 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e   Names</h3>..<p>
14880 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63  ^A column name c
14890 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68 65  an be any of the
148a0 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20 69   names defined i
148b0 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41  n the [CREATE TA
148c0 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f  BLE].statement o
148d0 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  r one of the fol
148e0 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69  lowing special i
148f0 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e  dentifiers: "<b>
14900 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e  ROWID</b>",."<b>
14910 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62  OID</b>", or "<b
14920 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e  >_ROWID_</b>"..^
14930 54 68 65 73 65 20 73 70 65 63 69 61 6c 20 69 64  These special id
14940 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20 64 65  entifiers all de
14950 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75  scribe the.uniqu
14960 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74  e integer key (t
14970 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73 6f  he [rowid]) asso
14980 63 69 61 74 65 64 20 77 69 74 68 20 65 76 65 72  ciated with ever
14990 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20  y .row of every 
149a0 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65 63  table..^The spec
149b0 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20  ial identifiers 
149c0 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74 68  only refer to th
149d0 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68 65  e row key if the
149e0 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a   [CREATE TABLE].
149f0 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e  statement does n
14a00 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65 61 6c  ot define a real
14a10 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68 65   column with the
14a20 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68 65   same name..^The
14a30 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75 73   rowid can be us
14a40 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72 65  ed anywhere a re
14a50 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e  gular.column can
14a60 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c   be used.</p>..<
14a70 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74  p>^A [SELECT] st
14a80 61 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73 20  atement used as 
14a90 65 69 74 68 65 72 20 61 20 73 63 61 6c 61 72 20  either a scalar 
14aa0 73 75 62 71 75 65 72 79 20 6f 72 20 61 73 20 74  subquery or as t
14ab0 68 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f  he .right-hand o
14ac0 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 2c  perand of an IN,
14ad0 20 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53 54   NOT IN or EXIST
14ae0 53 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  S expression may
14af0 20 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72 65   contain .refere
14b00 6e 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  nces to columns 
14b10 69 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75 65  in the outer que
14b20 72 79 2e 20 53 75 63 68 20 61 20 73 75 62 71 75  ry. Such a subqu
14b30 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a  ery is known as.
14b40 61 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  a correlated sub
14b50 71 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65 6c  query. ^A correl
14b60 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69 73  ated subquery is
14b70 20 72 65 65 76 61 6c 75 61 74 65 64 20 65 61 63   reevaluated eac
14b80 68 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75 6c  h time.its resul
14b90 74 20 69 73 20 72 65 71 75 69 72 65 64 2e 20 5e  t is required. ^
14ba0 41 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64 20  An uncorrelated 
14bb0 73 75 62 71 75 65 72 79 20 69 73 20 65 76 61 6c  subquery is eval
14bc0 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a  uated only once.
14bd0 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72  and the result r
14be0 65 75 73 65 64 20 61 73 20 6e 65 63 65 73 73 61  eused as necessa
14bf0 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ry...<tcl>hd_fra
14c00 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20 7b  gment castexpr {
14c10 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 7d  CAST expression}
14c20 20 7b 43 41 53 54 7d 20 7b 63 61 73 74 7d 20 7b   {CAST} {cast} {
14c30 43 41 53 54 20 6f 70 65 72 61 74 6f 72 7d 3c 2f  CAST operator}</
14c40 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54 20 65 78  tcl>.<h3>CAST ex
14c50 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  pressions</h3>..
14c60 3c 70 3e 41 20 43 41 53 54 20 65 78 70 72 65 73  <p>A CAST expres
14c70 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
14c80 20 22 43 41 53 54 28 26 6c 74 3b 65 78 70 72 26   "CAST(&lt;expr&
14c90 67 74 3b 20 54 4f 20 26 6c 74 3b 74 79 70 65 2d  gt; TO &lt;type-
14ca0 6e 61 6d 65 26 67 74 3b 29 22 0a 69 73 20 75 73  name&gt;)".is us
14cb0 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68  ed to convert th
14cc0 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65  e value of &lt;e
14cd0 78 70 72 26 67 74 3b 20 74 6f 20 0a 61 20 64 69  xpr&gt; to .a di
14ce0 66 66 65 72 65 6e 74 20 5b 73 74 6f 72 61 67 65  fferent [storage
14cf0 20 63 6c 61 73 73 5d 20 73 70 65 63 69 66 69 65   class] specifie
14d00 64 20 62 79 20 26 6c 74 3b 74 79 70 65 2d 6e 61  d by &lt;type-na
14d10 6d 65 26 67 74 3b 2e 0a 5e 41 20 43 41 53 54 20  me&gt;..^A CAST 
14d20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 73 69  conversion is si
14d30 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 63 6f 6e  milar to the con
14d40 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61 6b  version that tak
14d50 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61 20  es.place when a 
14d60 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79  [column affinity
14d70 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20  ] is applied to 
14d80 61 20 76 61 6c 75 65 20 65 78 63 65 70 74 20 74  a value except t
14d90 68 61 74 20 77 69 74 68 0a 74 68 65 20 43 41 53  hat with.the CAS
14da0 54 20 6f 70 65 72 61 74 6f 72 20 74 68 65 20 63  T operator the c
14db0 6f 6e 76 65 72 73 69 6f 6e 20 61 6c 77 61 79 73  onversion always
14dc0 20 74 61 6b 65 73 20 70 6c 61 63 65 20 65 76 65   takes place eve
14dd0 6e 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73  n if the convers
14de0 69 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64 20 69 72  ion.lossy and ir
14df0 72 65 76 65 72 73 69 62 6c 65 2c 20 77 68 65 72  reversible, wher
14e00 65 61 73 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  eas column affin
14e10 69 74 79 20 6f 6e 6c 79 20 63 68 61 6e 67 65 73  ity only changes
14e20 20 74 68 65 20 64 61 74 61 20 74 79 70 65 0a 6f   the data type.o
14e30 66 20 61 20 76 61 6c 75 65 20 69 66 20 74 68 65  f a value if the
14e40 20 63 68 61 6e 67 65 20 69 73 20 6c 6f 73 73 6c   change is lossl
14e50 65 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62  ess and reversib
14e60 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  le...<p>^If the 
14e70 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78 70  value of &lt;exp
14e80 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c 20 74  r&gt; is NULL, t
14e90 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
14ea0 66 20 74 68 65 20 43 41 53 54 0a 65 78 70 72 65  f the CAST.expre
14eb0 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e 55  ssion is also NU
14ec0 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  LL. ^Otherwise, 
14ed0 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61 73  the storage clas
14ee0 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 0a  s of the result.
14ef0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
14f00 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 5b 72   applying the [r
14f10 75 6c 65 73 20 66 6f 72 20 64 65 74 65 72 6d 69  ules for determi
14f20 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66 69  ning column affi
14f30 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20 26 6c 74  nity] to.the &lt
14f40 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 2e 0a  ;type-name&gt;..
14f50 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
14f60 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20 41 66  >.<tr>.  <th> Af
14f70 66 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b 74 79  finity of &lt;ty
14f80 70 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c 74  pe-name&gt;.  <t
14f90 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72  h> Conversion Pr
14fa0 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20  ocessing.<tr>.  
14fb0 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64  <td> NONE .  <td
14fc0 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c  > ^Casting a val
14fd0 75 65 20 74 6f 20 61 20 26 6c 74 3b 74 79 70 65  ue to a &lt;type
14fe0 2d 6e 61 6d 65 26 67 74 3b 20 77 69 74 68 20 6e  -name&gt; with n
14ff0 6f 20 61 66 66 69 6e 69 74 79 20 63 61 75 73 65  o affinity cause
15000 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a 20  s the value to. 
15010 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
15020 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61 73  to a BLOB.  ^Cas
15030 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20 63  ting to a BLOB c
15040 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73 74  onsists of first
15050 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20 76   casting.  the v
15060 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e 20  alue to TEXT in 
15070 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f  the [encoding] o
15080 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
15090 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 0a  onnection, then.
150a0 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74    interpreting t
150b0 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79 74  he resulting byt
150c0 65 20 73 65 71 75 65 6e 63 65 20 61 73 20 61 20  e sequence as a 
150d0 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66 20  BLOB instead of 
150e0 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20  as TEXT...<tr>. 
150f0 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74 64   <td> TEXT.  <td
15100 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c 4f  > ^To cast a BLO
15110 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 2c  B value to TEXT,
15120 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66   the sequence of
15130 20 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b 65   bytes that make
15140 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20 69   up the.  BLOB i
15150 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  s interpreted as
15160 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75 73   text encoded us
15170 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
15180 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e   encoding..  <p>
15190 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e 20  .   ^Casting an 
151a0 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20  INTEGER or REAL 
151b0 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54 20  value into TEXT 
151c0 72 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c 75  renders the valu
151d0 65 20 61 73 20 69 66 20 76 69 61 20 0a 20 20 20  e as if via .   
151e0 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e   [sqlite3_snprin
151f0 74 66 28 29 5d 20 65 78 63 65 70 74 20 74 68 61  tf()] except tha
15200 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  t the resulting 
15210 54 45 58 54 20 75 73 65 73 20 74 68 65 20 5b 65  TEXT uses the [e
15220 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20 20  ncoding] of.    
15230 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
15240 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20  nection...<tr>. 
15250 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74 64   <td> REAL.  <td
15260 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  > ^When casting 
15270 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20  a BLOB value to 
15280 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c 75  a REAL, the valu
15290 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65  e is first conve
152a0 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20  rted to.        
152b0 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e  TEXT..       <p>
152c0 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20  ^When casting a 
152d0 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52 45  TEXT value to RE
152e0 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20  AL, the longest 
152f0 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20  possible prefix 
15300 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76  of.        the v
15310 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
15320 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
15330 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69 73  a real number is
15340 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a   extracted from.
15350 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54          the TEXT
15360 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72   value and the r
15370 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64  emainder ignored
15380 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73  . ^Any leading s
15390 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20  paces in the.   
153a0 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20       TEXT value 
153b0 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65 6e  are ignored when
153c0 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f 6d   converging from
153d0 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20 5e   TEXT to REAL. ^
153e0 28 49 66 20 74 68 65 72 65 20 69 73 0a 20 20 20  (If there is.   
153f0 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20 74       no prefix t
15400 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72  hat can be inter
15410 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c  preted as a real
15420 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73   number, the res
15430 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20 20  ult of the.     
15440 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73     conversion is
15450 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20   0.0.)^..<tr>.  
15460 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20 3c  <td> INTEGER.  <
15470 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e  td> ^When castin
15480 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74  g a BLOB value t
15490 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 76  o INTEGER, the v
154a0 61 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f  alue is first co
154b0 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20  nverted to.     
154c0 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20     TEXT..       
154d0 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  <p>^When casting
154e0 20 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f   a TEXT value to
154f0 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c 6f   INTEGER, the lo
15500 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70  ngest possible p
15510 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20  refix of.       
15520 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
15530 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
15540 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
15550 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61   number is extra
15560 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20  cted from.      
15570 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65    the TEXT value
15580 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64   and the remaind
15590 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79  er ignored. ^Any
155a0 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20   leading spaces 
155b0 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54  in the.        T
155c0 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20 63  EXT value when c
155d0 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20 54  onverting from T
155e0 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20 61  EXT to INTEGER a
155f0 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 20  re ignored. ^If 
15600 74 68 65 72 65 0a 20 20 20 20 20 20 20 20 69 73  there.        is
15610 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20   no prefix that 
15620 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
15630 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
15640 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73   number, the res
15650 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20 74  ult.        of t
15660 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  he conversion is
15670 20 30 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e 41   0...      <p>^A
15680 20 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c 20   cast of a REAL 
15690 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e  value into an IN
156a0 54 45 47 45 52 20 72 65 73 75 6c 74 73 20 69 6e  TEGER results in
156b0 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20   the integer.   
156c0 20 20 20 62 65 74 77 65 65 6e 20 74 68 65 20 52     between the R
156d0 45 41 4c 20 76 61 6c 75 65 20 61 6e 64 20 7a 65  EAL value and ze
156e0 72 6f 20 74 68 61 74 20 69 73 20 63 6c 6f 73 65  ro that is close
156f0 73 74 20 74 6f 20 74 68 65 20 52 45 41 4c 20 76  st to the REAL v
15700 61 6c 75 65 2e 0a 20 20 20 20 20 20 5e 49 66 20  alue..      ^If 
15710 61 20 52 45 41 4c 20 69 73 20 67 72 65 61 74 65  a REAL is greate
15720 72 20 74 68 61 6e 20 74 68 65 20 67 72 65 61 74  r than the great
15730 65 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69 67  est possible sig
15740 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67 65  ned.      intege
15750 72 20 28 2b 39 32 32 33 33 37 32 30 33 36 38 35  r (+922337203685
15760 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68  4775807) then th
15770 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
15780 67 72 65 61 74 65 73 74 20 70 6f 73 73 69 62 6c  greatest possibl
15790 65 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20 69  e.      signed i
157a0 6e 74 65 67 65 72 20 61 6e 64 20 69 66 20 74 68  nteger and if th
157b0 65 20 52 45 41 4c 20 69 73 20 6c 65 73 73 20 74  e REAL is less t
157c0 68 61 6e 20 74 68 65 20 6c 65 61 73 74 20 70 6f  han the least po
157d0 73 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20 20  ssible signed.  
157e0 20 20 20 20 69 6e 74 65 67 65 72 20 28 2d 39 32      integer (-92
157f0 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
15800 38 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  8) then the resu
15810 6c 74 20 69 73 20 74 68 65 20 6c 65 61 73 74 20  lt is the least 
15820 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20 73  possible.      s
15830 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 0a  igned integer...
15840 20 20 20 20 20 20 3c 70 3e 50 72 69 6f 72 20 74        <p>Prior t
15850 6f 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  o SQLite version
15860 20 33 2e 38 2e 32 2c 20 63 61 73 74 69 6e 67 20   3.8.2, casting 
15870 61 20 52 45 41 4c 20 76 61 6c 75 65 20 67 72 65  a REAL value gre
15880 61 74 65 72 20 74 68 61 6e 0a 20 20 20 20 20 20  ater than.      
15890 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  +922337203685477
158a0 35 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e 20 69  5807.0 into an i
158b0 6e 74 65 67 65 72 20 72 65 73 75 6c 74 65 64 20  nteger resulted 
158c0 69 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65 67 61  in the most nega
158d0 74 69 76 65 0a 20 20 20 20 20 20 69 6e 74 65 67  tive.      integ
158e0 65 72 2c 20 2d 39 32 32 33 33 37 32 30 33 36 38  er, -92233720368
158f0 35 34 37 37 35 38 30 38 2e 20 20 54 68 69 73 20  54775808.  This 
15900 62 65 68 61 76 69 6f 72 20 77 61 73 20 6d 65 61  behavior was mea
15910 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65 20 74 68  nt to emulate th
15920 65 0a 20 20 20 20 20 20 62 65 68 61 76 69 6f 72  e.      behavior
15930 20 6f 66 20 78 38 36 2f 78 36 34 20 68 61 72 64   of x86/x64 hard
15940 77 61 72 65 20 77 68 65 6e 20 64 6f 69 6e 67 20  ware when doing 
15950 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 63  the equivalent c
15960 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  ast...<tr>.  <td
15970 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e  > NUMERIC.  <td>
15980 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58 54   ^Casting a TEXT
15990 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20 69   or BLOB value i
159a0 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72 73  nto NUMERIC firs
159b0 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64 0a  t does a forced.
159c0 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e     conversion in
159d0 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65 6e  to REAL but then
159e0 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72 74   further convert
159f0 73 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  s the result int
15a00 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20 20  o INTEGER if.   
15a10 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20  and only if the 
15a20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20  conversion from 
15a30 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52 20  REAL to INTEGER 
15a40 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20  is lossless and 
15a50 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20 54  reversible..   T
15a60 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
15a70 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69 74  context in SQLit
15a80 65 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d 45  e where the NUME
15a90 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52 20  RIC and INTEGER 
15aa0 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20 20  [affinities].   
15ab0 62 65 68 61 76 65 20 64 69 66 66 65 72 65 6e 74  behave different
15ac0 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73 74  ly..   <p> ^Cast
15ad0 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49 4e  ing a REAL or IN
15ae0 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20 4e  TEGER value to N
15af0 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d 6f  UMERIC is a no-o
15b00 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65 61  p, even if a rea
15b10 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c 64  l.   value could
15b20 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be losslessly c
15b30 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
15b40 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a  nteger...</tr>..
15b50 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f  </table>..<p>^No
15b60 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73 75  te that the resu
15b70 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20  lt from casting 
15b80 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c  any non-BLOB val
15b90 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20  ue into a .BLOB 
15ba0 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 66  and the result f
15bb0 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20  rom casting any 
15bc0 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20  BLOB value into 
15bd0 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65  a non-BLOB value
15be0 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e  .may be differen
15bf0 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  t depending on w
15c00 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61 62  hether the datab
15c10 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 69  ase [encoding] i
15c20 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36 62  s UTF-8,.UTF-16b
15c30 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e 0a  e, or UTF-16le..
15c40 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
15c50 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20 7b  nt booleanexpr {
15c60 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
15c70 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42 6f  on}</tcl>.<h3>Bo
15c80 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f 6e  olean Expression
15c90 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 53  s</h3>..<p>The S
15ca0 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74  QL language feat
15cb0 75 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f 6e  ures several con
15cc0 74 65 78 74 73 20 77 68 65 72 65 20 61 6e 20 65  texts where an e
15cd0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65 76  xpression is .ev
15ce0 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20  aluated and the 
15cf0 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65 64  result converted
15d00 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28 74   to a boolean (t
15d10 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76 61  rue or false) va
15d20 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74 65  lue. These.conte
15d30 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e  xts are:..  <ul>
15d40 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48  .    <li> the WH
15d50 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ERE clause of a 
15d60 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20 6f  SELECT, UPDATE o
15d70 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  r DELETE stateme
15d80 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  nt,.    <li> the
15d90 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
15da0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69 6e  use of a join in
15db0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
15dc0 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68  ent,.    <li> th
15dd0 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
15de0 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
15df0 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20  ement,.    <li> 
15e00 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  the WHEN clause 
15e10 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67 65  of an SQL trigge
15e20 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e 20  r, and.    <li> 
15e30 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  the WHEN clause 
15e40 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73 6f  or clauses of so
15e50 6d 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  me CASE expressi
15e60 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c 70  ons..  </ul>..<p
15e70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74 68  >^(To convert th
15e80 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e 20  e results of an 
15e90 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20 74  SQL expression t
15ea0 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  o a boolean valu
15eb0 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74 20  e, SQLite.first 
15ec0 63 61 73 74 73 20 74 68 65 20 72 65 73 75 6c 74  casts the result
15ed0 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61   to a NUMERIC va
15ee0 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20  lue in the same 
15ef0 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54 20  way as a .[CAST 
15f00 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20 4e  expression]. A N
15f10 55 4c 4c 20 6f 72 20 7a 65 72 6f 20 76 61 6c 75  ULL or zero valu
15f20 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65  e (integer value
15f30 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65   0 or real value
15f40 20 30 2e 30 29 20 69 73 0a 63 6f 6e 73 69 64 65   0.0) is.conside
15f50 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65 2e  red to be false.
15f60 20 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65   All other value
15f70 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
15f80 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46   true.)^..<p>^(F
15f90 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
15fa0 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e 30  values NULL, 0.0
15fb0 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20 61  , 0, 'english' a
15fc0 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20 63  nd '0' are all c
15fd0 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65 20  onsidered.to be 
15fe0 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75 65  false.)^ ^(Value
15ff0 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20 2d  s 1, 1.0, 0.1, -
16000 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69 73  0.1 and '1englis
16010 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  h' are considere
16020 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29 5e  d to .be true.)^
16030 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73 3c  ..<h3>Functions<
16040 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b 63  /h3>.<p>^Both [c
16050 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20  orefunc|simple] 
16060 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67  and [aggfunc|agg
16070 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f 6e  regate] function
16080 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e  s are supported.
16090 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74 69  .(For presentati
160a0 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69 6d  on purposes, sim
160b0 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ple functions ar
160c0 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69 76  e further subdiv
160d0 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65 66  ided into.[coref
160e0 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63 74  unc | core funct
160f0 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65 66  ions] and [datef
16100 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65 20  unc | date-time 
16110 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41 20  functions].).^A 
16120 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
16130 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 61  can be used in a
16140 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  ny expression.  
16150 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e  ^Simple function
16160 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75 6c  s return.a resul
16170 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 61  t immediately ba
16180 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e 70  sed on their inp
16190 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74 65  uts.  ^Aggregate
161a0 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20 6f   functions.may o
161b0 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 61  nly be used in a
161c0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
161d0 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20 66  t.  ^Aggregate f
161e0 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74 65  unctions compute
161f0 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61 63  .their result ac
16200 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f 66  ross all rows of
16210 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
16220 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
16230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16270 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
16280 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f  on {Core Functio
16290 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63  ns} corefunc {*c
162a0 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66 75  orefunc}.proc fu
162b0 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65  ncdef {syntax ke
162c0 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20  ywords desc} {. 
162d0 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d 0a   hd_puts {<tr>}.
162e0 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c    regsub -all {\
162f0 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  s+} [string trim
16300 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 20 2f   $syntax] {<br /
16310 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73  >} syntax.  regs
16320 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29  ub -all {\(([^*)
16330 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b  ]+)\)} $syntax {
16340 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e  (<i>\1</i>)} syn
16350 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  tax.  regsub -al
16360 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c  l {,} $syntax {<
16370 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a  /i>,<i>} syntax.
16380 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c    regsub -all {<
16390 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73  i>\.\.\.</i>} $s
163a0 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74  yntax {...} synt
163b0 61 78 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 74  ax.  hd_puts "<t
163c0 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22  d valign=\"top\"
163d0 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68 74 5c 22   align=\"right\"
163e0 20 77 69 64 74 68 3d 5c 22 31 32 30 5c 22 3e 22   width=\"120\">"
163f0 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20  .  if {[llength 
16400 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b  $keywords]==0} {
16410 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d  .    regexp {[a-
16420 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61  z_]+} $syntax na
16430 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65  me.    hd_fragme
16440 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20  nt $name *$name 
16450 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66  "${name}() SQL f
16460 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73  unction".  } els
16470 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67  e {.    set frag
16480 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65  name [lindex $ke
16490 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65  ywords 0].    re
164a0 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a  gsub -all {[^a-z
164b0 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20  ]} $fragname {} 
164c0 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f  fragname.    hd_
164d0 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61  fragment $fragna
164e0 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b  me.    eval hd_k
164f0 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20  eywords [string 
16500 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65  map {\n { }} $ke
16510 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64  ywords].  }.  hd
16520 5f 70 75 74 73 20 22 24 73 79 6e 74 61 78 3c 2f  _puts "$syntax</
16530 74 64 3e 22 0a 20 20 68 64 5f 70 75 74 73 20 7b  td>".  hd_puts {
16540 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
16550 3e 7d 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20  >}.  hd_resolve 
16560 24 64 65 73 63 0a 20 20 68 64 5f 70 75 74 73 20  $desc.  hd_puts 
16570 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c  {</td></tr>}.}.<
16580 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f  /tcl>..<p>The co
16590 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f  re functions sho
165a0 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61  wn below are ava
165b0 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c  ilable by defaul
165c0 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20  t. .[datefunc | 
165d0 44 61 74 65 20 26 61 6d 70 3b 20 54 69 6d 65 20  Date &amp; Time 
165e0 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 0a 5b  functions] and.[
165f0 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72 65 67  aggfunc | aggreg
16600 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61  ate functions] a
16610 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65  re documented se
16620 70 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70  parately.  An.ap
16630 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 64 65  plication may de
16640 66 69 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a  fine additional.
16650 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65  functions writte
16660 6e 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64  n in C and added
16670 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
16680 20 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68   engine using.th
16690 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
166a0 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50  e_function()] AP
166b0 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62  I.</p>..<table b
166c0 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64  order=0 cellpadd
166d0 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75  ing=10>.<tcl>.fu
166e0 6e 63 64 65 66 20 7b 61 62 73 28 58 29 7d 20 7b  ncdef {abs(X)} {
166f0 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62 73 28 58  } {.  ^The abs(X
16700 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
16710 6e 73 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20  ns the absolute 
16720 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6e 75 6d  value of the num
16730 65 72 69 63 0a 20 20 61 72 67 75 6d 65 6e 74 20  eric.  argument 
16740 58 2e 20 20 5e 41 62 73 28 58 29 20 72 65 74 75  X.  ^Abs(X) retu
16750 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58 20 69 73  rns NULL if X is
16760 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41 62 73 28   NULL. .  ^(Abs(
16770 58 29 20 72 65 74 75 72 6e 20 30 2e 30 20 69 66  X) return 0.0 if
16780 20 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f   X is a string o
16790 72 20 62 6c 6f 62 0a 20 20 74 68 61 74 20 63 61  r blob.  that ca
167a0 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
167b0 64 20 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 76  d to a numeric v
167c0 61 6c 75 65 2e 29 5e 20 20 5e 49 66 20 58 20 69  alue.)^  ^If X i
167d0 73 20 74 68 65 20 0a 20 20 69 6e 74 65 67 65 72  s the .  integer
167e0 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
167f0 37 35 38 30 38 20 74 68 65 6e 20 61 62 73 28 58  75808 then abs(X
16800 29 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65  ) throws an inte
16810 67 65 72 20 6f 76 65 72 66 6c 6f 77 0a 20 20 65  ger overflow.  e
16820 72 72 6f 72 20 73 69 6e 63 65 20 74 68 65 72 65  rror since there
16830 20 69 73 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e   is no equivalen
16840 74 20 70 6f 73 69 74 69 76 65 20 36 34 2d 62 69  t positive 64-bi
16850 74 20 74 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74  t two complement
16860 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64   value..}..funcd
16870 65 66 20 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b  ef {changes()} {
16880 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68 61 6e 67  } {.  ^The chang
16890 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  es() function re
168a0 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
168b0 20 6f 66 20 64 61 74 61 62 61 73 65 20 72 6f 77   of database row
168c0 73 20 74 68 61 74 20 77 65 72 65 20 63 68 61 6e  s that were chan
168d0 67 65 64 0a 20 20 6f 72 20 69 6e 73 65 72 74 65  ged.  or inserte
168e0 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20  d or deleted by 
168f0 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c  the most recentl
16900 79 20 63 6f 6d 70 6c 65 74 65 64 20 49 4e 53 45  y completed INSE
16910 52 54 2c 20 44 45 4c 45 54 45 2c 0a 20 20 6f 72  RT, DELETE,.  or
16920 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
16930 74 2c 20 65 78 63 6c 75 73 69 76 65 20 6f 66 20  t, exclusive of 
16940 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 6c 6f  statements in lo
16950 77 65 72 2d 6c 65 76 65 6c 20 74 72 69 67 67 65  wer-level trigge
16960 72 73 2e 0a 20 20 5e 54 68 65 20 63 68 61 6e 67  rs..  ^The chang
16970 65 73 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  es() SQL functio
16980 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  n is a wrapper a
16990 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
169a0 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20  e3_changes()].  
169b0 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61  C/C++ function a
169c0 6e 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73  nd hence follows
169d0 20 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73 20   the same rules 
169e0 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63 68 61  for counting cha
169f0 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  nges..}..funcdef
16a00 20 7b 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e   {char(X1,X2,...
16a10 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54  ,XN)} {} {.  ^(T
16a20 68 65 20 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e  he char(X1,X2,..
16a30 2e 2c 58 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72  .,XN) function r
16a40 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
16a50 63 6f 6d 70 6f 73 65 64 20 6f 66 20 63 68 61 72  composed of char
16a60 61 63 74 65 72 73 20 68 61 76 69 6e 67 20 74 68  acters having th
16a70 65 0a 20 20 20 75 6e 69 63 6f 64 65 20 63 6f 64  e.   unicode cod
16a80 65 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 20 6f  e point values o
16a90 66 20 69 6e 74 65 67 65 72 73 20 58 31 20 74 68  f integers X1 th
16aa0 72 6f 75 67 68 20 58 4e 2c 20 72 65 73 70 65 63  rough XN, respec
16ab0 74 69 76 65 6c 79 2e 29 5e 0a 7d 0a 0a 66 75 6e  tively.)^.}..fun
16ac0 63 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58  cdef {coalesce(X
16ad0 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20  ,Y,...)} {} {.  
16ae0 5e 54 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20  ^The coalesce() 
16af0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
16b00 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66   a copy of its f
16b10 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  irst non-NULL ar
16b20 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c  gument, or.  NUL
16b30 4c 20 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e  L if all argumen
16b40 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43  ts are NULL.  ^C
16b50 6f 61 6c 65 73 63 65 28 29 20 6d 75 73 74 20 68  oalesce() must h
16b60 61 76 65 20 61 74 20 6c 65 61 73 74 20 0a 20 20  ave at least .  
16b70 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a  2 arguments..}..
16b80 66 75 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c  funcdef {glob(X,
16b90 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
16ba0 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69  glob(X,Y) functi
16bb0 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  on is equivalent
16bc0 20 74 6f 20 74 68 65 0a 20 20 65 78 70 72 65 73   to the.  expres
16bd0 73 69 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20  sion "<b>Y GLOB 
16be0 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74  X</b>"..  Note t
16bf0 68 61 74 20 74 68 65 20 58 20 61 6e 64 20 59 20  hat the X and Y 
16c00 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 72 65  arguments are re
16c10 76 65 72 73 65 64 20 69 6e 20 74 68 65 20 67 6c  versed in the gl
16c20 6f 62 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  ob() function.  
16c30 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20  relative to the 
16c40 69 6e 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65  infix [GLOB] ope
16c50 72 61 74 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65  rator..  ^If the
16c60 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
16c70 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74  _function()] int
16c80 65 72 66 61 63 65 20 69 73 20 75 73 65 64 20 74  erface is used t
16c90 6f 0a 20 20 6f 76 65 72 72 69 64 65 20 74 68 65  o.  override the
16ca0 20 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74   glob(X,Y) funct
16cb0 69 6f 6e 20 77 69 74 68 20 61 6e 20 61 6c 74 65  ion with an alte
16cc0 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e  rnative implemen
16cd0 74 61 74 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68  tation then.  th
16ce0 65 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f  e [GLOB] operato
16cf0 72 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68  r will invoke th
16d00 65 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d  e alternative im
16d10 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a  plementation..}.
16d20 0a 66 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c  .funcdef {ifnull
16d30 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
16d40 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63  he ifnull() func
16d50 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63  tion returns a c
16d60 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72 73 74  opy of its first
16d70 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65   non-NULL argume
16d80 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66  nt, or.  NULL if
16d90 20 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20   both arguments 
16da0 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75  are NULL.  ^Ifnu
16db0 6c 6c 28 29 20 6d 75 73 74 20 68 61 76 65 20 65  ll() must have e
16dc0 78 61 63 74 6c 79 20 32 20 61 72 67 75 6d 65 6e  xactly 2 argumen
16dd0 74 73 2e 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c  ts..  ^The ifnul
16de0 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  l() function is 
16df0 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63  equivalent to [c
16e00 6f 61 6c 65 73 63 65 28 29 5d 20 77 69 74 68 20  oalesce()] with 
16e10 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d  two arguments..}
16e20 0a 0a 66 75 6e 63 64 65 66 20 7b 69 6e 73 74 72  ..funcdef {instr
16e30 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
16e40 68 65 20 69 6e 73 74 72 28 58 2c 59 29 20 66 75  he instr(X,Y) fu
16e50 6e 63 74 69 6f 6e 20 66 69 6e 64 73 20 74 68 65  nction finds the
16e60 20 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63   first occurrenc
16e70 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20 77 69  e of string Y wi
16e80 74 68 69 6e 20 0a 20 20 73 74 72 69 6e 67 20 58  thin .  string X
16e90 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65   and returns the
16ea0 20 6e 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72   number of prior
16eb0 20 63 68 61 72 61 63 74 65 72 73 20 70 6c 75 73   characters plus
16ec0 20 31 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20   1, or 0 if.  Y 
16ed0 69 73 20 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64  is nowhere found
16ee0 20 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72   within X..  ^Or
16ef0 2c 20 69 66 20 58 20 61 6e 64 20 59 20 61 72 65  , if X and Y are
16f00 20 62 6f 74 68 20 42 4c 4f 42 73 2c 20 74 68 65   both BLOBs, the
16f10 6e 20 69 6e 73 74 72 28 58 2c 59 29 20 72 65 74  n instr(X,Y) ret
16f20 75 72 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20  urns one.  more 
16f30 74 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  than the number 
16f40 62 79 74 65 73 20 70 72 69 6f 72 20 74 6f 20 74  bytes prior to t
16f50 68 65 20 66 69 72 73 74 20 6f 63 63 75 72 72 65  he first occurre
16f60 6e 63 65 20 6f 66 20 59 2c 20 6f 72 20 30 20 69  nce of Y, or 0 i
16f70 66 0a 20 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f  f.  Y does not o
16f80 63 63 75 72 20 61 6e 79 77 68 65 72 65 20 77 69  ccur anywhere wi
16f90 74 68 69 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f  thin X..  ^If bo
16fa0 74 68 20 61 72 67 75 6d 65 6e 74 73 20 58 20 61  th arguments X a
16fb0 6e 64 20 59 20 74 6f 20 69 6e 73 74 72 28 58 2c  nd Y to instr(X,
16fc0 59 29 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20  Y) are non-NULL 
16fd0 61 6e 64 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42  and are not BLOB
16fe0 73 0a 20 20 74 68 65 6e 20 62 6f 74 68 20 61 72  s.  then both ar
16ff0 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
17000 20 73 74 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20   strings..  ^If 
17010 65 69 74 68 65 72 20 58 20 6f 72 20 59 20 61 72  either X or Y ar
17020 65 20 4e 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28  e NULL in instr(
17030 58 2c 59 29 20 74 68 65 6e 20 74 68 65 20 72 65  X,Y) then the re
17040 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a  sult is NULL..}.
17050 0a 66 75 6e 63 64 65 66 20 7b 68 65 78 28 58 29  .funcdef {hex(X)
17060 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65  } {} {.  ^The he
17070 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74  x() function int
17080 65 72 70 72 65 74 73 20 69 74 73 20 61 72 67 75  erprets its argu
17090 6d 65 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61  ment as a BLOB a
170a0 6e 64 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73  nd returns.  a s
170b0 74 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74  tring which is t
170c0 68 65 20 75 70 70 65 72 2d 63 61 73 65 20 68 65  he upper-case he
170d0 78 61 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72  xadecimal render
170e0 69 6e 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ing of the conte
170f0 6e 74 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f  nt of.  that blo
17100 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  b..}..funcdef {l
17110 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
17120 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  ()} {} {.  ^The 
17130 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
17140 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  d() function ret
17150 75 72 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d  urns the [ROWID]
17160 0a 20 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72  .  of the last r
17170 6f 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74  ow insert from t
17180 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
17190 65 63 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76  ection which inv
171a0 6f 6b 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74  oked the.  funct
171b0 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74  ion..  ^The last
171c0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
171d0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
171e0 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
171f0 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
17200 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
17210 64 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72  d()] C/C++ inter
17220 66 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d  face function..}
17230 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74  ..funcdef {lengt
17240 68 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f  h(X)} {} {.  ^Fo
17250 72 20 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65  r a string value
17260 20 58 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58   X, the length(X
17270 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
17280 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
17290 20 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 28   .  characters (
172a0 6e 6f 74 20 62 79 74 65 73 29 20 69 6e 20 58 20  not bytes) in X 
172b0 70 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72  prior to the fir
172c0 73 74 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72  st NUL character
172d0 2e 0a 20 20 53 69 6e 63 65 20 53 51 4c 69 74 65  ..  Since SQLite
172e0 20 73 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20   strings do not 
172f0 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e  normally contain
17300 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 2c   NUL characters,
17310 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 0a 20   the length(X). 
17320 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75   function will u
17330 73 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68  sually return th
17340 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
17350 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
17360 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20  the string X..  
17370 5e 46 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c 75  ^For a blob valu
17380 65 20 58 2c 20 6c 65 6e 67 74 68 28 58 29 20 72  e X, length(X) r
17390 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
173a0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
173b0 65 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20  e blob..  ^If X 
173c0 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e  is NULL then len
173d0 67 74 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a  gth(X) is NULL..
173e0 20 20 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72    ^If X is numer
173f0 69 63 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58  ic then length(X
17400 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65  ) returns the le
17410 6e 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67  ngth of a string
17420 0a 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  .  representatio
17430 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64  n of X..}..funcd
17440 65 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69  ef {like(X,Y) li
17450 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a  ke(X,Y,Z)} {} {.
17460 20 20 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75    ^The like() fu
17470 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  nction is used t
17480 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  o implement the.
17490 20 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26    "<b>Y LIKE X &
174a0 23 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33  #91;ESCAPE Z&#93
174b0 3b 3c 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f  ;</b>" expressio
174c0 6e 2e 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70  n. .  ^If the op
174d0 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c  tional ESCAPE cl
174e0 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c  ause is present,
174f0 20 74 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65   then the.  like
17500 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  () function is i
17510 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65  nvoked with thre
17520 65 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f  e arguments.  ^O
17530 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a  therwise, it is.
17540 20 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74    invoked with t
17550 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c  wo arguments onl
17560 79 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  y. Note that the
17570 20 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74   X and Y paramet
17580 65 72 73 20 61 72 65 0a 20 20 72 65 76 65 72 73  ers are.  revers
17590 65 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29  ed in the like()
175a0 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69   function relati
175b0 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20  ve to the infix 
175c0 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e  [LIKE] operator.
175d0 0a 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33  .  ^The [sqlite3
175e0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
175f0 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61  ()] interface ca
17600 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65  n be used to ove
17610 72 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65  rride the.  like
17620 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  () function and 
17630 74 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74  thereby change t
17640 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20  he operation of 
17650 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65  the.  [LIKE] ope
17660 72 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65  rator.  When ove
17670 72 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65  rriding the like
17680 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20  () function, it 
17690 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74  may be important
176a0 0a 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62  .  to override b
176b0 6f 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20  oth the two and 
176c0 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76  three argument v
176d0 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c  ersions of the l
176e0 69 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f  ike() .  functio
176f0 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69  n. Otherwise, di
17700 66 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79  fferent code may
17710 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d   be called to im
17720 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c  plement the.  [L
17730 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65  IKE] operator de
17740 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
17750 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43  er or not an ESC
17760 41 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a  APE clause was .
17770 20 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a    specified..}..
17780 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 69  .funcdef {likeli
17790 68 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  hood(X,Y)} {} {.
177a0 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f    ^The likelihoo
177b0 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  d(X,Y) function 
177c0 72 65 74 75 72 6e 73 20 61 72 67 75 6d 65 6e 74  returns argument
177d0 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20   X unchanged..  
177e0 5e 28 54 68 65 20 76 61 6c 75 65 20 59 20 69 6e  ^(The value Y in
177f0 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29   likelihood(X,Y)
17800 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74   must be a float
17810 69 6e 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74 61  ing point consta
17820 6e 74 0a 20 20 62 65 74 77 65 65 6e 20 30 2e 30  nt.  between 0.0
17830 20 61 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75 73   and 1.0, inclus
17840 69 76 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c 69  ive.)^.  ^The li
17850 6b 65 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e 63  kelihood(X) func
17860 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20  tion is a no-op 
17870 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65  that the code ge
17880 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69  nerator.  optimi
17890 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68 61 74  zes away so that
178a0 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20   it consumes no 
178b0 43 50 55 20 63 79 63 6c 65 73 20 64 75 72 69 6e  CPU cycles durin
178c0 67 20 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74 68  g run-time.  (th
178d0 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61  at is, during ca
178e0 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f  lls to [sqlite3_
178f0 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65  step()])..  ^The
17900 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20   purpose of the 
17910 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20  likelihood(X,Y) 
17920 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70  function is to p
17930 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20  rovide a hint.  
17940 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  to the query pla
17950 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72  nner that the ar
17960 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f  gument X is a bo
17970 6f 6c 65 61 6e 20 74 68 61 74 20 69 73 0a 20 20  olean that is.  
17980 74 72 75 65 20 77 69 74 68 20 61 20 70 72 6f 62  true with a prob
17990 61 62 69 6c 69 74 79 20 6f 66 20 61 70 70 72 6f  ability of appro
179a0 78 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e 28  ximately Y..  ^(
179b0 54 68 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29  The [unlikely(X)
179c0 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68  ] function is sh
179d0 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b  ort-hand for lik
179e0 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32 35  elihood(X,0.0625
179f0 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ).)^.}..funcdef 
17a00 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  {load_extension(
17a10 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  X) load_extensio
17a20 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  n(X,Y)} {} {.  ^
17a30 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  The load_extensi
17a40 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  on(X,Y) function
17a50 20 6c 6f 61 64 73 20 5b 53 51 4c 69 74 65 20 65   loads [SQLite e
17a60 78 74 65 6e 73 69 6f 6e 73 5d 20 6f 75 74 20 6f  xtensions] out o
17a70 66 20 74 68 65 20 73 68 61 72 65 64 0a 20 20 6c  f the shared.  l
17a80 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65  ibrary file name
17a90 64 20 58 20 75 73 69 6e 67 20 74 68 65 20 65 6e  d X using the en
17aa0 74 72 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e 54  try point Y.  ^T
17ab0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f 61  he result of loa
17ac0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20 20  d_extension().  
17ad0 69 73 20 61 6c 77 61 79 73 20 61 20 4e 55 4c 4c  is always a NULL
17ae0 2e 20 20 5e 49 66 20 59 20 69 73 20 6f 6d 69 74  .  ^If Y is omit
17af0 74 65 64 20 74 68 65 6e 20 74 68 65 20 64 65 66  ted then the def
17b00 61 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e 74  ault entry point
17b10 20 6e 61 6d 65 20 69 73 20 75 73 65 64 2e 0a 20   name is used.. 
17b20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e   ^The load_exten
17b30 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  sion() function 
17b40 72 61 69 73 65 73 20 61 6e 20 65 78 63 65 70 74  raises an except
17b50 69 6f 6e 20 69 66 20 74 68 65 20 65 78 74 65 6e  ion if the exten
17b60 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f 0a 20 20  sion fails to.  
17b70 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c 69  load or initiali
17b80 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a 20  ze correctly... 
17b90 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65 78   <p>^The load_ex
17ba0 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69  tension() functi
17bb0 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20  on will fail if 
17bc0 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 74  the extension at
17bd0 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f 64  tempts to .  mod
17be0 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61 6e  ify or delete an
17bf0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72   SQL function or
17c00 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
17c10 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78 74  nce.  ^The.  ext
17c20 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e  ension can add n
17c30 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  ew functions or 
17c40 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
17c50 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a  ces, but cannot.
17c60 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65    modify or dele
17c70 74 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63  te existing func
17c80 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69  tions or collati
17c90 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62 65 63  ng sequences bec
17ca0 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75 6e  ause.  those fun
17cb0 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f  ctions and/or co
17cc0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
17cd0 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64 20  s might be used 
17ce0 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20 74  elsewhere.  in t
17cf0 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e  he currently run
17d00 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d 65  ning SQL stateme
17d10 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20  nt.  To load an 
17d20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20  extension that. 
17d30 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c 65   changes or dele
17d40 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  tes functions or
17d50 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
17d60 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20 20  nces, use the.  
17d70 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78  [sqlite3_load_ex
17d80 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e  tension()] C-lan
17d90 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 0a  guage API.</p>..
17da0 20 20 3c 70 3e 46 6f 72 20 73 65 63 75 72 69 74    <p>For securit
17db0 79 20 72 65 61 73 6f 6e 73 2c 20 65 78 74 65 6e  y reasons, exten
17dc0 73 69 6f 6e 20 6c 6f 61 64 65 64 20 69 73 20 74  sion loaded is t
17dd0 75 72 6e 65 64 20 6f 66 66 20 62 79 20 64 65 66  urned off by def
17de0 61 75 6c 74 20 61 6e 64 20 6d 75 73 74 0a 20 20  ault and must.  
17df0 62 65 20 65 6e 61 62 6c 65 64 20 62 79 20 61 20  be enabled by a 
17e00 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 5b 73  prior call to [s
17e10 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f  qlite3_enable_lo
17e20 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 2e  ad_extension()].
17e30 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  </p>.}..funcdef 
17e40 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a  {lower(X)} {} {.
17e50 20 20 5e 54 68 65 20 6c 6f 77 65 72 28 58 29 20    ^The lower(X) 
17e60 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
17e70 20 61 20 63 6f 70 79 20 6f 66 20 73 74 72 69 6e   a copy of strin
17e80 67 20 58 20 77 69 74 68 20 61 6c 6c 20 41 53 43  g X with all ASC
17e90 49 49 20 63 68 61 72 61 63 74 65 72 73 0a 20 20  II characters.  
17ea0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f 77  converted to low
17eb0 65 72 20 63 61 73 65 2e 20 20 5e 54 68 65 20 64  er case.  ^The d
17ec0 65 66 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e 20  efault built-in 
17ed0 6c 6f 77 65 72 28 29 20 66 75 6e 63 74 69 6f 6e  lower() function
17ee0 20 77 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53 43   works.  for ASC
17ef0 49 49 20 63 68 61 72 61 63 74 65 72 73 20 6f 6e  II characters on
17f00 6c 79 2e 20 20 54 6f 20 64 6f 20 63 61 73 65 20  ly.  To do case 
17f10 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20 6e  conversions on n
17f20 6f 6e 2d 41 53 43 49 49 0a 20 20 63 68 61 72 61  on-ASCII.  chara
17f30 63 74 65 72 73 2c 20 6c 6f 61 64 20 74 68 65 20  cters, load the 
17f40 49 43 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d  ICU extension..}
17f50 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d  ..funcdef {ltrim
17f60 28 58 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20  (X) ltrim(X,Y)} 
17f70 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72 69  {} {.  ^The ltri
17f80 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  m(X,Y) function 
17f90 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
17fa0 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76   formed by remov
17fb0 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a  ing any and all.
17fc0 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61    characters tha
17fd0 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72  t appear in Y fr
17fe0 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64 65  om the left side
17ff0 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65   of X..  ^If the
18000 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f   Y argument is o
18010 6d 69 74 74 65 64 2c 20 6c 74 72 69 6d 28 58 29  mitted, ltrim(X)
18020 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20   removes spaces 
18030 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69  from the left si
18040 64 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75  de.  of X..}..fu
18050 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c 2e  ncdef {max(X,Y,.
18060 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46 75  ..)} {*maxCoreFu
18070 6e 63 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20 53  nc *max {max() S
18080 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  QL function}} {.
18090 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67    ^The multi-arg
180a0 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63  ument max() func
180b0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
180c0 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74   argument with t
180d0 68 65 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76 61  he .  maximum va
180e0 6c 75 65 2c 20 6f 72 20 72 65 74 75 72 6e 20 4e  lue, or return N
180f0 55 4c 4c 20 69 66 20 61 6e 79 20 61 72 67 75 6d  ULL if any argum
18100 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20  ent is NULL. .  
18110 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
18120 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69  ent max() functi
18130 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73 20  on searches its 
18140 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c  arguments from l
18150 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66  eft to right.  f
18160 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74  or an argument t
18170 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  hat defines a co
18180 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
18190 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63   and uses that c
181a0 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74  ollating.  funct
181b0 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
181c0 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  ng comparisons. 
181d0 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65   ^If none of the
181e0 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 61   arguments to ma
181f0 78 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63  x().  define a c
18200 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
18210 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41  n, then the BINA
18220 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  RY collating fun
18230 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20  ction is used.. 
18240 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61   Note that <b>ma
18250 78 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d  x()</b> is a sim
18260 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65  ple function whe
18270 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20  n.  it has 2 or 
18280 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62  more arguments b
18290 75 74 20 6f 70 65 72 61 74 65 73 20 61 73 20 61  ut operates as a
182a0 6e 0a 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20  n.  [minAggFunc 
182b0 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  | aggregate func
182c0 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f  tion] if given o
182d0 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67  nly a single arg
182e0 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ument..}..funcde
182f0 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d  f {min(X,Y,...)}
18300 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a   {*minCoreFunc *
18310 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66  min {min() SQL f
18320 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
18330 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
18340 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e  t min() function
18350 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
18360 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20  ument with the. 
18370 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a   minimum value..
18380 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67    ^The multi-arg
18390 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63  ument min() func
183a0 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74  tion searches it
183b0 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  s arguments from
183c0 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20   left to right. 
183d0 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74   for an argument
183e0 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20   that defines a 
183f0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
18400 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74  on and uses that
18410 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e   collating.  fun
18420 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74  ction for all st
18430 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73  ring comparisons
18440 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .  ^If none of t
18450 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  he arguments to 
18460 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61  min().  define a
18470 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
18480 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49  ion, then the BI
18490 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66  NARY collating f
184a0 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e  unction is used.
184b0 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e  .  Note that <b>
184c0 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20 73  min()</b> is a s
184d0 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77  imple function w
184e0 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f  hen.  it has 2 o
184f0 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73  r more arguments
18500 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61 73   but operates as
18510 20 61 6e 20 0a 20 20 5b 6d 61 78 41 67 67 46 75   an .  [maxAggFu
18520 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66  nc | aggregate f
18530 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65  unction] if give
18540 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c  n.  only a singl
18550 65 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66  e argument..}..f
18560 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58  uncdef {nullif(X
18570 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
18580 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e   nullif(X,Y) fun
18590 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 69 74  ction returns it
185a0 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  s first argument
185b0 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
185c0 73 20 61 72 65 0a 20 20 64 69 66 66 65 72 65 6e  s are.  differen
185d0 74 20 61 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68  t and NULL if th
185e0 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  e arguments are 
185f0 74 68 65 20 73 61 6d 65 2e 20 20 5e 54 68 65 20  the same.  ^The 
18600 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63  nullif(X,Y) func
18610 74 69 6f 6e 0a 20 20 73 65 61 72 63 68 65 73 20  tion.  searches 
18620 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72  its arguments fr
18630 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
18640 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74   for an argument
18650 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 0a   that defines a.
18660 20 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63    collating func
18670 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68  tion and uses th
18680 61 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  at collating fun
18690 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74  ction for all st
186a0 72 69 6e 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f  ring.  compariso
186b0 6e 73 2e 20 20 5e 49 66 20 6e 65 69 74 68 65 72  ns.  ^If neither
186c0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c   argument to nul
186d0 6c 69 66 28 29 20 64 65 66 69 6e 65 73 20 61 20  lif() defines a 
186e0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
186f0 6f 6e 0a 20 20 74 68 65 6e 20 74 68 65 20 42 49  on.  then the BI
18700 4e 41 52 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a  NARY is used..}.
18710 0a 66 75 6e 63 64 65 66 20 7b 70 72 69 6e 74 66  .funcdef {printf
18720 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 7d 20 7b 7d  (FORMAT,...)} {}
18730 20 7b 0a 20 20 5e 28 54 68 65 20 70 72 69 6e 74   {.  ^(The print
18740 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 20 53 51  f(FORMAT,...) SQ
18750 4c 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73  L function works
18760 20 6c 69 6b 65 20 74 68 65 20 5b 73 71 6c 69 74   like the [sqlit
18770 65 33 5f 6d 70 72 69 6e 74 66 28 29 5d 20 43 2d  e3_mprintf()] C-
18780 6c 61 6e 67 75 61 67 65 0a 20 20 66 75 6e 63 74  language.  funct
18790 69 6f 6e 20 61 6e 64 20 74 68 65 20 70 72 69 6e  ion and the prin
187a0 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 66 72  tf() function fr
187b0 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  om the standard 
187c0 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a 20 20 54  C library.)^.  T
187d0 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
187e0 74 20 69 73 20 61 20 66 6f 72 6d 61 74 20 73 74  t is a format st
187f0 72 69 6e 67 20 74 68 61 74 20 73 70 65 63 69 66  ring that specif
18800 69 65 73 20 68 6f 77 20 74 6f 20 63 6f 6e 73 74  ies how to const
18810 72 75 63 74 20 74 68 65 20 6f 75 74 70 75 74 0a  ruct the output.
18820 20 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 76    string using v
18830 61 6c 75 65 73 20 74 61 6b 65 6e 20 66 72 6f 6d  alues taken from
18840 20 73 75 62 73 65 71 75 65 6e 74 20 61 72 67 75   subsequent argu
18850 6d 65 6e 74 73 2e 20 20 5e 49 66 20 74 68 65 20  ments.  ^If the 
18860 46 4f 52 4d 41 54 20 61 72 67 75 6d 65 6e 74 20  FORMAT argument 
18870 69 73 0a 20 20 6d 69 73 73 69 6e 67 20 6f 72 20  is.  missing or 
18880 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
18890 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 20 5e  sult is NULL.  ^
188a0 54 68 65 20 25 6e 20 66 6f 72 6d 61 74 20 69 73  The %n format is
188b0 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65   silently ignore
188c0 64 20 61 6e 64 0a 20 20 64 6f 65 73 20 6e 6f 74  d and.  does not
188d0 20 63 6f 6e 73 75 6d 65 20 61 6e 20 61 72 67 75   consume an argu
188e0 6d 65 6e 74 2e 20 20 5e 54 68 65 20 25 70 20 66  ment.  ^The %p f
188f0 6f 72 6d 61 74 20 69 73 20 61 6e 20 61 6c 69 61  ormat is an alia
18900 73 20 66 6f 72 20 25 58 2e 20 20 5e 54 68 65 20  s for %X.  ^The 
18910 25 7a 20 66 6f 72 6d 61 74 0a 20 20 69 73 20 69  %z format.  is i
18920 6e 74 65 72 63 68 61 6e 67 61 62 6c 65 20 77 69  nterchangable wi
18930 74 68 20 25 73 2e 20 20 5e 28 49 66 20 74 68 65  th %s.  ^(If the
18940 72 65 20 61 72 65 20 74 6f 6f 20 66 65 77 20 61  re are too few a
18950 72 67 75 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  rguments in the 
18960 61 72 67 75 6d 65 6e 74 20 6c 69 73 74 2c 0a 20  argument list,. 
18970 20 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e   missing argumen
18980 74 73 20 61 72 65 20 61 73 73 75 6d 65 64 20 74  ts are assumed t
18990 6f 20 68 61 76 65 20 61 20 4e 55 4c 4c 20 76 61  o have a NULL va
189a0 6c 75 65 2c 20 77 68 69 63 68 20 69 73 20 74 72  lue, which is tr
189b0 61 6e 73 6c 61 74 65 64 20 69 6e 74 6f 0a 20 20  anslated into.  
189c0 30 20 6f 72 20 30 2e 30 20 66 6f 72 20 6e 75 6d  0 or 0.0 for num
189d0 65 72 69 63 20 66 6f 72 6d 61 74 73 20 6f 72 20  eric formats or 
189e0 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  an empty string 
189f0 66 6f 72 20 25 73 2e 29 5e 0a 7d 0a 20 20 0a 0a  for %s.)^.}.  ..
18a00 66 75 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58  funcdef {quote(X
18a10 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71  )} {} {.  ^The q
18a20 75 6f 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e  uote(X) function
18a30 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 65 78   returns the tex
18a40 74 20 6f 66 20 61 6e 20 53 51 4c 20 6c 69 74 65  t of an SQL lite
18a50 72 61 6c 20 77 68 69 63 68 0a 20 20 69 73 20 74  ral which.  is t
18a60 68 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20  he value of its 
18a70 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61 62 6c  argument suitabl
18a80 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20  e for inclusion 
18a90 69 6e 74 6f 20 61 6e 20 53 51 4c 20 73 74 61 74  into an SQL stat
18aa0 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67  ement..  ^String
18ab0 73 20 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64  s are surrounded
18ac0 20 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65   by single-quote
18ad0 73 20 77 69 74 68 20 65 73 63 61 70 65 73 20 6f  s with escapes o
18ae0 6e 20 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65  n interior quote
18af0 73 0a 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20  s.  as needed.  
18b00 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64  ^BLOBs are encod
18b10 65 64 20 61 73 20 68 65 78 61 64 65 63 69 6d 61  ed as hexadecima
18b20 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53  l literals..  ^S
18b30 74 72 69 6e 67 73 20 77 69 74 68 20 65 6d 62 65  trings with embe
18b40 64 64 65 64 20 4e 55 4c 20 63 68 61 72 61 63 74  dded NUL charact
18b50 65 72 73 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  ers cannot be re
18b60 70 72 65 73 65 6e 74 65 64 20 61 73 20 73 74 72  presented as str
18b70 69 6e 67 0a 20 20 6c 69 74 65 72 61 6c 73 20 69  ing.  literals i
18b80 6e 20 53 51 4c 20 61 6e 64 20 68 65 6e 63 65 20  n SQL and hence 
18b90 74 68 65 20 72 65 74 75 72 6e 65 64 20 73 74 72  the returned str
18ba0 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 74  ing literal is t
18bb0 72 75 6e 63 61 74 65 64 20 70 72 69 6f 72 0a 20  runcated prior. 
18bc0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55   to the first NU
18bd0 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  L..}..funcdef {r
18be0 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20  andom()} {} {.  
18bf0 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29 20 66 75  ^The random() fu
18c00 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
18c10 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69   pseudo-random i
18c20 6e 74 65 67 65 72 0a 20 20 62 65 74 77 65 65 6e  nteger.  between
18c30 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
18c40 37 35 38 30 38 20 61 6e 64 20 2b 39 32 32 33 33  75808 and +92233
18c50 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2e 0a  72036854775807..
18c60 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64  }..funcdef {rand
18c70 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a  omblob(N)} {} {.
18c80 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f    ^The randomblo
18c90 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  b(N) function re
18ca0 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62  turn an N-byte b
18cb0 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70  lob containing p
18cc0 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62  seudo-random.  b
18cd0 79 74 65 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c  ytes. ^If N is l
18ce0 65 73 73 20 74 68 61 6e 20 31 20 74 68 65 6e 20  ess than 1 then 
18cf0 61 20 31 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20  a 1-byte random 
18d00 62 6c 6f 62 20 69 73 20 72 65 74 75 72 6e 65 64  blob is returned
18d10 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61  ...  <p>Hint:  a
18d20 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20  pplications can 
18d30 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c  generate globall
18d40 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74 69 66  y unique identif
18d50 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74 68 69  iers.  using thi
18d60 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74  s function toget
18d70 68 65 72 20 77 69 74 68 20 5b 68 65 78 28 29 5d  her with [hex()]
18d80 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72   and/or.  [lower
18d90 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f  ()] like this:</
18da0 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74  p>..  <blockquot
18db0 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d 62  e>.  hex(randomb
18dc0 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72  lob(16))<br></br
18dd0 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28 72 61  >.  lower(hex(ra
18de0 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20  ndomblob(16))). 
18df0 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d   </blockquote>.}
18e00 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70 6c 61  ..funcdef {repla
18e10 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a  ce(X,Y,Z)} {} {.
18e20 20 20 5e 54 68 65 20 72 65 70 6c 61 63 65 28 58    ^The replace(X
18e30 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72  ,Y,Z) function r
18e40 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
18e50 66 6f 72 6d 65 64 20 62 79 20 73 75 62 73 74 69  formed by substi
18e60 74 75 74 69 6e 67 0a 20 20 73 74 72 69 6e 67 20  tuting.  string 
18e70 5a 20 66 6f 72 20 65 76 65 72 79 20 6f 63 63 75  Z for every occu
18e80 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67  rrence of string
18e90 20 59 20 69 6e 20 73 74 72 69 6e 67 20 58 2e 20   Y in string X. 
18ea0 20 5e 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20   ^The [BINARY]. 
18eb0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
18ec0 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  nce is used for 
18ed0 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
18ee0 66 20 59 20 69 73 20 61 6e 20 65 6d 70 74 79 0a  f Y is an empty.
18ef0 20 20 73 74 72 69 6e 67 20 74 68 65 6e 20 72 65    string then re
18f00 74 75 72 6e 20 58 20 75 6e 63 68 61 6e 67 65 64  turn X unchanged
18f10 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20  .  ^If Z is not 
18f20 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61 20 73 74  initially.  a st
18f30 72 69 6e 67 2c 20 69 74 20 69 73 20 63 61 73 74  ring, it is cast
18f40 20 74 6f 20 61 20 55 54 46 2d 38 20 73 74 72 69   to a UTF-8 stri
18f50 6e 67 20 70 72 69 6f 72 20 74 6f 20 70 72 6f 63  ng prior to proc
18f60 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64  essing..}..funcd
18f70 65 66 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75  ef {round(X) rou
18f80 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  nd(X,Y)} {} {.  
18f90 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c 59 29 20  ^The round(X,Y) 
18fa0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
18fb0 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
18fc0 74 0a 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e  t.  value X roun
18fd0 64 65 64 20 74 6f 20 59 20 64 69 67 69 74 73 20  ded to Y digits 
18fe0 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20  to the right of 
18ff0 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
19000 74 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  t..  ^If the Y a
19010 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
19020 65 64 2c 20 69 74 20 69 73 20 61 73 73 75 6d 65  ed, it is assume
19030 64 20 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75  d to be 0..}..fu
19040 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58 29 20  ncdef {rtrim(X) 
19050 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  rtrim(X,Y)} {} {
19060 0a 20 20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c  .  ^The rtrim(X,
19070 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
19080 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
19090 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
190a0 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
190b0 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
190c0 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
190d0 68 65 20 72 69 67 68 74 20 73 69 64 65 20 6f 66  he right side of
190e0 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20   X..  ^If the Y 
190f0 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
19100 74 65 64 2c 20 72 74 72 69 6d 28 58 29 20 72 65  ted, rtrim(X) re
19110 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f  moves spaces fro
19120 6d 20 74 68 65 20 72 69 67 68 74 0a 20 20 73 69  m the right.  si
19130 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  de of X..}..func
19140 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d  def {soundex(X)}
19150 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75   {} {.  ^The sou
19160 6e 64 65 78 28 58 29 20 66 75 6e 63 74 69 6f 6e  ndex(X) function
19170 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
19180 67 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f  g that is the so
19190 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a  undex encoding .
191a0 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20    of the string 
191b0 58 2e 0a 20 20 5e 54 68 65 20 73 74 72 69 6e 67  X..  ^The string
191c0 20 22 3f 30 30 30 22 20 69 73 20 72 65 74 75 72   "?000" is retur
191d0 6e 65 64 20 69 66 20 74 68 65 20 61 72 67 75 6d  ned if the argum
191e0 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63  ent is NULL or c
191f0 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43  ontains.  no ASC
19200 49 49 20 61 6c 70 68 61 62 65 74 69 63 20 63 68  II alphabetic ch
19210 61 72 61 63 74 65 72 73 2e 0a 20 20 5e 28 54 68  aracters..  ^(Th
19220 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
19230 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69  mitted from SQLi
19240 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20  te by default.. 
19250 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69   It is only avai
19260 6c 61 62 6c 65 20 69 66 20 74 68 65 20 5b 53 51  lable if the [SQ
19270 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f  LITE_SOUNDEX] co
19280 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
19290 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68 65 6e  n.  is used when
192a0 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74   SQLite is built
192b0 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
192c0 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
192d0 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20  tion_get(N)} {} 
192e0 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
192f0 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
19300 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  t() SQL function
19310 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
19320 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69  ound the.  [sqli
19330 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
19340 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66  n_get()] C/C++ f
19350 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73  unction..  ^This
19360 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
19370 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c   the N-th compil
19380 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73  e-time option us
19390 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69  ed to build SQLi
193a0 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20  te.  or NULL if 
193b0 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67  N is out of rang
193c0 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65  e.  See also the
193d0 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e   [compile_option
193e0 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75  s pragma]..}..fu
193f0 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f  ncdef {sqlite_co
19400 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
19410 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
19420 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f   sqlite_compileo
19430 70 74 69 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c  ption_used() SQL
19440 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
19450 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
19460 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  e.  [sqlite3_com
19470 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
19480 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f  )] C/C++ functio
19490 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65 20 61  n..  ^When the a
194a0 72 67 75 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c  rgument X to sql
194b0 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
194c0 6e 5f 75 73 65 64 28 58 29 20 69 73 20 61 20 73  n_used(X) is a s
194d0 74 72 69 6e 67 20 77 68 69 63 68 0a 20 20 69 73  tring which.  is
194e0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63   the name of a c
194f0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
19500 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65  on, this routine
19510 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 28 31   returns true (1
19520 29 20 6f 72 0a 20 20 66 61 6c 73 65 20 28 30 29  ) or.  false (0)
19530 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
19540 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61  ether or not tha
19550 74 20 6f 70 74 69 6f 6e 20 77 61 73 20 75 73 65  t option was use
19560 64 20 64 75 72 69 6e 67 20 74 68 65 0a 20 20 62  d during the.  b
19570 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  uild..}..funcdef
19580 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f   {sqlite_source_
19590 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  id()} {} {.  ^Th
195a0 65 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  e sqlite_source_
195b0 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  id() function re
195c0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
195d0 68 61 74 20 69 64 65 6e 74 69 66 69 65 73 20 74  hat identifies t
195e0 68 65 0a 20 20 73 70 65 63 69 66 69 63 20 76 65  he.  specific ve
195f0 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75  rsion of the sou
19600 72 63 65 20 63 6f 64 65 20 74 68 61 74 20 77 61  rce code that wa
19610 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  s used to build 
19620 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62  the SQLite.  lib
19630 72 61 72 79 2e 20 20 5e 54 68 65 20 73 74 72 69  rary.  ^The stri
19640 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ng returned by s
19650 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
19660 29 20 62 65 67 69 6e 73 20 77 69 74 68 0a 20 20  ) begins with.  
19670 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
19680 65 20 74 68 61 74 20 74 68 65 20 73 6f 75 72 63  e that the sourc
19690 65 20 63 6f 64 65 20 77 61 73 20 63 68 65 63 6b  e code was check
196a0 65 64 20 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c  ed in and is fol
196b0 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20 53 48 41  lows by.  an SHA
196c0 31 20 68 61 73 68 20 74 68 61 74 20 75 6e 69 71  1 hash that uniq
196d0 75 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20  uely identifies 
196e0 74 68 65 20 73 6f 75 72 63 65 20 74 72 65 65 2e  the source tree.
196f0 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e    ^This function
19700 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61   is.  an SQL wra
19710 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
19720 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  [sqlite3_sourcei
19730 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65  d()] C interface
19740 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
19750 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20  lite_version()} 
19760 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
19770 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e  te_version() fun
19780 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
19790 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67  e version string
197a0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a   for the SQLite.
197b0 20 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 69    library that i
197c0 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69  s running.  ^Thi
197d0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e  s function is an
197e0 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61   SQL.  wrapper a
197f0 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
19800 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d  e3_libversion()]
19810 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a   C-interface..}.
19820 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72  .funcdef {substr
19830 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58  (X,Y,Z) substr(X
19840 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
19850 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66   substr(X,Y,Z) f
19860 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
19870 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69  a substring of i
19880 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 74 68  nput string X th
19890 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68  at begins.  with
198a0 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63   the Y-th charac
198b0 74 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73  ter and which is
198c0 20 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f   Z characters lo
198d0 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f  ng..  ^If Z is o
198e0 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75 62 73  mitted then subs
198f0 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20  tr(X,Y) returns 
19900 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 74  all characters t
19910 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20  hrough the end. 
19920 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
19930 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
19940 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65  the Y-th..  ^The
19950 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61   left-most chara
19960 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d  cter of X is num
19970 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73  ber 1.  ^If Y is
19980 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e   negative.  then
19990 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61   the first chara
199a0 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73  cter of the subs
199b0 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62  tring is found b
199c0 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20  y counting from 
199d0 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74 68  the.  right rath
199e0 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  er than the left
199f0 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61  .  ^If Z is nega
19a00 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20  tive then.  the 
19a10 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65 72  abs(Z) character
19a20 73 20 70 72 65 63 65 64 69 6e 67 20 74 68 65 20  s preceding the 
19a30 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61  Y-th character a
19a40 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e  re returned..  ^
19a50 49 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67  If X is a string
19a60 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73   then characters
19a70 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
19a80 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a  o actual UTF-8 .
19a90 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e    characters.  ^
19aa0 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74  If X is a BLOB t
19ab0 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20  hen the indices 
19ac0 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a  refer to bytes..
19ad0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61  }..funcdef {tota
19ae0 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20  l_changes()} {} 
19af0 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63  {.  ^The total_c
19b00 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
19b10 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
19b20 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e  mber of row chan
19b30 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20  ges.  caused by 
19b40 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
19b50 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65  r DELETE.  state
19b60 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20  ments since the 
19b70 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
19b80 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20   connection was 
19b90 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20  opened..  ^This 
19ba0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
19bb0 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
19bc0 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
19bd0 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
19be0 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
19bf0 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58  .funcdef {trim(X
19c00 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20  ) trim(X,Y)} {} 
19c10 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c  {.  ^The trim(X,
19c20 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
19c30 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
19c40 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
19c50 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
19c60 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
19c70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62  pear in Y from b
19c80 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20  oth ends of X.. 
19c90 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
19ca0 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
19cb0 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
19cc0 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68  spaces from both
19cd0 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66   ends of X..}..f
19ce0 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58  uncdef {typeof(X
19cf0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74  )} {} {.  ^The t
19d00 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f  ypeof(X) functio
19d10 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
19d20 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ng that indicate
19d30 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d  s the [datatype]
19d40 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73   of.  the expres
19d50 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20  sion X: "null", 
19d60 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c  "integer", "real
19d70 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62  ", "text", or "b
19d80 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lob"..}..funcdef
19d90 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b   {unlikely(X)} {
19da0 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b  } {.  ^The unlik
19db0 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
19dc0 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
19dd0 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64  ment X unchanged
19de0 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c  ..  ^The unlikel
19df0 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
19e00 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68   a no-op that th
19e10 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
19e20 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61  .  optimizes awa
19e30 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e  y so that it con
19e40 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63  sumes no CPU cyc
19e50 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d  les at.  run-tim
19e60 65 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69  e (that is, duri
19e70 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c  ng calls to [sql
19e80 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20  ite3_step()]).. 
19e90 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66   ^The purpose of
19ea0 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29   the unlikely(X)
19eb0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20   function is to 
19ec0 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20  provide a hint. 
19ed0 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c   to the query pl
19ee0 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61  anner that the a
19ef0 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62  rgument X is a b
19f00 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74  oolean value.  t
19f10 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 6e  hat is usually n
19f20 6f 74 20 74 72 75 65 2e 20 5e 28 54 68 65 20 75  ot true. ^(The u
19f30 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74  nlikely(X) funct
19f40 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
19f50 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f  t.  to [likeliho
19f60 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e 29  od](X, 0.0625).)
19f70 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e  ^.}..funcdef {un
19f80 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20  icode(X)} {} {. 
19f90 20 5e 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29   ^The unicode(X)
19fa0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
19fb0 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e  s the numeric un
19fc0 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74  icode code point
19fd0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
19fe0 6f 0a 20 20 74 68 65 20 66 69 72 73 74 20 63 68  o.  the first ch
19ff0 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73  aracter of the s
1a000 74 72 69 6e 67 20 58 2e 20 20 49 66 20 74 68 65  tring X.  If the
1a010 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69   argument to uni
1a020 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61  code(X) is not a
1a030 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74   string.  then t
1a040 68 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64  he result is und
1a050 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64  efined..}..funcd
1a060 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d  ef {upper(X)} {}
1a070 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28   {.  ^The upper(
1a080 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1a090 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e  rns a copy of in
1a0a0 70 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20  put string X in 
1a0b0 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77  which all .  low
1a0c0 65 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68  er-case ASCII ch
1a0d0 61 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e  aracters are con
1a0e0 76 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20  verted to their 
1a0f0 75 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76  upper-case equiv
1a100 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  alent..}..funcde
1a110 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20  f {zeroblob(N)} 
1a120 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f  {} {.  ^The zero
1a130 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e  blob(N) function
1a140 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20   returns a BLOB 
1a150 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20  consisting of N 
1a160 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20  bytes of 0x00.. 
1a170 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20   SQLite manages 
1a180 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20  these zeroblobs 
1a190 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79  very efficiently
1a1a0 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e  .  Zeroblobs can
1a1b0 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65   be used to.  re
1a1c0 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20  serve space for 
1a1d0 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c  a BLOB that is l
1a1e0 61 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69  ater written usi
1a1f0 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62  ng .  [sqlite3_b
1a200 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63  lob_open() | inc
1a210 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f  remental BLOB I/
1a220 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20  O]..  ^This SQL 
1a230 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c  function is impl
1a240 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68  emented using th
1a250 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  e [sqlite3_resul
1a260 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20  t_zeroblob()].  
1a270 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65  routine from the
1a280 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
1a290 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62  ..}.</tcl>.</tab
1a2a0 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  le>..<tcl>.#####
1a2b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2f0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1a300 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65  n {Date And Time
1a310 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65   Functions} date
1a320 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d  func {*datefunc}
1a330 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61  .hd_keywords {da
1a340 74 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  te() SQL functio
1a350 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66  n} {time() SQL f
1a360 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77  unction}.hd_keyw
1a370 6f 72 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29  ords {datetime()
1a380 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b   SQL function} {
1a390 6a 75 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20  julianday() SQL 
1a3a0 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79  function}.hd_key
1a3b0 77 6f 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28  words {strftime(
1a3c0 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a  ) SQL function}.
1a3d0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69  </tcl>..<p>.SQLi
1a3e0 74 65 20 73 75 70 70 6f 72 74 73 20 66 69 76 65  te supports five
1a3f0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
1a400 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c  unctions as foll
1a410 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c  ows:.</p>..<p>.<
1a420 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61  ol>.<li> ^(<b>da
1a430 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  te(</b><i>timest
1a440 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
1a450 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
1a460 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
1a470 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65  >.<li> ^(<b>time
1a480 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
1a490 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1a4a0 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1a4b0 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1a4c0 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69  <li> ^(<b>dateti
1a4d0 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  me(</b><i>timest
1a4e0 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
1a4f0 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
1a500 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
1a510 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69  >.<li> ^(<b>juli
1a520 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d  anday(</b><i>tim
1a530 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
1a540 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
1a550 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
1a560 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73  /li>.<li> ^(<b>s
1a570 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66  trftime(</b><i>f
1a580 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e  ormat, timestrin
1a590 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
1a5a0 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
1a5b0 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
1a5c0 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66  /ol>..<p>.^All f
1a5d0 69 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ive date and tim
1a5e0 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65  e functions take
1a5f0 20 61 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61   a time string a
1a600 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a  s an argument. .
1a610 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67  ^The time string
1a620 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
1a630 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64  zero or more mod
1a640 69 66 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74  ifiers. .^The st
1a650 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  rftime() functio
1a660 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66  n also takes a f
1a670 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20  ormat string as 
1a680 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65  its first argume
1a690 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68  nt..</p>..<p>.Th
1a6a0 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1a6b0 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20  functions use a 
1a6c0 73 75 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a  subset of.[http:
1a6d0 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1a6e0 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31  rg/wiki/ISO_8601
1a6f0 20 7c 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74   | IS0-8601] dat
1a700 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61  e and time.forma
1a710 74 73 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20  ts..^The date() 
1a720 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1a730 20 74 68 65 20 64 61 74 65 20 69 6e 20 74 68 69   the date in thi
1a740 73 20 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d  s format: YYYY-M
1a750 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65  M-DD. .^The time
1a760 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1a770 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61 73 20  rns the time as 
1a780 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20  HH:MM:SS. .^The 
1a790 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74  datetime() funct
1a7a0 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59  ion returns "YYY
1a7b0 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
1a7c0 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e  ". .^(The julian
1a7d0 64 61 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  day() function r
1a7e0 65 74 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74  eturns the .[htt
1a7f0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1a800 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e  .org/wiki/Julian
1a810 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61  _day | Julian da
1a820 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20  y] - the.number 
1a830 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f  of days since no
1a840 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20  on in Greenwich 
1a850 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20  on November 24, 
1a860 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74  4714 B.C. .([htt
1a870 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1a880 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70  .org/wiki/Prolep
1a890 74 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61  tic_Gregorian_ca
1a8a0 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74  lendar | Prolept
1a8b0 69 63 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c  ic Gregorian cal
1a8c0 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20  endar]).)^.^The 
1a8d0 73 74 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69  strftime() routi
1a8e0 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  ne returns the d
1a8f0 61 74 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63  ate formatted ac
1a900 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20  cording to .the 
1a910 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70  format string sp
1a920 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 66  ecified as the f
1a930 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e  irst argument..^
1a940 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  The format strin
1a950 67 20 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d  g supports the m
1a960 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74  ost common subst
1a970 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69  itutions found i
1a980 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f  n the .[http://o
1a990 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c  pengroup.org/onl
1a9a0 69 6e 65 70 75 62 73 2f 30 30 37 39 30 38 37 39  inepubs/00790879
1a9b0 39 2f 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68  9/xsh/strftime.h
1a9c0 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29  tml | strftime()
1a9d0 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20   function].from 
1a9e0 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
1a9f0 69 62 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20  ibrary plus two 
1aa00 6e 65 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e  new substitution
1aa10 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28  s, %f and %J..^(
1aa20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73  The following is
1aa30 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74   a complete list
1aa40 20 6f 66 20 76 61 6c 69 64 20 73 74 72 66 74 69   of valid strfti
1aa50 6d 65 28 29 20 73 75 62 73 74 69 74 75 74 69 6f  me() substitutio
1aa60 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ns:.</p>..<block
1aa70 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f  quote>.<table bo
1aa80 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64  rder="0" cellpad
1aa90 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61  ding="0" cellspa
1aaa0 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74  cing="0">.<tr><t
1aab0 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22  d><td width="10"
1aac0 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  ><td></tr>..<tr>
1aad0 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e  <td> %d <td><td>
1aae0 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30   day of month: 0
1aaf0 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74  0.<tr><td> %f <t
1ab00 64 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61  d><td> fractiona
1ab10 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53  l seconds: SS.SS
1ab20 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74  S.<tr><td> %H <t
1ab30 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d  d><td> hour: 00-
1ab40 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20  24 .<tr><td> %j 
1ab50 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20  <td><td> day of 
1ab60 79 65 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74  year: 001-366.<t
1ab70 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74  r><td> %J <td><t
1ab80 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75  d> Julian day nu
1ab90 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d  mber.<tr><td> %m
1aba0 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a   <td><td> month:
1abb0 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20   01-12.<tr><td> 
1abc0 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75  %M <td><td> minu
1abd0 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74  te: 00-59.<tr><t
1abe0 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73  d> %s <td><td> s
1abf0 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37  econds since 197
1ac00 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e  0-01-01.<tr><td>
1ac10 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63   %S <td><td> sec
1ac20 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e  onds: 00-59.<tr>
1ac30 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e  <td> %w <td><td>
1ac40 20 64 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36   day of week 0-6
1ac50 20 77 69 74 68 20 53 75 6e 64 61 79 3d 3d 30 0a   with Sunday==0.
1ac60 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e  <tr><td> %W <td>
1ac70 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61  <td> week of yea
1ac80 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64  r: 00-53.<tr><td
1ac90 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65  > %Y <td><td> ye
1aca0 61 72 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74  ar: 0000-9999.<t
1acb0 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74  r><td> %% <td><t
1acc0 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  d> %.</table>.</
1acd0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
1ace0 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74  p>.^(Notice that
1acf0 20 61 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20   all other date 
1ad00 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1ad10 6e 73 20 63 61 6e 20 62 65 20 65 78 70 72 65 73  ns can be expres
1ad20 73 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20  sed.in terms of 
1ad30 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e  strftime():.</p>
1ad40 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ..<blockquote>.<
1ad50 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22  table border="0"
1ad60 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22   cellpadding="0"
1ad70 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22   cellspacing="0"
1ad80 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e  >.<tr><td><b>Fun
1ad90 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64  ction</b><td wid
1ada0 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45  th="30"><td><b>E
1adb0 71 75 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69  quivalent strfti
1adc0 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64  me()</b>.<tr><td
1add0 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20  >   date(...)   
1ade0 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72     <td><td>  str
1adf0 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27  ftime('%Y-%m-%d'
1ae00 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
1ae10 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20    time(...)     
1ae20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
1ae30 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20  ime('%H:%M:%S', 
1ae40 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
1ae50 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c  datetime(...)  <
1ae60 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
1ae70 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25  e('%Y-%m-%d %H:%
1ae80 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e  M:%S', ...).<tr>
1ae90 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79  <td>   julianday
1aea0 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20  (...) <td><td>  
1aeb0 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e  strftime('%J', .
1aec0 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  ..).</table>.</b
1aed0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
1aee0 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f  >.The only reaso
1aef0 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67  ns for providing
1af00 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72   functions other
1af10 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29   than strftime()
1af20 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65   is.for convenie
1af30 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69  nce and for effi
1af40 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68  ciency..</p>..<h
1af50 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f  3>Time Strings</
1af60 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65  h3>..<p>^(A time
1af70 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69   string can be i
1af80 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c  n any of the fol
1af90 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c  lowing formats:<
1afa0 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c  /p>..<ol>.<li> <
1afb0 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e  i>YYYY-MM-DD</i>
1afc0 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1afd0 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c  -DD HH:MM</i>.<l
1afe0 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1aff0 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c   HH:MM:SS</i>.<l
1b000 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1b010 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69   HH:MM:SS.SSS</i
1b020 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
1b030 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e  M-DD</i><b>T</b>
1b040 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
1b050 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1b060 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
1b070 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  :MM:SS</i>.<li> 
1b080 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
1b090 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
1b0a0 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
1b0b0 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  > <i>HH:MM</i>.<
1b0c0 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c  li> <i>HH:MM:SS<
1b0d0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d  /i>.<li> <i>HH:M
1b0e0 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
1b0f0 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69  > <b>now</b>.<li
1b100 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c  > <i>DDDDDDDDDD<
1b110 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e  /i>.</ol>)^..<p>
1b120 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74  .^In formats 5 t
1b130 68 72 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54  hrough 7, the "T
1b140 22 20 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63  " is a literal c
1b150 68 61 72 61 63 74 65 72 20 73 65 70 61 72 61 74  haracter separat
1b160 69 6e 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e  ing .the date an
1b170 64 20 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72  d the time, as r
1b180 65 71 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74  equired by .[htt
1b190 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f  p://www.w3c.org/
1b1a0 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65  TR/NOTE-datetime
1b1b0 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e   | ISO-8601]. .^
1b1c0 46 6f 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67  Formats 8 throug
1b1d0 68 20 31 30 20 74 68 61 74 20 73 70 65 63 69 66  h 10 that specif
1b1e0 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73  y only a time as
1b1f0 73 75 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a  sume a date of .
1b200 32 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d  2000-01-01. Form
1b210 61 74 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e  at 11, the strin
1b220 67 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76  g 'now', is conv
1b230 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a  erted into the .
1b240 63 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64  current date and
1b250 20 74 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65   time as obtaine
1b260 64 20 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72  d from the xCurr
1b270 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f  entTime method.o
1b280 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76  f the [sqlite3_v
1b290 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73  fs] object in us
1b2a0 65 2e 0a 5e 54 68 65 20 27 6e 6f 77 27 20 61 72  e..^The 'now' ar
1b2b0 67 75 6d 65 6e 74 20 74 6f 20 64 61 74 65 20 61  gument to date a
1b2c0 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
1b2d0 73 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73  s always returns
1b2e0 20 65 78 61 63 74 6c 79 20 74 68 65 0a 73 61 6d   exactly the.sam
1b2f0 65 20 76 61 6c 75 65 20 66 6f 72 20 6d 75 6c 74  e value for mult
1b300 69 70 6c 65 20 69 6e 76 6f 63 61 74 69 6f 6e 73  iple invocations
1b310 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
1b320 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29   [sqlite3_step()
1b330 5d 20 63 61 6c 6c 2e 0a 5e 5b 68 74 74 70 3a 2f  ] call..^[http:/
1b340 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1b350 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69 6e 61 74  g/wiki/Coordinat
1b360 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f 54 69 6d  ed_Universal_Tim
1b370 65 20 7c 20 55 6e 69 76 65 72 73 61 6c 20 43 6f  e | Universal Co
1b380 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28  ordinated Time (
1b390 55 54 43 29 5d 20 69 73 20 75 73 65 64 2e 20 0a  UTC)] is used. .
1b3a0 5e 46 6f 72 6d 61 74 20 31 32 20 69 73 20 74 68  ^Format 12 is th
1b3b0 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  e .[http://en.wi
1b3c0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1b3d0 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75  /Julian_day | Ju
1b3e0 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 5d  lian day number]
1b3f0 0a 65 78 70 72 65 73 73 65 64 20 61 73 20 61 20  .expressed as a 
1b400 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
1b410 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  alue..</p>..<p>.
1b420 46 6f 72 6d 61 74 73 20 32 20 74 68 72 6f 75 67  Formats 2 throug
1b430 68 20 31 30 20 6d 61 79 20 62 65 20 6f 70 74 69  h 10 may be opti
1b440 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20  onally followed 
1b450 62 79 20 61 20 74 69 6d 65 7a 6f 6e 65 20 69 6e  by a timezone in
1b460 64 69 63 61 74 6f 72 20 6f 66 20 74 68 65 20 66  dicator of the f
1b470 6f 72 6d 0a 22 3c 69 3e 26 23 39 31 3b 2b 2d 26  orm."<i>&#91;+-&
1b480 23 39 33 3b 48 48 3a 4d 4d 3c 2f 69 3e 22 20 6f  #93;HH:MM</i>" o
1b490 72 20 6a 75 73 74 20 22 3c 69 3e 5a 3c 2f 69 3e  r just "<i>Z</i>
1b4a0 22 2e 20 20 54 68 65 20 64 61 74 65 20 61 6e 64  ".  The date and
1b4b0 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
1b4c0 75 73 65 20 55 54 43 20 6f 72 20 22 7a 75 6c 75  use UTC or "zulu
1b4d0 22 0a 74 69 6d 65 20 69 6e 74 65 72 6e 61 6c 6c  ".time internall
1b4e0 79 2c 20 61 6e 64 20 73 6f 20 74 68 65 20 22 5a  y, and so the "Z
1b4f0 22 20 73 75 66 66 69 78 20 69 73 20 61 20 6e 6f  " suffix is a no
1b500 2d 6f 70 2e 20 20 41 6e 79 20 6e 6f 6e 2d 7a 65  -op.  Any non-ze
1b510 72 6f 20 22 48 48 3a 4d 4d 22 20 73 75 66 66 69  ro "HH:MM" suffi
1b520 78 20 69 73 0a 73 75 62 74 72 61 63 74 65 64 20  x is.subtracted 
1b530 66 72 6f 6d 20 74 68 65 20 69 6e 64 69 63 61 74  from the indicat
1b540 65 64 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  ed date and time
1b550 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d   in order to com
1b560 70 75 74 65 20 7a 75 6c 75 20 74 69 6d 65 2e 0a  pute zulu time..
1b570 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c  For example, all
1b580 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1b590 67 20 74 69 6d 65 20 73 74 72 69 6e 67 73 20 61  g time strings a
1b5a0 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 3c  re equivalent:.<
1b5b0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1b5c0 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20 30 38 3a  >.2013-10-07 08:
1b5d0 32 33 3a 31 39 2e 31 32 30 3c 62 72 3e 0a 32 30  23:19.120<br>.20
1b5e0 31 33 2d 31 30 2d 30 37 54 30 38 3a 32 33 3a 31  13-10-07T08:23:1
1b5f0 39 2e 31 32 30 5a 3c 62 72 3e 0a 32 30 31 33 2d  9.120Z<br>.2013-
1b600 31 30 2d 30 37 20 30 38 3a 32 33 3a 31 39 2e 31  10-07 08:23:19.1
1b610 32 30 2d 30 34 3a 30 30 3c 62 72 3e 0a 32 34 35  20-04:00<br>.245
1b620 36 35 37 32 2e 38 34 39 35 32 36 38 35 0a 3c 2f  6572.84952685.</
1b630 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
1b640 0a 5e 28 49 6e 20 66 6f 72 6d 61 74 73 20 34 2c  .^(In formats 4,
1b650 20 37 2c 20 61 6e 64 20 31 30 2c 20 74 68 65 20   7, and 10, the 
1b660 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e  fractional secon
1b670 64 73 20 76 61 6c 75 65 20 53 53 2e 53 53 53 20  ds value SS.SSS 
1b680 63 61 6e 20 68 61 76 65 0a 6f 6e 65 20 6f 72 20  can have.one or 
1b690 6d 6f 72 65 20 64 69 67 69 74 73 20 66 6f 6c 6c  more digits foll
1b6a0 6f 77 69 6e 67 20 74 68 65 20 64 65 63 69 6d 61  owing the decima
1b6b0 6c 20 70 6f 69 6e 74 2e 20 20 45 78 61 63 74 6c  l point.  Exactl
1b6c0 79 20 74 68 72 65 65 20 64 69 67 69 74 73 20 61  y three digits a
1b6d0 72 65 0a 73 68 6f 77 6e 20 69 6e 20 74 68 65 20  re.shown in the 
1b6e0 65 78 61 6d 70 6c 65 73 20 62 65 63 61 75 73 65  examples because
1b6f0 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   only the first 
1b700 74 68 72 65 65 20 64 69 67 69 74 73 20 61 72 65  three digits are
1b710 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 74 6f 20   significant.to 
1b720 74 68 65 20 72 65 73 75 6c 74 2c 20 62 75 74 20  the result, but 
1b730 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67  the input string
1b740 20 63 61 6e 20 68 61 76 65 20 66 65 77 65 72 20   can have fewer 
1b750 6f 72 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 72  or more than thr
1b760 65 65 20 64 69 67 69 74 73 0a 61 6e 64 20 74 68  ee digits.and th
1b770 65 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63  e date/time func
1b780 74 69 6f 6e 73 20 77 69 6c 6c 20 73 74 69 6c 6c  tions will still
1b790 20 6f 70 65 72 61 74 65 20 63 6f 72 72 65 63 74   operate correct
1b7a0 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61 72 6c 79 2c  ly.)^.Similarly,
1b7b0 20 66 6f 72 6d 61 74 20 31 32 20 69 73 20 73 68   format 12 is sh
1b7c0 6f 77 6e 20 77 69 74 68 20 31 30 20 73 69 67 6e  own with 10 sign
1b7d0 69 66 69 63 61 6e 74 20 64 69 67 69 74 73 2c 20  ificant digits, 
1b7e0 62 75 74 20 74 68 65 20 64 61 74 65 2f 74 69 6d  but the date/tim
1b7f0 65 0a 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c  e.functions will
1b800 20 72 65 61 6c 6c 79 20 61 63 63 65 70 74 20 61   really accept a
1b810 73 20 6d 61 6e 79 20 6f 72 20 61 73 20 66 65 77  s many or as few
1b820 20 64 69 67 69 74 73 20 61 73 20 61 72 65 20 6e   digits as are n
1b830 65 63 65 73 73 61 72 79 20 74 6f 0a 72 65 70 72  ecessary to.repr
1b840 65 73 65 6e 74 20 74 68 65 20 4a 75 6c 69 61 6e  esent the Julian
1b850 20 64 61 79 20 6e 75 6d 62 65 72 2e 0a 3c 2f 70   day number..</p
1b860 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69 65 72 73  >..<h3>Modifiers
1b870 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74  </h3>..<p>^The t
1b880 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62  ime string can b
1b890 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  e followed by ze
1b8a0 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66  ro or more modif
1b8b0 69 65 72 73 20 74 68 61 74 20 0a 61 6c 74 65 72  iers that .alter
1b8c0 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d   date and/or tim
1b8d0 65 2e 20 5e 45 61 63 68 20 6d 6f 64 69 66 69 65  e. ^Each modifie
1b8e0 72 0a 69 73 20 61 20 74 72 61 6e 73 66 6f 72 6d  r.is a transform
1b8f0 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 61 70  ation that is ap
1b900 70 6c 69 65 64 20 74 6f 20 74 68 65 20 74 69 6d  plied to the tim
1b910 65 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 6c  e value to its l
1b920 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65 72 73 20  eft..^Modifiers 
1b930 61 72 65 20 61 70 70 6c 69 65 64 20 66 72 6f 6d  are applied from
1b940 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 3b 20   left to right; 
1b950 6f 72 64 65 72 20 69 73 20 69 6d 70 6f 72 74 61  order is importa
1b960 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61 69 6c 61  nt..^(The availa
1b970 62 6c 65 20 6d 6f 64 69 66 69 65 72 73 20 61 72  ble modifiers ar
1b980 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70  e as follows.</p
1b990 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e  >..<ol>.<li> NNN
1b9a0 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68   days.<li> NNN h
1b9b0 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69  ours.<li> NNN mi
1b9c0 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e  nutes.<li> NNN.N
1b9d0 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e  NNN seconds.<li>
1b9e0 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e   NNN months.<li>
1b9f0 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20   NNN years.<li> 
1ba00 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c  start of month.<
1ba10 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 79 65 61  li> start of yea
1ba20 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20  r.<li> start of 
1ba30 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79  day.<li> weekday
1ba40 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63   N.<li> unixepoc
1ba50 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65  h.<li> localtime
1ba60 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e  .<li> utc .</ol>
1ba70 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 72 73  )^..<p>^The firs
1ba80 74 20 73 69 78 20 6d 6f 64 69 66 69 65 72 73 20  t six modifiers 
1ba90 28 31 20 74 68 72 6f 75 67 68 20 36 29 20 0a 73  (1 through 6) .s
1baa0 69 6d 70 6c 79 20 61 64 64 20 74 68 65 20 73 70  imply add the sp
1bab0 65 63 69 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f  ecified amount o
1bac0 66 20 74 69 6d 65 20 74 6f 20 74 68 65 20 64 61  f time to the da
1bad0 74 65 20 61 6e 64 20 74 69 6d 65 20 0a 73 70 65  te and time .spe
1bae0 63 69 66 69 65 64 20 62 79 20 74 68 65 20 70 72  cified by the pr
1baf0 65 63 65 64 69 6e 67 20 74 69 6d 65 73 74 72 69  eceding timestri
1bb00 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69 65 72 73  ng and modifiers
1bb10 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20 22 26 70  ..^Note that "&p
1bb20 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73  lusmn;NNN months
1bb30 22 20 77 6f 72 6b 73 20 62 79 20 72 65 6e 64 65  " works by rende
1bb40 72 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61  ring the origina
1bb50 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74 68 65 20  l date into.the 
1bb60 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61  YYYY-MM-DD forma
1bb70 74 2c 20 61 64 64 69 6e 67 20 74 68 65 20 26 70  t, adding the &p
1bb80 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65  lusmn;NNN to the
1bb90 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c   MM month value,
1bba0 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e   then.normalizin
1bbb0 67 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 5e  g the result.  ^
1bbc0 54 68 75 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c  Thus, for exampl
1bbd0 65 2c 20 74 68 65 20 64 61 74 61 20 32 30 30 31  e, the data 2001
1bbe0 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69 65 64 0a  -03-31 modified.
1bbf0 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27 20 69 6e  by '+1 month' in
1bc00 69 74 69 61 6c 6c 79 20 79 69 65 6c 64 73 20 32  itially yields 2
1bc10 30 30 31 2d 30 34 2d 33 31 2c 20 62 75 74 20 41  001-04-31, but A
1bc20 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73 20 33 30  pril only has 30
1bc30 20 64 61 79 73 0a 73 6f 20 74 68 65 20 64 61 74   days.so the dat
1bc40 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a 65 64 20  e is normalized 
1bc50 74 6f 20 32 30 30 31 2d 30 35 2d 30 31 2e 20 20  to 2001-05-01.  
1bc60 5e 41 20 73 69 6d 69 6c 61 72 20 65 66 66 65 63  ^A similar effec
1bc70 74 20 6f 63 63 75 72 73 20 77 68 65 6e 0a 74 68  t occurs when.th
1bc80 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20  e original date 
1bc90 69 73 20 46 65 62 72 75 61 72 79 20 32 39 20 6f  is February 29 o
1bca0 66 20 61 20 6c 65 61 70 79 65 61 72 20 61 6e 64  f a leapyear and
1bcb0 20 74 68 65 20 6d 6f 64 69 66 69 65 72 20 69 73   the modifier is
1bcc0 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65 61 72 73  .&plusmn;N years
1bcd0 20 77 68 65 72 65 20 4e 20 69 73 20 6e 6f 74 20   where N is not 
1bce0 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 66 6f  a multiple of fo
1bcf0 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ur.</p>..<p>^The
1bd00 20 22 73 74 61 72 74 20 6f 66 22 20 6d 6f 64 69   "start of" modi
1bd10 66 69 65 72 73 20 28 37 20 74 68 72 6f 75 67 68  fiers (7 through
1bd20 20 39 29 20 73 68 69 66 74 20 74 68 65 20 64 61   9) shift the da
1bd30 74 65 20 62 61 63 6b 77 61 72 64 73 20 0a 74 6f  te backwards .to
1bd40 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
1bd50 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f  f the current mo
1bd60 6e 74 68 2c 20 79 65 61 72 20 6f 72 20 64 61 79  nth, year or day
1bd70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  .</p>..<p>^The "
1bd80 77 65 65 6b 64 61 79 22 20 6d 6f 64 69 66 69 65  weekday" modifie
1bd90 72 20 61 64 76 61 6e 63 65 73 20 74 68 65 20 64  r advances the d
1bda0 61 74 65 20 66 6f 72 77 61 72 64 20 74 6f 20 74  ate forward to t
1bdb0 68 65 20 6e 65 78 74 20 64 61 74 65 20 0a 77 68  he next date .wh
1bdc0 65 72 65 20 74 68 65 20 77 65 65 6b 64 61 79 20  ere the weekday 
1bdd0 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20 53 75 6e  number is N. Sun
1bde0 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64 61 79  day is 0, Monday
1bdf0 20 69 73 20 31 2c 20 61 6e 64 20 73 6f 20 66 6f   is 1, and so fo
1be00 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  rth.</p>..<p>^Th
1be10 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
1be20 64 69 66 69 65 72 20 28 31 31 29 20 6f 6e 6c 79  difier (11) only
1be30 20 77 6f 72 6b 73 20 69 66 20 69 74 20 69 6d 6d   works if it imm
1be40 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73  ediately follows
1be50 20 0a 61 20 74 69 6d 65 73 74 72 69 6e 67 20 69   .a timestring i
1be60 6e 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44  n the DDDDDDDDDD
1be70 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69 73 20   format. .^This 
1be80 6d 6f 64 69 66 69 65 72 20 63 61 75 73 65 73 20  modifier causes 
1be90 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20 74  the DDDDDDDDDD t
1bea0 6f 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64  o be interpreted
1beb0 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69 61   not .as a Julia
1bec0 6e 20 64 61 79 20 6e 75 6d 62 65 72 20 61 73 20  n day number as 
1bed0 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c  it normally woul
1bee0 64 20 62 65 2c 20 62 75 74 20 61 73 0a 5b 68 74  d be, but as.[ht
1bef0 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1bf00 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f  a.org/wiki/Unix_
1bf10 74 69 6d 65 20 7c 20 55 6e 69 78 20 54 69 6d 65  time | Unix Time
1bf20 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72 20  ] - the .number 
1bf30 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65  of seconds since
1bf40 20 31 39 37 30 2e 20 20 49 66 20 74 68 65 20 22   1970.  If the "
1bf50 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66  unixepoch" modif
1bf60 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c  ier does not.fol
1bf70 6c 6f 77 20 61 20 74 69 6d 65 73 74 72 69 6e 67  low a timestring
1bf80 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 44 44 44   of the form DDD
1bf90 44 44 44 44 44 44 44 20 77 68 69 63 68 20 65 78  DDDDDDD which ex
1bfa0 70 72 65 73 73 65 73 20 74 68 65 20 6e 75 6d 62  presses the numb
1bfb0 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er.of seconds si
1bfc0 6e 63 65 20 31 39 37 30 20 6f 72 20 69 66 20 6f  nce 1970 or if o
1bfd0 74 68 65 72 20 6d 6f 64 69 66 69 65 72 73 0a 73  ther modifiers.s
1bfe0 65 70 61 72 61 74 65 20 74 68 65 20 22 75 6e 69  eparate the "uni
1bff0 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72  xepoch" modifier
1c000 20 66 72 6f 6d 20 70 72 69 6f 72 20 44 44 44 44   from prior DDDD
1c010 44 44 44 44 44 44 20 74 68 65 6e 20 74 68 65 0a  DDDDDD then the.
1c020 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
1c030 66 69 6e 65 64 2e 0a 44 75 65 20 74 6f 20 70 72  fined..Due to pr
1c040 65 63 69 73 69 6f 6e 20 6c 69 6d 69 74 61 74 69  ecision limitati
1c050 6f 6e 73 20 69 6d 70 6f 73 65 64 20 62 79 20 74  ons imposed by t
1c060 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
1c070 6e 73 20 75 73 65 0a 6f 66 20 36 34 2d 62 69 74  ns use.of 64-bit
1c080 20 69 6e 74 65 67 65 72 73 2c 20 74 68 65 20 22   integers, the "
1c090 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66  unixepoch" modif
1c0a0 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ier only works f
1c0b0 6f 72 0a 64 61 74 65 73 20 62 65 74 77 65 65 6e  or.dates between
1c0c0 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30   0000-01-01 00:0
1c0d0 30 3a 30 30 20 61 6e 64 20 35 33 35 32 2d 31 31  0:00 and 5352-11
1c0e0 2d 30 31 20 31 30 3a 35 32 3a 34 37 20 28 75 6e  -01 10:52:47 (un
1c0f0 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d 36 32 31  ix times.of -621
1c100 36 37 32 31 39 32 30 30 20 74 68 72 6f 75 67 68  67219200 through
1c110 20 31 30 36 37 35 31 39 39 31 36 37 29 2e 3c 2f   10675199167).</
1c120 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f 63  p>..<p>^The "loc
1c130 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72  altime" modifier
1c140 20 28 31 32 29 20 61 73 73 75 6d 65 73 20 74 68   (12) assumes th
1c150 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 74 6f  e time string to
1c160 20 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e 0a   its left is in.
1c170 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69  Universal Coordi
1c180 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29  nated Time (UTC)
1c190 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 65   and adjusts the
1c1a0 20 74 69 6d 65 0a 73 74 72 69 6e 67 20 73 6f 20   time.string so 
1c1b0 74 68 61 74 20 69 74 20 64 69 73 70 6c 61 79 73  that it displays
1c1c0 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49 66 20   localtime.  If 
1c1d0 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c  "localtime".foll
1c1e0 6f 77 73 20 61 20 74 69 6d 65 20 74 68 61 74 20  ows a time that 
1c1f0 69 73 20 6e 6f 74 20 55 54 43 2c 20 74 68 65 6e  is not UTC, then
1c200 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
1c210 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28 54 68   undefined..^(Th
1c220 65 20 22 75 74 63 22 20 69 73 20 74 68 65 20 6f  e "utc" is the o
1c230 70 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f 63 61  pposite of "loca
1c240 6c 74 69 6d 65 22 2e 20 20 22 75 74 63 22 20 61  ltime".  "utc" a
1c250 73 73 75 6d 65 73 20 74 68 61 74 20 74 68 65 20  ssumes that the 
1c260 73 74 72 69 6e 67 0a 74 6f 20 69 74 73 20 6c 65  string.to its le
1c270 66 74 20 69 73 20 69 6e 20 74 68 65 20 6c 6f 63  ft is in the loc
1c280 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61 6e 64 20  al timezone and 
1c290 61 64 6a 75 73 74 73 20 74 68 61 74 20 73 74 72  adjusts that str
1c2a0 69 6e 67 20 74 6f 20 62 65 20 69 6e 20 55 54 43  ing to be in UTC
1c2b0 2e 29 5e 0a 49 66 20 74 68 65 20 70 72 69 6f 72  .)^.If the prior
1c2c0 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 69   string is not i
1c2d0 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20 74 68 65  n localtime, the
1c2e0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
1c2f0 22 75 74 63 22 20 69 73 0a 75 6e 64 65 66 69 6e  "utc" is.undefin
1c300 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61  ed.</p>..<h3>Exa
1c310 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70  mples</h3>..^(<p
1c320 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72  >Compute the cur
1c330 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c  rent date.<p>..<
1c340 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43  blockquote>SELEC
1c350 54 20 64 61 74 65 28 27 6e 6f 77 27 29 3b 3c 2f  T date('now');</
1c360 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1c370 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1c380 6c 61 73 74 20 64 61 79 20 6f 66 20 74 68 65 20  last day of the 
1c390 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f  current month.</
1c3a0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1c3b0 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77  SELECT date('now
1c3c0 27 2c 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74  ','start of mont
1c3d0 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d  h','+1 month','-
1c3e0 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  1 day');.</block
1c3f0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1c400 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20  ompute the date 
1c410 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61  and time given a
1c420 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20   unix timestamp 
1c430 31 30 39 32 39 34 31 34 36 36 2e 3c 2f 70 3e 0a  1092941466.</p>.
1c440 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1c450 20 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d    SELECT datetim
1c460 65 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75  e(1092941466, 'u
1c470 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c  nixepoch');.</bl
1c480 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1c490 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  p>Compute the da
1c4a0 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65  te and time give
1c4b0 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61  n a unix timesta
1c4c0 6d 70 20 31 30 39 32 39 34 31 34 36 36 2c 20 61  mp 1092941466, a
1c4d0 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66  nd .compensate f
1c4e0 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69  or your local ti
1c4f0 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c  mezone.</p>..<bl
1c500 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1c510 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32  CT datetime(1092
1c520 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f  941466, 'unixepo
1c530 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27  ch', 'localtime'
1c540 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1c550 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1c560 20 74 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69   the current uni
1c570 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e  x timestamp.</p>
1c580 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1c590 20 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65   SELECT strftime
1c5a0 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f  ('%s','now');.</
1c5b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1c5c0 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1c5d0 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73  number of days s
1c5e0 69 6e 63 65 20 74 68 65 20 73 69 67 6e 69 6e 67  ince the signing
1c5f0 20 6f 66 20 74 68 65 20 55 53 20 44 65 63 6c 61   of the US Decla
1c600 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65  ration.of Indepe
1c610 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c  ndence.</p>..<bl
1c620 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1c630 43 54 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f  CT julianday('no
1c640 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28  w') - julianday(
1c650 27 31 37 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c  '1776-07-04');.<
1c660 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1c670 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1c680 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e   number of secon
1c690 64 73 20 73 69 6e 63 65 20 61 20 70 61 72 74 69  ds since a parti
1c6a0 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e 20  cular moment in 
1c6b0 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  2004:</p>..<bloc
1c6c0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1c6d0 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
1c6e0 6e 6f 77 27 29 20 2d 20 73 74 72 66 74 69 6d 65  now') - strftime
1c6f0 28 27 25 73 27 2c 27 32 30 30 34 2d 30 31 2d 30  ('%s','2004-01-0
1c700 31 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f  1 02:34:56');.</
1c710 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1c720 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65  (<p>.Compute the
1c730 20 64 61 74 65 20 6f 66 20 74 68 65 20 66 69 72   date of the fir
1c740 73 74 20 54 75 65 73 64 61 79 20 69 6e 20 4f 63  st Tuesday in Oc
1c750 74 6f 62 65 72 0a 66 6f 72 20 74 68 65 20 63 75  tober.for the cu
1c760 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e  rrent year..</p>
1c770 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1c780 20 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f   SELECT date('no
1c790 77 27 2c 27 73 74 61 72 74 20 6f 66 20 79 65 61  w','start of yea
1c7a0 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27  r','+9 months','
1c7b0 77 65 65 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62  weekday 2');.</b
1c7c0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1c7d0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 74  <p>Compute the t
1c7e0 69 6d 65 20 73 69 6e 63 65 20 74 68 65 20 75 6e  ime since the un
1c7f0 69 78 20 65 70 6f 63 68 20 69 6e 20 73 65 63 6f  ix epoch in seco
1c800 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74 72 66 74  nds .(like strft
1c810 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20  ime('%s','now') 
1c820 65 78 63 65 70 74 20 69 6e 63 6c 75 64 65 73 20  except includes 
1c830 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 29  fractional part)
1c840 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
1c850 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a 75  te>.  SELECT (ju
1c860 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d  lianday('now') -
1c870 20 32 34 34 30 35 38 37 2e 35 29 2a 38 36 34 30   2440587.5)*8640
1c880 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  0.0;.</blockquot
1c890 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76 65 61 74  e>)^..<h3>Caveat
1c8a0 73 20 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a  s And Bugs</h3>.
1c8b0 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74 61 74  .<p>The computat
1c8c0 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d  ion of local tim
1c8d0 65 20 64 65 70 65 6e 64 73 20 68 65 61 76 69 6c  e depends heavil
1c8e0 79 20 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f  y on the whim .o
1c8f0 66 20 70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e  f politicians an
1c900 64 20 69 73 20 74 68 75 73 20 64 69 66 66 69 63  d is thus diffic
1c910 75 6c 74 20 74 6f 20 67 65 74 20 63 6f 72 72 65  ult to get corre
1c920 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61  ct for .all loca
1c930 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73 20 69 6d  les. ^In this im
1c940 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68  plementation, th
1c950 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62  e standard C lib
1c960 72 61 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c  rary .function l
1c970 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 69 73 20  ocaltime_r() is 
1c980 75 73 65 64 20 74 6f 20 61 73 73 69 73 74 20 69  used to assist i
1c990 6e 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f  n the calculatio
1c9a0 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65  n of .local time
1c9b0 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63 61 6c 74  .  ^(The .localt
1c9c0 69 6d 65 5f 72 28 29 20 43 20 66 75 6e 63 74 69  ime_r() C functi
1c9d0 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79  on normally only
1c9e0 20 77 6f 72 6b 73 20 66 6f 72 20 79 65 61 72 73   works for years
1c9f0 0a 62 65 74 77 65 65 6e 20 31 39 37 30 20 61 6e  .between 1970 an
1ca00 64 20 32 30 33 37 2e 20 46 6f 72 20 64 61 74 65  d 2037. For date
1ca10 73 20 6f 75 74 73 69 64 65 20 74 68 69 73 20 72  s outside this r
1ca20 61 6e 67 65 2c 20 53 51 4c 69 74 65 20 0a 61 74  ange, SQLite .at
1ca30 74 65 6d 70 74 73 20 74 6f 20 6d 61 70 20 74 68  tempts to map th
1ca40 65 20 79 65 61 72 20 69 6e 74 6f 20 61 6e 20 65  e year into an e
1ca50 71 75 69 76 61 6c 65 6e 74 20 79 65 61 72 20 77  quivalent year w
1ca60 69 74 68 69 6e 20 0a 74 68 69 73 20 72 61 6e 67  ithin .this rang
1ca70 65 2c 20 64 6f 20 74 68 65 20 63 61 6c 63 75 6c  e, do the calcul
1ca80 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 70 20  ation, then map 
1ca90 74 68 65 20 79 65 61 72 20 62 61 63 6b 2e 29 5e  the year back.)^
1caa0 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73  </p>...<p>^(Thes
1cab0 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79  e functions only
1cac0 20 77 6f 72 6b 20 66 6f 72 20 64 61 74 65 73 20   work for dates 
1cad0 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d  between 0000-01-
1cae0 30 31 20 30 30 3a 30 30 3a 30 30 0a 61 6e 64 20  01 00:00:00.and 
1caf0 39 39 39 39 2d 31 32 2d 33 31 20 32 33 3a 35 39  9999-12-31 23:59
1cb00 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20 64 61 79  :59 (julidan day
1cb10 20 6e 75 6d 62 65 72 73 20 31 37 32 31 30 35 39   numbers 1721059
1cb20 2e 35 20 74 68 72 6f 75 67 68 20 35 33 37 33 34  .5 through 53734
1cb30 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64 61 74  84.5).)^.For dat
1cb40 65 73 20 6f 75 74 73 69 64 65 20 74 68 61 74 20  es outside that 
1cb50 72 61 6e 67 65 2c 20 74 68 65 20 72 65 73 75 6c  range, the resul
1cb60 74 73 20 6f 66 20 74 68 65 73 65 0a 66 75 6e 63  ts of these.func
1cb70 74 69 6f 6e 73 20 61 72 65 20 75 6e 64 65 66 69  tions are undefi
1cb80 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e  ned.</p>..<p>Non
1cb90 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70  -Vista Windows p
1cba0 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20 73 75  latforms only su
1cbb0 70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20 6f 66  pport one set of
1cbc0 20 44 53 54 20 72 75 6c 65 73 2e 20 0a 56 69 73   DST rules. .Vis
1cbd0 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 73  ta only supports
1cbe0 20 74 77 6f 2e 20 54 68 65 72 65 66 6f 72 65 2c   two. Therefore,
1cbf0 20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74 66 6f   on these platfo
1cc00 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63 61 6c  rms, .historical
1cc10 20 44 53 54 20 63 61 6c 63 75 6c 61 74 69 6f 6e   DST calculation
1cc20 73 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f 72 72  s will be incorr
1cc30 65 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d 70 6c  ect. .For exampl
1cc40 65 2c 20 69 6e 20 74 68 65 20 55 53 2c 20 69 6e  e, in the US, in
1cc50 20 32 30 30 37 20 74 68 65 20 44 53 54 20 72 75   2007 the DST ru
1cc60 6c 65 73 20 63 68 61 6e 67 65 64 2e 20 0a 4e 6f  les changed. .No
1cc70 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20  n-Vista Windows 
1cc80 70 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c 79 20  platforms apply 
1cc90 74 68 65 20 6e 65 77 20 32 30 30 37 20 44 53 54  the new 2007 DST
1cca0 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c 20 70   rules .to all p
1ccb0 72 65 76 69 6f 75 73 20 79 65 61 72 73 20 61 73  revious years as
1ccc0 20 77 65 6c 6c 2e 20 56 69 73 74 61 20 64 6f 65   well. Vista doe
1ccd0 73 20 73 6f 6d 65 77 68 61 74 20 62 65 74 74 65  s somewhat bette
1cce0 72 0a 67 65 74 74 69 6e 67 20 72 65 73 75 6c 74  r.getting result
1ccf0 73 20 63 6f 72 72 65 63 74 20 62 61 63 6b 20 74  s correct back t
1cd00 6f 20 31 39 38 36 2c 20 77 68 65 6e 20 74 68 65  o 1986, when the
1cd10 20 72 75 6c 65 73 20 77 65 72 65 20 61 6c 73 6f   rules were also
1cd20 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c   changed.</p>..<
1cd30 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63  p>All internal c
1cd40 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61 73 73 75  omputations assu
1cd50 6d 65 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f  me the .[http://
1cd60 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1cd70 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f  /wiki/Gregorian_
1cd80 63 61 6c 65 6e 64 61 72 20 7c 20 47 72 65 67 6f  calendar | Grego
1cd90 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 0a 73  rian calendar].s
1cda0 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20 61 6c  ystem.  It is al
1cdb0 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61 74 20  so assumed that 
1cdc0 65 76 65 72 79 0a 64 61 79 20 69 73 20 65 78 61  every.day is exa
1cdd0 63 74 6c 79 20 38 36 34 30 30 20 73 65 63 6f 6e  ctly 86400 secon
1cde0 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c  ds in duration.<
1cdf0 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
1ce00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce40 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1ce50 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46 75 6e  n {Aggregate Fun
1ce60 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20  ctions} aggfunc 
1ce70 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c  {*aggfunc}.</tcl
1ce80 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65  >..<p>.The aggre
1ce90 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
1cea0 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61  hown below are a
1ceb0 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
1cec0 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  ult.  Additional
1ced0 0a 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74  .aggregate funct
1cee0 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20  ions written in 
1cef0 43 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 75  C may be added u
1cf00 73 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74  sing the .[sqlit
1cf10 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
1cf20 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f  on()]</a>.API.</
1cf30 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20  p>..<p>.^In any 
1cf40 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1cf50 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61 20  on that takes a 
1cf60 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c  single argument,
1cf70 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63   that argument.c
1cf80 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62  an be preceded b
1cf90 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49  y the keyword DI
1cfa0 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63  STINCT.  ^In suc
1cfb0 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61  h cases, duplica
1cfc0 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  te.elements are 
1cfd0 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20  filtered before 
1cfe0 62 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74  being passed int
1cff0 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  o the aggregate 
1d000 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65  function..^For e
1d010 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63  xample, the func
1d020 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74  tion "count(dist
1d030 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65  inct X)" will re
1d040 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a  turn the number.
1d050 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75  of distinct valu
1d060 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69  es of column X i
1d070 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f  nstead of the to
1d080 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  tal number of no
1d090 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e  n-null.values in
1d0a0 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a   column X..</p>.
1d0b0 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30  .<table border=0
1d0c0 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e   cellpadding=10>
1d0d0 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b  .<tcl>.funcdef {
1d0e0 61 76 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61  avg(X)} {*avg {a
1d0f0 76 67 28 29 20 61 67 67 72 65 67 61 74 65 20 66  vg() aggregate f
1d100 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1d110 68 65 20 61 76 67 28 29 20 66 75 6e 63 74 69 6f  he avg() functio
1d120 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20  n.  returns the 
1d130 61 76 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66  average value of
1d140 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69   all non-NULL <i
1d150 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a  >X</i> within a.
1d160 20 20 67 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e    group.  ^Strin
1d170 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65  g and BLOB value
1d180 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f  s that do not lo
1d190 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20  ok like numbers 
1d1a0 61 72 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65  are.  interprete
1d1b0 64 20 61 73 20 30 2e 0a 20 20 5e 54 68 65 20 72  d as 0..  ^The r
1d1c0 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69  esult of avg() i
1d1d0 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74  s always a float
1d1e0 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20  ing point value 
1d1f0 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20  as long as.  at 
1d200 74 68 65 72 65 20 69 73 20 61 74 20 6c 65 61 73  there is at leas
1d210 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  t one non-NULL i
1d220 6e 70 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c  nput even if all
1d230 0a 20 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e  .  inputs are in
1d240 74 65 67 65 72 73 2e 20 20 5e 54 68 65 20 72 65  tegers.  ^The re
1d250 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73  sult of avg() is
1d260 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c   NULL if and onl
1d270 79 20 69 66 0a 20 20 74 68 65 72 65 20 61 72 65  y if.  there are
1d280 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70   no non-NULL inp
1d290 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65  uts.  .}..funcde
1d2a0 66 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e  f {count(X) coun
1d2b0 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63  t(*)} {*count {c
1d2c0 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61 74 65  ount() aggregate
1d2d0 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1d2e0 5e 54 68 65 20 63 6f 75 6e 74 28 58 29 20 66 75  ^The count(X) fu
1d2f0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20  nction returns. 
1d300 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20   a count of the 
1d310 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a  number of times.
1d320 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20    that <i>X</i> 
1d330 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61  is not NULL in a
1d340 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f   group.  ^The co
1d350 75 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a  unt(*) function.
1d360 20 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d    (with no argum
1d370 65 6e 74 73 29 20 72 65 74 75 72 6e 73 20 74 68  ents) returns th
1d380 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
1d390 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72  f rows in the gr
1d3a0 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  oup..}..funcdef 
1d3b0 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29  {group_concat(X)
1d3c0 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c   group_concat(X,
1d3d0 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63  Y)} {.  *group_c
1d3e0 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e  oncat {group_con
1d3f0 63 61 74 28 29 20 61 67 67 72 65 67 61 74 65 20  cat() aggregate 
1d400 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20  function}.} {.  
1d410 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61  ^The group_conca
1d420 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  t() function ret
1d430 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20  urns.  a string 
1d440 77 68 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e  which is the con
1d450 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20  catenation of.  
1d460 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
1d470 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ues of <i>X</i>.
1d480 20 20 5e 49 66 20 70 61 72 61 6d 65 74 65 72 20    ^If parameter 
1d490 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73  <i>Y</i> is pres
1d4a0 65 6e 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73  ent then.  it is
1d4b0 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70   used as the sep
1d4c0 61 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e  arator.  between
1d4d0 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69   instances of <i
1d4e0 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d  >X</i>.  ^A comm
1d4f0 61 20 28 22 2c 22 29 20 69 73 20 75 73 65 64 20  a (",") is used 
1d500 61 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72  as the separator
1d510 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69  .  if <i>Y</i> i
1d520 73 20 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20  s omitted.  The 
1d530 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e  order of the con
1d540 63 61 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e  catenated elemen
1d550 74 73 20 69 73 0a 20 20 61 72 62 69 74 72 61 72  ts is.  arbitrar
1d560 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  y..}..funcdef {m
1d570 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46  ax(X)} {*maxAggF
1d580 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61  unc *agg_max {ma
1d590 78 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  x() aggregate fu
1d5a0 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
1d5b0 65 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  e max() aggregat
1d5c0 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74  e function.  ret
1d5d0 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  urns the maximum
1d5e0 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61   value of all va
1d5f0 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
1d600 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d 75  p..  ^The maximu
1d610 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 76  m value is the v
1d620 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
1d630 62 65 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74  be returned last
1d640 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42   in an.  ORDER B
1d650 59 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f  Y on the same co
1d660 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61 74  lumn.  ^Aggregat
1d670 65 20 6d 61 78 28 29 20 72 65 74 75 72 6e 73 20  e max() returns 
1d680 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f  NULL .  if and o
1d690 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65  nly if there are
1d6a0 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c   no non-NULL val
1d6b0 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
1d6c0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69  ..}..funcdef {mi
1d6d0 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75  n(X)} {*minAggFu
1d6e0 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e  nc *agg_min {min
1d6f0 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1d700 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
1d710 20 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65   min() aggregate
1d720 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75   function.  retu
1d730 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  rns the minimum 
1d740 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f  non-NULL value o
1d750 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20  f all values in 
1d760 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68  the group..  ^Th
1d770 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20  e minimum value 
1d780 69 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e  is the first non
1d790 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68 61 74  -NULL value that
1d7a0 20 77 6f 75 6c 64 20 61 70 70 65 61 72 0a 20 20   would appear.  
1d7b0 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f  in an ORDER BY o
1d7c0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20  f the column..  
1d7d0 5e 41 67 67 72 65 67 61 74 65 20 6d 69 6e 28 29  ^Aggregate min()
1d7e0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66   returns NULL if
1d7f0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
1d800 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55  re are no non-NU
1d810 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e 20 74  LL.  values in t
1d820 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
1d830 63 64 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74  cdef {sum(X) tot
1d840 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46  al(X)} {.  *sumF
1d850 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a  unc *sum *total.
1d860 20 20 7b 73 75 6d 28 29 20 61 67 67 72 65 67 61    {sum() aggrega
1d870 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b  te function}.  {
1d880 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74  total() aggregat
1d890 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a  e function}.} {.
1d8a0 20 20 5e 54 68 65 20 73 75 6d 28 29 20 61 6e 64    ^The sum() and
1d8b0 20 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61   total() aggrega
1d8c0 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72  te functions.  r
1d8d0 65 74 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c  eturn sum of all
1d8e0 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73   non-NULL values
1d8f0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
1d900 20 5e 49 66 20 74 68 65 72 65 20 61 72 65 20 6e   ^If there are n
1d910 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  o non-NULL input
1d920 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29   rows then sum()
1d930 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20   returns.  NULL 
1d940 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75  but total() retu
1d950 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20  rns 0.0..  NULL 
1d960 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20  is not normally 
1d970 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74  a helpful result
1d980 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20   for the sum of 
1d990 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68  no rows.  but th
1d9a0 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72  e SQL standard r
1d9b0 65 71 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d  equires it and m
1d9c0 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20  ost other.  SQL 
1d9d0 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
1d9e0 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29   implement sum()
1d9f0 20 74 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c   that way so SQL
1da00 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74  ite does it in t
1da10 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e  he.  same way in
1da20 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d   order to be com
1da30 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e  patible.   The n
1da40 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61  on-standard tota
1da50 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69  l() function.  i
1da60 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20  s provided as a 
1da70 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74  convenient way t
1da80 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68  o work around th
1da90 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65  is design proble
1daa0 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  m.  in the SQL l
1dab0 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20  anguage.</p>..  
1dac0 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  <p>^The result o
1dad0 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77  f total() is alw
1dae0 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  ays a floating p
1daf0 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54  oint value..  ^T
1db00 68 65 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d  he result of sum
1db10 28 29 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  () is an integer
1db20 20 76 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f   value if all no
1db30 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72  n-NULL inputs ar
1db40 65 20 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49  e integers..  ^I
1db50 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73  f any input to s
1db60 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65 72 20  um() is neither 
1db70 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20  an integer or a 
1db80 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28  NULL.  then sum(
1db90 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61  ) returns a floa
1dba0 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
1dbb0 0a 20 20 77 68 69 63 68 20 6d 69 67 68 74 20 62  .  which might b
1dbc0 65 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69  e an approximati
1dbd0 6f 6e 20 74 6f 20 74 68 65 20 74 72 75 65 20 73  on to the true s
1dbe0 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53  um.</p>..  <p>^S
1dbf0 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20  um() will throw 
1dc00 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72  an "integer over
1dc10 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20  flow" exception 
1dc20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20  if all inputs.  
1dc30 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20  are integers or 
1dc40 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e  NULL.  and an in
1dc50 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f  teger overflow o
1dc60 63 63 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69  ccurs at any poi
1dc70 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f  nt during the co
1dc80 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f  mputation..  ^To
1dc90 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f  tal() never thro
1dca0 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76  ws an integer ov
1dcb0 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e  erflow..}.</tcl>
1dcc0 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e  .</table>..<tcl>
1dcd0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1dce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dcf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
1dd20 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69  Section INSERT i
1dd30 6e 73 65 72 74 20 7b 49 4e 53 45 52 54 20 2a 49  nsert {INSERT *I
1dd40 4e 53 45 52 54 73 7d 0a 0a 52 65 63 75 72 73 69  NSERTs}..Recursi
1dd50 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
1dd60 69 6e 73 65 72 74 2d 73 74 6d 74 0a 3c 2f 74 63  insert-stmt.</tc
1dd70 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52  l>..<p>The INSER
1dd80 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65  T statement come
1dd90 73 20 69 6e 20 74 68 72 65 65 20 62 61 73 69 63  s in three basic
1dda0 20 66 6f 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c   forms.  .<ul>.<
1ddb0 6c 69 3e 3c 70 3e 5e 54 68 65 20 66 69 72 73 74  li><p>^The first
1ddc0 20 66 6f 72 6d 20 28 77 69 74 68 20 74 68 65 20   form (with the 
1ddd0 22 56 41 4c 55 45 53 22 20 6b 65 79 77 6f 72 64  "VALUES" keyword
1dde0 29 20 63 72 65 61 74 65 73 20 6f 6e 65 20 6f 72  ) creates one or
1ddf0 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77 73 20 69   more.new rows i
1de00 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  n.an existing ta
1de10 62 6c 65 2e 20 5e 49 66 20 6e 6f 20 63 6f 6c 75  ble. ^If no colu
1de20 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69  mn-list is speci
1de30 66 69 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75  fied then the nu
1de40 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65 73 20 69  mber.of values i
1de50 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 65 61 63  nserted into eac
1de60 68 20 72 6f 77 0a 6d 75 73 74 20 62 65 20 74 68  h row.must be th
1de70 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75  e same as the nu
1de80 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1de90 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 49  in the table. ^I
1dea0 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68 65 20  n this case.the 
1deb0 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61  result of evalua
1dec0 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f  ting the left-mo
1ded0 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  st expression in
1dee0 20 65 61 63 68 20 74 65 72 6d 20 6f 66 0a 74 68   each term of.th
1def0 65 20 56 41 4c 55 45 53 20 6c 69 73 74 20 69 73  e VALUES list is
1df00 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
1df10 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c  he left-most col
1df20 75 6d 6e 20 6f 66 20 74 68 65 20 65 61 63 68 20  umn of the each 
1df30 6e 65 77 20 72 6f 77 2c 0a 61 6e 64 20 66 6f 72  new row,.and for
1df40 74 68 20 66 6f 72 20 65 61 63 68 20 73 75 62 73  th for each subs
1df50 65 71 75 65 6e 74 20 65 78 70 72 65 73 73 69 6f  equent expressio
1df60 6e 2e 20 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d  n. ^If a.column-
1df70 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65  list is specifie
1df80 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  d, then the numb
1df90 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  er of values in 
1dfa0 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
1dfb0 0a 56 41 4c 55 45 20 6c 69 73 74 20 6d 75 73 74  .VALUE list must
1dfc0 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65   match the numbe
1dfd0 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63  r of.specified c
1dfe0 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66  olumns. ^Each of
1dff0 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d   the named colum
1e000 6e 73 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f  ns of the new ro
1e010 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 0a 77  w is populated.w
1e020 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 73 20  ith the results 
1e030 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
1e040 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1e050 56 41 4c 55 45 53 20 65 78 70 72 65 73 73 69 6f  VALUES expressio
1e060 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e  n. ^Table.column
1e070 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70  s that do not ap
1e080 70 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6c 75  pear in the colu
1e090 6d 6e 20 6c 69 73 74 20 61 72 65 20 70 6f 70 75  mn list are popu
1e0a0 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 20 64  lated with the d
1e0b0 65 66 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61  efault.column va
1e0c0 6c 75 65 20 28 73 70 65 63 69 66 69 65 64 20 61  lue (specified a
1e0d0 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43 52  s part of the CR
1e0e0 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
1e0f0 6d 65 6e 74 29 2c 20 6f 72 20 77 69 74 68 20 4e  ment), or with N
1e100 55 4c 4c 20 69 66 0a 6e 6f 20 64 65 66 61 75 6c  ULL if.no defaul
1e110 74 20 76 61 6c 75 65 20 69 73 20 73 70 65 63 69  t value is speci
1e120 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68  fied...<li><p>Th
1e130 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66  e second form of
1e140 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74   the INSERT stat
1e150 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61  ement contains a
1e160 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1e170 74 0a 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56  t.instead of a V
1e180 41 4c 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41  ALUES clause. ^A
1e190 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e   new entry is in
1e1a0 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
1e1b0 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72  table for each.r
1e1c0 6f 77 20 6f 66 20 64 61 74 61 20 72 65 74 75 72  ow of data retur
1e1d0 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e 67  ned by executing
1e1e0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
1e1f0 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c  ement. ^If a col
1e200 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63  umn-list is.spec
1e210 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65  ified, the numbe
1e220 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1e230 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
1e240 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65  e SELECT must be
1e250 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65   the same.as the
1e260 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73   number of items
1e270 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c   in the column-l
1e280 69 73 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ist. ^Otherwise,
1e290 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69   if no column-li
1e2a0 73 74 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c  st is.specified,
1e2b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1e2c0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
1e2d0 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45  sult of the SELE
1e2e0 43 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73  CT must be the s
1e2f0 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65  ame.as the numbe
1e300 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1e310 74 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20  the table. ^Any 
1e320 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1e330 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 63 6f 6d 70  , including.comp
1e340 6f 75 6e 64 20 53 45 4c 45 43 54 73 20 61 6e 64  ound SELECTs and
1e350 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1e360 74 73 20 77 69 74 68 20 4f 52 44 45 52 20 42 59  ts with ORDER BY
1e370 20 61 6e 64 2f 6f 72 20 4c 49 4d 49 54 20 63 6c   and/or LIMIT cl
1e380 61 75 73 65 73 2c 20 0a 6d 61 79 20 62 65 20 75  auses, .may be u
1e390 73 65 64 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  sed in an INSERT
1e3a0 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68   statement of th
1e3b0 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70  is form...<li><p
1e3c0 3e 54 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20  >The third form 
1e3d0 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  of an INSERT sta
1e3e0 74 65 6d 65 6e 74 20 69 73 20 77 69 74 68 20 44  tement is with D
1e3f0 45 46 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e  EFAULT VALUES..^
1e400 28 54 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20  (The INSERT ... 
1e410 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20 73  DEFAULT VALUES s
1e420 74 61 74 65 6d 65 6e 74 20 69 6e 73 65 72 74 73  tatement inserts
1e430 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f   a single new ro
1e440 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61 6d 65 64  w into the.named
1e450 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61 63 68 20   table.)^ ^Each 
1e460 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65  column of the ne
1e470 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74  w row is populat
1e480 65 64 20 77 69 74 68 20 69 74 73 20 64 65 66 61  ed with its defa
1e490 75 6c 74 20 76 61 6c 75 65 2c 0a 6f 72 20 77 69  ult value,.or wi
1e4a0 74 68 20 61 20 4e 55 4c 4c 20 69 66 20 6e 6f 20  th a NULL if no 
1e4b0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73  default value is
1e4c0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
1e4d0 72 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  rt of the column
1e4e0 0a 64 65 66 69 6e 69 74 69 6f 6e 20 69 6e 20 74  .definition in t
1e4f0 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
1e500 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c  statement...</ul
1e510 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f  >..<p>^The optio
1e520 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  nal conflict-cla
1e530 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73  use allows the s
1e540 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
1e550 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63  an alternative.c
1e560 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
1e570 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
1e580 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64  gorithm to use d
1e590 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 49  uring this one I
1e5a0 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53  NSERT command..S
1e5b0 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74  ee the section t
1e5c0 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49  itled.[ON CONFLI
1e5d0 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  CT] for addition
1e5e0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
1e5f0 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  For compatibilit
1e600 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74  y with MySQL, ^t
1e610 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f 77 73  he parser allows
1e620 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 0a   the use of the.
1e630 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c  single keyword <
1e640 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70  a href="lang_rep
1e650 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41  lace.html">REPLA
1e660 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c  CE</a> as an .al
1e670 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52 54 20  ias for "INSERT 
1e680 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70  OR REPLACE"...<p
1e690 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  >^(The optional 
1e6a0 22 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d  "<i>database-nam
1e6b0 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70  e</i><b>.</b>" p
1e6c0 72 65 66 69 78 20 6f 6e 20 74 68 65 20 3c 69 3e  refix on the <i>
1e6d0 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 69  table-name</i>.i
1e6e0 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74 6f  s support for to
1e6f0 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
1e700 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29  tatements only.)
1e710 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e 61  ^  ^The table na
1e720 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75 61  me must be.unqua
1e730 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45 52  lified for INSER
1e740 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
1e750 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 5b  t occur within [
1e760 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
1e770 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d  statements..^Sim
1e780 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45 46  ilarly, the "DEF
1e790 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72  AULT VALUES" for
1e7a0 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20  m of the INSERT 
1e7b0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75 70  statement is sup
1e7c0 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c  ported for.top-l
1e7d0 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
1e7e0 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20  ements only and 
1e7f0 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20 73  not for INSERT s
1e800 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
1e810 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a  .triggers..<p>..
1e820 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1e830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e870 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e  ####.Section {ON
1e880 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1e890 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e  } conflict {{con
1e8a0 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f  flict clause} {O
1e8b0 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 52 65  N CONFLICT}}..Re
1e8c0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
1e8d0 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  gram conflict-cl
1e8e0 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause.</tcl>..<p>
1e8f0 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
1e900 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61 20  clause is not a 
1e910 73 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f 6d  separate SQL com
1e920 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a 6e  mand.  It is a.n
1e930 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61 75  on-standard clau
1e940 73 65 20 74 68 61 74 20 63 61 6e 20 61 70 70 65  se that can appe
1e950 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72  ar in many other
1e960 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49   SQL commands..I
1e970 74 20 69 73 20 67 69 76 65 6e 20 69 74 73 20 6f  t is given its o
1e980 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74 68  wn section in th
1e990 69 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63 61  is document beca
1e9a0 75 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70 61  use it is not.pa
1e9b0 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53  rt of standard S
1e9c0 51 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72 65  QL and therefore
1e9d0 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66 61   might not be fa
1e9e0 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  miliar.</p>..<p>
1e9f0 5e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20  ^The syntax for 
1ea00 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1ea10 63 6c 61 75 73 65 20 69 73 20 61 73 20 73 68 6f  clause is as sho
1ea20 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68 65  wn above for.the
1ea30 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
1ea40 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20 74 68 65  mmand.  ^For the
1ea50 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44 41   INSERT and.UPDA
1ea60 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65  TE commands, the
1ea70 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f   keywords "ON CO
1ea80 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65 70 6c  NFLICT" are repl
1ea90 61 63 65 64 20 62 79 20 22 4f 52 22 20 73 6f 20  aced by "OR" so 
1eaa0 74 68 61 74 0a 74 68 65 20 73 79 6e 74 61 78 20  that.the syntax 
1eab0 72 65 61 64 73 20 6d 6f 72 65 20 6e 61 74 75 72  reads more natur
1eac0 61 6c 6c 79 2e 20 20 46 6f 72 20 65 78 61 6d 70  ally.  For examp
1ead0 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22  le, instead of."
1eae0 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49  INSERT ON CONFLI
1eaf0 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61  CT IGNORE" we ha
1eb00 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47  ve "INSERT OR IG
1eb10 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f  NORE"..The keywo
1eb20 72 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74  rds change but t
1eb30 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
1eb40 65 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20  e clause is the 
1eb50 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e  same.either way.
1eb60 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20  </p>..<p>The ON 
1eb70 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1eb80 61 70 70 6c 69 65 73 20 74 6f 20 55 4e 49 51 55  applies to UNIQU
1eb90 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 0a 63  E and NOT NULL.c
1eba0 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6e 64 20  onstraints (and 
1ebb0 74 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  to PRIMARY KEY c
1ebc0 6f 6e 73 74 72 61 69 6e 74 73 20 77 68 69 63 68  onstraints which
1ebd0 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
1ebe0 73 20 0a 6f 66 20 74 68 69 73 20 73 65 63 74 69  s .of this secti
1ebf0 6f 6e 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  on are the same 
1ec00 74 68 69 6e 67 20 61 73 20 55 4e 49 51 55 45 20  thing as UNIQUE 
1ec10 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 54 68  constraints)..Th
1ec20 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
1ec30 67 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74  gorithm does not
1ec40 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49  .apply to [FOREI
1ec50 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
1ec60 74 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66  ts]..There are f
1ec70 69 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ive conflict res
1ec80 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1ec90 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42  m choices:.ROLLB
1eca0 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c  ACK, ABORT, FAIL
1ecb0 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45  , IGNORE, and RE
1ecc0 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61  PLACE..^The defa
1ecd0 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
1ece0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1ecf0 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69  m is ABORT.  Thi
1ed00 73 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d  s.is what they m
1ed10 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c  ean:</p>..<dl>.<
1ed20 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f  dt><b>ROLLBACK</
1ed30 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
1ed40 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
1ed50 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
1ed60 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
1ed70 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65   the ROLLBACK.re
1ed80 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
1ed90 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
1eda0 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
1edb0 65 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49  ent with.an SQLI
1edc0 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
1edd0 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61  ror and rolls ba
1ede0 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
1edf0 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20  ransaction..^If 
1ee00 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
1ee10 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20  s.active (other 
1ee20 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  than the implied
1ee30 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61   transaction tha
1ee40 74 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20  t is created on 
1ee50 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74  every.command) t
1ee60 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  hen the ROLLBACK
1ee70 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1ee80 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20  rithm works the 
1ee90 73 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52  same as the.ABOR
1eea0 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e  T algorithm.</p>
1eeb0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42  </dd>..<dt><b>AB
1eec0 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORT</b></dt>.<dd
1eed0 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
1eee0 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
1eef0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
1ef00 63 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a  curs, the ABORT.
1ef10 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
1ef20 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
1ef30 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
1ef40 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51  ement.with an SQ
1ef50 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
1ef60 65 72 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20  error and backs 
1ef70 6f 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a  out any changes.
1ef80 6d 61 64 65 20 62 79 20 74 68 65 20 63 75 72 72  made by the curr
1ef90 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ent SQL statemen
1efa0 74 3b 20 62 75 74 20 63 68 61 6e 67 65 73 20 63  t; but changes c
1efb0 61 75 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53  aused.by prior S
1efc0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  QL statements wi
1efd0 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72  thin the same tr
1efe0 61 6e 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72  ansaction are pr
1eff0 65 73 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a  eserved and the.
1f000 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61  transaction rema
1f010 69 6e 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73  ins active..This
1f020 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
1f030 62 65 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65  behavior and the
1f040 20 62 65 68 61 76 69 6f 72 20 73 70 65 63 69 66   behavior specif
1f050 69 65 64 20 62 79 20 74 68 65 20 53 51 4c 0a 73  ied by the SQL.s
1f060 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64  tandard.</p></dd
1f070 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f  >..<dt><b>FAIL</
1f080 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
1f090 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
1f0a0 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
1f0b0 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
1f0c0 20 74 68 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75   the FAIL.resolu
1f0d0 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61  tion algorithm a
1f0e0 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  borts the curren
1f0f0 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  t SQL statement 
1f100 77 69 74 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43  with an.SQLITE_C
1f110 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 2e  ONSTRAINT error.
1f120 20 20 5e 42 75 74 20 74 68 65 20 46 41 49 4c 20    ^But the FAIL 
1f130 72 65 73 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20  resolution does 
1f140 6e 6f 74 0a 62 61 63 6b 20 6f 75 74 20 70 72 69  not.back out pri
1f150 6f 72 20 63 68 61 6e 67 65 73 20 6f 66 20 74 68  or changes of th
1f160 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
1f170 74 68 61 74 20 66 61 69 6c 65 64 20 6e 6f 72 20  that failed nor 
1f180 64 6f 65 73 0a 69 74 20 65 6e 64 20 74 68 65 20  does.it end the 
1f190 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f  transaction..^Fo
1f1a0 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e  r example, if an
1f1b0 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e   UPDATE.statemen
1f1c0 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20  t encountered a 
1f1d0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1f1e0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74  tion on the 100t
1f1f0 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74  h row that.it at
1f200 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65  tempts to update
1f210 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  , then the first
1f220 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20   99 row changes 
1f230 61 72 65 20 70 72 65 73 65 72 76 65 64 0a 62 75  are preserved.bu
1f240 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77  t changes to row
1f250 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64  s 100 and beyond
1f260 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70   never occur.</p
1f270 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49  ></dd>..<dt><b>I
1f280 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  GNORE</b></dt>.<
1f290 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20  dd><p> ^When an 
1f2a0 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74  applicable const
1f2b0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
1f2c0 6f 63 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e  occurs, .the IGN
1f2d0 4f 52 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ORE resolution a
1f2e0 6c 67 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74  lgorithm skips t
1f2f0 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20  he one row that 
1f300 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e  contains.the con
1f310 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
1f320 6e 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20  n and continues 
1f330 70 72 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65  processing subse
1f340 71 75 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68  quent rows.of th
1f350 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
1f360 61 73 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65  as if nothing we
1f370 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20  nt wrong..Other 
1f380 72 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20  rows before and 
1f390 61 66 74 65 72 20 74 68 65 20 72 6f 77 20 74 68  after the row th
1f3a0 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65  at.contained the
1f3b0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1f3c0 61 74 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74  ation are insert
1f3d0 65 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f  ed or updated.no
1f3e0 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f  rmally. ^No erro
1f3f0 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 77 68  r is returned wh
1f400 65 6e 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f  en the IGNORE co
1f410 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1f420 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  n.algorithm is u
1f430 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  sed.</p></dd>..<
1f440 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62  dt><b>REPLACE</b
1f450 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
1f460 57 68 65 6e 20 61 20 55 4e 49 51 55 45 20 63 6f  When a UNIQUE co
1f470 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1f480 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52  on occurs, the R
1f490 45 50 4c 41 43 45 20 61 6c 67 6f 72 69 74 68 6d  EPLACE algorithm
1f4a0 0a 64 65 6c 65 74 65 73 20 70 72 65 2d 65 78 69  .deletes pre-exi
1f4b0 73 74 69 6e 67 20 72 6f 77 73 20 74 68 61 74 20  sting rows that 
1f4c0 61 72 65 20 63 61 75 73 69 6e 67 20 74 68 65 20  are causing the 
1f4d0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1f4e0 74 69 6f 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e  tion.prior to in
1f4f0 73 65 72 74 69 6e 67 20 6f 72 20 75 70 64 61 74  serting or updat
1f500 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20  ing the current 
1f510 72 6f 77 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d  row and the comm
1f520 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65  and continues .e
1f530 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c  xecuting normall
1f540 79 2e 0a 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c  y..^If a NOT NUL
1f550 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  L constraint vio
1f560 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
1f570 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
1f580 69 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 72  ict.resolution r
1f590 65 70 6c 61 63 65 73 20 74 68 65 20 4e 55 4c 4c  eplaces the NULL
1f5a0 20 76 61 6c 75 65 20 77 69 74 68 0a 74 68 65 20   value with.the 
1f5b0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
1f5c0 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f  r that column, o
1f5d0 72 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  r if the column 
1f5e0 68 61 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76  has no default.v
1f5f0 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20 41  alue, then the A
1f600 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69  BORT algorithm i
1f610 73 20 75 73 65 64 2e 0a 5e 49 66 20 61 20 43 48  s used..^If a CH
1f620 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ECK constraint v
1f630 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
1f640 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e   the REPLACE con
1f650 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
1f660 0a 61 6c 67 6f 72 69 74 68 6d 20 61 6c 77 61 79  .algorithm alway
1f670 73 20 77 6f 72 6b 73 20 6c 69 6b 65 20 41 42 4f  s works like ABO
1f680 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  RT.</p>..<p>^Whe
1f690 6e 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f  n the REPLACE co
1f6a0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1f6b0 6e 20 73 74 72 61 74 65 67 79 20 64 65 6c 65 74  n strategy delet
1f6c0 65 73 20 72 6f 77 73 20 69 6e 20 6f 72 64 65 72  es rows in order
1f6d0 20 74 6f 0a 73 61 74 69 73 66 79 20 61 20 63 6f   to.satisfy a co
1f6e0 6e 73 74 72 61 69 6e 74 2c 20 5b 43 52 45 41 54  nstraint, [CREAT
1f6f0 45 20 54 52 49 47 47 45 52 20 7c 20 64 65 6c 65  E TRIGGER | dele
1f700 74 65 20 74 72 69 67 67 65 72 73 5d 20 66 69 72  te triggers] fir
1f710 65 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  e if and only if
1f720 0a 5b 72 65 63 75 72 73 69 76 65 5f 74 72 69 67  .[recursive_trig
1f730 67 65 72 73 20 70 72 61 67 6d 61 20 7c 20 72 65  gers pragma | re
1f740 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
1f750 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2e 3c 2f  ] are enabled.</
1f760 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 73 71 6c  p>..<p>^The [sql
1f770 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b  ite3_update_hook
1f780 20 7c 20 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20   | update hook] 
1f790 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 64 20 66  is not invoked f
1f7a0 6f 72 20 72 6f 77 73 20 74 68 61 74 0a 61 72 65  or rows that.are
1f7b0 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
1f7c0 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
1f7d0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61   resolution stra
1f7e0 74 65 67 79 2e 20 20 5e 4e 6f 72 20 64 6f 65 73  tegy.  ^Nor does
1f7f0 0a 52 45 50 4c 41 43 45 20 69 6e 63 72 65 6d 65  .REPLACE increme
1f800 6e 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  nt the [sqlite3_
1f810 63 68 61 6e 67 65 73 20 7c 20 63 68 61 6e 67 65  changes | change
1f820 20 63 6f 75 6e 74 65 72 5d 2e 0a 54 68 65 20 65   counter]..The e
1f830 78 63 65 70 74 69 6f 6e 61 6c 20 62 65 68 61 76  xceptional behav
1f840 69 6f 72 73 20 64 65 66 69 6e 65 64 20 69 6e 20  iors defined in 
1f850 74 68 69 73 20 70 61 72 61 67 72 61 70 68 20 6d  this paragraph m
1f860 69 67 68 74 20 63 68 61 6e 67 65 20 0a 69 6e 20  ight change .in 
1f870 61 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65  a future release
1f880 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e  .</p>.</dl>..<p>
1f890 5e 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73  ^The algorithm s
1f8a0 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
1f8b0 4f 52 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20  OR clause of an 
1f8c0 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
1f8d0 0a 6f 76 65 72 72 69 64 65 73 20 61 6e 79 20 61  .overrides any a
1f8e0 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
1f8f0 65 64 20 69 6e 20 61 20 43 52 45 41 54 45 20 54  ed in a CREATE T
1f900 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67  ABLE..^If no alg
1f910 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63 69 66  orithm is specif
1f920 69 65 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68  ied anywhere, th
1f930 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68  e ABORT algorith
1f940 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  m is used.</p>..
1f950 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1f960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9a0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 49  ####.Section REI
1f9b0 4e 44 45 58 20 72 65 69 6e 64 65 78 20 52 45 49  NDEX reindex REI
1f9c0 4e 44 45 58 0a 0a 52 65 63 75 72 73 69 76 65 42  NDEX..RecursiveB
1f9d0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 69  ubbleDiagram rei
1f9e0 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  ndex-stmt.</tcl>
1f9f0 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 49 4e 44 45  ..<p>^The REINDE
1fa00 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65  X command is use
1fa10 64 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 64 20  d to delete and 
1fa20 72 65 63 72 65 61 74 65 20 69 6e 64 69 63 65 73  recreate indices
1fa30 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54   from scratch..T
1fa40 68 69 73 20 69 73 20 75 73 65 66 75 6c 20 77 68  his is useful wh
1fa50 65 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f  en the definitio
1fa60 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  n of a collation
1fa70 20 73 65 71 75 65 6e 63 65 20 68 61 73 20 63 68   sequence has ch
1fa80 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  anged..</p>..<p>
1fa90 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20  ^If the REINDEX 
1faa0 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 66  keyword is not f
1fab0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c  ollowed by a col
1fac0 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20  lation-sequence 
1fad0 6f 72 20 64 61 74 61 62 61 73 65 20 0a 6f 62 6a  or database .obj
1fae0 65 63 74 20 69 64 65 6e 74 69 66 69 65 72 2c 20  ect identifier, 
1faf0 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73  then all indices
1fb00 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   in all attached
1fb10 20 64 61 74 61 62 61 73 65 73 20 61 72 65 20 72   databases are r
1fb20 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20  ebuilt...<p>^If 
1fb30 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77  the REINDEX keyw
1fb40 6f 72 64 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ord is followed 
1fb50 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73  by a collation-s
1fb60 65 71 75 65 6e 63 65 20 6e 61 6d 65 2c 20 74 68  equence name, th
1fb70 65 6e 0a 61 6c 6c 20 69 6e 64 69 63 65 73 20 69  en.all indices i
1fb80 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
1fb90 61 74 61 62 61 73 65 73 20 74 68 61 74 20 75 73  atabases that us
1fba0 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c  e the named coll
1fbb0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 0a  ation sequences.
1fbc0 61 72 65 20 72 65 63 72 65 61 74 65 64 2e 20 0a  are recreated. .
1fbd0 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20 74 68 65 20  .<p>^Or, if the 
1fbe0 61 72 67 75 6d 65 6e 74 20 61 74 74 61 63 68 65  argument attache
1fbf0 64 20 74 6f 20 74 68 65 20 52 45 49 4e 44 45 58  d to the REINDEX
1fc00 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70   identifies a sp
1fc10 65 63 69 66 69 63 20 0a 64 61 74 61 62 61 73 65  ecific .database
1fc20 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c   table, then all
1fc30 20 69 6e 64 69 63 65 73 20 61 74 74 61 63 68 65   indices attache
1fc40 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
1fc50 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 62 75  e table are rebu
1fc60 69 6c 74 2e 20 0a 5e 49 66 20 69 74 20 69 64 65  ilt. .^If it ide
1fc70 6e 74 69 66 69 65 73 20 61 20 73 70 65 63 69 66  ntifies a specif
1fc80 69 63 20 64 61 74 61 62 61 73 65 20 69 6e 64 65  ic database inde
1fc90 78 2c 20 74 68 65 6e 20 6a 75 73 74 20 74 68 61  x, then just tha
1fca0 74 20 69 6e 64 65 78 20 69 73 20 72 65 63 72 65  t index is recre
1fcb0 61 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 6e 6f  ated...<p>^If no
1fcc0 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
1fcd0 65 3c 2f 69 3e 20 69 73 20 73 70 65 63 69 66 69  e</i> is specifi
1fce0 65 64 20 61 6e 64 20 74 68 65 72 65 20 65 78 69  ed and there exi
1fcf0 73 74 73 20 62 6f 74 68 20 61 20 74 61 62 6c 65  sts both a table
1fd00 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64 20 61 20   or.index and a 
1fd10 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1fd20 63 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  ce of the specif
1fd30 69 65 64 20 6e 61 6d 65 2c 20 53 51 4c 69 74 65  ied name, SQLite
1fd40 20 69 6e 74 65 72 70 72 65 74 73 0a 74 68 69 73   interprets.this
1fd50 20 61 73 20 61 20 72 65 71 75 65 73 74 20 74 6f   as a request to
1fd60 20 72 65 62 75 69 6c 64 20 74 68 65 20 69 6e 64   rebuild the ind
1fd70 69 63 65 73 20 74 68 61 74 20 75 73 65 20 74 68  ices that use th
1fd80 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f  e named collatio
1fd90 6e 20 73 65 71 75 65 6e 63 65 2e 0a 54 68 69 73  n sequence..This
1fda0 20 61 6d 62 69 67 75 69 74 79 20 69 6e 20 74 68   ambiguity in th
1fdb0 65 20 73 79 6e 74 61 78 20 6d 61 79 20 62 65 20  e syntax may be 
1fdc0 61 76 6f 69 64 65 64 20 62 79 20 61 6c 77 61 79  avoided by alway
1fdd0 73 20 73 70 65 63 69 66 79 69 6e 67 20 61 0a 3c  s specifying a.<
1fde0 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
1fdf0 2f 69 3e 20 77 68 65 6e 20 72 65 69 6e 64 65 78  /i> when reindex
1fe00 69 6e 67 20 61 20 73 70 65 63 69 66 69 63 20 74  ing a specific t
1fe10 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a  able or index...
1fe20 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1fe30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe70 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45  #####.Section RE
1fe80 50 4c 41 43 45 20 72 65 70 6c 61 63 65 20 52 45  PLACE replace RE
1fe90 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c  PLACE..</tcl>..<
1fea0 70 3e 5e 54 68 65 20 52 45 50 4c 41 43 45 20 63  p>^The REPLACE c
1feb0 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c 69  ommand is an ali
1fec0 61 73 20 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20  as for the "[ON 
1fed0 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e 53 45 52  CONFLICT | INSER
1fee0 54 20 4f 52 20 52 45 50 4c 41 43 45 5d 22 0a 76  T OR REPLACE]".v
1fef0 61 72 69 61 6e 74 20 6f 66 20 74 68 65 20 5b 49  ariant of the [I
1ff00 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20  NSERT] command. 
1ff10 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73 20   .This alias is 
1ff20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f 6d  provided for com
1ff30 70 61 74 69 62 69 6c 69 74 79 20 6f 74 68 65 72  patibility other
1ff40 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
1ff50 67 69 6e 65 73 2e 20 20 53 65 65 20 74 68 65 20  gines.  See the 
1ff60 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e  .[INSERT] comman
1ff70 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  d documentation 
1ff80 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
1ff90 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20  nformation.</p> 
1ffa0 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23   ..<tcl>.#######
1ffb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fff0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
20000 20 7b 57 49 54 48 20 63 6c 61 75 73 65 7d 20 77   {WITH clause} w
20010 69 74 68 20 7b 7b 63 6f 6d 6d 6f 6e 20 74 61 62  ith {{common tab
20020 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 7d  le expressions}}
20030 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
20040 65 44 69 61 67 72 61 6d 20 77 69 74 68 2d 63 6c  eDiagram with-cl
20050 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause.</tcl>..<p>
20060 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70  Common Table Exp
20070 72 65 73 73 69 6f 6e 73 20 6f 72 20 43 54 45 73  ressions or CTEs
20080 20 61 72 65 20 74 65 6d 70 6f 72 61 72 79 20 76   are temporary v
20090 69 65 77 73 20 6f 72 20 74 61 62 6c 65 73 20 74  iews or tables t
200a0 68 61 74 20 65 78 69 73 74 0a 6f 6e 6c 79 20 66  hat exist.only f
200b0 6f 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20  or the duration 
200c0 6f 66 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  of a single SQL 
200d0 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72  statement.  Ther
200e0 65 20 61 72 65 20 74 77 6f 20 6b 69 6e 64 73 20  e are two kinds 
200f0 6f 66 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  of.common table 
20100 65 78 70 72 65 73 73 69 6f 6e 73 3a 20 22 6f 72  expressions: "or
20110 64 69 6e 61 72 79 22 20 61 6e 64 20 22 72 65 63  dinary" and "rec
20120 75 72 73 69 76 65 22 2e 20 4f 72 64 69 6e 61 72  ursive". Ordinar
20130 79 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  y .common table 
20140 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 0a  expressions are.
20150 61 20 73 79 6e 74 61 63 74 69 63 20 63 6f 6e 76  a syntactic conv
20160 65 6e 69 65 6e 63 65 20 74 68 61 74 20 6d 61 6b  enience that mak
20170 65 20 71 75 65 72 69 65 73 20 65 61 73 69 65 72  e queries easier
20180 20 74 6f 20 72 65 61 64 20 62 79 20 73 65 70 61   to read by sepa
20190 72 61 74 69 6e 67 20 6f 75 74 0a 73 75 62 71 75  rating out.subqu
201a0 65 72 69 65 73 2e 20 20 52 65 63 75 72 73 69 76  eries.  Recursiv
201b0 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e common table e
201c0 78 70 72 65 73 73 69 6f 6e 0a 70 72 6f 76 69 64  xpression.provid
201d0 65 20 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f  e the ability to
201e0 20 64 6f 20 61 20 68 69 65 61 72 63 68 69 63 61   do a hiearchica
201f0 6c 20 6f 72 0a 72 65 63 75 72 73 69 76 65 20 71  l or.recursive q
20200 75 65 72 79 20 6f 66 20 61 20 74 72 65 65 20 6f  uery of a tree o
20210 72 20 67 72 61 70 68 2e 0a 0a 41 6c 6c 20 63 6f  r graph...All co
20220 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
20230 73 73 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72 79  ssions (ordinary
20240 20 61 6e 64 20 72 65 63 75 72 73 69 76 65 29 20   and recursive) 
20250 61 72 65 20 0a 63 72 65 61 74 65 64 20 62 79 20  are .created by 
20260 70 72 65 70 65 6e 64 69 6e 67 20 61 20 57 49 54  prepending a WIT
20270 48 20 63 6c 61 75 73 65 20 69 6e 20 66 72 6f 6e  H clause in fron
20280 74 20 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d 2c  t of a [SELECT],
20290 20 5b 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c 45   [INSERT], [DELE
202a0 54 45 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d  TE],.or [UPDATE]
202b0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 20 73   statement.  A s
202c0 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73  ingle WITH claus
202d0 65 20 63 61 6e 20 73 70 65 63 69 66 79 20 6f 6e  e can specify on
202e0 65 20 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f 6e  e or more.common
202f0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
20300 6e 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ns...<tcl>hd_fra
20310 67 6d 65 6e 74 20 6f 72 64 69 6e 61 72 79 63 74  gment ordinaryct
20320 65 20 7b 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  e {ordinary comm
20330 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
20340 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ions}</tcl>.<h3>
20350 4f 72 64 69 6e 61 72 79 20 43 6f 6d 6d 6f 6e 20  Ordinary Common 
20360 54 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e  Table Expression
20370 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6e 20 6f 72  s</h3>..<p>An or
20380 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
20390 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 77  ble expression w
203a0 6f 72 6b 73 20 61 73 20 69 66 20 69 74 20 77 68  orks as if it wh
203b0 65 72 65 20 61 20 5b 76 69 65 77 5d 20 74 68 61  ere a [view] tha
203c0 74 0a 65 78 69 73 74 73 20 66 6f 72 20 74 68 65  t.exists for the
203d0 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73   duration of a s
203e0 69 6e 67 6c 65 20 73 74 61 74 65 6d 65 6e 74 2e  ingle statement.
203f0 20 20 4f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f    Ordinary commo
20400 6e 20 74 61 62 6c 65 0a 65 78 70 72 65 73 73 69  n table.expressi
20410 6f 6e 73 20 61 72 65 20 75 73 65 66 75 6c 20 66  ons are useful f
20420 6f 72 20 66 61 63 74 6f 72 69 6e 67 20 6f 75 74  or factoring out
20430 20 73 75 62 71 75 65 72 69 65 73 20 61 6e 64 20   subqueries and 
20440 6d 61 6b 69 6e 67 20 74 68 65 20 6f 76 65 72 61  making the overa
20450 6c 6c 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ll.SQL statement
20460 20 65 61 73 69 65 72 20 74 6f 20 72 65 61 64 20   easier to read 
20470 61 6e 64 20 75 6e 64 65 72 73 74 61 6e 64 2e 0a  and understand..
20480 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d 65  .<tcl>.hd_fragme
20490 6e 74 20 72 65 63 75 72 73 69 76 65 63 74 65 20  nt recursivecte 
204a0 7b 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f  {recursive commo
204b0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
204c0 6f 6e 73 7d 20 5c 0a 7b 72 65 63 75 72 73 69 76  ons} \.{recursiv
204d0 65 20 71 75 65 72 79 7d 0a 3c 2f 74 63 6c 3e 0a  e query}.</tcl>.
204e0 3c 68 33 3e 52 65 63 75 72 73 69 76 65 20 43 6f  <h3>Recursive Co
204f0 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65  mmon Table Expre
20500 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ssions</h3>..<p>
20510 41 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d  A recursive comm
20520 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
20530 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20  ion can be used 
20540 74 6f 20 77 72 69 74 65 20 61 20 71 75 65 72 79  to write a query
20550 20 74 68 61 74 0a 77 61 6c 6b 73 20 61 20 74 72   that.walks a tr
20560 65 65 20 6f 72 20 67 72 61 70 68 2e 20 20 41 20  ee or graph.  A 
20570 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  recursive common
20580 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
20590 6e 20 68 61 73 20 74 68 65 20 73 61 6d 65 0a 62  n has the same.b
205a0 61 73 69 63 20 73 79 6e 74 61 78 20 61 73 20 61  asic syntax as a
205b0 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f  n ordinary commo
205c0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
205d0 6f 6e 2c 20 62 75 74 20 77 69 74 68 20 74 68 65  on, but with the
205e0 20 66 6f 6c 6c 6f 77 69 6e 67 0a 61 64 64 69 74   following.addit
205f0 69 6f 6e 61 6c 20 66 65 61 74 75 72 65 73 3a 0a  ional features:.
20600 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54 68 65 20 22  .<ol>.<li> The "
20610 73 65 6c 65 63 74 2d 73 74 6d 74 22 20 61 66 74  select-stmt" aft
20620 65 72 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72  er the AS keywor
20630 64 20 69 6e 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  d in the common 
20640 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
20650 0a 20 20 20 20 20 6d 75 73 74 20 62 65 20 61 20  .     must be a 
20660 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74  [compound select
20670 5d 20 77 68 65 72 65 20 74 68 65 20 72 69 67 68  ] where the righ
20680 74 2d 6d 6f 73 74 20 63 6f 6d 70 6f 75 6e 64 20  t-most compound 
20690 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20  operator is.    
206a0 20 65 69 74 68 65 72 20 55 4e 49 4f 4e 20 6f 72   either UNION or
206b0 20 55 4e 49 4f 4e 20 41 4c 4c 2e 0a 3c 6c 69 3e   UNION ALL..<li>
206c0 20 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   The table named
206d0 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e   on the left-han
206e0 64 20 73 69 64 65 20 6f 66 20 74 68 65 20 41 53  d side of the AS
206f0 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 61 70   keyword must ap
20700 70 65 61 72 0a 20 20 20 20 20 65 78 61 63 74 6c  pear.     exactl
20710 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 46 52  y once in the FR
20720 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  OM clause of the
20730 20 72 69 67 68 74 2d 6d 6f 73 74 20 53 45 4c 45   right-most SELE
20740 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20  CT statement.   
20750 20 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e    of the compoun
20760 64 20 73 65 6c 65 63 74 2c 20 61 6e 64 20 6e 6f  d select, and no
20770 77 68 65 72 65 20 65 6c 73 65 2e 0a 3c 2f 6f 6c  where else..</ol
20780 3e 0a 0a 3c 70 3e 54 6f 20 70 75 74 20 69 74 20  >..<p>To put it 
20790 61 6e 6f 74 68 65 72 20 77 61 79 2c 20 61 20 72  another way, a r
207a0 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20  ecursive common 
207b0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
207c0 20 6d 75 73 74 0a 6c 6f 6f 6b 20 6c 69 6b 65 20   must.look like 
207d0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a  the following:..
207e0 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
207f0 69 61 67 72 61 6d 20 72 65 63 75 72 73 69 76 65  iagram recursive
20800 2d 63 74 65 0a 0a 3c 70 3e 43 61 6c 6c 20 74 68  -cte..<p>Call th
20810 65 20 63 74 65 2d 74 61 62 6c 65 2d 6e 61 6d 65  e cte-table-name
20820 20 66 6f 72 20 61 20 72 65 63 75 72 73 69 76 65   for a recursive
20830 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
20840 70 72 65 73 73 69 6f 6e 0a 74 68 65 20 22 72 65  pression.the "re
20850 63 75 72 73 69 76 65 20 74 61 62 6c 65 22 2e 20  cursive table". 
20860 20 49 6e 20 74 68 65 20 62 75 62 62 6c 65 20 64   In the bubble d
20870 69 61 67 72 61 6d 20 61 62 6f 76 65 2c 20 74 68  iagram above, th
20880 65 20 72 65 63 75 72 73 69 76 65 0a 74 61 62 6c  e recursive.tabl
20890 65 20 6d 75 73 74 20 61 70 70 65 61 72 20 65 78  e must appear ex
208a0 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68  actly once in th
208b0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
208c0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
208d0 65 6c 65 63 74 0a 61 6e 64 20 6d 75 73 74 20 6e  elect.and must n
208e0 6f 74 20 61 70 70 65 61 72 20 61 6e 79 77 68 65  ot appear anywhe
208f0 72 65 20 65 6c 73 65 20 69 6e 20 65 69 74 68 65  re else in eithe
20900 72 20 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65  r the initial-se
20910 6c 65 63 74 20 6f 72 20 74 68 65 0a 72 65 63 75  lect or the.recu
20920 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 69 6e  rsive-select, in
20930 63 6c 75 64 69 6e 67 20 73 75 62 71 75 65 72 69  cluding subqueri
20940 65 73 2e 20 20 54 68 65 20 69 6e 69 74 69 61 6c  es.  The initial
20950 2d 73 65 6c 65 63 74 20 6d 61 79 20 62 65 0a 61  -select may be.a
20960 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74   compound-select
20970 2c 20 62 75 74 20 69 74 20 6d 61 79 20 6e 6f 74  , but it may not
20980 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45   include an ORDE
20990 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20 6f 72 20  R BY, LIMIT, or 
209a0 4f 46 46 53 45 54 2e 0a 54 68 65 20 72 65 63 75  OFFSET..The recu
209b0 72 73 69 76 65 2d 73 65 6c 65 63 74 20 6d 75 73  rsive-select mus
209c0 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 73 65  t be a simple se
209d0 6c 65 63 74 20 28 6e 6f 74 20 61 20 63 6f 6d 70  lect (not a comp
209e0 6f 75 6e 64 29 2e 20 20 54 68 65 0a 72 65 63 75  ound).  The.recu
209f0 72 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20  rsive-select is 
20a00 61 6c 6c 6f 77 65 64 20 74 6f 20 69 6e 63 6c 75  allowed to inclu
20a10 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20  de an ORDER BY, 
20a20 4c 49 4d 49 54 2c 20 61 6e 64 2f 6f 72 20 4f 46  LIMIT, and/or OF
20a30 46 53 45 54 2e 0a 0a 3c 70 3e 54 68 65 20 62 61  FSET...<p>The ba
20a40 73 69 63 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f  sic algorithm fo
20a50 72 20 63 6f 6d 70 75 74 69 6e 67 20 74 68 65 20  r computing the 
20a60 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 72  content of the r
20a70 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a 69  ecursive table.i
20a80 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  s as follows:..<
20a90 6f 6c 3e 0a 3c 6c 69 3e 20 52 75 6e 20 74 68 65  ol>.<li> Run the
20aa0 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20   initial-select 
20ab0 61 6e 64 20 61 64 64 20 74 68 65 20 72 65 73 75  and add the resu
20ac0 6c 74 73 20 74 6f 20 61 20 71 75 65 75 65 2e 0a  lts to a queue..
20ad0 3c 6c 69 3e 20 57 68 69 6c 65 20 74 68 65 20 71  <li> While the q
20ae0 75 65 75 65 20 69 73 20 6e 6f 74 20 65 6d 70 74  ueue is not empt
20af0 79 3a 0a 3c 6f 6c 20 74 79 70 65 3d 22 61 22 3e  y:.<ol type="a">
20b00 0a 3c 6c 69 3e 20 45 78 74 72 61 63 74 20 61 20  .<li> Extract a 
20b10 73 69 6e 67 6c 65 20 72 6f 77 20 66 72 6f 6d 20  single row from 
20b20 74 68 65 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20  the queue..<li> 
20b30 57 72 69 74 65 20 74 68 61 74 20 73 69 6e 67 6c  Write that singl
20b40 65 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 20 72  e row into the r
20b50 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a 3c  ecursive table.<
20b60 6c 69 3e 20 50 72 65 74 65 6e 64 20 74 68 61 74  li> Pretend that
20b70 20 74 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20   the single row 
20b80 6a 75 73 74 20 65 78 74 72 61 63 74 65 64 20 69  just extracted i
20b90 73 20 74 68 65 20 6f 6e 6c 79 0a 20 20 20 20 20  s the only.     
20ba0 72 6f 77 20 69 6e 20 74 68 65 20 72 65 63 75 72  row in the recur
20bb0 73 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20 72  sive table and r
20bc0 75 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  un the recursive
20bd0 2d 73 65 6c 65 63 74 2c 0a 20 20 20 20 20 61 64  -select,.     ad
20be0 64 69 6e 67 20 61 6c 6c 20 72 65 73 75 6c 74 73  ding all results
20bf0 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 0a 3c   to the queue..<
20c00 2f 6f 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54  /ol>.</ol>..<p>T
20c10 68 65 20 62 61 73 69 63 20 70 72 6f 63 65 64 75  he basic procedu
20c20 72 65 20 61 62 6f 76 65 20 6d 61 79 20 6d 6f 64  re above may mod
20c30 69 66 69 65 64 20 62 79 20 74 68 65 20 66 6f 6c  ified by the fol
20c40 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61  lowing additiona
20c50 6c 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c  l rules:..<ul>.<
20c60 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 74 68 65 20  li><p>.  If the 
20c70 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65  the initial-sele
20c80 63 74 20 61 6e 64 20 74 68 65 20 72 65 63 75 72  ct and the recur
20c90 73 69 76 65 2d 73 65 6c 65 63 74 20 61 72 65 20  sive-select are 
20ca0 63 6f 6e 6e 65 63 74 65 64 20 62 79 0a 20 20 55  connected by.  U
20cb0 4e 49 4f 4e 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  NION, then only 
20cc0 61 64 64 20 72 6f 77 73 20 74 6f 20 74 68 65 20  add rows to the 
20cd0 71 75 65 75 65 20 69 66 20 6e 6f 20 69 64 65 6e  queue if no iden
20ce0 74 69 63 61 6c 20 72 6f 77 20 68 61 73 20 62 65  tical row has be
20cf0 65 6e 0a 20 20 70 72 65 76 69 6f 75 73 6c 79 20  en.  previously 
20d00 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65  added to the que
20d10 75 65 2e 20 20 52 65 70 65 61 74 65 64 20 72 6f  ue.  Repeated ro
20d20 77 73 20 61 72 65 20 64 69 73 63 61 72 64 65 64  ws are discarded
20d30 20 62 65 66 6f 72 65 20 62 65 69 6e 67 0a 20 20   before being.  
20d40 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65  added to the que
20d50 75 65 20 65 76 65 6e 20 69 66 20 74 68 65 20 72  ue even if the r
20d60 65 70 65 61 74 65 64 20 72 6f 77 73 20 68 61 76  epeated rows hav
20d70 65 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 65  e already been e
20d80 78 74 72 61 63 74 65 64 0a 20 20 66 72 6f 6d 20  xtracted.  from 
20d90 74 68 65 20 71 75 65 75 65 20 62 79 20 74 68 65  the queue by the
20da0 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 2e   recursion stop.
20db0 20 20 49 66 20 74 68 65 20 6f 70 65 72 61 74 6f    If the operato
20dc0 72 20 69 73 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a  r is UNION ALL,.
20dd0 20 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20    then all rows 
20de0 67 65 6e 65 72 61 74 65 64 20 62 79 20 62 6f 74  generated by bot
20df0 68 20 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65  h the initial-se
20e00 6c 65 63 74 20 61 6e 64 20 74 68 65 0a 20 20 72  lect and the.  r
20e10 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
20e20 61 72 65 20 61 6c 77 61 79 73 20 61 64 64 65 64  are always added
20e30 20 74 6f 20 74 68 65 20 71 75 65 75 65 20 65 76   to the queue ev
20e40 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 20  en if there are 
20e50 72 65 70 65 61 74 73 2e 0a 3c 6c 69 3e 3c 70 3e  repeats..<li><p>
20e60 0a 20 20 54 68 65 20 4c 49 4d 49 54 20 63 6c 61  .  The LIMIT cla
20e70 75 73 65 2c 20 69 66 20 70 72 65 73 65 6e 74 2c  use, if present,
20e80 20 72 65 73 74 72 69 63 74 20 77 68 69 63 68 20   restrict which 
20e90 72 6f 77 73 20 61 72 65 20 61 64 64 65 64 0a 20  rows are added. 
20ea0 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76   to the recursiv
20eb0 65 20 74 61 62 6c 65 20 69 6e 20 73 74 65 70 20  e table in step 
20ec0 32 61 2e 20 20 49 66 20 61 20 4c 49 4d 49 54 20  2a.  If a LIMIT 
20ed0 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
20ee0 74 2c 20 69 74 20 0a 20 20 72 65 73 74 72 69 63  t, it .  restric
20ef0 74 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ts the total num
20f00 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74  ber of rows that
20f10 20 77 69 6c 6c 20 62 65 20 61 64 64 65 64 20 74   will be added t
20f20 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
20f30 74 61 62 6c 65 2e 0a 20 20 4f 6e 63 65 20 74 68  table..  Once th
20f40 65 20 6c 69 6d 69 74 20 69 73 20 72 65 61 63 68  e limit is reach
20f50 65 64 2c 20 74 68 65 20 72 65 63 75 72 73 69 6f  ed, the recursio
20f60 6e 20 73 74 6f 70 73 2e 20 20 28 41 73 20 69 73  n stops.  (As is
20f70 20 61 6c 77 61 79 73 20 74 68 65 20 63 61 73 65   always the case
20f80 20 0a 20 20 77 69 74 68 20 4c 49 4d 49 54 2c 20   .  with LIMIT, 
20f90 61 20 6c 69 6d 69 74 20 6f 66 20 7a 65 72 6f 20  a limit of zero 
20fa0 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 72 6f  means that no ro
20fb0 77 73 20 61 72 65 20 65 76 65 72 20 61 64 64 65  ws are ever adde
20fc0 64 20 74 6f 20 74 68 65 0a 20 20 72 65 63 75 72  d to the.  recur
20fd0 73 69 76 65 20 74 61 62 6c 65 2c 20 61 6e 64 20  sive table, and 
20fe0 61 20 6e 65 67 61 74 69 76 65 20 6c 69 6d 69 74  a negative limit
20ff0 20 6d 65 61 6e 73 20 61 6e 20 75 6e 6c 69 6d 69   means an unlimi
21000 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  ted number of ro
21010 77 73 0a 20 20 6d 61 79 20 62 65 20 61 64 64 65  ws.  may be adde
21020 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
21030 76 65 20 74 61 62 6c 65 2e 29 0a 3c 6c 69 3e 3c  ve table.).<li><
21040 70 3e 0a 20 20 54 68 65 20 4f 46 46 53 45 54 20  p>.  The OFFSET 
21050 63 6c 61 75 73 65 2c 20 69 66 20 69 74 20 70 72  clause, if it pr
21060 65 73 65 6e 74 20 61 6e 64 20 68 61 73 20 61 20  esent and has a 
21070 70 6f 73 69 74 69 76 65 20 76 61 6c 75 65 20 4e  positive value N
21080 2c 20 70 72 65 76 65 6e 74 73 20 74 68 65 0a 20  , prevents the. 
21090 20 66 69 72 73 74 20 4e 20 72 6f 77 73 20 66 72   first N rows fr
210a0 6f 6d 20 62 65 69 6e 67 20 61 64 64 65 64 20 74  om being added t
210b0 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
210c0 74 61 62 6c 65 2e 0a 20 20 54 68 65 20 66 69 72  table..  The fir
210d0 73 74 20 4e 20 72 6f 77 73 20 61 72 65 20 73 74  st N rows are st
210e0 69 6c 6c 20 70 72 6f 63 65 73 73 65 64 20 62 79  ill processed by
210f0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
21100 65 6c 65 63 74 3b 20 74 68 65 79 0a 20 20 6a 75  elect; they.  ju
21110 73 74 20 61 72 65 20 6e 6f 74 20 61 64 64 65 64  st are not added
21120 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76   to the recursiv
21130 65 20 74 61 62 6c 65 2e 0a 3c 6c 69 3e 3c 70 3e  e table..<li><p>
21140 0a 20 20 49 66 20 61 6e 20 4f 52 44 45 52 20 42  .  If an ORDER B
21150 59 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  Y clause is pres
21160 65 6e 74 2c 20 69 74 20 64 65 74 65 72 6d 69 6e  ent, it determin
21170 65 73 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  es the order in 
21180 77 68 69 63 68 20 72 6f 77 73 0a 20 20 61 72 65  which rows.  are
21190 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20   extracted from 
211a0 74 68 65 20 71 75 65 75 65 20 69 6e 20 73 74 65  the queue in ste
211b0 70 20 32 61 2e 20 20 49 66 20 74 68 65 72 65 20  p 2a.  If there 
211c0 69 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63  is no ORDER BY c
211d0 6c 61 75 73 65 2c 0a 20 20 74 68 65 6e 20 74 68  lause,.  then th
211e0 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
211f0 20 72 6f 77 73 20 61 72 65 20 65 78 74 72 61 63   rows are extrac
21200 74 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ted is undefined
21210 2e 20 20 28 49 6e 20 74 68 65 20 63 75 72 72 65  .  (In the curre
21220 6e 74 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74  nt.  implementat
21230 69 6f 6e 2c 20 74 68 65 20 71 75 65 75 65 20 62  ion, the queue b
21240 65 63 6f 6d 65 73 20 61 20 46 49 46 4f 20 69 66  ecomes a FIFO if
21250 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
21260 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2c  ause is omitted,
21270 0a 20 20 62 75 74 20 61 70 70 6c 69 63 61 74 69  .  but applicati
21280 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 64  ons should not d
21290 65 70 65 6e 64 20 6f 6e 20 74 68 61 74 20 66 61  epend on that fa
212a0 63 74 20 73 69 6e 63 65 20 69 74 20 6d 69 67 68  ct since it migh
212b0 74 20 63 68 61 6e 67 65 2e 29 0a 3c 2f 75 6c 3e  t change.).</ul>
212c0 0a 0a 3c 68 34 3e 52 65 63 75 72 73 69 76 65 20  ..<h4>Recursive 
212d0 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f  Query Examples</
212e0 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h4>..<p>The foll
212f0 6f 77 69 6e 67 20 71 75 65 72 79 20 72 65 74 75  owing query retu
21300 72 6e 73 20 61 6c 6c 20 69 6e 74 65 67 65 72 73  rns all integers
21310 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 31   between 1 and 1
21320 30 30 30 30 30 30 3a 0a 0a 3c 62 6c 6f 63 6b 71  000000:..<blockq
21330 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
21340 52 45 43 55 52 53 49 56 45 0a 20 20 63 6e 74 28  RECURSIVE.  cnt(
21350 78 29 20 41 53 20 28 56 41 4c 55 45 53 28 31 29  x) AS (VALUES(1)
21360 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
21370 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74 20 57  T x+1 FROM cnt W
21380 48 45 52 45 20 78 3c 31 30 30 30 30 30 30 29 0a  HERE x<1000000).
21390 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 6e  SELECT x FROM cn
213a0 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t;.</pre></block
213b0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6e 73 69  quote>..<p>Consi
213c0 64 65 72 20 68 6f 77 20 74 68 69 73 20 71 75 65  der how this que
213d0 72 79 20 77 6f 72 6b 73 2e 20 20 54 68 65 20 69  ry works.  The i
213e0 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 2c 20 77  nitial-select, w
213f0 68 69 63 68 20 69 73 20 74 68 69 73 0a 63 61 73  hich is this.cas
21400 65 20 69 73 20 6a 75 73 74 20 22 56 41 4c 55 45  e is just "VALUE
21410 53 28 31 22 29 20 72 75 6e 73 20 66 69 72 73 74  S(1") runs first
21420 20 28 73 74 65 70 20 31 29 20 61 6e 64 20 72 65   (step 1) and re
21430 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65 20 72  turns a single r
21440 6f 77 0a 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ow.with a single
21450 20 63 6f 6c 75 6d 6e 20 22 31 22 2e 20 20 54 68   column "1".  Th
21460 69 73 20 6f 6e 65 20 72 6f 77 20 69 73 20 61 64  is one row is ad
21470 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65  ded to the queue
21480 2e 20 20 49 6e 0a 73 74 65 70 20 32 61 2c 20 74  .  In.step 2a, t
21490 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 65  hat one row is e
214a0 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68  xtracted from th
214b0 65 20 71 75 65 75 65 20 61 6e 64 20 61 64 64 65  e queue and adde
214c0 64 20 74 6f 20 22 63 6e 74 22 2e 0a 54 68 65 6e  d to "cnt"..Then
214d0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 71   the recursive q
214e0 75 65 72 79 20 69 73 20 72 75 6e 20 69 6e 20 61  uery is run in a
214f0 63 63 6f 72 64 61 6e 63 65 20 77 69 74 68 20 73  ccordance with s
21500 74 65 70 20 32 63 20 67 65 6e 65 72 61 74 69 6e  tep 2c generatin
21510 67 0a 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72  g.a single new r
21520 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20 22 32  ow with value "2
21530 22 20 74 6f 20 61 64 64 20 74 6f 20 74 68 65 20  " to add to the 
21540 71 75 65 75 65 2e 20 20 54 68 65 20 71 75 65 75  queue.  The queu
21550 65 20 73 74 69 6c 6c 0a 68 61 73 20 6f 6e 65 20  e still.has one 
21560 72 6f 77 2c 20 73 6f 20 73 74 65 70 20 32 20 72  row, so step 2 r
21570 65 70 65 61 74 73 2e 20 20 54 68 65 20 32 20 69  epeats.  The 2 i
21580 73 20 65 78 74 72 61 63 74 65 64 20 61 6e 64 20  s extracted and 
21590 61 64 64 65 64 20 74 6f 20 74 68 65 0a 72 65 63  added to the.rec
215a0 75 72 73 69 76 65 20 74 61 62 6c 65 20 62 79 20  ursive table by 
215b0 73 74 65 70 73 20 32 61 20 61 6e 64 20 32 62 2e  steps 2a and 2b.
215c0 20 20 54 68 65 6e 20 74 68 65 20 72 6f 77 20 63    Then the row c
215d0 6f 6e 74 61 69 6e 69 6e 67 20 32 20 69 73 20 75  ontaining 2 is u
215e0 73 65 64 20 0a 61 73 20 69 66 20 77 68 65 72 65  sed .as if where
215f0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f   the complete co
21600 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65 63  ntent of the rec
21610 75 72 73 69 76 65 20 74 61 62 6c 65 20 61 6e 64  ursive table and
21620 20 74 68 65 20 0a 72 65 63 75 72 73 69 76 65 20   the .recursive 
21630 73 65 6c 65 63 74 20 69 73 20 72 75 6e 20 61 67  select is run ag
21640 61 69 6e 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  ain, resulting i
21650 6e 20 61 20 76 61 6c 75 65 20 6f 66 20 33 20 62  n a value of 3 b
21660 65 69 6e 67 20 61 64 64 65 64 0a 74 6f 20 74 68  eing added.to th
21670 65 20 71 75 65 75 65 2e 20 20 54 68 69 73 20 72  e queue.  This r
21680 65 70 65 61 74 73 20 39 39 39 39 39 39 20 74 69  epeats 999999 ti
21690 6d 65 73 20 75 6e 74 69 6c 20 66 69 6e 61 6c 6c  mes until finall
216a0 79 20 61 74 20 73 74 65 70 20 32 61 20 74 68 65  y at step 2a the
216b0 0a 6f 6e 6c 79 20 76 61 6c 75 65 20 6f 6e 20 74  .only value on t
216c0 68 65 20 71 75 65 75 65 20 69 73 20 61 20 72 6f  he queue is a ro
216d0 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 31 30 30  w containing 100
216e0 30 30 30 30 2e 20 20 54 68 61 74 20 72 6f 77 20  0000.  That row 
216f0 69 73 0a 65 78 74 72 61 63 74 65 64 20 61 6e 64  is.extracted and
21700 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
21710 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 20 20  cursive table.  
21720 42 75 74 20 74 68 69 73 20 74 69 6d 65 2c 20 74  But this time, t
21730 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
21740 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65  of the recursive
21750 20 73 65 6c 65 63 74 20 70 72 65 76 65 6e 74 73   select prevents
21760 20 69 74 20 66 72 6f 6d 20 67 65 6e 65 72 61 74   it from generat
21770 69 6e 67 20 61 6e 79 0a 6e 65 77 20 72 6f 77 73  ing any.new rows
21780 2e 20 20 4f 6e 20 74 68 65 20 6e 65 78 74 20 63  .  On the next c
21790 79 63 6c 65 2c 20 74 68 65 20 71 75 65 75 65 20  ycle, the queue 
217a0 69 73 20 65 6d 70 74 79 20 61 6e 64 20 74 68 65  is empty and the
217b0 20 72 65 63 75 72 73 69 6f 6e 0a 73 74 6f 70 73   recursion.stops
217c0 2e 0a 0a 3c 70 3e 3c 62 3e 4f 70 74 69 6d 69 7a  ...<p><b>Optimiz
217d0 61 74 69 6f 6e 20 6e 6f 74 65 3a 3c 2f 62 3e 0a  ation note:</b>.
217e0 49 6e 20 74 68 65 20 64 69 73 63 75 73 73 69 6f  In the discussio
217f0 6e 20 61 62 6f 76 65 2c 20 77 68 65 6e 20 77 65  n above, when we
21800 20 73 61 79 20 74 68 69 6e 67 73 20 6c 69 6b 65   say things like
21810 20 22 77 72 69 74 65 20 74 68 65 20 72 6f 77 20   "write the row 
21820 69 6e 74 6f 0a 74 68 65 20 72 65 63 75 72 73 69  into.the recursi
21830 76 65 20 74 61 62 6c 65 22 2c 20 77 65 20 6d 65  ve table", we me
21840 61 6e 20 74 68 61 6e 20 63 6f 6e 63 65 70 74 75  an than conceptu
21850 61 6c 6c 79 2c 20 6e 6f 74 20 69 6e 20 72 65 61  ally, not in rea
21860 6c 69 74 79 2e 0a 52 65 61 64 20 6c 69 74 65 72  lity..Read liter
21870 61 6c 6c 79 2c 20 69 74 20 73 6f 75 6e 64 73 20  ally, it sounds 
21880 61 73 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  as if SQLite is 
21890 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 61 20 68  accumulating a h
218a0 75 67 65 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69  uge table.contai
218b0 6e 69 6e 67 20 6f 6e 65 20 6d 69 6c 6c 69 6f 6e  ning one million
218c0 20 72 6f 77 73 2c 20 74 68 65 6e 20 67 6f 69 6e   rows, then goin
218d0 67 20 62 61 63 6b 20 61 6e 64 20 73 63 61 6e 6e  g back and scann
218e0 69 6e 67 20 74 68 61 74 20 74 61 62 6c 65 0a 66  ing that table.f
218f0 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f 74 74 6f  rom top to botto
21900 6d 20 74 6f 20 67 65 6e 65 72 61 74 65 20 74 68  m to generate th
21910 65 20 72 65 73 75 6c 74 2e 20 20 57 68 61 74 20  e result.  What 
21920 72 65 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 74  really happens t
21930 68 6f 75 67 68 2c 0a 69 6e 20 74 68 69 73 20 63  hough,.in this c
21940 61 73 65 2c 20 69 73 20 74 68 61 74 20 74 68 65  ase, is that the
21950 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
21960 20 72 65 61 6c 69 7a 65 73 20 74 68 61 74 20 76   realizes that v
21970 61 6c 75 65 73 20 69 6e 20 74 68 65 0a 22 63 6e  alues in the."cn
21980 74 22 20 72 65 63 75 72 73 69 76 65 20 74 61 62  t" recursive tab
21990 6c 65 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  le are only used
219a0 20 6f 6e 63 65 2e 20 20 53 6f 20 61 73 20 65 61   once.  So as ea
219b0 63 68 20 72 6f 77 20 69 73 20 61 64 64 65 64 20  ch row is added 
219c0 74 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76 65  to.the recursive
219d0 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20 69 6d   table, it is im
219e0 6d 65 64 69 61 74 65 6c 79 20 72 65 74 75 72 6e  mediately return
219f0 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
21a00 66 20 74 68 65 0a 53 45 4c 45 43 54 20 73 74 61  f the.SELECT sta
21a10 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 6e 20  tement and then 
21a20 64 69 73 63 61 72 64 65 64 2e 20 20 53 51 4c 69  discarded.  SQLi
21a30 74 65 20 64 6f 65 73 20 3c 65 6d 3e 6e 6f 74 3c  te does <em>not<
21a40 2f 65 6d 3e 20 61 63 63 75 6d 75 6c 61 74 65 0a  /em> accumulate.
21a50 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
21a60 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 20 6d  e containing a m
21a70 69 6c 6c 69 6f 6e 20 72 6f 77 73 2e 20 20 56 65  illion rows.  Ve
21a80 72 79 20 6c 69 74 74 6c 65 20 6d 65 6d 6f 72 79  ry little memory
21a90 20 69 73 0a 6e 65 65 64 65 64 20 74 6f 20 72 75   is.needed to ru
21aa0 6e 20 74 68 65 20 61 62 6f 76 65 20 65 78 61 6d  n the above exam
21ab0 70 6c 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ple.  However, i
21ac0 66 20 74 68 65 20 65 78 61 6d 70 6c 65 20 68 61  f the example ha
21ad0 64 20 75 73 65 64 0a 55 4e 49 4f 4e 20 69 6e 73  d used.UNION ins
21ae0 74 65 61 64 20 6f 66 20 55 4e 49 4f 4e 20 41 4c  tead of UNION AL
21af0 4c 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 77  L, then SQLite w
21b00 6f 75 6c 64 20 68 61 76 65 20 68 61 64 20 74 6f  ould have had to
21b10 20 6b 65 65 70 20 61 72 6f 75 6e 64 0a 61 6c 6c   keep around.all
21b20 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65   previously gene
21b30 72 61 74 65 64 20 63 6f 6e 74 65 6e 74 20 69 6e  rated content in
21b40 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63 6b 20   order to check 
21b50 66 6f 72 20 64 75 70 6c 69 63 61 74 65 73 2e 0a  for duplicates..
21b60 46 6f 72 20 74 68 69 73 20 72 65 61 73 6f 6e 2c  For this reason,
21b70 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 73 68 6f   programmers sho
21b80 75 6c 64 20 73 74 72 69 76 65 20 74 6f 20 75 73  uld strive to us
21b90 65 20 55 4e 49 4f 4e 20 41 4c 4c 20 69 6e 73 74  e UNION ALL inst
21ba0 65 61 64 0a 6f 66 20 55 4e 49 4f 4e 20 77 68 65  ead.of UNION whe
21bb0 6e 20 66 65 61 73 69 62 6c 65 2e 0a 0a 3c 70 3e  n feasible...<p>
21bc0 48 65 72 65 20 69 73 20 61 20 76 61 72 69 61 74  Here is a variat
21bd0 69 6f 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  ion on the same 
21be0 65 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b  example:..<block
21bf0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
21c00 20 52 45 43 55 52 53 49 56 45 0a 20 20 63 6e 74   RECURSIVE.  cnt
21c10 28 78 29 20 41 53 20 28 0a 20 20 20 20 20 53 45  (x) AS (.     SE
21c20 4c 45 43 54 20 31 0a 20 20 20 20 20 55 4e 49 4f  LECT 1.     UNIO
21c30 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43  N ALL.     SELEC
21c40 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74 20 4c  T x+1 FROM cnt L
21c50 49 4d 49 54 20 31 30 30 30 30 30 30 0a 20 20 29  IMIT 1000000.  )
21c60 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63  .SELECT x FROM c
21c70 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  nt;.</pre></bloc
21c80 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 72  kquote>..<p>Ther
21c90 65 20 61 72 65 20 74 77 6f 20 64 69 66 66 65 72  e are two differ
21ca0 65 6e 63 65 73 20 69 6e 20 74 68 69 73 20 76 61  ences in this va
21cb0 72 69 61 74 69 6f 6e 2e 20 20 54 68 65 20 69 6e  riation.  The in
21cc0 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 69 73 0a  itial-select is.
21cd0 22 53 45 4c 45 43 54 20 31 22 20 69 6e 73 74 65  "SELECT 1" inste
21ce0 61 64 20 6f 66 20 22 56 41 4c 55 45 53 28 31 29  ad of "VALUES(1)
21cf0 22 2e 20 20 42 75 74 20 74 68 6f 73 65 20 61 72  ".  But those ar
21d00 65 20 72 65 61 6c 6c 79 20 6a 75 73 74 20 64 69  e really just di
21d10 66 66 65 72 65 6e 74 0a 73 79 6e 74 61 78 65 73  fferent.syntaxes
21d20 20 66 6f 72 20 73 61 79 69 6e 67 20 65 78 61 63   for saying exac
21d30 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69  tly the same thi
21d40 6e 67 2e 20 20 54 68 65 20 6f 74 68 65 72 20 63  ng.  The other c
21d50 68 61 6e 67 65 20 69 73 20 74 68 61 74 20 74 68  hange is that th
21d60 65 0a 72 65 63 75 72 73 69 6f 6e 20 69 73 20 73  e.recursion is s
21d70 74 6f 70 70 65 64 20 62 79 20 61 20 4c 49 4d 49  topped by a LIMI
21d80 54 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 20  T rather than a 
21d90 57 48 45 52 45 20 63 6c 61 75 73 65 2e 20 20 54  WHERE clause.  T
21da0 68 65 20 75 73 65 20 6f 66 0a 4c 49 4d 49 54 20  he use of.LIMIT 
21db0 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20  means that when 
21dc0 74 68 65 20 6f 6e 65 2d 6d 69 6c 6c 69 6f 6e 74  the one-milliont
21dd0 68 20 72 6f 77 20 69 73 20 61 64 64 65 64 20 74  h row is added t
21de0 6f 20 74 68 65 20 22 63 6e 74 22 20 74 61 62 6c  o the "cnt" tabl
21df0 65 0a 28 61 6e 64 20 69 6d 6d 65 64 69 61 74 65  e.(and immediate
21e00 6c 79 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ly returned by t
21e10 68 65 20 53 45 4c 45 43 54 2c 20 74 68 61 6e 6b  he SELECT, thank
21e20 73 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 6f  s to the query o
21e30 70 74 69 6d 69 7a 65 72 29 0a 74 68 65 6e 20 74  ptimizer).then t
21e40 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f  he recursion sto
21e50 70 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72  ps immediately r
21e60 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f 77  egardless of how
21e70 20 6d 61 6e 79 20 72 6f 77 73 20 6d 69 67 68 74   many rows might
21e80 20 62 65 0a 6c 65 66 74 20 69 6e 20 74 68 65 20   be.left in the 
21e90 71 75 65 75 65 2e 20 20 4f 6e 20 6d 6f 72 65 20  queue.  On more 
21ea0 63 6f 6d 70 6c 65 78 20 71 75 65 72 69 65 73 2c  complex queries,
21eb0 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65   it can sometime
21ec0 73 20 62 65 0a 64 69 66 66 69 63 75 6c 74 20 74  s be.difficult t
21ed0 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
21ee0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 77  e WHERE clause w
21ef0 69 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79 20 63  ill eventually c
21f00 61 75 73 65 20 74 68 65 0a 71 75 65 75 65 20 74  ause the.queue t
21f10 6f 20 64 72 61 69 6e 20 61 6e 64 20 74 68 65 20  o drain and the 
21f20 72 65 63 75 72 73 69 6f 6e 20 74 6f 20 74 65 72  recursion to ter
21f30 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 74 68 65  minate.  But the
21f40 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77 69   LIMIT clause wi
21f50 6c 6c 0a 61 77 61 79 73 20 73 74 6f 70 20 74 68  ll.aways stop th
21f60 65 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 53  e recursions.  S
21f70 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 70 72 61  o it is good pra
21f80 63 74 69 63 65 20 74 6f 20 61 6c 77 61 79 73 20  ctice to always 
21f90 69 6e 63 6c 75 64 65 20 61 0a 4c 49 4d 49 54 20  include a.LIMIT 
21fa0 63 6c 61 75 73 65 20 61 73 20 61 20 73 61 66 65  clause as a safe
21fb0 74 79 20 69 66 20 61 6e 20 75 70 70 65 72 20 62  ty if an upper b
21fc0 6f 75 6e 64 20 6f 6e 20 74 68 65 20 73 69 7a 65  ound on the size
21fd0 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 6f   of the recursio
21fe0 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a 0a 0a  n .is known.....
21ff0 0a 3c 68 33 3e 4c 69 6d 69 74 61 74 69 6f 6e 73  .<h3>Limitations
22000 20 41 6e 64 20 43 61 76 65 61 74 73 3c 2f 68 33   And Caveats</h3
22010 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a  >..<ul>.<li><p>.
22020 54 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  The WITH clause 
22030 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 77  cannot be used w
22040 69 74 68 69 6e 20 61 20 5b 43 52 45 41 54 45 20  ithin a [CREATE 
22050 54 52 49 47 47 45 52 5d 2e 0a 3c 6c 69 3e 3c 70  TRIGGER]..<li><p
22060 3e 0a 54 68 65 20 57 49 54 48 20 63 6c 61 75 73  >.The WITH claus
22070 65 20 6d 75 73 74 20 61 70 70 65 61 72 20 61 74  e must appear at
22080 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
22090 66 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 53  f a top-level [S
220a0 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
220b0 0a 6f 72 20 61 74 20 74 68 65 20 62 65 67 69 6e  .or at the begin
220c0 6e 69 6e 67 20 6f 66 20 61 20 73 75 62 71 75 65  ning of a subque
220d0 72 79 2e 20 20 54 68 65 20 57 49 54 48 20 63 6c  ry.  The WITH cl
220e0 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 70  ause cannot be p
220f0 72 65 70 65 6e 64 65 64 20 74 6f 0a 74 68 65 20  repended to.the 
22100 73 65 63 6f 6e 64 20 6f 72 20 73 75 62 73 65 71  second or subseq
22110 75 65 6e 74 20 53 45 4c 45 43 54 20 73 74 61 74  uent SELECT stat
22120 65 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70  ement of a [comp
22130 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2e 0a 3c 6c  ound select]..<l
22140 69 3e 3c 70 3e 0a 54 68 65 20 53 51 4c 3a 31 39  i><p>.The SQL:19
22150 39 39 20 73 70 65 63 20 72 65 71 75 69 72 65 73  99 spec requires
22160 20 74 68 61 74 20 74 68 65 20 52 45 43 55 52 53   that the RECURS
22170 49 56 45 20 6b 65 79 77 6f 72 64 20 66 6f 6c 6c  IVE keyword foll
22180 6f 77 20 57 49 54 48 20 69 6e 20 61 6e 79 0a 57  ow WITH in any.W
22190 49 54 48 20 63 6c 61 75 73 65 20 74 68 61 74 20  ITH clause that 
221a0 69 6e 63 6c 75 64 73 20 61 20 72 65 63 75 72 73  includs a recurs
221b0 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ive common table
221c0 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 48 6f   expression.  Ho
221d0 77 65 76 65 72 2c 20 66 6f 72 0a 63 6f 6d 70 61  wever, for.compa
221e0 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 53 71  tibility with Sq
221f0 6c 53 65 72 76 65 72 20 61 6e 64 20 4f 72 61 63  lServer and Orac
22200 6c 65 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20  le, SQLite does 
22210 6e 6f 74 20 65 6e 66 6f 72 63 65 20 74 68 69 73  not enforce this
22220 20 72 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74   rule..</ul>..<t
22230 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
22240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22280 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45  ###.Section SELE
22290 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c 45 43  CT select {SELEC
222a0 54 20 71 75 65 72 79 7d 0a 0a 52 65 63 75 72 73  T query}..Recurs
222b0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
222c0 20 73 65 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74   select-stmt.</t
222d0 63 6c 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c  cl>...<p>The SEL
222e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
222f0 20 75 73 65 64 20 74 6f 20 71 75 65 72 79 20 74   used to query t
22300 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
22310 65 0a 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45  e.result of a SE
22320 4c 45 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20  LECT is zero or 
22330 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74  more rows of dat
22340 61 20 77 68 65 72 65 20 65 61 63 68 20 72 6f 77  a where each row
22350 0a 68 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d  .has a fixed num
22360 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20  ber of columns. 
22370 20 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54   ..<p>The SELECT
22380 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68   statement is th
22390 65 20 6d 6f 73 74 20 63 6f 6d 70 6c 69 63 61 74  e most complicat
223a0 65 64 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68  ed command in th
223b0 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a  e SQL language..
223c0 54 6f 20 6d 61 6b 65 20 74 68 65 20 64 65 73 63  To make the desc
223d0 72 69 70 74 69 6f 6e 20 65 61 73 69 65 72 20 74  ription easier t
223e0 6f 20 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f  o follow, some o
223f0 66 20 74 68 65 20 70 61 73 73 61 67 65 73 20 62  f the passages b
22400 65 6c 6f 77 20 64 65 73 63 72 69 62 65 0a 74 68  elow describe.th
22410 65 20 77 61 79 20 74 68 65 20 64 61 74 61 20 72  e way the data r
22420 65 74 75 72 6e 65 64 20 62 79 20 61 20 53 45 4c  eturned by a SEL
22430 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
22440 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 61   determined as a
22450 20 73 65 72 69 65 73 20 6f 66 0a 73 74 65 70 73   series of.steps
22460 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e  . It is importan
22470 74 20 74 6f 20 6b 65 65 70 20 69 6e 20 6d 69 6e  t to keep in min
22480 64 20 74 68 61 74 20 74 68 69 73 20 69 73 20 70  d that this is p
22490 75 72 65 6c 79 20 69 6c 6c 75 73 74 72 61 74 69  urely illustrati
224a0 76 65 20 2d 0a 69 6e 20 70 72 61 63 74 69 63 65  ve -.in practice
224b0 20 6e 65 69 74 68 65 72 20 53 51 4c 69 74 65 20   neither SQLite 
224c0 6e 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 53 51  nor any other SQ
224d0 4c 20 65 6e 67 69 6e 65 20 69 73 20 72 65 71 75  L engine is requ
224e0 69 72 65 64 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a  ired to follow .
224f0 74 68 69 73 20 6f 72 20 61 6e 79 20 6f 74 68 65  this or any othe
22500 72 20 73 70 65 63 69 66 69 63 20 70 72 6f 63 65  r specific proce
22510 73 73 2e 0a 0a 3c 68 33 3e 53 69 6d 70 6c 65 20  ss...<h3>Simple 
22520 53 65 6c 65 63 74 20 50 72 6f 63 65 73 73 69 6e  Select Processin
22530 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73  g</h3>..<p>The s
22540 79 6e 74 61 78 20 66 6f 72 20 61 20 73 69 6d 70  yntax for a simp
22550 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
22560 65 6e 74 20 69 73 20 64 65 70 69 63 74 65 64 20  ent is depicted 
22570 69 6e 20 74 68 65 20 0a 5b 73 69 6d 70 6c 65 2d  in the .[simple-
22580 71 75 65 72 79 2d 73 74 6d 74 20 73 79 6e 74 61  query-stmt synta
22590 78 20 64 69 61 67 72 61 6d 5d 2e 20 47 65 6e 65  x diagram]. Gene
225a0 72 61 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c  rating the resul
225b0 74 73 20 6f 66 20 61 20 73 69 6d 70 6c 65 20 53  ts of a simple S
225c0 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20  ELECT.statement 
225d0 69 73 20 70 72 65 73 65 6e 74 65 64 20 61 73 20  is presented as 
225e0 61 20 66 6f 75 72 20 73 74 65 70 20 70 72 6f 63  a four step proc
225f0 65 73 73 20 69 6e 20 74 68 65 20 64 65 73 63 72  ess in the descr
22600 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a 0a 0a 3c  iption below:..<
22610 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 46  ol>.  <li> <p>[F
22620 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70 72 6f 63  ROM clause] proc
22630 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70 75  essing: The inpu
22640 74 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 73  t data for the s
22650 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 0a  imple SELECT is.
22660 20 20 20 20 20 20 20 64 65 74 65 72 6d 69 6e 65         determine
22670 64 2e 20 54 68 65 20 69 6e 70 75 74 20 64 61 74  d. The input dat
22680 61 20 69 73 20 65 69 74 68 65 72 20 69 6d 70 6c  a is either impl
22690 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65 20  icitly a single 
226a0 72 6f 77 20 77 69 74 68 20 30 0a 20 20 20 20 20  row with 0.     
226b0 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66 20 74 68    columns (if th
226c0 65 72 65 20 69 73 20 6e 6f 20 46 52 4f 4d 20 63  ere is no FROM c
226d0 6c 61 75 73 65 29 20 6f 72 20 69 73 20 64 65 74  lause) or is det
226e0 65 72 6d 69 6e 65 64 20 62 79 20 61 6e 61 6c 79  ermined by analy
226f0 7a 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20 20  zing the.       
22700 5b 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 73 79 6e  [join-source syn
22710 74 61 78 20 64 69 61 67 72 61 6d 7c 6a 6f 69 6e  tax diagram|join
22720 2d 73 6f 75 72 63 65 5d 20 73 70 65 63 69 66 69  -source] specifi
22730 63 61 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c 6c  cation that foll
22740 6f 77 73 20 0a 20 20 20 20 20 20 20 61 6e 20 65  ows .       an e
22750 78 70 6c 69 63 69 74 20 46 52 4f 4d 20 63 6c 61  xplicit FROM cla
22760 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  use..  <li> <p>[
22770 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70 72  WHERE clause] pr
22780 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e  ocessing: The in
22790 70 75 74 20 64 61 74 61 20 69 73 20 66 69 6c 74  put data is filt
227a0 65 72 65 64 20 75 73 69 6e 67 20 74 68 65 20 57  ered using the W
227b0 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61 75  HERE.       clau
227c0 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  se expression.  
227d0 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f 55  .  <li> <p>[GROU
227e0 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20 48  P BY|GROUP BY, H
227f0 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c 74  AVING and result
22800 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69  -column expressi
22810 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20  on] processing: 
22820 0a 20 20 20 20 20 20 20 54 68 65 20 73 65 74 20  .       The set 
22830 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 69  of result rows i
22840 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61 67  s computed by ag
22850 67 72 65 67 61 74 69 6e 67 20 74 68 65 20 64 61  gregating the da
22860 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a  ta according to.
22870 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55 50         any GROUP
22880 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20 63   BY clause and c
22890 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20 72  alculating the r
228a0 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65 73  esult-set expres
228b0 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20 20  sions for the.  
228c0 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68 65       rows of the
228d0 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20   filtered input 
228e0 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c 69  dataset.  .  <li
228f0 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c 44  > <p>[DISTINCT|D
22900 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79 77  ISTINCT/ALL keyw
22910 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  ord] processing:
22920 20 49 66 20 74 68 65 20 71 75 65 72 79 20 69 73   If the query is
22930 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20 20   a "SELECT.     
22940 20 20 44 49 53 54 49 4e 43 54 22 20 71 75 65 72    DISTINCT" quer
22950 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  y, duplicate row
22960 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72  s are removed fr
22970 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72 65  om the set of re
22980 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c 3e  sult rows..</ol>
22990 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74  ..<p>There are t
229a0 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d 70  wo types of simp
229b0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
229c0 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65 20  ent - aggregate 
229d0 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67 61  and .non-aggrega
229e0 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20 73  te queries. ^A s
229f0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
22a00 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67 67  tement is an agg
22a10 72 65 67 61 74 65 20 71 75 65 72 79 20 69 66 0a  regate query if.
22a20 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74 68  it contains eith
22a30 65 72 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c  er a GROUP BY cl
22a40 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20 6d  ause or one or m
22a50 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
22a60 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20 72  nctions.in the r
22a70 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68 65  esult-set. ^Othe
22a80 72 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d 70  rwise, if a simp
22a90 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61 69  le SELECT contai
22aa0 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65 0a  ns no aggregate.
22ab0 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47  functions or a G
22ac0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c 20  ROUP BY clause, 
22ad0 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72  it is a non-aggr
22ae0 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c 70  egate query...<p
22af0 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e 61  ><b>1. Determina
22b00 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64 61  tion of input da
22b10 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65 20  ta (FROM clause 
22b20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e  processing).</b>
22b30 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
22b40 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74 63  t fromclause</tc
22b50 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
22b60 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73 65  rds {FROM clause
22b70 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  }</tcl>..<p>The 
22b80 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64 20  input data used 
22b90 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  by a simple SELE
22ba0 43 54 20 71 75 65 72 79 20 69 73 20 61 20 73 65  CT query is a se
22bb0 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f  t of <i>N</i> ro
22bc0 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f 69  ws .each <i>M</i
22bd0 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e 0a  > columns wide..
22be0 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52 4f  .<p>^(If the FRO
22bf0 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74  M clause is omit
22c00 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70 6c  ted from a simpl
22c10 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
22c20 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69 6e  nt, then the .in
22c30 70 75 74 20 64 61 74 61 20 69 73 20 69 6d 70 6c  put data is impl
22c40 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65 20  icitly a single 
22c50 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e 73  row zero columns
22c60 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c 69   wide)^ (i.e. <i
22c70 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69 3e  >N</i>=1 and.<i>
22c80 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49 66  M</i>=0)...<p>If
22c90 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69   a FROM clause i
22ca0 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
22cb0 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20 61   data on which a
22cc0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 71   simple SELECT q
22cd0 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63 6f  uery.operates co
22ce0 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e 65  mes from the one
22cf0 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
22d00 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 28 53  or subqueries (S
22d10 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
22d20 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73 29  .in parenthesis)
22d30 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c 6f   specified follo
22d40 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b 65  wing the FROM ke
22d50 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 2d 73 65  yword. ^A sub-se
22d60 6c 65 63 74 20 73 70 65 63 69 66 69 65 64 0a 69  lect specified.i
22d70 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f 75 72 63  n the join-sourc
22d80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  e following the 
22d90 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 6e 20 61  FROM clause in a
22da0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
22db0 74 61 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e 64  tatement is.hand
22dc0 6c 65 64 20 61 73 20 69 66 20 69 74 20 77 61 73  led as if it was
22dd0 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e   a table contain
22de0 69 6e 67 20 74 68 65 20 64 61 74 61 20 72 65 74  ing the data ret
22df0 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69  urned by executi
22e00 6e 67 20 74 68 65 0a 73 75 62 2d 73 65 6c 65 63  ng the.sub-selec
22e10 74 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 45 61  t statement. ^Ea
22e20 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
22e30 20 73 75 62 2d 73 65 6c 65 63 74 20 64 61 74 61   sub-select data
22e40 73 65 74 20 69 6e 68 65 72 69 74 73 20 74 68 65  set inherits the
22e50 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c 6c  .[collation|coll
22e60 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20  ation sequence] 
22e70 61 6e 64 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f  and [affinity] o
22e80 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
22e90 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 0a 69  ing expression.i
22ea0 6e 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74  n the sub-select
22eb0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e   statement...<p>
22ec0 5e 49 66 20 74 68 65 72 65 20 69 73 20 6f 6e 6c  ^If there is onl
22ed0 79 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  y a single table
22ee0 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f 75   in the join-sou
22ef0 72 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  rce following th
22f00 65 20 46 52 4f 4d 0a 63 6c 61 75 73 65 2c 20 74  e FROM.clause, t
22f10 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61  hen the input da
22f20 74 61 20 75 73 65 64 20 62 79 20 74 68 65 20 53  ta used by the S
22f30 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
22f40 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  is the contents 
22f50 6f 66 20 74 68 65 0a 6e 61 6d 65 64 20 74 61 62  of the.named tab
22f60 6c 65 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73  le. ^If there is
22f70 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74   more than one t
22f80 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 61  able specified a
22f90 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 6a 6f  s part of the.jo
22fa0 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f 77  in-source follow
22fb0 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b 65 79  ing the FROM key
22fc0 77 6f 72 64 2c 20 74 68 65 6e 20 74 68 65 20 63  word, then the c
22fd0 6f 6e 74 65 6e 74 73 20 6f 66 20 65 61 63 68 20  ontents of each 
22fe0 6e 61 6d 65 64 20 74 61 62 6c 65 0a 61 72 65 20  named table.are 
22ff0 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69  joined into a si
23000 6e 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f 72  ngle dataset for
23010 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45   the simple SELE
23020 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  CT statement to 
23030 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61 63  operate on..Exac
23040 74 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74 61  tly how the data
23050 20 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65 70   is combined dep
23060 65 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65 63  ends on the spec
23070 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 5d 20 61  ific [join-op] a
23080 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61  nd.[join-constra
23090 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f 6e  int] used to con
230a0 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65 73 20  nect the tables 
230b0 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 74 6f  or subqueries to
230c0 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c 20  gether...<p>All 
230d0 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65 20  joins in SQLite 
230e0 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65  are based on the
230f0 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
23100 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61  ct of the left a
23110 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64 61  nd.right-hand da
23120 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f 6c  tasets. ^The col
23130 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72 74  umns of the cart
23140 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64 61  esian product da
23150 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a 6f  taset are, in .o
23160 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63 6f  rder, all the co
23170 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66  lumns of the lef
23180 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 66  t-hand dataset f
23190 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 74  ollowed by all t
231a0 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68  he columns.of th
231b0 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
231c0 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73 20  aset. ^There is 
231d0 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61 72  a row in the car
231e0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64  tesian product d
231f0 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62 79  ataset.formed by
23200 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68 20   combining each 
23210 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69  unique combinati
23220 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f 6d  on of a row from
23230 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 0a   the left-hand .
23240 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64  and right-hand d
23250 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f 74  atasets. ^(In ot
23260 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
23270 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61  e left-hand data
23280 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a  set consists of.
23290 3c 69 3e 4e 6c 68 73 3c 2f 69 3e 20 72 6f 77 73  <i>Nlhs</i> rows
232a0 20 6f 66 20 3c 69 3e 4d 6c 68 73 3c 2f 69 3e 20   of <i>Mlhs</i> 
232b0 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74 68 65  columns, and the
232c0 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
232d0 73 65 74 20 6f 66 0a 3c 69 3e 4e 72 68 73 3c 2f  set of.<i>Nrhs</
232e0 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e 4d 72  i> rows of <i>Mr
232f0 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20  hs</i> columns, 
23300 74 68 65 6e 20 74 68 65 20 63 61 72 74 65 73 69  then the cartesi
23310 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61 0a  an product is a.
23320 64 61 74 61 73 65 74 20 6f 66 20 3c 69 3e 4e 6c  dataset of <i>Nl
23330 68 73 2e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77 73  hs.Nrhs</i> rows
23340 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e  , each containin
23350 67 20 3c 69 3e 4d 6c 68 73 2b 4d 72 68 73 3c 2f  g <i>Mlhs+Mrhs</
23360 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c  i> columns.)^..<
23370 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f  p>^If the join-o
23380 70 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49 4e  p is "CROSS JOIN
23390 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c  ", "INNER JOIN",
233a0 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f 6d   "JOIN" or a com
233b0 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68 65  ma.(",") and the
233c0 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20 55  re is no ON or U
233d0 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65  SING clause, the
233e0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
233f0 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d 70  the join is.simp
23400 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  ly the cartesian
23410 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20   product of the 
23420 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
23430 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a 49  and datasets. .I
23440 66 20 6a 6f 69 6e 2d 6f 70 20 64 6f 65 73 20 68  f join-op does h
23450 61 76 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20  ave ON or USING 
23460 63 6c 61 75 73 65 73 2c 20 74 68 6f 73 65 20 61  clauses, those a
23470 72 65 20 68 61 6e 64 6c 65 64 20 61 63 63 6f 72  re handled accor
23480 64 69 6e 67 20 74 6f 0a 74 68 65 20 66 6f 6c 6c  ding to.the foll
23490 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70 6f 69  owing bullet poi
234a0 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  nts:..<ul>.  <li
234b0 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 72 65 20  > <p>^(If there 
234c0 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20  is an ON clause 
234d0 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
234e0 74 68 65 20 4f 4e 20 65 78 70 72 65 73 73 69 6f  the ON expressio
234f0 6e 20 69 73 0a 20 20 20 20 20 20 20 65 76 61 6c  n is.       eval
23500 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  uated for each r
23510 6f 77 20 6f 66 20 74 68 65 20 63 61 72 74 65 73  ow of the cartes
23520 69 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61  ian product as a
23530 20 0a 20 20 20 20 20 20 20 5b 62 6f 6f 6c 65 61   .       [boolea
23540 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41  n expression]. A
23550 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  ll rows for whic
23560 68 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  h the expression
23570 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 0a 20   evaluates to . 
23580 20 20 20 20 20 20 66 61 6c 73 65 20 61 72 65 20        false are 
23590 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68  excluded from th
235a0 65 20 64 61 74 61 73 65 74 2e 29 5e 0a 0a 20 20  e dataset.)^..  
235b0 3c 6c 69 3e 20 3c 70 3e 5e 49 66 20 74 68 65 72  <li> <p>^If ther
235c0 65 20 69 73 20 61 20 55 53 49 4e 47 20 63 6c 61  e is a USING cla
235d0 75 73 65 20 73 70 65 63 69 66 69 65 64 20 61 73  use specified as
235e0 20 70 61 72 74 20 6f 66 20 74 68 65 20 6a 6f 69   part of the joi
235f0 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 2c 0a 20 20  n-constraint,.  
23600 20 20 20 20 20 74 68 65 6e 20 65 61 63 68 20 6f       then each o
23610 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  f the column nam
23620 65 73 20 73 70 65 63 69 66 69 65 64 20 6d 75 73  es specified mus
23630 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 64  t exist in the d
23640 61 74 61 73 65 74 73 20 74 6f 20 0a 20 20 20 20  atasets to .    
23650 20 20 20 62 6f 74 68 20 74 68 65 20 6c 65 66 74     both the left
23660 20 61 6e 64 20 72 69 67 68 74 20 6f 66 20 74 68   and right of th
23670 65 20 6a 6f 69 6e 2d 6f 70 2e 20 5e 28 46 6f 72  e join-op. ^(For
23680 20 65 61 63 68 20 70 61 69 72 20 6f 66 20 6e 61   each pair of na
23690 6d 65 73 61 6b 65 0a 20 20 20 20 20 20 20 63 6f  mesake.       co
236a0 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78 70 72 65  lumns, the expre
236b0 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d 20 72  ssion "lhs.X = r
236c0 68 73 2e 58 22 20 69 73 20 65 76 61 6c 75 61 74  hs.X" is evaluat
236d0 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ed for each row 
236e0 6f 66 0a 20 20 20 20 20 20 20 74 68 65 20 63 61  of.       the ca
236f0 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
23700 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
23710 70 72 65 73 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72  pression]. All r
23720 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 6f 6e  ows for which on
23730 65 0a 20 20 20 20 20 20 20 6f 72 20 6d 6f 72 65  e.       or more
23740 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
23750 6f 6e 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ons evaluates to
23760 20 66 61 6c 73 65 20 61 72 65 20 65 78 63 6c 75   false are exclu
23770 64 65 64 20 66 72 6f 6d 20 74 68 65 0a 20 20 20  ded from the.   
23780 20 20 20 20 72 65 73 75 6c 74 20 73 65 74 2e 29      result set.)
23790 5e 20 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e  ^ ^When comparin
237a0 67 20 76 61 6c 75 65 73 20 61 73 20 61 20 72 65  g values as a re
237b0 73 75 6c 74 20 6f 66 20 61 20 55 53 49 4e 47 20  sult of a USING 
237c0 63 6c 61 75 73 65 2c 20 74 68 65 0a 20 20 20 20  clause, the.    
237d0 20 20 20 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20     normal rules 
237e0 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 66 66  for handling aff
237f0 69 6e 69 74 69 65 73 2c 20 63 6f 6c 6c 61 74 69  inities, collati
23800 6f 6e 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  on sequences and
23810 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 76 61 6c   NULL.       val
23820 75 65 73 20 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ues in compariso
23830 6e 73 20 61 70 70 6c 79 2e 20 5e 54 68 65 20 63  ns apply. ^The c
23840 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 64  olumn from the d
23850 61 74 61 73 65 74 20 6f 6e 20 74 68 65 0a 20 20  ataset on the.  
23860 20 20 20 20 20 6c 65 66 74 2d 68 61 6e 64 20 73       left-hand s
23870 69 64 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ide of the join 
23880 6f 70 65 72 61 74 6f 72 20 69 73 20 63 6f 6e 73  operator is cons
23890 69 64 65 72 65 64 20 74 6f 20 62 65 20 6f 6e 20  idered to be on 
238a0 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 0a 20 20  the left-hand.  
238b0 20 20 20 20 20 73 69 64 65 20 6f 66 20 74 68 65       side of the
238c0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
238d0 61 74 6f 72 20 28 3d 29 20 66 6f 72 20 74 68 65  ator (=) for the
238e0 20 70 75 72 70 6f 73 65 73 20 6f 66 20 63 6f 6c   purposes of col
238f0 6c 61 74 69 6f 6e 20 0a 20 20 20 20 20 20 20 73  lation .       s
23900 65 71 75 65 6e 63 65 20 61 6e 64 20 61 66 66 69  equence and affi
23910 6e 69 74 79 20 70 72 65 63 65 64 65 6e 63 65 2e  nity precedence.
23920 0a 0a 20 20 20 20 20 20 20 3c 70 3e 5e 46 6f 72  ..       <p>^For
23930 20 65 61 63 68 20 70 61 69 72 20 6f 66 20 63 6f   each pair of co
23940 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64  lumns identified
23950 20 62 79 20 61 20 55 53 49 4e 47 20 63 6c 61 75   by a USING clau
23960 73 65 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20  se, the column. 
23970 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 72        from the r
23980 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65  ight-hand datase
23990 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
239a0 6d 20 74 68 65 20 6a 6f 69 6e 65 64 20 64 61 74  m the joined dat
239b0 61 73 65 74 2e 20 5e 54 68 69 73 20 0a 20 20 20  aset. ^This .   
239c0 20 20 20 20 69 73 20 74 68 65 20 6f 6e 6c 79 20      is the only 
239d0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
239e0 65 6e 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73  en a USING claus
239f0 65 20 61 6e 64 20 69 74 73 20 65 71 75 69 76 61  e and its equiva
23a00 6c 65 6e 74 20 4f 4e 0a 20 20 20 20 20 20 20 63  lent ON.       c
23a10 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 20 20 3c 6c  onstraint...  <l
23a20 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 4e  i> <p>^(If the N
23a30 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 20 69  ATURAL keyword i
23a40 73 20 61 64 64 65 64 20 74 6f 20 61 6e 79 20 6f  s added to any o
23a50 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 73 2c 20  f the join-ops, 
23a60 74 68 65 6e 20 61 6e 0a 20 20 20 20 20 20 20 69  then an.       i
23a70 6d 70 6c 69 63 69 74 20 55 53 49 4e 47 20 63 6c  mplicit USING cl
23a80 61 75 73 65 20 69 73 20 61 64 64 65 64 20 74 6f  ause is added to
23a90 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72   the join-constr
23aa0 61 69 6e 74 73 2e 20 54 68 65 20 69 6d 70 6c 69  aints. The impli
23ab0 63 69 74 0a 20 20 20 20 20 20 20 55 53 49 4e 47  cit.       USING
23ac0 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e 73   clause contains
23ad0 20 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c   each of the col
23ae0 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 61  umn names that a
23af0 70 70 65 61 72 20 69 6e 20 62 6f 74 68 0a 20 20  ppear in both.  
23b00 20 20 20 20 20 74 68 65 20 6c 65 66 74 20 61 6e       the left an
23b10 64 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70  d right-hand inp
23b20 75 74 20 64 61 74 61 73 65 74 73 2e 29 5e 20 5e  ut datasets.)^ ^
23b30 49 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  If the left and 
23b40 72 69 67 68 74 2d 68 61 6e 64 0a 20 20 20 20 20  right-hand.     
23b50 20 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 73    input datasets
23b60 20 66 65 61 74 75 72 65 20 6e 6f 20 63 6f 6d 6d   feature no comm
23b70 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c  on column names,
23b80 20 74 68 65 6e 20 74 68 65 20 4e 41 54 55 52 41   then the NATURA
23b90 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20 20 20 20  L keyword.      
23ba0 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20 6f   has no effect o
23bb0 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  n the results of
23bc0 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20 55 53   the join. ^A US
23bd0 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73 65  ING or ON clause
23be0 20 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f 74 20   may.       not 
23bf0 62 65 20 61 64 64 65 64 20 74 6f 20 61 20 6a 6f  be added to a jo
23c00 69 6e 20 74 68 61 74 20 73 70 65 63 69 66 69 65  in that specifie
23c10 73 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65  s the NATURAL ke
23c20 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c  yword...  <li> <
23c30 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69 6e 2d  p>^(If the join-
23c40 6f 70 20 69 73 20 61 20 22 4c 45 46 54 20 4a 4f  op is a "LEFT JO
23c50 49 4e 22 20 6f 72 20 22 4c 45 46 54 20 4f 55 54  IN" or "LEFT OUT
23c60 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65 6e 20 61  ER JOIN", then a
23c70 66 74 65 72 0a 20 20 20 20 20 20 20 74 68 65 20  fter.       the 
23c80 4f 4e 20 6f 72 20 55 53 49 4e 47 20 66 69 6c 74  ON or USING filt
23c90 65 72 69 6e 67 20 63 6c 61 75 73 65 73 20 68 61  ering clauses ha
23ca0 76 65 20 62 65 65 6e 20 61 70 70 6c 69 65 64 2c  ve been applied,
23cb0 20 61 6e 20 65 78 74 72 61 20 72 6f 77 20 69 73   an extra row is
23cc0 20 0a 20 20 20 20 20 20 20 61 64 64 65 64 20 74   .       added t
23cd0 6f 20 74 68 65 20 6f 75 74 70 75 74 20 66 6f 72  o the output for
23ce0 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
23cf0 20 6f 72 69 67 69 6e 61 6c 20 6c 65 66 74 2d 68   original left-h
23d00 61 6e 64 20 69 6e 70 75 74 20 0a 20 20 20 20 20  and input .     
23d10 20 20 64 61 74 61 73 65 74 20 74 68 61 74 20 63    dataset that c
23d20 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6e 6f  orresponds to no
23d30 20 72 6f 77 73 20 61 74 20 61 6c 6c 20 69 6e 20   rows at all in 
23d40 74 68 65 20 63 6f 6d 70 6f 73 69 74 65 0a 20 20  the composite.  
23d50 20 20 20 20 20 64 61 74 61 73 65 74 20 28 69 66       dataset (if
23d60 20 61 6e 79 29 2e 29 5e 20 5e 54 68 65 20 61 64   any).)^ ^The ad
23d70 64 65 64 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e  ded rows contain
23d80 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20   NULL values in 
23d90 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20  the columns.    
23da0 20 20 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f     that would no
23db0 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 76  rmally contain v
23dc0 61 6c 75 65 73 20 63 6f 70 69 65 64 20 66 72 6f  alues copied fro
23dd0 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  m the right-hand
23de0 20 69 6e 70 75 74 0a 20 20 20 20 20 20 20 64 61   input.       da
23df0 74 61 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a  taset.  .</ul>..
23e00 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f 72 65 20 74  <p>^(When more t
23e10 68 61 6e 20 74 77 6f 20 74 61 62 6c 65 73 20 61  han two tables a
23e20 72 65 20 6a 6f 69 6e 65 64 20 74 6f 67 65 74 68  re joined togeth
23e30 65 72 20 61 73 20 70 61 72 74 20 6f 66 20 61 20  er as part of a 
23e40 46 52 4f 4d 20 63 6c 61 75 73 65 2c 0a 74 68 65  FROM clause,.the
23e50 20 6a 6f 69 6e 20 6f 70 65 72 61 74 69 6f 6e 73   join operations
23e60 20 61 72 65 20 70 72 6f 63 65 73 73 65 64 20 69   are processed i
23e70 6e 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66  n order from lef
23e80 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f  t to right. In o
23e90 74 68 65 72 20 0a 77 6f 72 64 73 2c 20 74 68 65  ther .words, the
23ea0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 28 41 20   FROM clause (A 
23eb0 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e  join-op-1 B join
23ec0 2d 6f 70 2d 32 20 43 29 20 69 73 20 63 6f 6d 70  -op-2 C) is comp
23ed0 75 74 65 64 20 61 73 20 0a 28 28 41 20 6a 6f 69  uted as .((A joi
23ee0 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f  n-op-1 B) join-o
23ef0 70 2d 32 20 43 29 2e 29 5e 0a 0a 3c 74 63 6c 3e  p-2 C).)^..<tcl>
23f00 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 72 6f 73  hd_fragment cros
23f10 73 6a 6f 69 6e 20 7b 74 72 65 61 74 73 20 74 68  sjoin {treats th
23f20 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20 6f 70 65  e CROSS JOIN ope
23f30 72 61 74 6f 72 20 73 70 65 63 69 61 6c 6c 79 7d  rator specially}
23f40 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64  </tcl>.<p><b>Sid
23f50 65 20 6e 6f 74 65 3a 20 53 70 65 63 69 61 6c 20  e note: Special 
23f60 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53  handling of CROS
23f70 53 20 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e 54 68 65  S JOIN.</b>.^The
23f80 72 65 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65  re is no differe
23f90 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  nce between the 
23fa0 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a  "INNER JOIN", "J
23fb0 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6a 6f 69  OIN" and "," joi
23fc0 6e 0a 6f 70 65 72 61 74 6f 72 73 2e 20 54 68 65  n.operators. The
23fd0 79 20 61 72 65 20 63 6f 6d 70 6c 65 74 65 6c 79  y are completely
23fe0 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65   interchangeable
23ff0 20 69 6e 20 53 51 4c 69 74 65 2e 0a 5e 28 54 68   in SQLite..^(Th
24000 65 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 20 6a  e "CROSS JOIN" j
24010 6f 69 6e 20 6f 70 65 72 61 74 6f 72 20 70 72 6f  oin operator pro
24020 64 75 63 65 73 20 74 68 65 20 73 61 6d 65 20 72  duces the same r
24030 65 73 75 6c 74 20 61 73 20 74 68 65 20 0a 22 49  esult as the ."I
24040 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49  NNER JOIN", "JOI
24050 4e 22 20 61 6e 64 20 22 2c 22 20 6f 70 65 72 61  N" and "," opera
24060 74 6f 72 73 29 5e 2c 20 62 75 74 20 69 73 20 0a  tors)^, but is .
24070 3c 61 20 68 72 65 66 3d 6f 70 74 6f 76 65 72 76  <a href=optoverv
24080 69 65 77 2e 68 74 6d 6c 23 63 72 6f 73 73 6a 6f  iew.html#crossjo
24090 69 6e 3e 68 61 6e 64 6c 65 64 20 64 69 66 66 65  in>handled diffe
240a0 72 65 6e 74 6c 79 20 62 79 20 74 68 65 20 71 75  rently by the qu
240b0 65 72 79 0a 6f 70 74 69 6d 69 7a 65 72 3c 2f 61  ery.optimizer</a
240c0 3e 20 69 6e 20 74 68 61 74 20 69 74 20 70 72 65  > in that it pre
240d0 76 65 6e 74 73 20 74 68 65 20 71 75 65 72 79 20  vents the query 
240e0 6f 70 74 69 6d 69 7a 65 72 20 66 72 6f 6d 20 72  optimizer from r
240f0 65 6f 72 64 65 72 69 6e 67 0a 74 68 65 20 74 61  eordering.the ta
24100 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e  bles in the join
24110 2e 20 20 41 6e 20 61 70 70 6c 69 63 61 74 69 6f  .  An applicatio
24120 6e 20 70 72 6f 67 72 61 6d 6d 65 72 20 63 61 6e  n programmer can
24130 20 75 73 65 20 74 68 65 20 43 52 4f 53 53 20 4a   use the CROSS J
24140 4f 49 4e 20 0a 6f 70 65 72 61 74 6f 72 20 74 6f  OIN .operator to
24150 20 64 69 72 65 63 74 6c 79 20 69 6e 66 6c 75 65   directly influe
24160 6e 63 65 20 74 68 65 20 61 6c 67 6f 72 69 74 68  nce the algorith
24170 6d 20 74 68 61 74 20 69 73 20 63 68 6f 73 65 6e  m that is chosen
24180 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a 74 68   to implement.th
24190 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
241a0 6e 74 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67  nt.  Avoid using
241b0 20 43 52 4f 53 53 20 4a 4f 49 4e 20 65 78 63 65   CROSS JOIN exce
241c0 70 74 20 69 6e 20 73 70 65 63 69 66 69 63 20 73  pt in specific s
241d0 69 74 75 61 74 69 6f 6e 73 20 0a 77 68 65 72 65  ituations .where
241e0 20 6d 61 6e 75 61 6c 20 63 6f 6e 74 72 6f 6c 20   manual control 
241f0 6f 66 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  of the query opt
24200 69 6d 69 7a 65 72 20 69 73 20 64 65 73 69 72 65  imizer is desire
24210 64 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67 0a  d.  Avoid using.
24220 43 52 4f 53 53 20 4a 4f 49 4e 20 65 61 72 6c 79  CROSS JOIN early
24230 20 69 6e 20 74 68 65 20 64 65 76 65 6c 6f 70 6d   in the developm
24240 65 6e 74 20 6f 66 20 61 6e 20 61 70 70 6c 69 63  ent of an applic
24250 61 74 69 6f 6e 20 61 73 20 64 6f 69 6e 67 20 73  ation as doing s
24260 6f 20 69 73 0a 61 20 3c 61 20 68 72 65 66 3d 22  o is.a <a href="
24270 68 74 74 70 3a 2f 2f 63 32 2e 63 6f 6d 2f 63 67  http://c2.com/cg
24280 69 2f 77 69 6b 69 3f 50 72 65 6d 61 74 75 72 65  i/wiki?Premature
24290 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 22 3e 70 72  Optimization">pr
242a0 65 6d 61 74 75 72 65 0a 6f 70 74 69 6d 69 7a 61  emature.optimiza
242b0 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54 68 65 20 73  tion</a>.  The s
242c0 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
242d0 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 20 69 73  of CROSS JOIN is
242e0 20 61 6e 20 53 51 4c 69 74 65 2d 73 70 65 63 69   an SQLite-speci
242f0 66 69 63 0a 66 65 61 74 75 72 65 20 61 6e 64 20  fic.feature and 
24300 69 73 20 6e 6f 74 20 61 20 70 61 72 74 20 6f 66  is not a part of
24310 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 20   standard SQL.. 
24320 20 20 20 20 20 20 0a 0a 3c 74 63 6c 3e 68 64 5f        ..<tcl>hd_
24330 66 72 61 67 6d 65 6e 74 20 77 68 65 72 65 63 6c  fragment wherecl
24340 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  ause</tcl>.<tcl>
24350 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57 48 45  hd_keywords {WHE
24360 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e  RE clause}</tcl>
24370 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20  .<p><b>2. WHERE 
24380 63 6c 61 75 73 65 20 66 69 6c 74 65 72 69 6e 67  clause filtering
24390 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61  .</b>..<p>^(If a
243a0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
243b0 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20   specified, the 
243c0 57 48 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e  WHERE expression
243d0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f   is evaluated fo
243e0 72 20 0a 65 61 63 68 20 72 6f 77 20 69 6e 20 74  r .each row in t
243f0 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 73  he input data as
24400 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72   a [boolean expr
24410 65 73 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77  ession]. All row
24420 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a  s for which the.
24430 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70  WHERE clause exp
24440 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
24450 73 20 74 6f 20 66 61 6c 73 65 20 61 72 65 20 65  s to false are e
24460 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65  xcluded from the
24470 20 64 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a   dataset before.
24480 63 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 0a 0a 3c  continuing.)^..<
24490 70 3e 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74 69  p><b>3. Generati
244a0 6f 6e 20 6f 66 20 74 68 65 20 73 65 74 20 6f 66  on of the set of
244b0 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f 62   result rows.</b
244c0 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
244d0 6e 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 74 63  nt resultset</tc
244e0 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
244f0 72 64 73 20 7b 72 65 73 75 6c 74 2d 73 65 74 20  rds {result-set 
24500 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47 52  expressions} {GR
24510 4f 55 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c  OUP BY}</tcl>..<
24520 70 3e 4f 6e 63 65 20 74 68 65 20 69 6e 70 75 74  p>Once the input
24530 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 46   data from the F
24540 52 4f 4d 20 63 6c 61 75 73 65 20 68 61 73 20 62  ROM clause has b
24550 65 65 6e 20 66 69 6c 74 65 72 65 64 20 62 79 20  een filtered by 
24560 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65  the.WHERE clause
24570 20 65 78 70 72 65 73 73 69 6f 6e 20 28 69 66 20   expression (if 
24580 61 6e 79 29 2c 20 74 68 65 20 73 65 74 20 6f 66  any), the set of
24590 20 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72   result rows for
245a0 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c   the simple .SEL
245b0 45 43 54 20 61 72 65 20 63 61 6c 63 75 6c 61 74  ECT are calculat
245c0 65 64 2e 20 45 78 61 63 74 6c 79 20 68 6f 77 20  ed. Exactly how 
245d0 74 68 69 73 20 69 73 20 64 6f 6e 65 20 64 65 70  this is done dep
245e0 65 6e 64 73 20 6f 6e 20 77 68 65 74 68 65 72 20  ends on whether 
245f0 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45  the simple .SELE
24600 43 54 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  CT is an aggrega
24610 74 65 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67  te or non-aggreg
24620 61 74 65 20 71 75 65 72 79 2c 20 61 6e 64 20 77  ate query, and w
24630 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
24640 47 52 4f 55 50 0a 42 59 20 63 6c 61 75 73 65 20  GROUP.BY clause 
24650 77 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a  was specified...
24660 3c 70 3e 20 54 68 65 20 6c 69 73 74 20 6f 66 20  <p> The list of 
24670 65 78 70 72 65 73 73 69 6f 6e 73 20 62 65 74 77  expressions betw
24680 65 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20 61  een the SELECT a
24690 6e 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73  nd FROM keywords
246a0 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68 65   is known as.the
246b0 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
246c0 6f 6e 20 6c 69 73 74 2e 20 20 5e 49 66 20 61 20  on list.  ^If a 
246d0 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
246e0 6e 20 69 73 20 74 68 65 20 73 70 65 63 69 61 6c  n is the special
246f0 20 65 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22 20   expression."*" 
24700 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73  then all columns
24710 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61   in the input da
24720 74 61 20 61 72 65 20 73 75 62 73 74 69 74 75 74  ta are substitut
24730 65 64 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20  ed for that one 
24740 65 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49 66  expression..^(If
24750 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
24760 69 73 20 74 68 65 20 61 6c 69 61 73 20 6f 66 20  is the alias of 
24770 61 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  a table or subqu
24780 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
24790 63 6c 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64 20  clause.followed 
247a0 62 79 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c 6c  by ".*" then all
247b0 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68   columns from th
247c0 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72  e named table or
247d0 20 73 75 62 71 75 65 72 79 20 61 72 65 0a 73 75   subquery are.su
247e0 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68  bstituted for th
247f0 65 20 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73  e single express
24800 69 6f 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20 61  ion.)^ ^(It is a
24810 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61  n error to use a
24820 20 22 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e 2a   "*" or."alias.*
24830 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  " expression in 
24840 61 6e 79 20 63 6f 6e 74 65 78 74 20 6f 74 68 65  any context othe
24850 72 20 74 68 61 6e 20 74 68 61 6e 20 61 20 72 65  r than than a re
24860 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
24870 6c 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73 20  list.)^.^(It is 
24880 61 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20 74 6f  also an error to
24890 20 75 73 65 20 61 20 22 2a 22 20 6f 72 20 22 61   use a "*" or "a
248a0 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69  lias.*" expressi
248b0 6f 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65 20 53  on in a simple S
248c0 45 4c 45 43 54 0a 71 75 65 72 79 20 74 68 61 74  ELECT.query that
248d0 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61   does not have a
248e0 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e 0a   FROM clause.)^.
248f0 0a 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62 65  .<p> ^(The numbe
24900 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
24910 74 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65  the rows returne
24920 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45  d by a simple SE
24930 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69  LECT statement.i
24940 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6e  s equal to the n
24950 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
24960 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  ions in the resu
24970 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
24980 73 74 20 61 66 74 65 72 0a 73 75 62 73 74 69 74  st after.substit
24990 75 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20 61  ution of * and a
249a0 6c 69 61 73 2e 2a 20 65 78 70 72 65 73 73 69 6f  lias.* expressio
249b0 6e 73 2e 29 5e 20 45 61 63 68 20 72 65 73 75 6c  ns.)^ Each resul
249c0 74 20 72 6f 77 20 69 73 20 63 61 6c 63 75 6c 61  t row is calcula
249d0 74 65 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e  ted by.evaluatin
249e0 67 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  g the expression
249f0 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  s in the result 
24a00 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
24a10 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f 20  with respect to 
24a20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a.single row of 
24a30 69 6e 70 75 74 20 64 61 74 61 20 6f 72 2c 20 66  input data or, f
24a40 6f 72 20 61 67 67 72 65 67 61 74 65 20 71 75 65  or aggregate que
24a50 72 69 65 73 2c 20 77 69 74 68 20 72 65 73 70 65  ries, with respe
24a60 63 74 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f 66  ct to a group.of
24a70 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c   rows...<ul>.  <
24a80 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45  li><p>^If the SE
24a90 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
24aa0 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65  s <b>a non-aggre
24ab0 67 61 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20  gate query</b>, 
24ac0 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 65  then .    each e
24ad0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
24ae0 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
24af0 6f 6e 20 6c 69 73 74 20 69 73 20 65 76 61 6c 75  on list is evalu
24b00 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
24b10 77 20 69 6e 0a 20 20 20 20 74 68 65 20 64 61 74  w in.    the dat
24b20 61 73 65 74 20 66 69 6c 74 65 72 65 64 20 62 79  aset filtered by
24b30 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
24b40 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  e...  <li><p>^If
24b50 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
24b60 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61  ement is <b>an a
24b70 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
24b80 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50 0a 20  ithout a GROUP. 
24b90 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65     BY</b> clause
24ba0 2c 20 74 68 65 6e 20 65 61 63 68 20 61 67 67 72  , then each aggr
24bb0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
24bc0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73   in the result-s
24bd0 65 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75  et is .    evalu
24be0 61 74 65 64 20 6f 6e 63 65 20 61 63 72 6f 73 73  ated once across
24bf0 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
24c00 73 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d 61  set. ^Each non-a
24c10 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
24c20 69 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65 20 72  ion.    in the r
24c30 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65 76 61  esult-set is eva
24c40 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20  luated once for 
24c50 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73  an arbitrarily s
24c60 65 6c 65 63 74 65 64 20 72 6f 77 20 6f 66 0a 20  elected row of. 
24c70 20 20 20 74 68 65 20 64 61 74 61 73 65 74 2e 20     the dataset. 
24c80 5e 54 68 65 20 73 61 6d 65 20 61 72 62 69 74 72  ^The same arbitr
24c90 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72  arily selected r
24ca0 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 65  ow is used for e
24cb0 61 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67 72  ach.    non-aggr
24cc0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
24cd0 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 64 61  . ^Or, if the da
24ce0 74 61 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 7a  taset contains z
24cf0 65 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 0a  ero rows, then .
24d00 20 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67 67      each non-agg
24d10 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
24d20 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61  n is evaluated a
24d30 67 61 69 6e 73 74 20 61 20 72 6f 77 20 63 6f 6e  gainst a row con
24d40 73 69 73 74 69 6e 67 0a 20 20 20 20 65 6e 74 69  sisting.    enti
24d50 72 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61 6c  rely of NULL val
24d60 75 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68 65  ues...   <p>^The
24d70 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
24d80 65 73 75 6c 74 2d 73 65 74 20 64 61 74 61 20 63  esult-set data c
24d90 72 65 61 74 65 64 20 62 79 20 65 76 61 6c 75 61  reated by evalua
24da0 74 69 6e 67 20 74 68 65 20 61 67 67 72 65 67 61  ting the aggrega
24db0 74 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d 61  te.    and non-a
24dc0 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
24dd0 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  ions in the resu
24de0 6c 74 2d 73 65 74 20 66 6f 72 6d 73 20 74 68 65  lt-set forms the
24df0 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20 20   result of an.  
24e00 20 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72    aggregate quer
24e10 79 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55  y without a GROU
24e20 50 20 42 59 20 63 6c 61 75 73 65 2e 20 5e 41 6e  P BY clause. ^An
24e30 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
24e40 20 77 69 74 68 6f 75 74 20 61 0a 20 20 20 20 47   without a.    G
24e50 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 61  ROUP BY clause a
24e60 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 65 78  lways returns ex
24e70 61 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f 66  actly one row of
24e80 20 64 61 74 61 2c 20 65 76 65 6e 20 69 66 20 74   data, even if t
24e90 68 65 72 65 20 61 72 65 0a 20 20 20 20 7a 65 72  here are.    zer
24ea0 6f 20 72 6f 77 73 20 6f 66 20 69 6e 70 75 74 20  o rows of input 
24eb0 64 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  data...  <li><p>
24ec0 5e 28 49 66 20 74 68 65 20 53 45 4c 45 43 54 20  ^(If the SELECT 
24ed0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e  statement is <b>
24ee0 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
24ef0 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a  ry with a GROUP.
24f00 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73      BY</b> claus
24f10 65 2c 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20  e, then each of 
24f20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
24f30 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
24f40 74 20 6f 66 20 74 68 65 0a 20 20 20 20 47 52 4f  t of the.    GRO
24f50 55 50 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  UP BY clause is 
24f60 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61  evaluated for ea
24f70 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 64 61  ch row of the da
24f80 74 61 73 65 74 2e 20 45 61 63 68 20 72 6f 77 0a  taset. Each row.
24f90 20 20 20 20 69 73 20 74 68 65 6e 20 61 73 73 69      is then assi
24fa0 67 6e 65 64 20 74 6f 20 61 20 22 67 72 6f 75 70  gned to a "group
24fb0 22 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72  " based on the r
24fc0 65 73 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f 72  esults; rows for
24fd0 20 77 68 69 63 68 0a 20 20 20 20 74 68 65 20 72   which.    the r
24fe0 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61  esults of evalua
24ff0 74 69 6e 67 20 74 68 65 20 47 52 4f 55 50 20 42  ting the GROUP B
25000 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  Y expressions ar
25010 65 20 74 68 65 20 73 61 6d 65 20 61 72 65 0a 20  e the same are. 
25020 20 20 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74     assigned to t
25030 68 65 20 73 61 6d 65 20 67 72 6f 75 70 2e 29 5e  he same group.)^
25040 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
25050 65 73 20 6f 66 20 67 72 6f 75 70 69 6e 67 20 72  es of grouping r
25060 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20 76  ows, NULL .    v
25070 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
25080 65 72 65 64 20 65 71 75 61 6c 2e 20 5e 54 68 65  ered equal. ^The
25090 20 75 73 75 61 6c 20 72 75 6c 65 73 20 66 6f 72   usual rules for
250a0 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65   [collation|sele
250b0 63 74 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c 6c  cting a.    coll
250c0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20  ation sequence] 
250d0 77 69 74 68 20 77 68 69 63 68 20 74 6f 20 63 6f  with which to co
250e0 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c 75 65  mpare text value
250f0 73 20 61 70 70 6c 79 20 77 68 65 6e 20 65 76 61  s apply when eva
25100 6c 75 61 74 69 6e 67 0a 20 20 20 20 65 78 70 72  luating.    expr
25110 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f  essions in a GRO
25120 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 20 5e  UP BY clause.  ^
25130 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  The expressions 
25140 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59 20  in the GROUP BY 
25150 63 6c 61 75 73 65 0a 20 20 20 20 64 6f 20 3c 65  clause.    do <e
25160 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20  m>not</em> have 
25170 74 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f 6e  to be expression
25180 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
25190 20 74 68 65 20 72 65 73 75 6c 74 2e 20 5e 54 68   the result. ^Th
251a0 65 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e  e.    expression
251b0 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20  s in a GROUP BY 
251c0 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74 20 62  clause may not b
251d0 65 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  e aggregate expr
251e0 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70  essions...    <p
251f0 3e 5e 28 49 66 20 61 20 48 41 56 49 4e 47 20 63  >^(If a HAVING c
25200 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
25210 65 64 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61  ed, it is evalua
25220 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63  ted once for eac
25230 68 20 67 72 6f 75 70 20 0a 20 20 20 20 6f 66 20  h group .    of 
25240 72 6f 77 73 20 61 73 20 61 20 5b 62 6f 6f 6c 65  rows as a [boole
25250 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  an expression]. 
25260 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  If the result of
25270 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 0a   evaluating the.
25280 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61 75 73      HAVING claus
25290 65 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 20  e is false, the 
252a0 67 72 6f 75 70 20 69 73 20 64 69 73 63 61 72 64  group is discard
252b0 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 48 41  ed.)^ ^If the HA
252c0 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 0a 20  VING clause is. 
252d0 20 20 20 61 6e 20 61 67 67 72 65 67 61 74 65 20     an aggregate 
252e0 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69  expression, it i
252f0 73 20 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f  s evaluated acro
25300 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74  ss all rows in t
25310 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 0a 20 20  he group. ^If.  
25320 20 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73    a HAVING claus
25330 65 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65  e is a non-aggre
25340 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  gate expression,
25350 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64   it is evaluated
25360 20 77 69 74 68 20 72 65 73 70 65 63 74 0a 20 20   with respect.  
25370 20 20 74 6f 20 61 6e 20 61 72 62 69 74 72 61 72    to an arbitrar
25380 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77  ily selected row
25390 20 66 72 6f 6d 20 74 68 65 20 67 72 6f 75 70 2e   from the group.
253a0 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20 65 78    ^The HAVING ex
253b0 70 72 65 73 73 69 6f 6e 20 6d 61 79 0a 20 20 20  pression may.   
253c0 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73   refer to values
253d0 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61 74 65  , even aggregate
253e0 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74   functions, that
253f0 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20   are not in the 
25400 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20  result.</p>..   
25410 20 3c 70 3e 5e 45 61 63 68 20 65 78 70 72 65 73   <p>^Each expres
25420 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
25430 6c 74 2d 73 65 74 20 69 73 20 74 68 65 6e 20 65  lt-set is then e
25440 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
25450 72 20 65 61 63 68 0a 20 20 20 20 67 72 6f 75 70  r each.    group
25460 20 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20 74 68   of rows. ^If th
25470 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
25480 61 6e 20 61 67 67 72 65 67 61 74 65 20 65 78 70  an aggregate exp
25490 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 0a  ression, it is .
254a0 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 61 63      evaluated ac
254b0 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e  ross all rows in
254c0 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74 68   the group. ^Oth
254d0 65 72 77 69 73 65 2c 20 69 74 20 69 73 20 65 76  erwise, it is ev
254e0 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a  aluated against.
254f0 20 20 20 20 61 20 73 69 6e 67 6c 65 20 61 72 62      a single arb
25500 69 74 72 61 72 69 6c 79 20 63 68 6f 73 65 6e 20  itrarily chosen 
25510 72 6f 77 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  row from within 
25520 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 74  the group. ^If t
25530 68 65 72 65 20 69 73 20 6d 6f 72 65 0a 20 20 20  here is more.   
25540 20 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67   than one non-ag
25550 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
25560 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
25570 2d 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20 73  -set, then all s
25580 75 63 68 0a 20 20 20 20 65 78 70 72 65 73 73 69  uch.    expressi
25590 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ons are evaluate
255a0 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 72  d for the same r
255b0 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63  ow...    <p>^Eac
255c0 68 20 67 72 6f 75 70 20 6f 66 20 69 6e 70 75 74  h group of input
255d0 20 64 61 74 61 73 65 74 20 72 6f 77 73 20 63 6f   dataset rows co
255e0 6e 74 72 69 62 75 74 65 73 20 61 20 73 69 6e 67  ntributes a sing
255f0 6c 65 20 72 6f 77 20 74 6f 20 74 68 65 20 0a 20  le row to the . 
25600 20 20 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74     set of result
25610 20 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74 20   rows. ^Subject 
25620 74 6f 20 66 69 6c 74 65 72 69 6e 67 20 61 73 73  to filtering ass
25630 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
25640 20 44 49 53 54 49 4e 43 54 0a 20 20 20 20 6b 65   DISTINCT.    ke
25650 79 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62 65  yword, the numbe
25660 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e  r of rows return
25670 65 64 20 62 79 20 61 6e 20 61 67 67 72 65 67 61  ed by an aggrega
25680 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20  te query with a 
25690 47 52 4f 55 50 0a 20 20 20 20 42 59 20 63 6c 61  GROUP.    BY cla
256a0 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 20  use is the same 
256b0 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
256c0 20 67 72 6f 75 70 73 20 6f 66 20 72 6f 77 73 20   groups of rows 
256d0 70 72 6f 64 75 63 65 64 20 62 79 20 61 70 70 6c  produced by appl
256e0 79 69 6e 67 0a 20 20 20 20 74 68 65 20 47 52 4f  ying.    the GRO
256f0 55 50 20 42 59 20 61 6e 64 20 48 41 56 49 4e 47  UP BY and HAVING
25700 20 63 6c 61 75 73 65 73 20 74 6f 20 74 68 65 20   clauses to the 
25710 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64  filtered input d
25720 61 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  ataset..</ul>..<
25730 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20  p><b>4. Removal 
25740 6f 66 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  of duplicate row
25750 73 20 28 44 49 53 54 49 4e 43 54 20 70 72 6f 63  s (DISTINCT proc
25760 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63  essing).</b>.<tc
25770 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 69  l>hd_fragment di
25780 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63  stinct</tcl>.<tc
25790 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44  l>hd_keywords {D
257a0 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a  ISTINCT}</tcl>..
257b0 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20 41  <p>^One of the A
257c0 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43 54 20 6b  LL or DISTINCT k
257d0 65 79 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c  eywords may foll
257e0 6f 77 20 74 68 65 20 53 45 4c 45 43 54 20 6b 65  ow the SELECT ke
257f0 79 77 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d 70  yword in a .simp
25800 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
25810 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 73 69 6d  ent. ^If the sim
25820 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61 20  ple SELECT is a 
25830 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65 6e  SELECT ALL, then
25840 20 74 68 65 0a 65 6e 74 69 72 65 20 73 65 74 20   the.entire set 
25850 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61  of result rows a
25860 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  re returned by t
25870 68 65 20 53 45 4c 45 43 54 2e 20 5e 49 66 20 6e  he SELECT. ^If n
25880 65 69 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44 49  either ALL or.DI
25890 53 54 49 4e 43 54 20 61 72 65 20 70 72 65 73 65  STINCT are prese
258a0 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68  nt, then the beh
258b0 61 76 69 6f 72 20 69 73 20 61 73 20 69 66 20 41  avior is as if A
258c0 4c 4c 20 77 65 72 65 20 73 70 65 63 69 66 69 65  LL were specifie
258d0 64 2e 20 0a 5e 49 66 20 74 68 65 20 73 69 6d 70  d. .^If the simp
258e0 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53  le SELECT is a S
258f0 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 2c 20  ELECT DISTINCT, 
25900 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65 20 72  then duplicate r
25910 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 0a  ows are removed.
25920 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20  from the set of 
25930 72 65 73 75 6c 74 20 72 6f 77 73 20 62 65 66 6f  result rows befo
25940 72 65 20 69 74 20 69 73 20 72 65 74 75 72 6e 65  re it is returne
25950 64 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70  d. ^For the purp
25960 6f 73 65 73 20 6f 66 0a 64 65 74 65 63 74 69 6e  oses of.detectin
25970 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  g duplicate rows
25980 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75 65  , two NULL value
25990 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
259a0 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e 54   to be equal. ^T
259b0 68 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20  he.normal rules 
259c0 66 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61 20  for selecting a 
259d0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
259e0 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ce to compare te
259f0 78 74 20 76 61 6c 75 65 73 20 77 69 74 68 0a 61  xt values with.a
25a00 70 70 6c 79 2e 0a 0a 3c 68 33 3e 43 6f 6d 70 6f  pply...<h3>Compo
25a10 75 6e 64 20 53 65 6c 65 63 74 20 53 74 61 74 65  und Select State
25a20 6d 65 6e 74 73 0a 3c 74 63 6c 3e 68 64 5f 66 72  ments.<tcl>hd_fr
25a30 61 67 6d 65 6e 74 20 63 6f 6d 70 6f 75 6e 64 3c  agment compound<
25a40 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65  /tcl>.<tcl>hd_ke
25a50 79 77 6f 72 64 73 20 7b 63 6f 6d 70 6f 75 6e 64  ywords {compound
25a60 20 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75   select} {compou
25a70 6e 64 20 71 75 65 72 79 7d 3c 2f 74 63 6c 3e 0a  nd query}</tcl>.
25a80 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72  </h3>..<p>Two or
25a90 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45 4c   more simple SEL
25aa0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6d  ECT statements m
25ab0 61 79 20 62 65 20 63 6f 6e 6e 65 63 74 65 64 20  ay be connected 
25ac0 74 6f 67 65 74 68 65 72 20 74 6f 20 66 6f 72 6d  together to form
25ad0 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  .a compound SELE
25ae0 43 54 20 75 73 69 6e 67 20 74 68 65 20 55 4e 49  CT using the UNI
25af0 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49  ON, UNION ALL, I
25b00 4e 54 45 52 53 45 43 54 20 6f 72 20 45 58 43 45  NTERSECT or EXCE
25b10 50 54 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 49 6e  PT operator..^In
25b20 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a compound SELE
25b30 43 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73  CT, all the cons
25b40 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73 20  tituent SELECTs 
25b50 6d 75 73 74 20 72 65 74 75 72 6e 20 74 68 65 20  must return the 
25b60 73 61 6d 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20  same .number of 
25b70 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20  result columns. 
25b80 5e 41 73 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e  ^As the componen
25b90 74 73 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64  ts of a compound
25ba0 20 53 45 4c 45 43 54 20 6d 75 73 74 0a 62 65 20   SELECT must.be 
25bb0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
25bc0 61 74 65 6d 65 6e 74 73 2c 20 74 68 65 79 20 6d  atements, they m
25bd0 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 4f  ay not contain O
25be0 52 44 45 52 20 42 59 20 6f 72 20 4c 49 4d 49 54  RDER BY or LIMIT
25bf0 20 63 6c 61 75 73 65 73 2e 0a 5e 4f 52 44 45 52   clauses..^ORDER
25c00 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c   BY and LIMIT cl
25c10 61 75 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f  auses may only o
25c20 63 63 75 72 20 61 74 20 74 68 65 20 65 6e 64 20  ccur at the end 
25c30 6f 66 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f  of the entire co
25c40 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 2e 20 20  mpound.SELECT.  
25c50 0a 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e 64  ..<p>^A compound
25c60 20 53 45 4c 45 43 54 20 63 72 65 61 74 65 64 20   SELECT created 
25c70 75 73 69 6e 67 20 55 4e 49 4f 4e 20 41 4c 4c 20  using UNION ALL 
25c80 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73  operator returns
25c90 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72   all the rows.fr
25ca0 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f  om the SELECT to
25cb0 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65   the left of the
25cc0 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61   UNION ALL opera
25cd0 74 6f 72 2c 20 61 6e 64 20 61 6c 6c 20 74 68 65  tor, and all the
25ce0 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53   rows.from the S
25cf0 45 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67  ELECT to the rig
25d00 68 74 20 6f 66 20 69 74 2e 20 5e 54 68 65 20 55  ht of it. ^The U
25d10 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 77 6f  NION operator wo
25d20 72 6b 73 20 74 68 65 20 73 61 6d 65 20 77 61 79  rks the same way
25d30 20 61 73 0a 55 4e 49 4f 4e 20 41 4c 4c 2c 20 65   as.UNION ALL, e
25d40 78 63 65 70 74 20 74 68 61 74 20 64 75 70 6c 69  xcept that dupli
25d50 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
25d60 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 66  moved from the f
25d70 69 6e 61 6c 20 72 65 73 75 6c 74 20 73 65 74 2e  inal result set.
25d80 0a 5e 54 68 65 20 49 4e 54 45 52 53 45 43 54 20  .^The INTERSECT 
25d90 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73  operator returns
25da0 20 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f   the intersectio
25db0 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  n of the results
25dc0 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
25dd0 0a 72 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20  .right SELECTs. 
25de0 20 5e 54 68 65 20 45 58 43 45 50 54 20 6f 70 65   ^The EXCEPT ope
25df0 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68  rator returns th
25e00 65 20 73 75 62 73 65 74 20 6f 66 20 72 6f 77 73  e subset of rows
25e10 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
25e20 0a 6c 65 66 74 20 53 45 4c 45 43 54 20 74 68 61  .left SELECT tha
25e30 74 20 61 72 65 20 6e 6f 74 20 61 6c 73 6f 20 72  t are not also r
25e40 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 72  eturned by the r
25e50 69 67 68 74 2d 68 61 6e 64 20 53 45 4c 45 43 54  ight-hand SELECT
25e60 2e 20 5e 44 75 70 6c 69 63 61 74 65 0a 72 6f 77  . ^Duplicate.row
25e70 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72  s are removed fr
25e80 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  om the results o
25e90 66 20 49 4e 54 45 52 53 45 43 54 20 61 6e 64 20  f INTERSECT and 
25ea0 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 73  EXCEPT operators
25eb0 20 62 65 66 6f 72 65 20 74 68 65 0a 72 65 73 75   before the.resu
25ec0 6c 74 20 73 65 74 20 69 73 20 72 65 74 75 72 6e  lt set is return
25ed0 65 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65  ed...<p>^For the
25ee0 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74   purposes of det
25ef0 65 72 6d 69 6e 69 6e 67 20 64 75 70 6c 69 63 61  ermining duplica
25f00 74 65 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20  te rows for the 
25f10 72 65 73 75 6c 74 73 20 6f 66 20 63 6f 6d 70 6f  results of compo
25f20 75 6e 64 0a 53 45 4c 45 43 54 20 6f 70 65 72 61  und.SELECT opera
25f30 74 6f 72 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65  tors, NULL value
25f40 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
25f50 20 65 71 75 61 6c 20 74 6f 20 6f 74 68 65 72 20   equal to other 
25f60 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 0a  NULL values and.
25f70 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c  distinct from al
25f80 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
25f90 73 2e 20 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6f  s. ^The collatio
25fa0 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20  n sequence used 
25fb0 74 6f 20 63 6f 6d 70 61 72 65 20 0a 74 77 6f 20  to compare .two 
25fc0 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64  text values is d
25fd0 65 74 65 72 6d 69 6e 65 64 20 61 73 20 69 66 20  etermined as if 
25fe0 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  the columns of t
25ff0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
26000 74 2d 68 61 6e 64 0a 53 45 4c 45 43 54 20 73 74  t-hand.SELECT st
26010 61 74 65 6d 65 6e 74 73 20 77 65 72 65 20 74 68  atements were th
26020 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
26030 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f  -hand operands o
26040 66 20 74 68 65 20 65 71 75 61 6c 73 20 28 3d 29  f the equals (=)
26050 0a 6f 70 65 72 61 74 6f 72 2c 20 65 78 63 65 70  .operator, excep
26060 74 20 74 68 61 74 20 67 72 65 61 74 65 72 20 70  t that greater p
26070 72 65 63 65 64 65 6e 63 65 20 69 73 20 6e 6f 74  recedence is not
26080 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 63   assigned to a c
26090 6f 6c 6c 61 74 69 6f 6e 20 0a 73 65 71 75 65 6e  ollation .sequen
260a0 63 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74  ce specified wit
260b0 68 20 74 68 65 20 70 6f 73 74 66 69 78 20 43 4f  h the postfix CO
260c0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 2e 20  LLATE operator. 
260d0 5e 4e 6f 20 61 66 66 69 6e 69 74 79 0a 74 72 61  ^No affinity.tra
260e0 6e 73 66 6f 72 6d 61 74 69 6f 6e 73 20 61 72 65  nsformations are
260f0 20 61 70 70 6c 69 65 64 20 74 6f 20 61 6e 79 20   applied to any 
26100 76 61 6c 75 65 73 20 77 68 65 6e 20 63 6f 6d 70  values when comp
26110 61 72 69 6e 67 20 72 6f 77 73 20 61 73 20 70 61  aring rows as pa
26120 72 74 20 6f 66 20 61 0a 63 6f 6d 70 6f 75 6e 64  rt of a.compound
26130 20 53 45 4c 45 43 54 2e 20 0a 0a 3c 70 3e 5e 28   SELECT. ..<p>^(
26140 57 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f  When three or mo
26150 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  re simple SELECT
26160 73 20 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20  s are connected 
26170 69 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 20  into a compound 
26180 53 45 4c 45 43 54 2c 0a 74 68 65 79 20 67 72 6f  SELECT,.they gro
26190 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  up from left to 
261a0 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20  right. In other 
261b0 77 6f 72 64 73 2c 20 69 66 20 22 41 22 2c 20 22  words, if "A", "
261c0 42 22 20 61 6e 64 20 22 43 22 20 61 72 65 20 61  B" and "C" are a
261d0 6c 6c 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  ll.simple SELECT
261e0 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 28 41 20   statements, (A 
261f0 6f 70 20 42 20 6f 70 20 43 29 20 69 73 20 70 72  op B op C) is pr
26200 6f 63 65 73 73 65 64 20 61 73 20 28 28 41 20 6f  ocessed as ((A o
26210 70 20 42 29 20 6f 70 20 43 29 2e 29 5e 0a 0a 3c  p B) op C).)^..<
26220 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
26230 67 6d 65 6e 74 20 6f 72 64 65 72 62 79 20 7b 6f  gment orderby {o
26240 72 64 65 72 20 62 79 7d 3c 2f 74 63 6c 3e 0a 3c  rder by}</tcl>.<
26250 68 33 3e 4f 52 44 45 52 20 42 59 20 61 6e 64 20  h3>ORDER BY and 
26260 4c 49 4d 49 54 2f 4f 46 46 53 45 54 20 43 6c 61  LIMIT/OFFSET Cla
26270 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66  uses</h3>..<p>If
26280 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
26290 65 6e 74 20 74 68 61 74 20 72 65 74 75 72 6e 73  ent that returns
262a0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72   more than one r
262b0 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
262c0 20 61 6e 0a 4f 52 44 45 52 20 42 59 20 63 6c 61   an.ORDER BY cla
262d0 75 73 65 2c 20 74 68 65 20 6f 72 64 65 72 20 69  use, the order i
262e0 6e 20 77 68 69 63 68 20 74 68 65 20 72 6f 77 73  n which the rows
262f0 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 69 73   are returned is
26300 20 75 6e 64 65 66 69 6e 65 64 2e 0a 4f 72 2c 20   undefined..Or, 
26310 69 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  if a SELECT stat
26320 65 6d 65 6e 74 20 64 6f 65 73 20 68 61 76 65 20  ement does have 
26330 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
26340 73 65 2c 20 74 68 65 6e 20 74 68 65 20 6c 69 73  se, then the lis
26350 74 20 6f 66 0a 65 78 70 72 65 73 73 69 6f 6e 73  t of.expressions
26360 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
26370 20 4f 52 44 45 52 20 42 59 20 64 65 74 65 72 6d   ORDER BY determ
26380 69 6e 65 20 74 68 65 20 6f 72 64 65 72 20 69 6e  ine the order in
26390 20 77 68 69 63 68 20 72 6f 77 73 0a 61 72 65 20   which rows.are 
263a0 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
263b0 75 73 65 72 2e 20 5e 52 6f 77 73 20 61 72 65 20  user. ^Rows are 
263c0 66 69 72 73 74 20 73 6f 72 74 65 64 20 62 61 73  first sorted bas
263d0 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ed on the result
263e0 73 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20  s of.evaluating 
263f0 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78  the left-most ex
26400 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
26410 4f 52 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74  ORDER BY list, t
26420 68 65 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f  hen ties are bro
26430 6b 65 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e  ken.by evaluatin
26440 67 20 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66  g the second lef
26450 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f  t-most expressio
26460 6e 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65  n and so on. The
26470 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a   order in which.
26480 74 77 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69  two rows for whi
26490 63 68 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20  ch all ORDER BY 
264a0 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
264b0 75 61 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61  uate to equal va
264c0 6c 75 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65  lues are.returne
264d0 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  d is undefined. 
264e0 5e 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65  ^Each ORDER BY e
264f0 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65  xpression may be
26500 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
26510 6f 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74  owed.by one of t
26520 68 65 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20  he keywords ASC 
26530 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20  (smaller values 
26540 61 72 65 20 72 65 74 75 72 6e 65 64 20 66 69 72  are returned fir
26550 73 74 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72  st) or DESC (lar
26560 67 65 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72  ger.values are r
26570 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20  eturned first). 
26580 5e 49 66 20 6e 65 69 74 68 65 72 20 41 53 43 20  ^If neither ASC 
26590 6f 72 20 44 45 53 43 20 61 72 65 20 73 70 65 63  or DESC are spec
265a0 69 66 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20  ified, rows.are 
265b0 73 6f 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64  sorted in ascend
265c0 69 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c  ing (smaller val
265d0 75 65 73 20 66 69 72 73 74 29 20 6f 72 64 65 72  ues first) order
265e0 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70   by default...<p
265f0 3e 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65  >Each ORDER BY e
26600 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f  xpression is pro
26610 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77  cessed as follow
26620 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
26630 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45  ><p>^If the ORDE
26640 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
26650 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e  is a constant in
26660 74 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65  teger K then the
26670 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63  .expression is c
26680 6f 6e 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69  onsidered an ali
26690 61 73 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20  as for the K-th 
266a0 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65  column of the re
266b0 73 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e  sult set.(column
266c0 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66  s are numbered f
266d0 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
266e0 74 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  t starting with 
266f0 31 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  1)...<li><p>^If 
26700 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
26710 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64  ression is an id
26720 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 63 6f  entifier that co
26730 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65  rresponds to.the
26740 20 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66   alias of one of
26750 20 74 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75   the output colu
26760 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78  mns, then the ex
26770 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73  pression is cons
26780 69 64 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20  idered.an alias 
26790 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e  for that column.
267a0 0a 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77  ..<li><p>^Otherw
267b0 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45  ise, if the ORDE
267c0 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
267d0 69 73 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70  is any other exp
267e0 72 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20  ression, it .is 
267f0 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68  evaluated and th
26800 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65  e returned value
26810 20 75 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74   used to order t
26820 68 65 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20  he output rows. 
26830 5e 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73  ^If.the SELECT s
26840 74 61 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69  tatement is a si
26850 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65  mple SELECT, the
26860 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61  n an ORDER BY ma
26870 79 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72  y contain any.ar
26880 62 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69  bitrary expressi
26890 6f 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69  ons. ^However, i
268a0 66 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20  f the SELECT is 
268b0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
268c0 54 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59  T, then.ORDER BY
268d0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
268e0 74 20 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65  t are not aliase
268f0 73 20 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75  s to output colu
26900 6d 6e 73 20 6d 75 73 74 20 62 65 20 65 78 61 63  mns must be exac
26910 74 6c 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20  tly.the same as 
26920 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73  an expression us
26930 65 64 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20  ed as an output 
26940 63 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  column..</ol>..<
26950 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  p>^For the purpo
26960 73 65 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72  ses of sorting r
26970 6f 77 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20  ows, values are 
26980 63 6f 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20  compared in the 
26990 73 61 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20  same way.as for 
269a0 5b 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72  [comparison expr
269b0 65 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f  essions]. The co
269c0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
269d0 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
269e0 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73  .two text values
269f0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61   is determined a
26a00 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e  s follows:..<ol>
26a10 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  .  <li><p>^If th
26a20 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
26a30 73 73 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65  ssion is assigne
26a40 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  d a collation se
26a50 71 75 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74  quence using.  t
26a60 68 65 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c  he postfix [COLL
26a70 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74  ATE operator], t
26a80 68 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65  hen the specifie
26a90 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
26aa0 65 6e 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a  ence is.  used..
26ab0 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77    <li><p>^Otherw
26ac0 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45  ise, if the ORDE
26ad0 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
26ae0 69 73 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61  is an alias to a
26af0 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74  n expression.  t
26b00 68 61 74 20 68 61 73 20 62 65 65 6e 20 61 73 73  hat has been ass
26b10 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f  igned a collatio
26b20 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67  n sequence using
26b30 20 74 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20   the postfix .  
26b40 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  [COLLATE operato
26b50 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  r], then the col
26b60 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
26b70 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20  assigned to the 
26b80 61 6c 69 61 73 65 64 0a 20 20 65 78 70 72 65 73  aliased.  expres
26b90 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20  sion is used..  
26ba0 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
26bb0 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  e, if the ORDER 
26bc0 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
26bd0 20 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20   a column or an 
26be0 61 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78  alias of.  an ex
26bf0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
26c00 20 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20   a column, then 
26c10 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
26c20 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
26c30 6f 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20  or.  the column 
26c40 69 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e  is used. .  <li>
26c50 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  <p>^Otherwise, t
26c60 68 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c  he [BINARY] coll
26c70 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69  ation sequence i
26c80 73 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  s used..</ol>..<
26c90 70 3e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  p>In a compound 
26ca0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
26cb0 2c 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65  , all ORDER BY e
26cc0 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68  xpressions are h
26cd0 61 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65  andled.as aliase
26ce0 73 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65  s for one of the
26cf0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
26d00 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  of the compound 
26d10 53 45 4c 45 43 54 2e 0a 5e 28 49 66 20 61 6e 20  SELECT..^(If an 
26d20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
26d30 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e  ion is not an in
26d40 74 65 67 65 72 20 61 6c 69 61 73 2c 20 74 68 65  teger alias, the
26d50 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65  n SQLite searche
26d60 73 0a 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  s.the left-most 
26d70 53 45 4c 45 43 54 20 69 6e 20 74 68 65 20 63 6f  SELECT in the co
26d80 6d 70 6f 75 6e 64 20 66 6f 72 20 61 20 72 65 73  mpound for a res
26d90 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20  ult column that 
26da0 6d 61 74 63 68 65 73 20 65 69 74 68 65 72 0a 74  matches either.t
26db0 68 65 20 73 65 63 6f 6e 64 20 6f 72 20 74 68 69  he second or thi
26dc0 72 64 20 72 75 6c 65 73 20 61 62 6f 76 65 2e 20  rd rules above. 
26dd0 49 66 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  If a match is fo
26de0 75 6e 64 2c 20 74 68 65 20 73 65 61 72 63 68 20  und, the search 
26df0 73 74 6f 70 73 20 61 6e 64 0a 74 68 65 20 65 78  stops and.the ex
26e00 70 72 65 73 73 69 6f 6e 20 69 73 20 68 61 6e 64  pression is hand
26e10 6c 65 64 20 61 73 20 61 6e 20 61 6c 69 61 73 20  led as an alias 
26e20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 63  for the result c
26e30 6f 6c 75 6d 6e 20 74 68 61 74 20 69 74 20 68 61  olumn that it ha
26e40 73 20 62 65 65 6e 0a 6d 61 74 63 68 65 64 20 61  s been.matched a
26e50 67 61 69 6e 73 74 2e 20 4f 74 68 65 72 77 69 73  gainst. Otherwis
26e60 65 2c 20 74 68 65 20 6e 65 78 74 20 53 45 4c 45  e, the next SELE
26e70 43 54 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  CT to the right 
26e80 69 73 20 74 72 69 65 64 2c 20 61 6e 64 20 73 6f  is tried, and so
26e90 20 6f 6e 2e 29 5e 0a 5e 49 66 20 6e 6f 20 6d 61   on.)^.^If no ma
26ea0 74 63 68 69 6e 67 20 65 78 70 72 65 73 73 69 6f  tching expressio
26eb0 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69  n can be found i
26ec0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  n the result col
26ed0 75 6d 6e 73 20 6f 66 20 61 6e 79 0a 63 6f 6e 73  umns of any.cons
26ee0 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54 2c 20  tituent SELECT, 
26ef0 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20  it is an error. 
26f00 5e 45 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68  ^Each term of th
26f10 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
26f20 65 20 69 73 0a 70 72 6f 63 65 73 73 65 64 20 73  e is.processed s
26f30 65 70 61 72 61 74 65 6c 79 20 61 6e 64 20 6d 61  eparately and ma
26f40 79 20 62 65 20 6d 61 74 63 68 65 64 20 61 67 61  y be matched aga
26f50 69 6e 73 74 20 72 65 73 75 6c 74 20 63 6f 6c 75  inst result colu
26f60 6d 6e 73 20 66 72 6f 6d 20 64 69 66 66 65 72 65  mns from differe
26f70 6e 74 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d  nt.SELECT statem
26f80 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 6d 70  ents in the comp
26f90 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ound.</p>..<p>Th
26fa0 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 69  e LIMIT clause i
26fb0 73 20 75 73 65 64 20 74 6f 20 70 6c 61 63 65 20  s used to place 
26fc0 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f  an upper bound o
26fd0 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
26fe0 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 62 79  rows.returned by
26ff0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
27000 65 6e 74 2e 20 5e 41 6e 79 20 73 63 61 6c 61 72  ent. ^Any scalar
27010 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
27020 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 0a  be used in the .
27030 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 73 6f  LIMIT clause, so
27040 20 6c 6f 6e 67 20 61 73 20 69 74 20 65 76 61 6c   long as it eval
27050 75 61 74 65 73 20 74 6f 20 61 6e 20 69 6e 74 65  uates to an inte
27060 67 65 72 20 6f 72 20 61 20 76 61 6c 75 65 20 74  ger or a value t
27070 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c  hat can be.lossl
27080 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
27090 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e  to an integer. ^
270a0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
270b0 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  n evaluates to a
270c0 20 4e 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72 20   NULL .value or 
270d0 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20  any other value 
270e0 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c  that cannot be l
270f0 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
27100 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
27110 72 2c 20 61 6e 0a 65 72 72 6f 72 20 69 73 20 72  r, an.error is r
27120 65 74 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65  eturned. ^If the
27130 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
27140 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  n evaluates to a
27150 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c   negative value,
27160 0a 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e  .then there is n
27170 6f 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  o upper bound on
27180 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
27190 6f 77 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 4f  ows returned. ^O
271a0 74 68 65 72 77 69 73 65 2c 20 74 68 65 0a 53 45  therwise, the.SE
271b0 4c 45 43 54 20 72 65 74 75 72 6e 73 20 74 68 65  LECT returns the
271c0 20 66 69 72 73 74 20 4e 20 72 6f 77 73 20 6f 66   first N rows of
271d0 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
271e0 6f 6e 6c 79 2c 20 77 68 65 72 65 20 4e 20 69 73  only, where N is
271f0 20 74 68 65 20 76 61 6c 75 65 0a 74 68 61 74 20   the value.that 
27200 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
27210 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
27220 6f 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53  o. ^Or, if the S
27230 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
27240 77 6f 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65 73  would.return les
27250 73 20 74 68 61 6e 20 4e 20 72 6f 77 73 20 77 69  s than N rows wi
27260 74 68 6f 75 74 20 61 20 4c 49 4d 49 54 20 63 6c  thout a LIMIT cl
27270 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 65  ause, then the e
27280 6e 74 69 72 65 20 72 65 73 75 6c 74 20 73 65 74  ntire result set
27290 20 69 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a 0a   is.returned. ..
272a0 3c 70 3e 5e 54 68 65 20 65 78 70 72 65 73 73 69  <p>^The expressi
272b0 6f 6e 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  on attached to t
272c0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53  he optional OFFS
272d0 45 54 20 63 6c 61 75 73 65 20 74 68 61 74 20 6d  ET clause that m
272e0 61 79 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49  ay follow a.LIMI
272f0 54 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61 6c  T clause must al
27300 73 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61  so evaluate to a
27310 6e 20 69 6e 74 65 67 65 72 2c 20 6f 72 20 61 20  n integer, or a 
27320 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
27330 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e.losslessly con
27340 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
27350 65 67 65 72 2e 20 5e 49 66 20 61 6e 20 65 78 70  eger. ^If an exp
27360 72 65 73 73 69 6f 6e 20 68 61 73 20 61 6e 20 4f  ression has an O
27370 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68  FFSET clause,.th
27380 65 6e 20 74 68 65 20 66 69 72 73 74 20 4d 20 72  en the first M r
27390 6f 77 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20  ows are omitted 
273a0 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20  from the result 
273b0 73 65 74 20 72 65 74 75 72 6e 65 64 20 62 79 20  set returned by 
273c0 74 68 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65  the SELECT.state
273d0 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 78  ment and the nex
273e0 74 20 4e 20 72 6f 77 73 20 61 72 65 20 72 65 74  t N rows are ret
273f0 75 72 6e 65 64 2c 20 77 68 65 72 65 20 4d 20 61  urned, where M a
27400 6e 64 20 4e 20 61 72 65 20 74 68 65 20 76 61 6c  nd N are the val
27410 75 65 73 20 74 68 61 74 0a 74 68 65 20 4f 46 46  ues that.the OFF
27420 53 45 54 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c  SET and LIMIT cl
27430 61 75 73 65 73 20 65 76 61 6c 75 61 74 65 20 74  auses evaluate t
27440 6f 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  o, respectively.
27450 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c   ^Or, if the SEL
27460 45 43 54 0a 77 6f 75 6c 64 20 72 65 74 75 72 6e  ECT.would return
27470 20 6c 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20 72   less than M+N r
27480 6f 77 73 20 69 66 20 69 74 20 64 69 64 20 6e 6f  ows if it did no
27490 74 20 68 61 76 65 20 61 20 4c 49 4d 49 54 20 63  t have a LIMIT c
274a0 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a  lause, then the.
274b0 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65  first M rows are
274c0 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65   skipped and the
274d0 20 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20   remaining rows 
274e0 28 69 66 20 61 6e 79 29 20 61 72 65 20 72 65 74  (if any) are ret
274f0 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a 4f  urned. ^If the.O
27500 46 46 53 45 54 20 63 6c 61 75 73 65 20 65 76 61  FFSET clause eva
27510 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61  luates to a nega
27520 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65 20  tive value, the 
27530 72 65 73 75 6c 74 73 20 61 72 65 20 74 68 65 20  results are the 
27540 73 61 6d 65 20 61 73 20 69 66 20 69 74 0a 68 61  same as if it.ha
27550 64 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20 7a  d evaluated to z
27560 65 72 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61  ero...<p>^Instea
27570 64 20 6f 66 20 61 20 73 65 70 61 72 61 74 65 20  d of a separate 
27580 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74  OFFSET clause, t
27590 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
275a0 6d 61 79 20 73 70 65 63 69 66 79 20 74 77 6f 0a  may specify two.
275b0 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
275c0 6e 73 20 73 65 70 61 72 61 74 65 64 20 62 79 20  ns separated by 
275d0 61 20 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68 69  a comma. ^In thi
275e0 73 20 63 61 73 65 2c 20 74 68 65 20 66 69 72 73  s case, the firs
275f0 74 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 73 20  t expression.is 
27600 75 73 65 64 20 61 73 20 74 68 65 20 4f 46 46 53  used as the OFFS
27610 45 54 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  ET expression an
27620 64 20 74 68 65 20 73 65 63 6f 6e 64 20 61 73 20  d the second as 
27630 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
27640 73 69 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63 6f  sion..This is co
27650 75 6e 74 65 72 2d 69 6e 74 75 69 74 69 76 65 2c  unter-intuitive,
27660 20 61 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74   as when using t
27670 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
27680 20 74 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a 74   the second of.t
27690 68 65 20 74 77 6f 20 65 78 70 72 65 73 73 69 6f  he two expressio
276a0 6e 73 20 69 73 20 74 68 65 20 4f 46 46 53 45 54  ns is the OFFSET
276b0 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 20 74   and the first t
276c0 68 65 20 4c 49 4d 49 54 2e 20 54 68 69 73 20 69  he LIMIT. This i
276d0 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20  s intentional.- 
276e0 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d  it maximizes com
276f0 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
27700 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
27710 73 65 20 73 79 73 74 65 6d 73 2e 0a 0a 3c 74 63  se systems...<tc
27720 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
27730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27770 23 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45  #.Section UPDATE
27780 20 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20   update {UPDATE 
27790 2a 55 50 44 41 54 45 73 7d 0a 0a 52 65 63 75 72  *UPDATEs}..Recur
277a0 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
277b0 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 0a 3c 2f  m update-stmt.</
277c0 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55 50 44  tcl>..<p>^An UPD
277d0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ATE statement is
277e0 20 75 73 65 64 20 74 6f 20 6d 6f 64 69 66 79 20   used to modify 
277f0 61 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 20  a subset of the 
27800 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e  values stored in
27810 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72   .zero or more r
27820 6f 77 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  ows of the datab
27830 61 73 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  ase table identi
27840 66 69 65 64 20 62 79 20 74 68 65 20 0a 3c 69 3e  fied by the .<i>
27850 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d  qualified-table-
27860 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66 69  name</i> specifi
27870 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
27880 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
27890 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  nt...<p>^If the 
278a0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
278b0 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61   does not have a
278c0 20 57 48 45 52 45 20 63 6c 61 75 73 65 2c 20 61   WHERE clause, a
278d0 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 0a 74  ll rows in the.t
278e0 61 62 6c 65 20 61 72 65 20 6d 6f 64 69 66 69 65  able are modifie
278f0 64 20 62 79 20 74 68 65 20 55 50 44 41 54 45 2e  d by the UPDATE.
27900 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65   ^Otherwise, the
27910 20 55 50 44 41 54 45 20 61 66 66 65 63 74 73 20   UPDATE affects 
27920 6f 6e 6c 79 20 74 68 6f 73 65 0a 72 6f 77 73 20  only those.rows 
27930 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 72 65  for which the re
27940 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69  sult of evaluati
27950 6e 67 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  ng the WHERE cla
27960 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  use expression a
27970 73 20 61 20 0a 5b 62 6f 6f 6c 65 61 6e 20 65 78  s a .[boolean ex
27980 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65 61 6e  pression|boolean
27990 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
279a0 72 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e 6f 74  rue]. ^It is not
279b0 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
279c0 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 64 6f  .WHERE clause do
279d0 65 73 20 6e 6f 74 20 65 76 61 6c 75 61 74 65 20  es not evaluate 
279e0 74 6f 20 74 72 75 65 20 66 6f 72 20 61 6e 79 20  to true for any 
279f0 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65  row in the table
27a00 20 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d 65 61   - this just.mea
27a10 6e 73 20 74 68 61 74 20 74 68 65 20 55 50 44 41  ns that the UPDA
27a20 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 66 66  TE statement aff
27a30 65 63 74 73 20 7a 65 72 6f 20 72 6f 77 73 2e 0a  ects zero rows..
27a40 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69 63 61  .<p>The modifica
27a50 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20 65 61  tions made to ea
27a60 63 68 20 72 6f 77 20 61 66 66 65 63 74 65 64 20  ch row affected 
27a70 62 79 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  by an UPDATE sta
27a80 74 65 6d 65 6e 74 20 61 72 65 0a 64 65 74 65 72  tement are.deter
27a90 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6c 69 73  mined by the lis
27aa0 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73  t of assignments
27ab0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 53   following the S
27ac0 45 54 20 6b 65 79 77 6f 72 64 2e 20 45 61 63 68  ET keyword. Each
27ad0 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73 70 65 63  .assignment spec
27ae0 69 66 69 65 73 20 61 20 63 6f 6c 75 6d 6e 20 6e  ifies a column n
27af0 61 6d 65 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ame to the left 
27b00 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 73 69  of the equals si
27b10 67 6e 20 61 6e 64 20 61 0a 73 63 61 6c 61 72 20  gn and a.scalar 
27b20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 74 68  expression to th
27b30 65 20 72 69 67 68 74 2e 20 5e 46 6f 72 20 65 61  e right. ^For ea
27b40 63 68 20 61 66 66 65 63 74 65 64 20 72 6f 77 2c  ch affected row,
27b50 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d   the named colum
27b60 6e 73 0a 61 72 65 20 73 65 74 20 74 6f 20 74 68  ns.are set to th
27b70 65 20 76 61 6c 75 65 73 20 66 6f 75 6e 64 20 62  e values found b
27b80 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
27b90 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
27ba0 63 61 6c 61 72 20 0a 65 78 70 72 65 73 73 69 6f  calar .expressio
27bb0 6e 73 2e 20 5e 49 66 20 61 20 73 69 6e 67 6c 65  ns. ^If a single
27bc0 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 61 70 70   column-name app
27bd0 65 61 72 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f  ears more than o
27be0 6e 63 65 20 69 6e 20 74 68 65 20 6c 69 73 74 20  nce in the list 
27bf0 6f 66 0a 61 73 73 69 67 6e 6d 65 6e 74 20 65 78  of.assignment ex
27c00 70 72 65 73 73 69 6f 6e 73 2c 20 61 6c 6c 20 62  pressions, all b
27c10 75 74 20 74 68 65 20 72 69 67 68 74 6d 6f 73 74  ut the rightmost
27c20 20 6f 63 63 75 72 72 65 6e 63 65 20 69 73 20 69   occurrence is i
27c30 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75 6d 6e 73  gnored. ^Columns
27c40 0a 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70  .that do not app
27c50 65 61 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ear in the list 
27c60 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 61  of assignments a
27c70 72 65 20 6c 65 66 74 20 75 6e 6d 6f 64 69 66 69  re left unmodifi
27c80 65 64 2e 20 5e 54 68 65 20 73 63 61 6c 61 72 0a  ed. ^The scalar.
27c90 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61 79 20  expressions may 
27ca0 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d 6e 73  refer to columns
27cb0 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65 69 6e   of the row bein
27cc0 67 20 75 70 64 61 74 65 64 2e 20 5e 49 6e 20 74  g updated. ^In t
27cd0 68 69 73 20 63 61 73 65 20 61 6c 6c 0a 73 63 61  his case all.sca
27ce0 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  lar expressions 
27cf0 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 62 65  are evaluated be
27d00 66 6f 72 65 20 61 6e 79 20 61 73 73 69 67 6e 6d  fore any assignm
27d10 65 6e 74 73 20 61 72 65 20 6d 61 64 65 2e 0a 0a  ents are made...
27d20 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  <p>^The optional
27d30 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65   conflict-clause
27d40 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72   allows the user
27d50 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61 20 73   to nominate a s
27d60 70 65 63 69 66 69 63 0a 63 6f 6e 73 74 72 61 69  pecific.constrai
27d70 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  nt conflict reso
27d80 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
27d90 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74   to use during t
27da0 68 69 73 20 6f 6e 65 20 55 50 44 41 54 45 20 63  his one UPDATE c
27db0 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20 74 6f  ommand..Refer to
27dc0 20 74 68 65 20 73 65 63 74 69 6f 6e 20 65 6e 74   the section ent
27dd0 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49  itled [ON CONFLI
27de0 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  CT] for addition
27df0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
27e00 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e  .<h3>Restriction
27e10 73 20 6f 6e 20 55 50 44 41 54 45 20 53 74 61 74  s on UPDATE Stat
27e20 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52  ements Within CR
27e30 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33  EATE TRIGGER</h3
27e40 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77  >..<p>The follow
27e50 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 73  ing additional s
27e60 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69 6f  yntax restrictio
27e70 6e 73 20 61 70 70 6c 79 20 74 6f 20 55 50 44 41  ns apply to UPDA
27e80 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  TE statements th
27e90 61 74 0a 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at.occur within 
27ea0 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 5b 43  the body of a [C
27eb0 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73  REATE TRIGGER] s
27ec0 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c 75 6c  tatement.  ..<ul
27ed0 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20  >.  <li><p>^The 
27ee0 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  <i>table-name</i
27ef0 3e 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  > specified as p
27f00 61 72 74 20 6f 66 20 61 6e 20 55 50 44 41 54 45  art of an UPDATE
27f10 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69   statement withi
27f20 6e 0a 20 20 20 20 20 20 61 20 74 72 69 67 67 65  n.      a trigge
27f30 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75  r body must be u
27f40 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e 28 49 6e  nqualified. ^(In
27f50 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
27f60 65 0a 20 20 20 20 20 20 3c 69 3e 64 61 74 61 62  e.      <i>datab
27f70 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e  ase-name</i><b>.
27f80 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74  </b> prefix on t
27f90 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66  he table name of
27fa0 20 74 68 65 20 55 50 44 41 54 45 20 69 73 0a 20   the UPDATE is. 
27fb0 20 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77 65 64       not allowed
27fc0 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
27fd0 2e 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20  .)^ ^Unless the 
27fe0 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74  table to which t
27ff0 68 65 20 74 72 69 67 67 65 72 0a 20 20 20 20 20  he trigger.     
28000 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20   is attached is 
28010 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  in the TEMP data
28020 62 61 73 65 2c 20 74 68 65 20 74 61 62 6c 65 20  base, the table 
28030 62 65 69 6e 67 20 75 70 64 61 74 65 64 20 62 79  being updated by
28040 20 74 68 65 0a 20 20 20 20 20 20 74 72 69 67 67   the.      trigg
28050 65 72 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  er program must 
28060 72 65 73 69 64 65 20 69 6e 20 74 68 65 20 73 61  reside in the sa
28070 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20 69  me database as i
28080 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  t. ^If the table
28090 0a 20 20 20 20 20 20 74 6f 20 77 68 69 63 68 20  .      to which 
280a0 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61  the trigger is a
280b0 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68  ttached is in th
280c0 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c  e TEMP database,
280d0 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20 20 20   then the.      
280e0 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65  unqualified name
280f0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65   of the table be
28100 69 6e 67 20 75 70 64 61 74 65 64 20 69 73 20 72  ing updated is r
28110 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73  esolved in the s
28120 61 6d 65 20 77 61 79 0a 20 20 20 20 20 20 61 73  ame way.      as
28130 20 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70   it is for a top
28140 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74  -level statement
28150 20 28 62 79 20 73 65 61 72 63 68 69 6e 67 20 66   (by searching f
28160 69 72 73 74 20 74 68 65 20 54 45 4d 50 20 64 61  irst the TEMP da
28170 74 61 62 61 73 65 2c 0a 20 20 20 20 20 20 74 68  tabase,.      th
28180 65 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  en the main data
28190 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f  base, then any o
281a0 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20 69  ther databases i
281b0 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79  n the order they
281c0 20 77 65 72 65 0a 20 20 20 20 20 20 61 74 74 61   were.      atta
281d0 63 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  ched)...  <li><p
281e0 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59  >^The INDEXED BY
281f0 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44   and NOT INDEXED
28200 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74   clauses are not
28210 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41   allowed on UPDA
28220 54 45 0a 20 20 20 20 20 20 73 74 61 74 65 6d 65  TE.      stateme
28230 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
28240 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e  ers.</p>..  <li>
28250 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e  <p>^The LIMIT an
28260 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  d ORDER BY claus
28270 65 73 20 66 6f 72 20 55 50 44 41 54 45 20 61 72  es for UPDATE ar
28280 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20 77 69  e unsupported wi
28290 74 68 69 6e 0a 20 20 20 20 20 20 74 72 69 67 67  thin.      trigg
282a0 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ers, regardless 
282b0 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 61 74 69  of the compilati
282c0 6f 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20  on options used 
282d0 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 2e  to build SQLite.
282e0 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69  .</ul>..<h3>Opti
282f0 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f  onal LIMIT and O
28300 52 44 45 52 20 42 59 20 43 6c 61 75 73 65 73 3c  RDER BY Clauses<
28310 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51  /h3>..<p>^(If SQ
28320 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20 77 69  Lite is built wi
28330 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45  th the [SQLITE_E
28340 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
28350 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69  ETE_LIMIT].compi
28360 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74  le-time option t
28370 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f  hen the syntax o
28380 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
28390 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64  tement is extend
283a0 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c  ed.with optional
283b0 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
283c0 4d 49 54 20 63 6c 61 75 73 65 73 29 5e 20 61 73  MIT clauses)^ as
283d0 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
283e0 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
283f0 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69  m update-stmt-li
28400 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mited</tcl>..<p>
28410 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74  ^If an UPDATE st
28420 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20 4c 49  atement has a LI
28430 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
28440 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
28450 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c  f rows that.will
28460 20 62 65 20 75 70 64 61 74 65 64 20 69 73 20 66   be updated is f
28470 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69  ound by evaluati
28480 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79  ng the accompany
28490 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ing expression a
284a0 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20 74 6f  nd casting.it to
284b0 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
284c0 65 2e 20 5e 41 20 6e 65 67 61 74 69 76 65 20 76  e. ^A negative v
284d0 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72 65  alue is interpre
284e0 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74  ted as "no limit
284f0 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 4c  "...<p>^If the L
28500 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20  IMIT expression 
28510 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6e 6f 6e  evaluates to non
28520 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20  -negative value 
28530 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74 68 65  <i>N</i> and the
28540 0a 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e  .UPDATE statemen
28550 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52 20 42  t has an ORDER B
28560 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61  Y clause, then a
28570 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77 6f 75  ll rows that wou
28580 6c 64 20 62 65 20 75 70 64 61 74 65 64 20 69 6e  ld be updated in
28590 0a 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20  .the absence of 
285a0 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  the LIMIT clause
285b0 20 61 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f   are sorted acco
285c0 72 64 69 6e 67 20 74 6f 20 74 68 65 20 4f 52 44  rding to the ORD
285d0 45 52 20 42 59 20 61 6e 64 20 74 68 65 0a 66 69  ER BY and the.fi
285e0 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70 64  rst <i>N</i> upd
285f0 61 74 65 64 2e 20 5e 28 49 66 20 74 68 65 20 55  ated. ^(If the U
28600 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
28610 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53  also has an OFFS
28620 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20  ET clause,.then 
28630 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20  it is similarly 
28640 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61  evaluated and ca
28650 73 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  st to an integer
28660 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 20 4f   value. If the O
28670 46 46 53 45 54 0a 65 78 70 72 65 73 73 69 6f 6e  FFSET.expression
28680 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20   evaluates to a 
28690 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c  non-negative val
286a0 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68 65  ue <i>M</i>, the
286b0 6e 20 74 68 65 20 66 69 72 73 74 20 3c 69 3e 4d  n the first <i>M
286c0 3c 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20 73 6b  </i>.rows are sk
286d0 69 70 70 65 64 20 61 6e 64 20 74 68 65 20 66 6f  ipped and the fo
286e0 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69 3e  llowing <i>N</i>
286f0 20 72 6f 77 73 20 75 70 64 61 74 65 64 20 69 6e   rows updated in
28700 73 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49 66  stead.)^..<p>^If
28710 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
28720 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44  ement has no ORD
28730 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  ER BY clause, th
28740 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74  en all rows that
28750 0a 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65  .would be update
28760 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65  d in the absence
28770 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c   of the LIMIT cl
28780 61 75 73 65 20 61 72 65 20 61 73 73 65 6d 62 6c  ause are assembl
28790 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72 61  ed in an.arbitra
287a0 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65 20  ry order before 
287b0 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d  applying the LIM
287c0 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63 6c  IT and OFFSET cl
287d0 61 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d 69  auses to determi
287e0 6e 65 20 0a 77 68 69 63 68 20 61 72 65 20 61 63  ne .which are ac
287f0 74 75 61 6c 6c 79 20 75 70 64 61 74 65 64 2e 0a  tually updated..
28800 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20  .<p>^(The ORDER 
28810 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20  BY clause on an 
28820 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
28830 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f   is used only to
28840 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
28850 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69  .rows fall withi
28860 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65  n the LIMIT. The
28870 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
28880 72 6f 77 73 20 61 72 65 20 6d 6f 64 69 66 69 65  rows are modifie
28890 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61  d is arbitrary.a
288a0 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65  nd is not influe
288b0 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52 44 45  nced by the ORDE
288c0 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a  R BY clause.)^..
288d0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
288e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
288f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28920 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 56 41 43  ####.Section VAC
28930 55 55 4d 20 76 61 63 75 75 6d 20 56 41 43 55 55  UUM vacuum VACUU
28940 4d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  M..RecursiveBubb
28950 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75 75 6d  leDiagram vacuum
28960 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
28970 3e 0a 20 20 54 68 65 20 56 41 43 55 55 4d 20 63  >.  The VACUUM c
28980 6f 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64 73 20  ommand rebuilds 
28990 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
289a0 61 73 65 2e 20 54 68 65 72 65 20 61 72 65 20 73  ase. There are s
289b0 65 76 65 72 61 6c 20 0a 20 20 72 65 61 73 6f 6e  everal .  reason
289c0 73 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  s an application
289d0 20 6d 69 67 68 74 20 64 6f 20 74 68 69 73 3a 0a   might do this:.
289e0 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  .<ul>.  <li> <p>
289f0 20 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74 65 20   ^Unless SQLite 
28a00 69 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22 61  is running in "a
28a10 75 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c 22  uto_vacuum=FULL"
28a20 20 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c 61   mode, when a la
28a30 72 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74 20  rge.     amount 
28a40 6f 66 20 64 61 74 61 20 69 73 20 64 65 6c 65 74  of data is delet
28a50 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
28a60 62 61 73 65 20 66 69 6c 65 20 69 74 20 6c 65 61  base file it lea
28a70 76 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79  ves behind empty
28a80 0a 20 20 20 20 20 73 70 61 63 65 2c 20 6f 72 20  .     space, or 
28a90 22 66 72 65 65 22 20 64 61 74 61 62 61 73 65 20  "free" database 
28aa0 70 61 67 65 73 2e 20 54 68 69 73 20 6d 65 61 6e  pages. This mean
28ab0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
28ac0 69 6c 65 20 6d 69 67 68 74 0a 20 20 20 20 20 62  ile might.     b
28ad0 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73 74  e larger than st
28ae0 72 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79  rictly necessary
28af0 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55  . ^Running VACUU
28b00 4d 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65  M to rebuild the
28b10 20 0a 20 20 20 20 20 64 61 74 61 62 61 73 65 20   .     database 
28b20 72 65 63 6c 61 69 6d 73 20 74 68 69 73 20 73 70  reclaims this sp
28b30 61 63 65 20 61 6e 64 20 72 65 64 75 63 65 73 20  ace and reduces 
28b40 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
28b50 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 0a  database file...
28b60 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65 71    <li> <p> ^Freq
28b70 75 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75 70  uent inserts, up
28b80 64 61 74 65 73 2c 20 61 6e 64 20 64 65 6c 65 74  dates, and delet
28b90 65 73 20 63 61 6e 20 63 61 75 73 65 20 74 68 65  es can cause the
28ba0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20   database file. 
28bb0 20 20 20 20 74 6f 20 62 65 63 6f 6d 65 20 66 72      to become fr
28bc0 61 67 6d 65 6e 74 65 64 20 2d 20 77 68 65 72 65  agmented - where
28bd0 20 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67   data for a sing
28be0 6c 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  le table or inde
28bf0 78 20 69 73 20 73 63 61 74 74 65 72 65 64 20 0a  x is scattered .
28c00 20 20 20 20 20 61 72 6f 75 6e 64 20 74 68 65 20       around the 
28c10 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e  database file. ^
28c20 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 65  Running VACUUM e
28c30 6e 73 75 72 65 73 20 74 68 61 74 20 65 61 63 68  nsures that each
28c40 20 74 61 62 6c 65 20 61 6e 64 0a 20 20 20 20 20   table and.     
28c50 69 6e 64 65 78 20 69 73 20 6c 61 72 67 65 6c 79  index is largely
28c60 20 73 74 6f 72 65 64 20 63 6f 6e 74 69 67 75 6f   stored contiguo
28c70 75 73 6c 79 20 77 69 74 68 69 6e 20 74 68 65 20  usly within the 
28c80 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e  database file. ^
28c90 49 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63 61 73  In some.     cas
28ca0 65 73 2c 20 56 41 43 55 55 4d 20 6d 61 79 20 61  es, VACUUM may a
28cb0 6c 73 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e  lso reduce the n
28cc0 75 6d 62 65 72 20 6f 66 20 70 61 72 74 69 61 6c  umber of partial
28cd0 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20  ly filled pages 
28ce0 69 6e 0a 20 20 20 20 20 74 68 65 20 64 61 74 61  in.     the data
28cf0 62 61 73 65 2c 20 72 65 64 75 63 69 6e 67 20 74  base, reducing t
28d00 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  he size of the d
28d10 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 75 72  atabase file fur
28d20 74 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  ther...  <li> <p
28d30 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65  > ^Normally, the
28d40 20 64 61 74 61 62 61 73 65 20 5b 70 61 67 65 5f   database [page_
28d50 73 69 7a 65 5d 20 61 6e 64 20 77 68 65 74 68 65  size] and whethe
28d60 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61 74  r or not the dat
28d70 61 62 61 73 65 0a 20 20 20 20 20 73 75 70 70 6f  abase.     suppo
28d80 72 74 73 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  rts [auto_vacuum
28d90 5d 20 6d 75 73 74 20 62 65 20 63 6f 6e 66 69 67  ] must be config
28da0 75 72 65 64 20 62 65 66 6f 72 65 20 74 68 65 20  ured before the 
28db0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
28dc0 0a 20 20 20 20 20 61 63 74 75 61 6c 6c 79 20 63  .     actually c
28dd0 72 65 61 74 65 64 2e 20 5e 48 6f 77 65 76 65 72  reated. ^However
28de0 2c 20 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 77  , when not in [w
28df0 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20  rite-ahead log] 
28e00 6d 6f 64 65 2c 20 74 68 65 20 0a 20 20 20 20 20  mode, the .     
28e10 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f  [page_size] and/
28e20 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  or [auto_vacuum]
28e30 20 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20 61   properties of a
28e40 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  n existing datab
28e50 61 73 65 20 6d 61 79 20 62 65 0a 20 20 20 20 20  ase may be.     
28e60 63 68 61 6e 67 65 64 20 62 79 20 75 73 69 6e 67  changed by using
28e70 20 74 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 20   the [page_size 
28e80 70 72 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a 65  pragma|page_size
28e90 5d 20 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20 20  ]  and/or .     
28ea0 5b 61 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72 61  [auto_vacuum|pra
28eb0 67 6d 61 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d  gma auto_vacuum]
28ec0 20 70 72 61 67 6d 61 73 20 61 6e 64 20 74 68 65   pragmas and the
28ed0 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41  n immediately VA
28ee0 43 55 55 4d 69 6e 67 0a 20 20 20 20 20 74 68 65  CUUMing.     the
28ef0 20 64 61 74 61 62 61 73 65 2e 20 5e 57 68 65 6e   database. ^When
28f00 20 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64   in [write-ahead
28f10 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c 79   log] mode, only
28f20 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75   the [auto_vacuu
28f30 6d 5d 0a 20 20 20 20 20 73 75 70 70 6f 72 74 20  m].     support 
28f40 70 72 6f 70 65 72 74 79 20 63 61 6e 20 62 65 20  property can be 
28f50 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 56 41  changed using VA
28f60 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  CUUM..</ul>..<p>
28f70 5e 28 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f  ^(VACUUM only wo
28f80 72 6b 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20  rks on the main 
28f90 64 61 74 61 62 61 73 65 2e 20 49 74 20 69 73 20  database. It is 
28fa0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
28fb0 56 41 43 55 55 4d 20 61 6e 0a 61 74 74 61 63 68  VACUUM an.attach
28fc0 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ed database file
28fd0 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43  .)^..<p>^The VAC
28fe0 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b  UUM command work
28ff0 73 20 62 79 20 63 6f 70 79 69 6e 67 20 74 68 65  s by copying the
29000 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
29010 20 64 61 74 61 62 61 73 65 20 69 6e 74 6f 0a 61   database into.a
29020 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
29030 61 73 65 20 66 69 6c 65 20 61 6e 64 20 74 68 65  ase file and the
29040 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68  n overwriting th
29050 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 74 68 20  e original with 
29060 74 68 65 20 0a 63 6f 6e 74 65 6e 74 73 20 6f 66  the .contents of
29070 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66   the temporary f
29080 69 6c 65 2e 20 5e 57 68 65 6e 20 6f 76 65 72 77  ile. ^When overw
29090 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69  riting the origi
290a0 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62 61 63 6b 0a  nal, a rollback.
290b0 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b 77 72 69 74  journal or [writ
290c0 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 57 41 4c  e-ahead log] WAL
290d0 20 66 69 6c 65 20 69 73 20 75 73 65 64 20 6a 75   file is used ju
290e0 73 74 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  st as it would b
290f0 65 20 66 6f 72 20 61 6e 79 0a 6f 74 68 65 72 20  e for any.other 
29100 64 61 74 61 62 61 73 65 20 74 72 61 6e 73 61 63  database transac
29110 74 69 6f 6e 2e 20 5e 54 68 69 73 20 6d 65 61 6e  tion. ^This mean
29120 73 20 74 68 61 74 20 77 68 65 6e 20 56 41 43 55  s that when VACU
29130 55 4d 69 6e 67 20 61 20 64 61 74 61 62 61 73 65  UMing a database
29140 2c 20 0a 61 73 20 6d 75 63 68 20 61 73 20 74 77  , .as much as tw
29150 69 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ice the size of 
29160 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
29170 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 72 65  abase file is re
29180 71 75 69 72 65 64 20 69 6e 20 66 72 65 65 0a 64  quired in free.d
29190 69 73 6b 20 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e  isk space...<p>^
291a0 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
291b0 6e 64 20 6d 61 79 20 63 68 61 6e 67 65 20 74 68  nd may change th
291c0 65 20 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49 44  e [ROWID | ROWID
291d0 73 5d 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  s] of entries in
291e0 20 61 6e 79 0a 74 61 62 6c 65 73 20 74 68 61 74   any.tables that
291f0 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 61 6e 20   do not have an 
29200 65 78 70 6c 69 63 69 74 20 5b 49 4e 54 45 47 45  explicit [INTEGE
29210 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a  R PRIMARY KEY]..
29220 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43 55  </p>..<p>^A VACU
29230 55 4d 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20  UM will fail if 
29240 74 68 65 72 65 20 69 73 20 61 6e 20 6f 70 65 6e  there is an open
29250 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 6f 72   transaction, or
29260 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 6e   if there are on
29270 65 20 6f 72 0a 6d 6f 72 65 20 61 63 74 69 76 65  e or.more active
29280 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
29290 77 68 65 6e 20 69 74 20 69 73 20 72 75 6e 2e 0a  when it is run..
292a0 0a 3c 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c 69  .<p>^(As of SQLi
292b0 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20  te version 3.1, 
292c0 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74  an alternative t
292d0 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41 43 55  o using the VACU
292e0 55 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65  UM command to.re
292f0 63 6c 61 69 6d 20 73 70 61 63 65 20 61 66 74 65  claim space afte
29300 72 20 64 61 74 61 20 68 61 73 20 62 65 65 6e 20  r data has been 
29310 64 65 6c 65 74 65 64 20 69 73 20 61 75 74 6f 2d  deleted is auto-
29320 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61  vacuum mode, ena
29330 62 6c 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b  bled using.the [
29340 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61  auto_vacuum] pra
29350 67 6d 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61 75  gma.)^ ^When [au
29360 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e  to_vacuum] is en
29370 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61  abled for a data
29380 62 61 73 65 0a 66 72 65 65 20 70 61 67 65 73 20  base.free pages 
29390 6d 61 79 20 62 65 20 72 65 63 6c 61 69 6d 65 64  may be reclaimed
293a0 20 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20   after deleting 
293b0 64 61 74 61 2c 20 63 61 75 73 69 6e 67 20 74 68  data, causing th
293c0 65 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b  e file to shrink
293d0 2c 0a 77 69 74 68 6f 75 74 20 72 65 62 75 69 6c  ,.without rebuil
293e0 64 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20  ding the entire 
293f0 64 61 74 61 62 61 73 65 20 75 73 69 6e 67 20 56  database using V
29400 41 43 55 55 4d 2e 20 20 48 6f 77 65 76 65 72 2c  ACUUM.  However,
29410 20 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61 63   using.[auto_vac
29420 75 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74 6f  uum] can lead to
29430 20 65 78 74 72 61 20 64 61 74 61 62 61 73 65 20   extra database 
29440 66 69 6c 65 20 66 72 61 67 6d 65 6e 74 61 74 69  file fragmentati
29450 6f 6e 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f 76  on.  And [auto_v
29460 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20  acuum].does not 
29470 63 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c  compact partiall
29480 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f  y filled pages o
29490 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  f the database a
294a0 73 20 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a  s VACUUM does...
294b0 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
294c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
294d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
294e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
294f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29500 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
29510 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d  ion {INDEXED BY}
29520 20 69 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44   indexedby {{IND
29530 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e  EXED BY} {NOT IN
29540 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a  DEXED}}..</tcl>.
29550 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
29560 42 59 20 70 68 72 61 73 65 20 66 6f 72 63 65 73  BY phrase forces
29570 20 74 68 65 20 5b 53 51 4c 69 74 65 20 71 75 65   the [SQLite que
29580 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74 6f 20 75  ry planner] to u
29590 73 65 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20  se a.particular 
295a0 6e 61 6d 65 64 20 69 6e 64 65 78 20 6f 6e 20 61  named index on a
295b0 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 53 45 4c 45   [DELETE], [SELE
295c0 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d  CT], or [UPDATE]
295d0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20   statement..The 
295e0 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
295f0 65 20 69 73 20 61 6e 20 65 78 74 65 6e 73 69 6f  e is an extensio
29600 6e 20 74 68 61 74 20 69 73 20 70 61 72 74 69 63  n that is partic
29610 75 6c 61 72 20 74 6f 20 53 51 4c 69 74 65 20 61  ular to SQLite a
29620 6e 64 0a 69 73 20 6e 6f 74 20 70 6f 72 74 61 62  nd.is not portab
29630 6c 65 20 74 6f 20 6f 74 68 65 72 20 53 51 4c 20  le to other SQL 
29640 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
29650 2e 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42 59  ..The INDEXED BY
29660 20 70 68 72 61 73 65 20 63 61 6e 20 62 65 20 73   phrase can be s
29670 65 65 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  een in the follo
29680 77 69 6e 67 20 73 79 6e 74 61 78 0a 64 69 61 67  wing syntax.diag
29690 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  rams:</p>..<tcl>
296a0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71  .BubbleDiagram q
296b0 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
296c0 61 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  ame.BubbleDiagra
296d0 6d 20 73 69 6d 70 6c 65 2d 6a 6f 69 6e 2d 73 6f  m simple-join-so
296e0 75 72 63 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  urce.</tcl>..<p>
296f0 5e 54 68 65 20 22 49 4e 44 45 58 45 44 20 42 59  ^The "INDEXED BY
29700 20 69 6e 64 65 78 2d 6e 61 6d 65 22 20 70 68 72   index-name" phr
29710 61 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68  ase specifies th
29720 61 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64  at the named ind
29730 65 78 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20  ex.must be used 
29740 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b  in order to look
29750 20 75 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68   up values on th
29760 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c  e preceding tabl
29770 65 2e 0a 5e 49 66 20 69 6e 64 65 78 2d 6e 61 6d  e..^If index-nam
29780 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
29790 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20 75 73   or cannot be us
297a0 65 64 20 66 6f 72 20 74 68 65 20 71 75 65 72 79  ed for the query
297b0 2c 20 74 68 65 6e 0a 74 68 65 20 70 72 65 70 61  , then.the prepa
297c0 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51  ration of the SQ
297d0 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c  L statement fail
297e0 73 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e  s..^(The "NOT IN
297f0 44 45 58 45 44 22 20 63 6c 61 75 73 65 20 73 70  DEXED" clause sp
29800 65 63 69 66 69 65 73 20 74 68 61 74 20 6e 6f 20  ecifies that no 
29810 69 6e 64 65 78 20 73 68 61 6c 6c 20 62 65 20 75  index shall be u
29820 73 65 64 20 77 68 65 6e 0a 61 63 63 65 73 73 69  sed when.accessi
29830 6e 67 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  ng the preceding
29840 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e   table, includin
29850 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65  g implied indice
29860 73 20 63 72 65 61 74 65 20 62 79 0a 55 4e 49 51  s create by.UNIQ
29870 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  UE and PRIMARY K
29880 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  EY constraints. 
29890 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 49 4e   However, the IN
298a0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
298b0 59 0a 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 75  Y.can still be u
298c0 73 65 64 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 65  sed to look up e
298d0 6e 74 72 69 65 73 20 65 76 65 6e 20 77 68 65 6e  ntries even when
298e0 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 69   "NOT INDEXED" i
298f0 73 20 73 70 65 63 69 66 69 65 64 2e 29 5e 3c 2f  s specified.)^</
29900 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20  p>..<p>Some SQL 
29910 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
29920 20 70 72 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61   provide non-sta
29930 6e 64 61 72 64 20 22 68 69 6e 74 22 20 6d 65 63  ndard "hint" mec
29940 68 61 6e 69 73 6d 73 20 77 68 69 63 68 0a 63 61  hanisms which.ca
29950 6e 20 62 65 20 75 73 65 64 20 74 6f 20 67 69 76  n be used to giv
29960 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  e the query opti
29970 6d 69 7a 65 72 20 63 6c 75 65 73 20 61 62 6f 75  mizer clues abou
29980 74 20 77 68 61 74 20 69 6e 64 69 63 65 73 20 69  t what indices i
29990 74 20 73 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72  t should.use for
299a0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 73 74   a particular st
299b0 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e  atement.  The IN
299c0 44 45 58 20 42 59 20 63 6c 61 75 73 65 20 6f 66  DEX BY clause of
299d0 20 53 51 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e   SQLite is .<em>
299e0 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69  not</em> a hinti
299f0 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64  ng mechanism and
29a00 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62   it should not b
29a10 65 20 75 73 65 64 20 61 73 20 73 75 63 68 2e 0a  e used as such..
29a20 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
29a30 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20  clause does not 
29a40 67 69 76 65 20 74 68 65 20 6f 70 74 69 6d 69 7a  give the optimiz
29a50 65 72 20 68 69 6e 74 73 20 61 62 6f 75 74 20 77  er hints about w
29a60 68 69 63 68 20 69 6e 64 65 78 0a 74 6f 20 75 73  hich index.to us
29a70 65 3b 20 69 74 20 67 69 76 65 73 20 74 68 65 20  e; it gives the 
29a80 6f 70 74 69 6d 69 7a 65 72 20 61 20 72 65 71 75  optimizer a requ
29a90 69 72 65 6d 65 6e 74 20 6f 66 20 77 68 69 63 68  irement of which
29aa0 20 69 6e 64 65 78 20 74 6f 20 75 73 65 2e 0a 5e   index to use..^
29ab0 49 66 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  If the query opt
29ac0 69 6d 69 7a 65 72 20 69 73 20 75 6e 61 62 6c 65  imizer is unable
29ad0 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 64 65   to use the inde
29ae0 78 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  x specified by t
29af0 68 65 0a 49 4e 44 45 58 20 42 59 20 63 6c 61 75  he.INDEX BY clau
29b00 73 65 2c 20 74 68 65 6e 20 74 68 65 20 71 75 65  se, then the que
29b10 72 79 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  ry will fail wit
29b20 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a  h an error.</p>.
29b30 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58 45 44 20  .<p>The INDEXED 
29b40 42 59 20 63 6c 61 75 73 65 20 69 73 20 3c 65 6d  BY clause is <em
29b50 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64  >not</em> intend
29b60 65 64 20 66 6f 72 20 75 73 65 20 69 6e 20 74 75  ed for use in tu
29b70 6e 69 6e 67 0a 74 68 65 20 70 65 72 66 6f 72 6d  ning.the perform
29b80 61 6e 63 65 20 6f 66 20 61 20 71 75 65 72 79 2e  ance of a query.
29b90 20 20 54 68 65 20 69 6e 74 65 6e 74 20 6f 66 20    The intent of 
29ba0 74 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63  the INDEXED BY c
29bb0 6c 61 75 73 65 20 69 73 0a 74 6f 20 72 61 69 73  lause is.to rais
29bc0 65 20 61 20 72 75 6e 2d 74 69 6d 65 20 65 72 72  e a run-time err
29bd0 6f 72 20 69 66 20 61 20 73 63 68 65 6d 61 20 63  or if a schema c
29be0 68 61 6e 67 65 2c 20 73 75 63 68 20 61 73 20 64  hange, such as d
29bf0 72 6f 70 70 69 6e 67 20 6f 72 0a 63 72 65 61 74  ropping or.creat
29c00 69 6e 67 20 61 6e 20 69 6e 64 65 78 2c 20 63 61  ing an index, ca
29c10 75 73 65 73 20 74 68 65 20 71 75 65 72 79 20 70  uses the query p
29c20 6c 61 6e 20 66 6f 72 20 61 20 74 69 6d 65 2d 73  lan for a time-s
29c30 65 6e 73 69 74 69 76 65 20 71 75 65 72 79 0a 74  ensitive query.t
29c40 6f 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 49  o change.  The I
29c50 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
29c60 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20   is designed to 
29c70 68 65 6c 70 20 64 65 74 65 63 74 0a 75 6e 64 65  help detect.unde
29c80 73 69 72 61 62 6c 65 20 71 75 65 72 79 20 70 6c  sirable query pl
29c90 61 6e 20 63 68 61 6e 67 65 73 20 64 75 72 69 6e  an changes durin
29ca0 67 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  g regression tes
29cb0 74 69 6e 67 2e 0a 44 65 76 65 6c 6f 70 65 72 73  ting..Developers
29cc0 20 61 72 65 20 61 64 6d 6f 6e 69 73 68 65 64 20   are admonished 
29cd0 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75 73 65 20  to omit all use 
29ce0 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20 64 75  of INDEXED BY du
29cf0 72 69 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f 6e  ring.application
29d00 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c 65 6d 65   design, impleme
29d10 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74 69 6e 67  ntation, testing
29d20 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e 20 20 49  , and tuning.  I
29d30 66 0a 49 4e 44 45 58 45 44 20 42 59 20 69 73 20  f.INDEXED BY is 
29d40 74 6f 20 62 65 20 75 73 65 64 20 61 74 20 61 6c  to be used at al
29d50 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20  l, it should be 
29d60 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
29d70 76 65 72 79 0a 65 6e 64 20 6f 66 20 74 68 65 20  very.end of the 
29d80 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70 72 6f 63  development proc
29d90 65 73 73 20 77 68 65 6e 20 22 6c 6f 63 6b 69 6e  ess when "lockin
29da0 67 20 64 6f 77 6e 22 20 61 20 64 65 73 69 67 6e  g down" a design
29db0 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65 65 20 41  .</p>..<h3>See A
29dc0 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a  lso:</h3>..<ol>.
29dd0 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 71 75 65 72  <li><p>The [quer
29de0 79 20 70 6c 61 6e 6e 65 72 20 63 68 65 63 6b 6c  y planner checkl
29df0 69 73 74 5d 20 64 65 73 63 72 69 62 65 73 20 73  ist] describes s
29e00 74 65 70 73 20 74 68 61 74 20 61 70 70 6c 69 63  teps that applic
29e10 61 74 69 6f 6e 0a 64 65 76 65 6c 6f 70 65 72 73  ation.developers
29e20 20 73 68 6f 75 6c 64 20 66 6f 6c 6c 6f 77 69 6e   should followin
29e30 67 20 74 6f 20 68 65 6c 70 20 72 65 73 6f 6c 76  g to help resolv
29e40 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
29e50 70 72 6f 62 6c 65 6d 73 2e 0a 4e 6f 74 69 63 65  problems..Notice
29e60 20 74 68 65 20 74 68 61 74 20 74 68 65 20 75 73   the that the us
29e70 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20  e of INDEXED BY 
29e80 69 73 20 61 20 6c 61 73 74 20 72 65 73 6f 72 74  is a last resort
29e90 2c 20 74 6f 20 62 65 20 75 73 65 64 20 6f 6e 6c  , to be used onl
29ea0 79 0a 77 68 65 6e 20 61 6c 6c 20 6f 74 68 65 72  y.when all other
29eb0 20 6d 65 61 73 75 72 65 73 20 66 61 69 6c 2e 3c   measures fail.<
29ec0 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5b 75 70 6c  /p>..<li><p>[upl
29ed0 75 73 63 6f 6e 74 72 6f 6c 7c 54 68 65 20 75 6e  uscontrol|The un
29ee0 61 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f 72  ary "+" operator
29ef0 5d 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ].can be used to
29f00 20 64 69 73 71 75 61 6c 69 66 79 20 74 65 72 6d   disqualify term
29f10 73 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63  s in the WHERE c
29f20 6c 61 75 73 65 20 66 72 6f 6d 20 75 73 65 20 62  lause from use b
29f30 79 20 69 6e 64 69 63 65 73 2e 0a 43 61 72 65 66  y indices..Caref
29f40 75 6c 20 75 73 65 20 6f 66 20 75 6e 61 72 79 20  ul use of unary 
29f50 2b 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20  + can sometimes 
29f60 68 65 6c 70 20 70 72 65 76 65 6e 74 20 74 68 65  help prevent the
29f70 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 66   query planner f
29f80 72 6f 6d 0a 63 68 6f 6f 73 69 6e 67 20 61 20 70  rom.choosing a p
29f90 6f 6f 72 20 69 6e 64 65 78 20 77 69 74 68 6f 75  oor index withou
29fa0 74 20 72 65 73 74 72 69 63 74 69 6e 67 20 69 74  t restricting it
29fb0 20 74 6f 20 75 73 69 6e 67 20 6f 6e 65 20 73 70   to using one sp
29fc0 65 63 69 66 69 63 20 69 6e 64 65 78 2e 0a 43 61  ecific index..Ca
29fd0 72 65 66 75 6c 20 70 6c 61 63 65 6d 65 6e 74 20  reful placement 
29fe0 6f 66 20 75 6e 61 72 79 20 2b 20 6f 70 65 72 61  of unary + opera
29ff0 74 6f 72 73 20 69 73 20 61 20 62 65 74 74 65 72  tors is a better
2a000 20 6d 65 74 68 6f 64 20 66 6f 72 20 63 6f 6e 74   method for cont
2a010 72 6f 6c 6c 69 6e 67 20 0a 77 68 69 63 68 20 69  rolling .which i
2a020 6e 64 69 63 65 73 20 61 72 65 20 75 73 65 64 20  ndices are used 
2a030 62 79 20 61 20 71 75 65 72 79 2e 3c 2f 70 3e 0a  by a query.</p>.
2a040 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 73 71 6c  .<li><p>The [sql
2a050 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73  ite3_stmt_status
2a060 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ()] C/C++ interf
2a070 61 63 65 20 74 6f 67 65 74 68 65 72 20 77 69 74  ace together wit
2a080 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54  h the.[SQLITE_ST
2a090 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41  MTSTATUS_FULLSCA
2a0a0 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c  N_STEP] and [SQL
2a0b0 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53  ITE_STMTSTATUS_S
2a0c0 4f 52 54 5d 20 76 65 72 62 73 0a 63 61 6e 20 62  ORT] verbs.can b
2a0d0 65 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  e used to detect
2a0e0 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 77 68 65   at run-time whe
2a0f0 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  n an SQL stateme
2a100 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67  nt is not.making
2a110 20 65 66 66 65 63 74 69 76 65 20 75 73 65 20 6f   effective use o
2a120 66 20 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79  f indices.  Many
2a130 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61   applications ma
2a140 79 20 70 72 65 66 65 72 20 74 6f 0a 75 73 65 20  y prefer to.use 
2a150 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d  the [sqlite3_stm
2a160 74 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74 65  t_status()] inte
2a170 72 66 61 63 65 20 74 6f 20 64 65 74 65 63 74 20  rface to detect 
2a180 69 6e 64 65 78 20 6d 69 73 75 73 65 0a 72 61 74  index misuse.rat
2a190 68 65 72 20 74 68 61 6e 20 74 68 65 20 49 4e 44  her than the IND
2a1a0 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 64  EXED BY phrase d
2a1b0 65 73 63 72 69 62 65 64 20 68 65 72 65 2e 3c 2f  escribed here.</
2a1c0 70 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a  p>.</ol>..<tcl>.
2a1d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a1e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a1f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a210 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20  #############.# 
2a220 41 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72  A list of keywor
2a230 64 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b 20  ds.  A asterisk 
2a240 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65  occurs after the
2a250 20 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20 69   keyword if it i
2a260 73 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c 62  s on.# the fallb
2a270 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74 20  ack list..#.set 
2a280 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c 73  keyword_list [ls
2a290 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 0a 20  ort {.   ABORT. 
2a2a0 20 20 41 43 54 49 4f 4e 0a 20 20 20 41 44 44 0a    ACTION.   ADD.
2a2b0 20 20 20 41 46 54 45 52 0a 20 20 20 41 4c 4c 0a     AFTER.   ALL.
2a2c0 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41 4c     ALTER.   ANAL
2a2d0 59 5a 45 0a 20 20 20 41 4e 44 0a 20 20 20 41 53  YZE.   AND.   AS
2a2e0 0a 20 20 20 41 53 43 0a 20 20 20 41 54 54 41 43  .   ASC.   ATTAC
2a2f0 48 0a 20 20 20 41 55 54 4f 49 4e 43 52 45 4d 45  H.   AUTOINCREME
2a300 4e 54 0a 20 20 20 42 45 46 4f 52 45 0a 20 20 20  NT.   BEFORE.   
2a310 42 45 47 49 4e 0a 20 20 20 42 45 54 57 45 45 4e  BEGIN.   BETWEEN
2a320 0a 20 20 20 42 59 0a 20 20 20 43 41 53 43 41 44  .   BY.   CASCAD
2a330 45 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41 53  E.   CASE.   CAS
2a340 54 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43 4f  T.   CHECK.   CO
2a350 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a  LLATE.   COLUMN.
2a360 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e     COMMIT.   CON
2a370 46 4c 49 43 54 0a 20 20 20 43 4f 4e 53 54 52 41  FLICT.   CONSTRA
2a380 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20 20  INT.   CREATE.  
2a390 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45 4e   CROSS.   CURREN
2a3a0 54 5f 44 41 54 45 0a 20 20 20 43 55 52 52 45 4e  T_DATE.   CURREN
2a3b0 54 5f 54 49 4d 45 0a 20 20 20 43 55 52 52 45 4e  T_TIME.   CURREN
2a3c0 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20 20 44  T_TIMESTAMP.   D
2a3d0 41 54 41 42 41 53 45 0a 20 20 20 44 45 46 41 55  ATABASE.   DEFAU
2a3e0 4c 54 0a 20 20 20 44 45 46 45 52 52 45 44 0a 20  LT.   DEFERRED. 
2a3f0 20 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 20    DEFERRABLE.   
2a400 44 45 4c 45 54 45 0a 20 20 20 44 45 53 43 0a 20  DELETE.   DESC. 
2a410 20 20 44 45 54 41 43 48 0a 20 20 20 44 49 53 54    DETACH.   DIST
2a420 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20 20  INCT.   DROP.   
2a430 45 4e 44 0a 20 20 20 45 41 43 48 0a 20 20 20 45  END.   EACH.   E
2a440 4c 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20 20  LSE.   ESCAPE.  
2a450 20 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c 55   EXCEPT.   EXCLU
2a460 53 49 56 45 0a 20 20 20 45 58 49 53 54 53 0a 20  SIVE.   EXISTS. 
2a470 20 20 45 58 50 4c 41 49 4e 0a 20 20 20 46 41 49    EXPLAIN.   FAI
2a480 4c 0a 20 20 20 46 4f 52 0a 20 20 20 46 4f 52 45  L.   FOR.   FORE
2a490 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46  IGN.   FROM.   F
2a4a0 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20 20 20 47  ULL.   GLOB.   G
2a4b0 52 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a 20  ROUP.   HAVING. 
2a4c0 20 20 49 46 0a 20 20 20 49 47 4e 4f 52 45 0a 20    IF.   IGNORE. 
2a4d0 20 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 20 49    IMMEDIATE.   I
2a4e0 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20 20 49 4e  N.   INDEX.   IN
2a4f0 44 45 58 45 44 0a 20 20 20 49 4e 49 54 49 41 4c  DEXED.   INITIAL
2a500 4c 59 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20 49  LY.   INNER.   I
2a510 4e 53 45 52 54 0a 20 20 20 49 4e 53 54 45 41 44  NSERT.   INSTEAD
2a520 0a 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20  .   INTERSECT.  
2a530 20 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49   INTO.   IS.   I
2a540 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20  SNULL.   JOIN.  
2a550 20 4b 45 59 0a 20 20 20 4c 45 46 54 0a 20 20 20   KEY.   LEFT.   
2a560 4c 49 4b 45 0a 20 20 20 4c 49 4d 49 54 0a 20 20  LIKE.   LIMIT.  
2a570 20 4d 41 54 43 48 0a 20 20 20 4e 41 54 55 52 41   MATCH.   NATURA
2a580 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20  L.   NO.   NOT. 
2a590 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c    NOTNULL.   NUL
2a5a0 4c 0a 20 20 20 4f 46 0a 20 20 20 4f 46 46 53 45  L.   OF.   OFFSE
2a5b0 54 0a 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20  T.   ON.   OR.  
2a5c0 20 4f 52 44 45 52 0a 20 20 20 4f 55 54 45 52 0a   ORDER.   OUTER.
2a5d0 20 20 20 50 4c 41 4e 0a 20 20 20 50 52 41 47 4d     PLAN.   PRAGM
2a5e0 41 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20  A.   PRIMARY.   
2a5f0 51 55 45 52 59 0a 20 20 20 52 41 49 53 45 0a 20  QUERY.   RAISE. 
2a600 20 20 52 45 43 55 52 53 49 56 45 0a 20 20 20 52    RECURSIVE.   R
2a610 45 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45 47  EFERENCES.   REG
2a620 45 58 50 0a 20 20 20 52 45 49 4e 44 45 58 0a 20  EXP.   REINDEX. 
2a630 20 20 52 45 4c 45 41 53 45 0a 20 20 20 52 45 4e    RELEASE.   REN
2a640 41 4d 45 0a 20 20 20 52 45 50 4c 41 43 45 0a 20  AME.   REPLACE. 
2a650 20 20 52 45 53 54 52 49 43 54 0a 20 20 20 52 49    RESTRICT.   RI
2a660 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a  GHT.   ROLLBACK.
2a670 20 20 20 52 4f 57 0a 20 20 20 53 41 56 45 50 4f     ROW.   SAVEPO
2a680 49 4e 54 0a 20 20 20 53 45 4c 45 43 54 0a 20 20  INT.   SELECT.  
2a690 20 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20 20   SET.   TABLE.  
2a6a0 20 54 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41   TEMP.   TEMPORA
2a6b0 52 59 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f  RY.   THEN.   TO
2a6c0 0a 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a  .   TRANSACTION.
2a6d0 20 20 20 54 52 49 47 47 45 52 0a 20 20 20 55 4e     TRIGGER.   UN
2a6e0 49 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20  ION.   UNIQUE.  
2a6f0 20 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47   UPDATE.   USING
2a700 0a 20 20 20 56 41 43 55 55 4d 0a 20 20 20 56 41  .   VACUUM.   VA
2a710 4c 55 45 53 0a 20 20 20 56 49 45 57 0a 20 20 20  LUES.   VIEW.   
2a720 56 49 52 54 55 41 4c 0a 20 20 20 57 49 54 48 0a  VIRTUAL.   WITH.
2a730 20 20 20 57 49 54 48 4f 55 54 0a 20 20 20 57 48     WITHOUT.   WH
2a740 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a  EN.   WHERE.}]..
2a750 68 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63 6c  hd_puts {<DIV cl
2a760 61 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e  ass="pdf_section
2a770 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c  ">}.Section {SQL
2a780 69 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65  ite Keywords} ke
2a790 79 77 6f 72 64 73 20 7b 7b 2a 53 51 4c 20 6b 65  ywords {{*SQL ke
2a7a0 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77  yword} {SQL keyw
2a7b0 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b  ords}}.hd_puts {
2a7c0 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a  </DIV>}.</tcl>..
2a7d0 3c 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e 64  <p>The SQL stand
2a7e0 61 72 64 20 73 70 65 63 69 66 69 65 73 20 61 20  ard specifies a 
2a7f0 68 75 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b  huge number of k
2a800 65 79 77 6f 72 64 73 20 77 68 69 63 68 20 6d 61  eywords which ma
2a810 79 20 6e 6f 74 0a 62 65 20 75 73 65 64 20 61 73  y not.be used as
2a820 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 61   the names of ta
2a830 62 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 63  bles, indices, c
2a840 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62 61 73 65  olumns, database
2a850 73 2c 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0a  s, user-defined.
2a860 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61  functions, colla
2a870 74 69 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20 74  tions, virtual t
2a880 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72  able modules, or
2a890 20 61 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65 64   any other named
2a8a0 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73   object..The lis
2a8b0 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 69 73  t of keywords is
2a8c0 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66 65   so long that fe
2a8d0 77 20 70 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d  w people can rem
2a8e0 65 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a  ember them all..
2a8f0 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64  For most SQL cod
2a900 65 2c 20 79 6f 75 72 20 73 61 66 65 73 74 20 62  e, your safest b
2a910 65 74 20 69 73 20 74 6f 20 6e 65 76 65 72 20 75  et is to never u
2a920 73 65 20 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c  se any English l
2a930 61 6e 67 75 61 67 65 0a 77 6f 72 64 20 61 73 20  anguage.word as 
2a940 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 75 73  the name of a us
2a950 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63  er-defined objec
2a960 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f  t.</p>..<p>If yo
2a970 75 20 77 61 6e 74 20 74 6f 20 75 73 65 20 61 20  u want to use a 
2a980 6b 65 79 77 6f 72 64 20 61 73 20 61 20 6e 61 6d  keyword as a nam
2a990 65 2c 20 79 6f 75 20 6e 65 65 64 20 74 6f 20 71  e, you need to q
2a9a0 75 6f 74 65 20 69 74 2e 20 20 54 68 65 72 65 0a  uote it.  There.
2a9b0 61 72 65 20 66 6f 75 72 20 77 61 79 73 20 6f 66  are four ways of
2a9c0 20 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72 64   quoting keyword
2a9d0 73 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70 3e  s in SQLite:</p>
2a9e0 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ..<p>.<blockquot
2a9f0 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 09  e>.<table>.<tr>.
2aa00 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
2aa10 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62  ><b>'keyword'</b
2aa20 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
2aa30 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  "20"></td>..<td>
2aa40 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69  ^A keyword in si
2aa50 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 73 20 61  ngle quotes is a
2aa60 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e   string literal.
2aa70 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  </td></tr>..<tr>
2aa80 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
2aa90 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c 2f  "><b>"keyword"</
2aaa0 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e  b></td><td></td>
2aab0 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64  ..<td>^A keyword
2aac0 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65   in double-quote
2aad0 73 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69  s is an identifi
2aae0 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c  er.</td></tr>..<
2aaf0 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
2ab00 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65 79  top"><b>&#91;key
2ab10 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74  word&#93;</b></t
2ab20 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64  d><td></td>..<td
2ab30 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c  >^A keyword encl
2ab40 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65 20 62  osed in square b
2ab50 72 61 63 6b 65 74 73 20 69 73 20 0a 20 20 20 20  rackets is .    
2ab60 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65      an identifie
2ab70 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  r.  This is not 
2ab80 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54  standard SQL.  T
2ab90 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68  his quoting mech
2aba0 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73  anism.        is
2abb0 20 75 73 65 64 20 62 79 20 4d 53 20 41 63 63 65   used by MS Acce
2abc0 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76 65  ss and SQL Serve
2abd0 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65  r and is include
2abe0 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a  d in SQLite for.
2abf0 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62          compatib
2ac00 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  ility.</td></tr>
2ac10 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
2ac20 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 36 3b  n="top"><b>&#96;
2ac30 6b 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f 62 3e  keyword&#96;</b>
2ac40 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09  </td><td></td>..
2ac50 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65  <td>^A keyword e
2ac60 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72 61 76 65  nclosed in grave
2ac70 20 61 63 63 65 6e 74 73 20 28 41 53 43 49 49 20   accents (ASCII 
2ac80 63 6f 64 65 20 39 36 29 20 69 73 20 0a 20 20 20  code 96) is .   
2ac90 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69       an identifi
2aca0 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  er.  This is not
2acb0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20   standard SQL.  
2acc0 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63  This quoting mec
2acd0 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69  hanism.        i
2ace0 73 20 75 73 65 64 20 62 79 20 4d 79 53 51 4c 20  s used by MySQL 
2acf0 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20  and is included 
2ad00 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20  in SQLite for.  
2ad10 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c        compatibil
2ad20 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c  ity.</td></tr>.<
2ad30 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
2ad40 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46  uote>.</p>..<p>F
2ad50 6f 72 20 72 65 73 69 6c 69 65 6e 63 65 20 77 68  or resilience wh
2ad60 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20 77 69  en confronted wi
2ad70 74 68 20 68 69 73 74 6f 72 69 63 61 6c 20 53 51  th historical SQ
2ad80 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 53 51  L statements, SQ
2ad90 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65 74 69  Lite.will someti
2ada0 6d 65 73 20 62 65 6e 64 20 74 68 65 20 71 75 6f  mes bend the quo
2adb0 74 69 6e 67 20 72 75 6c 65 73 20 61 62 6f 76 65  ting rules above
2adc0 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
2add0 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64  <p>^If a keyword
2ade0 20 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f 74 65   in single.quote
2adf0 73 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79 27 3c  s (ex: <b>'key'<
2ae00 2f 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f 62 27  /b> or <b>'glob'
2ae10 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e  </b>) is used in
2ae20 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65   a context where
2ae30 0a 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69  .an identifier i
2ae40 73 20 61 6c 6c 6f 77 65 64 20 62 75 74 20 77 68  s allowed but wh
2ae50 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74  ere a string lit
2ae60 65 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  eral is not allo
2ae70 77 65 64 2c 20 74 68 65 6e 0a 74 68 65 20 74 6f  wed, then.the to
2ae80 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f  ken is understoo
2ae90 64 20 74 6f 20 62 65 20 61 6e 20 69 64 65 6e 74  d to be an ident
2aea0 69 66 69 65 72 20 69 6e 73 74 65 61 64 20 6f 66  ifier instead of
2aeb0 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
2aec0 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  l..</p></li>..<l
2aed0 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f  i><p>^If a keywo
2aee0 72 64 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75 6f  rd in double.quo
2aef0 74 65 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65 79  tes (ex: <b>"key
2af00 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f  "</b> or <b>"glo
2af10 62 22 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20  b"</b>) is used 
2af20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65  in a context whe
2af30 72 65 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re.it cannot be 
2af40 72 65 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20 69  resolved to an i
2af50 64 65 6e 74 69 66 69 65 72 20 62 75 74 20 77 68  dentifier but wh
2af60 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74  ere a string lit
2af70 65 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64 2c  eral.is allowed,
2af80 20 74 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e 20   then the token 
2af90 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f  is understood to
2afa0 20 62 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74   be a string lit
2afb0 65 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66 20  eral instead.of 
2afc0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f  an identifier.</
2afd0 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  p></li>.</ul>..<
2afe0 70 3e 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72  p>Programmers ar
2aff0 65 20 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74 20  e cautioned not 
2b000 74 6f 20 75 73 65 20 74 68 65 20 74 77 6f 20 65  to use the two e
2b010 78 63 65 70 74 69 6f 6e 73 20 64 65 73 63 72 69  xceptions descri
2b020 62 65 64 20 69 6e 0a 74 68 65 20 70 72 65 76 69  bed in.the previ
2b030 6f 75 73 20 62 75 6c 6c 65 74 73 2e 20 20 57 65  ous bullets.  We
2b040 20 65 6d 70 68 61 73 69 7a 65 20 74 68 61 74 20   emphasize that 
2b050 74 68 65 79 20 65 78 69 73 74 20 6f 6e 6c 79 20  they exist only 
2b060 73 6f 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64 20  so that old.and 
2b070 69 6c 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20 73  ill-formed SQL s
2b080 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 72  tatements will r
2b090 75 6e 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 46  un correctly.  F
2b0a0 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f  uture versions o
2b0b0 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20 72  f.SQLite might r
2b0c0 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73 74  aise errors inst
2b0d0 65 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e 67  ead of accepting
2b0e0 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a 73   the malformed.s
2b0f0 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72 65  tatements covere
2b100 64 20 62 79 20 74 68 65 20 65 78 63 65 70 74 69  d by the excepti
2b110 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a  ons above.</p>..
2b120 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20  <p>.SQLite adds 
2b130 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f  new keywords fro
2b140 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77  m time to time w
2b150 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e 20  hen it takes on 
2b160 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f  new features..So
2b170 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72   to prevent your
2b180 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67   code from being
2b190 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72   broken by futur
2b1a0 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20  e enhancements, 
2b1b0 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61  you should.norma
2b1c0 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69 64  lly quote any id
2b1d0 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73  entifier that is
2b1e0 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67   an English lang
2b1f0 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e 20  uage word, even 
2b200 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61  if.you do not ha
2b210 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ve to..</p>..<p>
2b220 0a 54 68 65 20 6c 69 73 74 20 62 65 6c 6f 77 20  .The list below 
2b230 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69 62  shows all possib
2b240 6c 65 20 6b 65 79 77 6f 72 64 73 20 75 73 65 64  le keywords used
2b250 20 62 79 20 61 6e 79 20 62 75 69 6c 64 20 6f 66   by any build of
2b260 0a 53 51 4c 69 74 65 20 72 65 67 61 72 64 6c 65  .SQLite regardle
2b270 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d 74  ss of [compile-t
2b280 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a  ime options].  .
2b290 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c 65 20  Most reasonable 
2b2a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 75  configurations u
2b2b0 73 65 20 6d 6f 73 74 20 6f 72 20 61 6c 6c 20 6f  se most or all o
2b2c0 66 20 74 68 65 73 65 20 6b 65 79 77 6f 72 64 73  f these keywords
2b2d0 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79 77 6f  ,.but some keywo
2b2e0 72 64 73 20 6d 61 79 20 62 65 20 6f 6d 69 74 74  rds may be omitt
2b2f0 65 64 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e 67  ed when SQL lang
2b300 75 61 67 65 20 66 65 61 74 75 72 65 73 20 61 72  uage features ar
2b310 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52 65  e.disabled..^(Re
2b320 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
2b330 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
2b340 66 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79 20  figuration, any 
2b350 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20  identifier that 
2b360 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66 6f  is not on.the fo
2b370 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64 5f  llowing <tcl>hd_
2b380 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6b  puts [llength $k
2b390 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74 63  eyword_list]</tc
2b3a0 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74 20  l> element.list 
2b3b0 69 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64  is not a keyword
2b3c0 20 74 6f 20 74 68 65 20 53 51 4c 20 70 61 72 73   to the SQL pars
2b3d0 65 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f  er in SQLite:.</
2b3e0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
2b3f0 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 31  .<table width="1
2b400 30 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c  00%"><tr>.<td al
2b410 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67  ign="left" valig
2b420 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32  n="top" width="2
2b430 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e  0%">.<tcl>.set n
2b440 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f   [llength $keywo
2b450 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f  rd_list].set nCo
2b460 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78  l 5.set nRow [ex
2b470 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29  pr {($n+$nCol-1)
2b480 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30  /$nCol}].set i 0
2b490 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24 6b  .foreach word $k
2b4a0 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20  eyword_list {.  
2b4b0 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b  if {$i==$nRow} {
2b4c0 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f  .    hd_puts "</
2b4d0 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22  td><td valign=\"
2b4e0 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65  top\" align=\"le
2b4f0 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25  ft\" width=\"20%
2b500 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31  \">".    set i 1
2b510 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
2b520 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f  incr i.  }.  hd_
2b530 70 75 74 73 20 22 24 77 6f 72 64 3c 62 72 3e 5c  puts "$word<br>\
2b540 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64  n".}.</tcl>.</td
2b550 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f  ></tr></table></
2b560 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a        blockquote>)^.