Documentation Source Text

Hex Artifact Content
Login

Artifact c6f37f6ecbcc6f90ed1a44f84a1cd1f1a6be4446:


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 63 6f 6d 6d 65 6e 74 20 63 6f  .    {comment co
03d0: 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c  mment}.    {EXPL
03e0: 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20  AIN explain}.   
03f0: 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70   {expression exp
0400: 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54  r}.    {{BEGIN T
0410: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0420: 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43  saction}.    {{C
0430: 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f  OMMIT TRANSACTIO
0440: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43  N} transaction C
0450: 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44  OMMIT}.    {{END
0460: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
0470: 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54  ansaction COMMIT
0480: 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b  }.    {{ROLLBACK
0490: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
04a0: 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41  ansaction ROLLBA
04b0: 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49  CK}.    {SAVEPOI
04c0: 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20  NT savepoint}.  
04d0: 20 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45    {{RELEASE SAVE
04e0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
04f0: 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20   SAVEPOINT}.    
0500: 7b 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68  {PRAGMA pragma.h
0510: 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f  tml}.    {{ON CO
0520: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
0530: 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43  onflict}.    {{C
0540: 52 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61  REATE VIEW} crea
0550: 74 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52  teview}.    {{DR
0560: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
0570: 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20  w}.    {{CREATE 
0580: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
0590: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52  rigger}.    {{DR
05a0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
05b0: 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41  trigger}.    {{A
05c0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  TTACH DATABASE} 
05d0: 61 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45  attach}.    {{DE
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
05f0: 65 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45  etach}.      {RE
0600: 49 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20  INDEX reindex}. 
0610: 20 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45     {{ALTER TABLE
0620: 7d 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20  } altertable}.  
0630: 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61    {{ANALYZE} ana
0640: 6c 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45  lyze}.    {{INDE
0650: 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62  XED BY} indexedb
0660: 79 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61  y}.    {{aggrega
0670: 74 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67  te functions} ag
0680: 67 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20  gfunc aggfunc}. 
0690: 20 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69     {{core functi
06a0: 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f  ons} corefunc co
06b0: 72 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61  refunc}.    {{da
06c0: 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
06d0: 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20  tions} datefunc 
06e0: 64 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b  datefunc}.    {k
06f0: 65 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73  eywords keywords
0700: 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d   {SQL keywords}}
0710: 0a 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f  .  }.  set lang_
0720: 73 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65  section_break [e
0730: 78 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24  xpr {([llength $
0740: 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73  lang_section_lis
0750: 74 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65  t]+2)/3}].  fore
0760: 61 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c  ach {section} [l
0770: 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64  sort -index 0 -d
0780: 69 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f  ictionary $lang_
0790: 73 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a  section_list] {.
07a0: 20 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74    foreach {s_tit
07b0: 6c 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24  le s_tag s_kw} $
07c0: 73 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20  section {}.  if 
07d0: 7b 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a  {$s_kw == ""} {.
07e0: 20 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f      set s_kw $s_
07f0: 74 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b  title.  }.  if {
0800: 24 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e  $s_tag=="pragma.
0810: 68 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74  html"} {.    set
0820: 20 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20   url $s_tag.  } 
0830: 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75  else {.    set u
0840: 72 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68  rl lang_$s_tag.h
0850: 74 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73  tml.  }.  hd_res
0860: 6f 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b  olve "<li>\[$s_k
0870: 77 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69  w|$s_title\]</li
0880: 3e 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66  >".  incr i.  if
0890: 20 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74   {$i==$lang_sect
08a0: 69 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d  ion_break || $i=
08b0: 3d 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e  =2*$lang_section
08c0: 5f 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64  _break} {.    hd
08d0: 5f 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64  _puts "</ul></td
08e0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  ><td valign=\"to
08f0: 70 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a  p\"><ul>".  }.}.
0900: 3c 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64  </tcl>.</ul></td
0910: 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a  ></tr></table>..
0920: 3c 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73  <p>^The routines
0930: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0940: 65 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65  e_v2()], [sqlite
0950: 33 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73  3_prepare()],.[s
0960: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
0970: 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72  ()], [sqlite3_pr
0980: 65 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a  epare16_v2()], .
0990: 5b 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d  [sqlite3_exec()]
09a0: 2c 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67  , and [sqlite3_g
09b0: 65 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65  et_table()] acce
09c0: 70 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  pt.an SQL statem
09d0: 65 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74  ent list (sql-st
09e0: 6d 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69  mt-list) which i
09f0: 73 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65  s a semicolon-se
0a00: 70 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20  parated.list of 
0a10: 73 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a  statements.</p>.
0a20: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
0a30: 72 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73  ram sql-stmt-lis
0a40: 74 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68  t</tcl>..<p>Each
0a50: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69   SQL statement i
0a60: 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
0a70: 6c 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61  list is an insta
0a80: 6e 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f  nce of the.follo
0a90: 77 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  wing:</p>..<tcl>
0aa0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71  BubbleDiagram sq
0ab0: 6c 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74  l-stmt</tcl>..<t
0ac0: 63 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f  cl>.proc Operato
0ad0: 72 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74  r {name} {.  ret
0ae0: 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72  urn "<font color
0af0: 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69  =\"#2c2cf0\"><bi
0b00: 67 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66  g>$name</big></f
0b10: 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e  ont>".}.proc Non
0b20: 74 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20  terminal {name} 
0b30: 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c  {.  return "<i><
0b40: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66  font color=\"#ff
0b50: 33 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f  3434\">$name</fo
0b60: 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20  nt></i>".}.proc 
0b70: 4b 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b  Keyword {name} {
0b80: 0a 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74  .  return "<font
0b90: 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30   color=\"#2c2cf0
0ba0: 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22  \">$name</font>"
0bb0: 0a 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20  .}.proc Example 
0bc0: 7b 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75  {text} {.  hd_pu
0bd0: 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  ts "<blockquote>
0be0: 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e  <pre>$text</pre>
0bf0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d  </blockquote>".}
0c00: 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b  ..proc Section {
0c10: 6e 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f  name label keywo
0c20: 72 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  rds} {.  global 
0c30: 44 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d  DOC.  hd_close_m
0c40: 61 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61  ain.  hd_open_ma
0c50: 69 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68  in lang_$label.h
0c60: 74 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20  tml.  hd_header 
0c70: 22 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61  "SQLite Query La
0c80: 6e 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24  nguage: $name" $
0c90: 44 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69  DOC/pages/lang.i
0ca0: 6e 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77  n.  eval hd_keyw
0cb0: 6f 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20  ords $keywords. 
0cc0: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b   if {[lsearch $k
0cd0: 65 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d  eywords $name] =
0ce0: 3d 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68  = -1 && [lsearch
0cf0: 20 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d   $keywords *$nam
0d00: 65 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20  e] == -1} {.    
0d10: 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73  eval hd_keywords
0d20: 20 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20   { $name }.  }. 
0d30: 20 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c   hd_puts {<h1 al
0d40: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c  ign="center">SQL
0d50: 20 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42   As Understood B
0d60: 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20  y SQLite</h1>}. 
0d70: 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20   hd_puts {<p><a 
0d80: 68 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22  href="lang.html"
0d90: 3e 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a  >[Top]</a></p>}.
0da0: 20 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24    hd_puts "<h2>$
0db0: 6e 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23  name</h2>".}..##
0dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65  #############.Se
0e10: 63 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42  ction {ALTER TAB
0e20: 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b  LE} altertable {
0e30: 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a  {ALTER TABLE} {*
0e40: 41 4c 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44  ALTER}}..BubbleD
0e50: 69 61 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62  iagram alter-tab
0e60: 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  le-stmt 1.</tcl>
0e70: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70  ..<p>SQLite supp
0e80: 6f 72 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73  orts a limited s
0e90: 75 62 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54  ubset of ALTER T
0ea0: 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20  ABLE..The ALTER 
0eb0: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  TABLE command in
0ec0: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74   SQLite allows t
0ed0: 68 65 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d  he user to renam
0ee0: 65 20 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20  e a table.or to 
0ef0: 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
0f00: 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20   to an existing 
0f10: 74 61 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74  table. It is not
0f20: 20 70 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e   possible.to ren
0f30: 61 6d 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 72 65  ame a column, re
0f40: 6d 6f 76 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f  move a column, o
0f50: 72 20 61 64 64 20 6f 72 20 72 65 6d 6f 76 65 20  r add or remove 
0f60: 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 72 6f 6d  constraints from
0f70: 20 61 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a   a table..</p>..
0f80: 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e 41 4d 45  <p> ^(The RENAME
0f90: 20 54 4f 20 73 79 6e 74 61 78 20 69 73 20 75 73   TO syntax is us
0fa0: 65 64 20 74 6f 20 72 65 6e 61 6d 65 20 74 68 65  ed to rename the
0fb0: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
0fc0: 64 20 62 79 20 0a 3c 69 3e 26 23 39 31 3b 64 61  d by .<i>&#91;da
0fd0: 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33  tabase-name.&#93
0fe0: 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  ;table-name</i> 
0ff0: 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62 6c 65 2d  to <i>new-table-
1000: 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54 68 69 73  name</i>.)^.This
1010: 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74   command .cannot
1020: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65   be used to move
1030: 20 61 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e   a table between
1040: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1050: 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e  ses, only to ren
1060: 61 6d 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74  ame .a table wit
1070: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
1080: 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  abase.</p>..<p> 
1090: 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20 62 65  ^If the table be
10a0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20  ing renamed has 
10b0: 74 72 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69  triggers or indi
10c0: 63 65 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20  ces, then these 
10d0: 72 65 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20  remain.attached 
10e0: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 66 74  to the table aft
10f0: 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20 72  er it has been r
1100: 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77 65 76 65  enamed.  ^Howeve
1110: 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  r, if there are.
1120: 61 6e 79 20 76 69 65 77 20 64 65 66 69 6e 69 74  any view definit
1130: 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65  ions, or stateme
1140: 6e 74 73 20 65 78 65 63 75 74 65 64 20 62 79 20  nts executed by 
1150: 74 72 69 67 67 65 72 73 20 74 68 61 74 20 72 65  triggers that re
1160: 66 65 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65  fer to.the table
1170: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20   being renamed, 
1180: 74 68 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75  these are not au
1190: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69  tomatically modi
11a0: 66 69 65 64 20 74 6f 20 75 73 65 20 74 68 65 20  fied to use the 
11b0: 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20  new.table name. 
11c0: 49 66 20 74 68 69 73 20 69 73 20 72 65 71 75 69  If this is requi
11d0: 72 65 64 2c 20 74 68 65 20 74 72 69 67 67 65 72  red, the trigger
11e0: 73 20 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69  s or view defini
11f0: 74 69 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72  tions must be.dr
1200: 6f 70 70 65 64 20 61 6e 64 20 72 65 63 72 65 61  opped and recrea
1210: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ted to use the n
1220: 65 77 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79  ew table name by
1230: 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   hand..</p>..<p>
1240: 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
1250: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
1260: 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  e .[foreign_keys
1270: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
1280: 64 5d 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20  d] when a table 
1290: 69 73 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e  is renamed, then
12a0: 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65   any.[foreign-ke
12b0: 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52  y-clause | REFER
12c0: 45 4e 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69  ENCES clauses] i
12d0: 6e 20 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74  n any table (eit
12e0: 68 65 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65  her the.table be
12f0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73  ing renamed or s
1300: 6f 6d 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29  ome other table)
1310: 0a 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74  .that refer to t
1320: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1330: 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66  enamed are modif
1340: 69 65 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f  ied to refer .to
1350: 20 74 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62   the renamed tab
1360: 6c 65 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61  le by its new na
1370: 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44  me...<p> ^The AD
1380: 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a  D COLUMN syntax.
1390: 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 61  is used to add a
13a0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   new column to a
13b0: 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
13c0: 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  ..^The new colum
13d0: 6e 20 69 73 20 61 6c 77 61 79 73 20 61 70 70 65  n is always appe
13e0: 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  nded to the end 
13f0: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  of the list of e
1400: 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  xisting columns.
1410: 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66  .The [column-def
1420: 5d 20 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74  ] rule defines t
1430: 68 65 20 63 68 61 72 61 63 74 65 72 69 73 74 69  he characteristi
1440: 63 73 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f  cs of the new co
1450: 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20  lumn..^(The new 
1460: 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20  column may take 
1470: 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73  any of the forms
1480: 20 70 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20   permissible in 
1490: 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  a [CREATE TABLE]
14a0: 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68  .statement, with
14b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
14c0: 65 73 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c  estrictions:)^.<
14d0: 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c  ul>.<li>^The col
14e0: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
14f0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f   a PRIMARY KEY o
1500: 72 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  r UNIQUE constra
1510: 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54  int.</li>.<li>^T
1520: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1530: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
1540: 20 76 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e   value of CURREN
1550: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
1560: 44 41 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45  DATE, .    CURRE
1570: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72  NT_TIMESTAMP, or
1580: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
1590: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f  n parentheses.</
15a0: 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f  li>.<li>^If a NO
15b0: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
15c0: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
15d0: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
15e0: 6d 75 73 74 20 68 61 76 65 20 61 0a 20 20 20 20  must have a.    
15f0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74  default value ot
1600: 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c  her than NULL..<
1610: 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  li>^If [foreign 
1620: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1630: 20 61 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65   are [foreign_ke
1640: 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62  ys pragma | enab
1650: 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63  led] and.    a c
1660: 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f  olumn with a [fo
1670: 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65  reign-key-clause
1680: 20 7c 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c   | REFERENCES cl
1690: 61 75 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64  ause].    is add
16a0: 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  ed, the column m
16b0: 75 73 74 20 68 61 76 65 20 61 20 64 65 66 61 75  ust have a defau
16c0: 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c  lt value of NULL
16d0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74  ..</ul>..<p>^Not
16e0: 65 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e  e also that when
16f0: 20 61 64 64 69 6e 67 20 61 20 5b 43 48 45 43 4b   adding a [CHECK
1700: 20 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68   constraint], th
1710: 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  e CHECK constrai
1720: 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64  nt.is not tested
1730: 20 61 67 61 69 6e 73 74 20 70 72 65 65 78 69 73   against preexis
1740: 74 69 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65  ting rows of the
1750: 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73 20 63 61   table..^This ca
1760: 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 74 61  n result in a ta
1770: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
1780: 73 20 64 61 74 61 20 74 68 61 74 0a 69 73 20 69  s data that.is i
1790: 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74  n violation of t
17a0: 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  he CHECK constra
17b0: 69 6e 74 2e 20 20 46 75 74 75 72 65 20 76 65 72  int.  Future ver
17c0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
17d0: 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 74 6f 20  might.change to 
17e0: 76 61 6c 69 64 61 74 65 20 43 48 45 43 4b 20 63  validate CHECK c
17f0: 6f 6e 73 74 72 61 69 6e 74 73 20 61 73 20 74 68  onstraints as th
1800: 65 79 20 61 72 65 20 61 64 64 65 64 2e 3c 2f 70  ey are added.</p
1810: 3e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 65 63 75  >..<p> The execu
1820: 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65  tion time of the
1830: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
1840: 6d 61 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64  mand is independ
1850: 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e  ent of.the amoun
1860: 74 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65  t of data in the
1870: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54   table.  The ALT
1880: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
1890: 20 72 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79   runs as quickly
18a0: 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68  .on a table with
18b0: 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73   10 million rows
18c0: 20 61 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61   as it does on a
18d0: 20 74 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f   table with 1 ro
18e0: 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65  w..</p>..<p>Afte
18f0: 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73  r ADD COLUMN has
1900: 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64   been run on a d
1910: 61 74 61 62 61 73 65 2c 20 74 68 61 74 20 64 61  atabase, that da
1920: 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a  tabase will not.
1930: 62 65 20 72 65 61 64 61 62 6c 65 20 62 79 20 53  be readable by S
1940: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1950: 31 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2e  1.3 and earlier.
1960: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
19c0: 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61  on {ANALYZE} ana
19d0: 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a 42 75  lyze ANALYZE..Bu
19e0: 62 62 6c 65 44 69 61 67 72 61 6d 20 61 6e 61 6c  bbleDiagram anal
19f0: 79 7a 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  yze-stmt 1.</tcl
1a00: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c  >..<p> ^The ANAL
1a10: 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68  YZE command gath
1a20: 65 72 73 20 73 74 61 74 69 73 74 69 63 73 20 61  ers statistics a
1a30: 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64 0a  bout tables and.
1a40: 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72  indices and stor
1a50: 65 73 20 74 68 65 20 63 6f 6c 6c 65 63 74 65 64  es the collected
1a60: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20   information.in 
1a70: 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73  [internal tables
1a80: 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
1a90: 65 20 77 68 65 72 65 20 74 68 65 20 71 75 65 72  e where the quer
1aa0: 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e 0a  y optimizer can.
1ab0: 61 63 63 65 73 73 20 74 68 65 20 69 6e 66 6f 72  access the infor
1ac0: 6d 61 74 69 6f 6e 20 61 6e 64 20 75 73 65 20 69  mation and use i
1ad0: 74 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20 62  t to help make b
1ae0: 65 74 74 65 72 20 71 75 65 72 79 20 70 6c 61 6e  etter query plan
1af0: 6e 69 6e 67 20 63 68 6f 69 63 65 73 2e 0a 5e 49  ning choices..^I
1b00: 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61  f no arguments a
1b10: 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 61 74  re given, all at
1b20: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1b30: 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20   are.analyzed.  
1b40: 5e 49 66 20 61 20 64 61 74 61 62 61 73 65 20 6e  ^If a database n
1b50: 61 6d 65 20 69 73 20 67 69 76 65 6e 20 61 73 20  ame is given as 
1b60: 74 68 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68  the argument, th
1b70: 65 6e 20 61 6c 6c 20 74 61 62 6c 65 73 0a 61 6e  en all tables.an
1b80: 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68 61  d indices in tha
1b90: 74 20 6f 6e 65 20 64 61 74 61 62 61 73 65 20 61  t one database a
1ba0: 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 0a 5e  re analyzed.  .^
1bb0: 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  If the argument 
1bc0: 69 73 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c  is a table name,
1bd0: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20   then only that 
1be0: 74 61 62 6c 65 20 61 6e 64 20 74 68 65 0a 69 6e  table and the.in
1bf0: 64 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64  dices associated
1c00: 20 77 69 74 68 20 74 68 61 74 20 74 61 62 6c 65   with that table
1c10: 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20   are analyzed.  
1c20: 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ^If the argument
1c30: 0a 69 73 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d  .is an index nam
1c40: 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61  e, then only tha
1c50: 74 20 6f 6e 65 20 69 6e 64 65 78 20 69 73 20 61  t one index is a
1c60: 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  nalyzed.</p>..<p
1c70: 3e 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 69  > ^The default i
1c80: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74  mplementation st
1c90: 6f 72 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74  ores all statist
1ca0: 69 63 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a  ics in a single.
1cb0: 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 5b 73 71  table named "[sq
1cc0: 6c 69 74 65 5f 73 74 61 74 31 5d 22 2e 20 20 5e  lite_stat1]".  ^
1cd0: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
1ce0: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a 5b  piled with the.[
1cf0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
1d00: 41 54 33 5d 20 6f 70 74 69 6f 6e 20 61 6e 64 20  AT3] option and 
1d10: 77 69 74 68 6f 75 74 20 74 68 65 20 5b 53 51 4c  without the [SQL
1d20: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
1d30: 5d 0a 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 61  ].option, then a
1d40: 64 64 69 74 69 6f 6e 61 6c 20 68 69 73 74 6f 67  dditional histog
1d50: 72 61 6d 20 64 61 74 61 20 69 73 0a 63 6f 6c 6c  ram data is.coll
1d60: 65 63 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64  ected and stored
1d70: 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73 74 61 74   in [sqlite_stat
1d80: 33 5d 2e 0a 20 5e 49 66 20 53 51 4c 69 74 65 20  3].. ^If SQLite 
1d90: 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
1da0: 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41   the.[SQLITE_ENA
1db0: 42 4c 45 5f 53 54 41 54 34 5d 20 6f 70 74 69 6f  BLE_STAT4] optio
1dc0: 6e 2c 20 74 68 65 6e 20 61 64 64 69 74 69 6f 6e  n, then addition
1dd0: 61 6c 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74  al histogram dat
1de0: 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65 64 20 61  a is.collected a
1df0: 6e 64 20 73 74 6f 72 65 64 20 69 6e 20 5b 73 71  nd stored in [sq
1e00: 6c 69 74 65 5f 73 74 61 74 34 5d 2e 0a 4f 6c 64  lite_stat4]..Old
1e10: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
1e20: 51 4c 69 74 65 20 77 6f 75 6c 64 20 6d 61 6b 65  QLite would make
1e30: 20 75 73 65 20 6f 66 20 74 68 65 20 5b 73 71 6c   use of the [sql
1e40: 69 74 65 5f 73 74 61 74 32 5d 20 74 61 62 6c 65  ite_stat2] table
1e50: 0a 77 68 65 6e 20 63 6f 6d 70 69 6c 65 64 20 77  .when compiled w
1e60: 69 74 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  ith [SQLITE_ENAB
1e70: 4c 45 5f 53 54 41 54 32 5d 20 62 75 74 20 61 6c  LE_STAT2] but al
1e80: 6c 20 72 65 63 65 6e 74 20 76 65 72 73 69 6f 6e  l recent version
1e90: 73 20 6f 66 0a 53 51 4c 69 74 65 20 69 67 6e 6f  s of.SQLite igno
1ea0: 72 65 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  re the sqlite_st
1eb0: 61 74 32 20 74 61 62 6c 65 2e 0a 46 75 74 75 72  at2 table..Futur
1ec0: 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6d  e enhancements m
1ed0: 61 79 20 63 72 65 61 74 65 0a 61 64 64 69 74 69  ay create.additi
1ee0: 6f 6e 61 6c 20 5b 69 6e 74 65 72 6e 61 6c 20 74  onal [internal t
1ef0: 61 62 6c 65 73 5d 20 77 69 74 68 20 74 68 65 20  ables] with the 
1f00: 73 61 6d 65 20 6e 61 6d 65 20 70 61 74 74 65 72  same name patter
1f10: 6e 20 65 78 63 65 70 74 20 77 69 74 68 0a 66 69  n except with.fi
1f20: 6e 61 6c 20 64 69 67 69 74 20 6c 61 72 67 65 72  nal digit larger
1f30: 20 74 68 61 6e 20 22 34 22 2e 3c 2f 70 3e 0a 0a   than "4".</p>..
1f40: 3c 70 3e 20 5e 54 68 65 20 5b 41 4c 54 45 52 20  <p> ^The [ALTER 
1f50: 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64  TABLE] command d
1f60: 6f 65 73 0a 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20  oes.not work on 
1f70: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
1f80: 20 6f 72 20 73 71 6c 69 74 65 5f 73 74 61 74 33   or sqlite_stat3
1f90: 20 74 61 62 6c 65 73 2c 0a 62 75 74 20 61 6c 6c   tables,.but all
1fa0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1fb0: 74 68 6f 73 65 20 74 61 62 6c 65 73 20 63 61 6e  those tables can
1fc0: 20 62 65 20 71 75 65 72 69 65 64 20 75 73 69 6e   be queried usin
1fd0: 67 20 5b 53 45 4c 45 43 54 5d 0a 61 6e 64 20 63  g [SELECT].and c
1fe0: 61 6e 20 62 65 20 64 65 6c 65 74 65 64 2c 20 61  an be deleted, a
1ff0: 75 67 6d 65 6e 74 65 64 2c 20 6f 72 20 6d 6f 64  ugmented, or mod
2000: 69 66 69 65 64 20 75 73 69 6e 67 20 74 68 65 20  ified using the 
2010: 5b 44 45 4c 45 54 45 5d 2c 0a 5b 49 4e 53 45 52  [DELETE],.[INSER
2020: 54 5d 2c 20 61 6e 64 20 5b 55 50 44 41 54 45 5d  T], and [UPDATE]
2030: 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e 28 54 68 65   commands..^(The
2040: 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 63 6f   [DROP TABLE] co
2050: 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 6f 6e 20 73  mmand works on s
2060: 71 6c 69 74 65 5f 73 74 61 74 31 20 61 6e 64 0a  qlite_stat1 and.
2070: 73 71 6c 69 74 65 5f 73 74 61 74 33 20 61 73 20  sqlite_stat3 as 
2080: 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  of SQLite versio
2090: 6e 20 33 2e 37 2e 39 2e 29 5e 0a 41 70 70 72 6f  n 3.7.9.)^.Appro
20a0: 70 72 69 61 74 65 20 63 61 72 65 20 73 68 6f 75  priate care shou
20b0: 6c 64 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  ld be used when 
20c0: 63 68 61 6e 67 69 6e 67 20 74 68 65 20 63 6f 6e  changing the con
20d0: 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61 74  tent of the stat
20e0: 69 73 74 69 63 73 0a 74 61 62 6c 65 73 20 61 73  istics.tables as
20f0: 20 69 6e 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74   invalid content
2100: 20 63 61 6e 20 63 61 75 73 65 20 53 51 4c 69 74   can cause SQLit
2110: 65 20 74 6f 20 73 65 6c 65 63 74 20 69 6e 65 66  e to select inef
2120: 66 69 63 69 65 6e 74 0a 71 75 65 72 79 20 70 6c  ficient.query pl
2130: 61 6e 73 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20  ans.  Generally 
2140: 73 70 65 61 6b 69 6e 67 2c 20 6f 6e 65 20 73 68  speaking, one sh
2150: 6f 75 6c 64 20 6e 6f 74 20 6d 6f 64 69 66 79 20  ould not modify 
2160: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 74  the content of.t
2170: 68 65 20 73 74 61 74 69 73 74 69 63 73 20 74 61  he statistics ta
2180: 62 6c 65 73 20 62 79 20 61 6e 79 20 6d 65 63 68  bles by any mech
2190: 61 6e 69 73 6d 20 6f 74 68 65 72 20 74 68 61 6e  anism other than
21a0: 20 69 6e 76 6f 6b 69 6e 67 20 74 68 65 0a 41 4e   invoking the.AN
21b0: 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  ALYZE command.  
21c0: 0a 53 65 65 20 22 5b 4d 61 6e 75 61 6c 20 43 6f  .See "[Manual Co
21d0: 6e 74 72 6f 6c 20 4f 66 20 51 75 65 72 79 20 50  ntrol Of Query P
21e0: 6c 61 6e 73 20 55 73 69 6e 67 20 53 51 4c 49 54  lans Using SQLIT
21f0: 45 5f 53 54 41 54 20 54 61 62 6c 65 73 5d 22 20  E_STAT Tables]" 
2200: 66 6f 72 0a 66 75 72 74 68 65 72 20 69 6e 66 6f  for.further info
2210: 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70  rmation.</p>..<p
2220: 3e 20 5e 53 74 61 74 69 73 74 69 63 73 20 67 61  > ^Statistics ga
2230: 74 68 65 72 65 64 20 62 79 20 41 4e 41 4c 59 5a  thered by ANALYZ
2240: 45 20 61 72 65 20 6e 6f 74 20 61 75 74 6f 6d 61  E are not automa
2250: 74 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64 20  tically updated 
2260: 61 73 0a 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  as.the content o
2270: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
2280: 68 61 6e 67 65 73 2e 20 20 49 66 20 74 68 65 20  hanges.  If the 
2290: 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64  content of the d
22a0: 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73 20  atabase.changes 
22b0: 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 2c 20 6f  significantly, o
22c0: 72 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  r if the databas
22d0: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
22e0: 2c 20 74 68 65 6e 20 6f 6e 65 20 73 68 6f 75 6c  , then one shoul
22f0: 64 0a 63 6f 6e 73 69 64 65 72 20 72 65 72 75 6e  d.consider rerun
2300: 6e 69 6e 67 20 74 68 65 20 41 4e 41 4c 59 5a 45  ning the ANALYZE
2310: 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f 72 64 65   command in orde
2320: 72 20 74 6f 20 75 70 64 61 74 65 20 74 68 65 20  r to update the 
2330: 73 74 61 74 69 73 74 69 63 73 2e 3c 2f 70 3e 0a  statistics.</p>.
2340: 0a 3c 70 3e 20 54 68 65 20 71 75 65 72 79 20 70  .<p> The query p
2350: 6c 61 6e 6e 65 72 20 6d 69 67 68 74 20 6e 6f 74  lanner might not
2360: 20 6e 6f 74 69 63 65 20 6d 61 6e 75 61 6c 20 63   notice manual c
2370: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 0a 73 71  hanges to the.sq
2380: 6c 69 74 65 5f 73 74 61 74 31 20 61 6e 64 2f 6f  lite_stat1 and/o
2390: 72 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  r sqlite_stat3 t
23a0: 61 62 6c 65 73 2e 20 20 5e 41 6e 20 61 70 70 6c  ables.  ^An appl
23b0: 69 63 61 74 69 6f 6e 0a 63 61 6e 20 66 6f 72 63  ication.can forc
23c0: 65 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  e the query plan
23d0: 6e 65 72 20 74 6f 20 72 65 72 65 61 64 20 74 68  ner to reread th
23e0: 65 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62  e statistics tab
23f0: 6c 65 73 20 62 79 20 72 75 6e 6e 69 6e 67 0a 3c  les by running.<
2400: 62 3e 41 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65  b>ANALYZE sqlite
2410: 5f 6d 61 73 74 65 72 3c 2f 62 3e 2e 20 3c 2f 70  _master</b>. </p
2420: 3e 0a 0a 3c 70 3e 20 0a 0a 3c 74 63 6c 3e 0a 23  >..<p> ..<tcl>.#
2430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2470: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
2480: 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44 41  ction {ATTACH DA
2490: 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20 2a  TABASE} attach *
24a0: 41 54 54 41 43 48 0a 0a 42 75 62 62 6c 65 44 69  ATTACH..BubbleDi
24b0: 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73 74 6d  agram attach-stm
24c0: 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  t 1.</tcl>..<p> 
24d0: 5e 54 68 65 20 41 54 54 41 43 48 20 44 41 54 41  ^The ATTACH DATA
24e0: 42 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61  BASE statement a
24f0: 64 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74 61  dds another data
2500: 62 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74 68  base .file to th
2510: 65 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61 62  e current [datab
2520: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e  ase connection].
2530: 20 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20   .^The filename 
2540: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
2550: 20 74 6f 20 62 65 20 61 74 74 61 63 68 65 64 20   to be attached 
2560: 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a  is the value of.
2570: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
2580: 68 61 74 20 6f 63 63 75 72 73 20 62 65 66 6f 72  hat occurs befor
2590: 65 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64  e the AS keyword
25a0: 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20  ..^The filename 
25b0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
25c0: 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d 65  follows the same
25d0: 20 73 65 6d 61 6e 74 69 63 73 20 61 73 20 74 68   semantics as th
25e0: 65 0a 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d  e.filename argum
25f0: 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f  ent to [sqlite3_
2600: 6f 70 65 6e 28 29 5d 20 61 6e 64 20 5b 73 71 6c  open()] and [sql
2610: 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 3b  ite3_open_v2()];
2620: 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61 6d   the.special nam
2630: 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 72  e "[:memory:]" r
2640: 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 5b 69 6e  esults in an [in
2650: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
2660: 5d 20 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20 73  ] and an.empty s
2670: 74 72 69 6e 67 20 72 65 73 75 6c 74 73 20 69 6e  tring results in
2680: 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72 79   a new temporary
2690: 20 64 61 74 61 62 61 73 65 2e 0a 5e 54 68 65 20   database..^The 
26a0: 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e  filename argumen
26b0: 74 20 63 61 6e 20 62 65 20 61 20 5b 55 52 49 20  t can be a [URI 
26c0: 66 69 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52 49  filename] if URI
26d0: 20 66 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65 73   filename proces
26e0: 73 69 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20 6f  sing.is enable o
26f0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  n the database c
2700: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
2710: 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
2720: 20 69 73 20 66 6f 72 0a 55 52 49 20 66 69 6c 65   is for.URI file
2730: 6e 61 6d 65 73 20 74 6f 20 62 65 20 64 69 73 61  names to be disa
2740: 62 6c 65 64 2c 20 68 6f 77 65 76 65 72 20 74 68  bled, however th
2750: 61 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  at might change 
2760: 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c 65  in a future rele
2770: 61 73 65 0a 6f 66 20 53 51 4c 69 74 65 2c 20 73  ase.of SQLite, s
2780: 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65  o application de
2790: 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64 76  velopers are adv
27a0: 69 73 65 64 20 74 6f 20 70 6c 61 6e 20 61 63 63  ised to plan acc
27b0: 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 54 68  ordingly...<p>Th
27c0: 65 20 6e 61 6d 65 20 74 68 61 74 20 6f 63 63 75  e name that occu
27d0: 72 73 20 61 66 74 65 72 20 74 68 65 20 41 53 20  rs after the AS 
27e0: 6b 65 79 77 6f 72 64 20 69 73 20 74 68 65 20 6e  keyword is the n
27f0: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
2800: 61 73 65 0a 75 73 65 64 20 69 6e 74 65 72 6e 61  ase.used interna
2810: 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 0a 5e  lly by SQLite..^
2820: 54 68 65 20 64 61 74 61 62 61 73 65 2d 6e 61 6d  The database-nam
2830: 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a 27  es 'main' and .'
2840: 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20 74  temp' refer to t
2850: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2860: 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61 73   and the databas
2870: 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d 70  e used for .temp
2880: 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 5e  orary tables.  ^
2890: 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d  The main and tem
28a0: 70 20 64 61 74 61 62 61 73 65 73 20 63 61 6e 6e  p databases cann
28b0: 6f 74 20 62 65 20 61 74 74 61 63 68 65 64 20 6f  ot be attached o
28c0: 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e 0a  r.detached.</p>.
28d0: 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20 69 6e  .<p> ^(Tables in
28e0: 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
28f0: 61 62 61 73 65 20 63 61 6e 20 62 65 20 72 65 66  abase can be ref
2900: 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20 74  erred to using t
2910: 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64 61  he syntax .<i>da
2920: 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62 6c  tabase-name.tabl
2930: 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e  e-name</i>.)^  ^
2940: 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  If the name of t
2950: 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69 71  he table is uniq
2960: 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61 74  ue.across all at
2970: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
2980: 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61 6e   and the main an
2990: 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 73  d temp databases
29a0: 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64 61  , then the.<i>da
29b0: 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20  tabase-name</i> 
29c0: 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 72 65  prefix is not re
29d0: 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74 77 6f  quired.  ^If two
29e0: 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
29f0: 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64 61 74  in.different dat
2a00: 61 62 61 73 65 73 20 68 61 76 65 20 74 68 65 20  abases have the 
2a10: 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74 68  same name and th
2a20: 65 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e  e .<i>database-n
2a30: 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69  ame</i> prefix i
2a40: 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61 20  s not used on a 
2a50: 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 2c  table reference,
2a60: 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65 20   then the.table 
2a70: 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f 6e  chosen is the on
2a80: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
2a90: 65 20 74 68 61 74 20 77 61 73 20 6c 65 61 73 74  e that was least
2aa0: 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63 68   recently attach
2ab0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72  ed.</p>..<p>.^Tr
2ac0: 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f 6c  ansactions invol
2ad0: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61 74  ving multiple at
2ae0: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
2af0: 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73 73   are atomic,.ass
2b00: 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20 6d  uming that the m
2b10: 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
2b20: 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22  not "[:memory:]"
2b30: 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72 6e   and the .[journ
2b40: 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74 20  al_mode] is not 
2b50: 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68 65  [WAL].  ^(If the
2b60: 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69   main.database i
2b70: 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72 20  s ":memory:" or 
2b80: 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d  if the journal_m
2b90: 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65 6e  ode is WAL, then
2ba0: 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63   .transactions c
2bb0: 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74  ontinue to be at
2bc0: 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63 68  omic within each
2bd0: 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61   individual.data
2be0: 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69  base file. But i
2bf0: 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75  f the host compu
2c00: 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20 74  ter crashes in t
2c10: 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b  he middle.of a [
2c20: 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77  COMMIT] where tw
2c30: 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61  o or more databa
2c40: 73 65 20 66 69 6c 65 73 20 61 72 65 20 75 70 64  se files are upd
2c50: 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68  ated,.some of th
2c60: 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20  ose files might 
2c70: 67 65 74 20 74 68 65 20 63 68 61 6e 67 65 73 20  get the changes 
2c80: 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67  where others.mig
2c90: 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a  ht not.)^.</p>..
2ca0: 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61 20  <p> ^There is a 
2cb0: 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67  limit, set using
2cc0: 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28   [sqlite3_limit(
2cd0: 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f  )] and .[SQLITE_
2ce0: 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c  LIMIT_ATTACHED],
2cf0: 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
2d00: 66 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  f databases that
2d10: 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e   can be.simultan
2d20: 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64 20  eously attached 
2d30: 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61  to a single data
2d40: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
2d50: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
2d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da0: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
2db0: 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53  ion {BEGIN TRANS
2dc0: 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74  ACTION} transact
2dd0: 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d  ion {*BEGIN COMM
2de0: 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 42 75  IT ROLLBACK}..Bu
2df0: 62 62 6c 65 44 69 61 67 72 61 6d 20 62 65 67 69  bbleDiagram begi
2e00: 6e 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61  n-stmt.BubbleDia
2e10: 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74  gram commit-stmt
2e20: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
2e30: 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74  ollback-stmt.</t
2e40: 63 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61  cl>..<p>.^No cha
2e50: 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65  nges can be made
2e60: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2e70: 20 65 78 63 65 70 74 20 77 69 74 68 69 6e 20 61   except within a
2e80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41   transaction..^A
2e90: 6e 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20  ny command that 
2ea0: 63 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61  changes the data
2eb0: 62 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c  base (basically,
2ec0: 20 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64   any SQL command
2ed0: 0a 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 45 4c  .other than [SEL
2ee0: 45 43 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d  ECT]) will autom
2ef0: 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20 61  atically start a
2f00: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a   transaction if.
2f10: 6f 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65 61  one is not alrea
2f20: 64 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20 5e  dy in effect.  ^
2f30: 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74  Automatically st
2f40: 61 72 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f  arted transactio
2f50: 6e 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64  ns.are committed
2f60: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 71   when the last q
2f70: 75 65 72 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c  uery finishes..<
2f80: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61  /p>..<p>.^Transa
2f90: 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74  ctions can be st
2fa0: 61 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75  arted manually u
2fb0: 73 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63  sing the BEGIN.c
2fc0: 6f 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68 20  ommand.  ^(Such 
2fd0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75  transactions usu
2fe0: 61 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74  ally persist unt
2ff0: 69 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d  il the next.COMM
3000: 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63  IT or ROLLBACK c
3010: 6f 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74  ommand.  But a t
3020: 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20  ransaction will 
3030: 61 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69  also .ROLLBACK i
3040: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
3050: 73 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61  s closed or if a
3060: 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61  n error occurs.a
3070: 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  nd the ROLLBACK 
3080: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
3090: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ion algorithm is
30a0: 20 73 70 65 63 69 66 69 65 64 2e 29 5e 0a 53 65   specified.)^.Se
30b0: 65 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74  e the documentat
30c0: 69 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43  ion on the [ON C
30d0: 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20  ONFLICT].clause 
30e0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
30f0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
3100: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f   the ROLLBACK.co
3110: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
3120: 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70  n algorithm..</p
3130: 3e 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e  >..<p>.^END TRAN
3140: 53 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c  SACTION is an al
3150: 69 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a  ias for COMMIT..
3160: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e  </p>..<p> ^(Tran
3170: 73 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64  sactions created
3180: 20 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43   using BEGIN...C
3190: 4f 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73  OMMIT do not nes
31a0: 74 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64  t.)^.^For nested
31b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75   transactions, u
31c0: 73 65 20 74 68 65 20 5b 53 41 56 45 50 4f 49 4e  se the [SAVEPOIN
31d0: 54 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d  T] and [RELEASE]
31e0: 20 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22   commands..The "
31f0: 54 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c 69 3e  TO SAVEPOINT <i>
3200: 6e 61 6d 65 3c 2f 69 3e 22 20 63 6c 61 75 73 65  name</i>" clause
3210: 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b   of the ROLLBACK
3220: 20 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a 69   command shown.i
3230: 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61  n the syntax dia
3240: 67 72 61 6d 20 61 62 6f 76 65 20 69 73 20 6f 6e  gram above is on
3250: 6c 79 20 61 70 70 6c 69 63 61 62 6c 65 20 74 6f  ly applicable to
3260: 20 5b 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72 61   [SAVEPOINT].tra
3270: 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e 20  nsactions.  ^An 
3280: 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f 6b  attempt to invok
3290: 65 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d 6d  e the BEGIN comm
32a0: 61 6e 64 20 77 69 74 68 69 6e 0a 61 20 74 72 61  and within.a tra
32b0: 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61  nsaction will fa
32c0: 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  il with an error
32d0: 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
32e0: 77 68 65 74 68 65 72 0a 74 68 65 20 74 72 61 6e  whether.the tran
32f0: 73 61 63 74 69 6f 6e 20 77 61 73 20 73 74 61 72  saction was star
3300: 74 65 64 20 62 79 20 5b 53 41 56 45 50 4f 49 4e  ted by [SAVEPOIN
3310: 54 5d 20 6f 72 20 61 20 70 72 69 6f 72 20 42 45  T] or a prior BE
3320: 47 49 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49 54  GIN..^The COMMIT
3330: 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68 65   command and the
3340: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
3350: 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f  d without the TO
3360: 20 63 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68 65   clause.work the
3370: 20 73 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50 4f   same on [SAVEPO
3380: 49 4e 54 5d 20 74 72 61 6e 73 61 63 74 69 6f 6e  INT] transaction
3390: 73 20 61 73 20 74 68 65 79 20 64 6f 20 77 69 74  s as they do wit
33a0: 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 73  h transactions.s
33b0: 74 61 72 74 65 64 20 62 79 20 42 45 47 49 4e 2e  tarted by BEGIN.
33c0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
33d0: 61 67 6d 65 6e 74 20 69 6d 6d 6d 65 64 69 61 74  agment immmediat
33e0: 65 20 7b 42 45 47 49 4e 20 49 4d 4d 45 44 49 41  e {BEGIN IMMEDIA
33f0: 54 45 7d 20 7b 42 45 47 49 4e 20 45 58 43 4c 55  TE} {BEGIN EXCLU
3400: 53 49 56 45 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 0a  SIVE}</tcl>.<p>.
3410: 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61  ^Transactions ca
3420: 6e 20 62 65 20 64 65 66 65 72 72 65 64 2c 20 69  n be deferred, i
3430: 6d 6d 65 64 69 61 74 65 2c 20 6f 72 20 65 78 63  mmediate, or exc
3440: 6c 75 73 69 76 65 2e 20 20 0a 5e 54 68 65 20 64  lusive.  .^The d
3450: 65 66 61 75 6c 74 20 74 72 61 6e 73 61 63 74 69  efault transacti
3460: 6f 6e 20 62 65 68 61 76 69 6f 72 20 69 73 20 64  on behavior is d
3470: 65 66 65 72 72 65 64 2e 0a 5e 44 65 66 65 72 72  eferred..^Deferr
3480: 65 64 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f  ed means that no
3490: 20 6c 6f 63 6b 73 20 61 72 65 20 61 63 71 75 69   locks are acqui
34a0: 72 65 64 0a 6f 6e 20 74 68 65 20 64 61 74 61 62  red.on the datab
34b0: 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20 64 61  ase until the da
34c0: 74 61 62 61 73 65 20 69 73 20 66 69 72 73 74 20  tabase is first 
34d0: 61 63 63 65 73 73 65 64 2e 20 20 5e 54 68 75 73  accessed.  ^Thus
34e0: 20 77 69 74 68 20 61 0a 64 65 66 65 72 72 65 64   with a.deferred
34f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
3500: 65 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65 6e  e BEGIN statemen
3510: 74 20 69 74 73 65 6c 66 20 64 6f 65 73 20 6e 6f  t itself does no
3520: 74 68 69 6e 67 20 74 6f 20 74 68 65 0a 66 69 6c  thing to the.fil
3530: 65 73 79 73 74 65 6d 2e 20 20 5e 4c 6f 63 6b 73  esystem.  ^Locks
3540: 0a 61 72 65 20 6e 6f 74 20 61 63 71 75 69 72 65  .are not acquire
3550: 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73  d until the firs
3560: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
3570: 6f 70 65 72 61 74 69 6f 6e 2e 20 20 5e 54 68 65  operation.  ^The
3580: 20 66 69 72 73 74 20 72 65 61 64 0a 6f 70 65 72   first read.oper
3590: 61 74 69 6f 6e 20 61 67 61 69 6e 73 74 20 61 20  ation against a 
35a0: 64 61 74 61 62 61 73 65 20 63 72 65 61 74 65 73  database creates
35b0: 20 61 20 5b 53 48 41 52 45 44 5d 20 6c 6f 63 6b   a [SHARED] lock
35c0: 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 0a 77   and the first.w
35d0: 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 63  rite operation c
35e0: 72 65 61 74 65 73 20 61 20 5b 52 45 53 45 52 56  reates a [RESERV
35f0: 45 44 5d 20 6c 6f 63 6b 2e 20 20 20 5e 42 65 63  ED] lock.   ^Bec
3600: 61 75 73 65 20 74 68 65 20 61 63 71 75 69 73 69  ause the acquisi
3610: 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73 20 69 73  tion of.locks is
3620: 20 64 65 66 65 72 72 65 64 20 75 6e 74 69 6c 20   deferred until 
3630: 74 68 65 79 20 61 72 65 20 6e 65 65 64 65 64 2c  they are needed,
3640: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
3650: 74 68 61 74 20 61 6e 6f 74 68 65 72 0a 74 68 72  that another.thr
3660: 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 63  ead or process c
3670: 6f 75 6c 64 20 63 72 65 61 74 65 20 61 20 73 65  ould create a se
3680: 70 61 72 61 74 65 20 74 72 61 6e 73 61 63 74 69  parate transacti
3690: 6f 6e 20 61 6e 64 20 77 72 69 74 65 20 74 6f 0a  on and write to.
36a0: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 66 74  the database aft
36b0: 65 72 20 74 68 65 20 42 45 47 49 4e 20 6f 6e 20  er the BEGIN on 
36c0: 74 68 65 20 63 75 72 72 65 6e 74 20 74 68 72 65  the current thre
36d0: 61 64 20 68 61 73 20 65 78 65 63 75 74 65 64 2e  ad has executed.
36e0: 0a 5e 49 66 20 74 68 65 20 74 72 61 6e 73 61 63  .^If the transac
36f0: 74 69 6f 6e 20 69 73 20 69 6d 6d 65 64 69 61 74  tion is immediat
3700: 65 2c 20 74 68 65 6e 20 5b 52 45 53 45 52 56 45  e, then [RESERVE
3710: 44 5d 20 6c 6f 63 6b 73 0a 61 72 65 20 61 63 71  D] locks.are acq
3720: 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74  uired on all dat
3730: 61 62 61 73 65 73 20 61 73 20 73 6f 6f 6e 20 61  abases as soon a
3740: 73 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d 6d  s the BEGIN comm
3750: 61 6e 64 20 69 73 0a 65 78 65 63 75 74 65 64 2c  and is.executed,
3760: 20 77 69 74 68 6f 75 74 20 77 61 69 74 69 6e 67   without waiting
3770: 20 66 6f 72 20 74 68 65 0a 64 61 74 61 62 61 73   for the.databas
3780: 65 20 74 6f 20 62 65 20 75 73 65 64 2e 20 20 5e  e to be used.  ^
3790: 41 66 74 65 72 20 61 20 42 45 47 49 4e 20 49 4d  After a BEGIN IM
37a0: 4d 45 44 49 41 54 45 2c 20 0a 6e 6f 20 6f 74 68  MEDIATE, .no oth
37b0: 65 72 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  er [database con
37c0: 6e 65 63 74 69 6f 6e 5d 20 77 69 6c 6c 20 62 65  nection] will be
37d0: 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74   able to write t
37e0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6f  o the database o
37f0: 72 0a 64 6f 20 61 20 42 45 47 49 4e 20 49 4d 4d  r.do a BEGIN IMM
3800: 45 44 49 41 54 45 20 6f 72 20 42 45 47 49 4e 20  EDIATE or BEGIN 
3810: 45 58 43 4c 55 53 49 56 45 2e 20 20 5e 4f 74 68  EXCLUSIVE.  ^Oth
3820: 65 72 20 70 72 6f 63 65 73 73 65 73 20 63 61 6e  er processes can
3830: 20 63 6f 6e 74 69 6e 75 65 0a 74 6f 20 72 65 61   continue.to rea
3840: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
3850: 61 73 65 2c 20 68 6f 77 65 76 65 72 2e 20 20 5e  ase, however.  ^
3860: 41 6e 20 65 78 63 6c 75 73 69 76 65 20 74 72 61  An exclusive tra
3870: 6e 73 61 63 74 69 6f 6e 20 63 61 75 73 65 73 0a  nsaction causes.
3880: 5b 45 58 43 4c 55 53 49 56 45 5d 20 6c 6f 63 6b  [EXCLUSIVE] lock
3890: 73 20 74 6f 20 62 65 20 61 63 71 75 69 72 65 64  s to be acquired
38a0: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
38b0: 73 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45 47  s.  ^After a BEG
38c0: 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c 20 6e 6f  IN.EXCLUSIVE, no
38d0: 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65   other [database
38e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 65 78 63   connection] exc
38f0: 65 70 74 20 66 6f 72 20 5b 72 65 61 64 5f 75 6e  ept for [read_un
3900: 63 6f 6d 6d 69 74 74 65 64 5d 0a 63 6f 6e 6e 65  committed].conne
3910: 63 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 61  ctions will be a
3920: 62 6c 65 20 74 6f 20 72 65 61 64 20 74 68 65 20  ble to read the 
3930: 64 61 74 61 62 61 73 65 20 61 6e 64 20 6e 6f 20  database and no 
3940: 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  other connection
3950: 20 77 69 74 68 6f 75 74 0a 65 78 63 65 70 74 69   without.excepti
3960: 6f 6e 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20  on will be able 
3970: 74 6f 20 77 72 69 74 65 20 74 68 65 20 64 61 74  to write the dat
3980: 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20  abase until the 
3990: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 63  transaction is.c
39a0: 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c  omplete..</p>..<
39b0: 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c 69 63 69 74  p>.^(An implicit
39c0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 28 61 20   transaction (a 
39d0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74  transaction that
39e0: 20 69 73 20 73 74 61 72 74 65 64 20 61 75 74 6f   is started auto
39f0: 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e 6f 74 20 61  matically,.not a
3a00: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
3a10: 72 74 65 64 20 62 79 20 42 45 47 49 4e 29 20 69  rted by BEGIN) i
3a20: 73 20 63 6f 6d 6d 69 74 74 65 64 20 61 75 74 6f  s committed auto
3a30: 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 0a 74  matically when.t
3a40: 68 65 20 6c 61 73 74 20 61 63 74 69 76 65 20 73  he last active s
3a50: 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65  tatement finishe
3a60: 73 2e 20 20 41 20 73 74 61 74 65 6d 65 6e 74 20  s.  A statement 
3a70: 66 69 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74  finishes when it
3a80: 73 0a 70 72 65 70 61 72 65 64 20 73 74 61 74 65  s.prepared state
3a90: 6d 65 6e 74 20 69 73 20 5b 73 71 6c 69 74 65 33  ment is [sqlite3
3aa0: 5f 72 65 73 65 74 28 29 20 7c 20 72 65 73 65 74  _reset() | reset
3ab0: 5d 20 6f 72 0a 5b 73 71 6c 69 74 65 33 5f 66 69  ] or.[sqlite3_fi
3ac0: 6e 61 6c 69 7a 65 28 29 20 7c 20 66 69 6e 61 6c  nalize() | final
3ad0: 69 7a 65 64 5d 2e 20 20 41 6e 20 6f 70 65 6e 20  ized].  An open 
3ae0: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 20 75  [sqlite3_blob] u
3af0: 73 65 64 20 66 6f 72 0a 69 6e 63 72 65 6d 65 6e  sed for.incremen
3b00: 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 20 63 6f 75  tal BLOB I/O cou
3b10: 6e 74 73 20 61 73 20 61 6e 20 75 6e 66 69 6e 69  nts as an unfini
3b20: 73 68 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20  shed statement. 
3b30: 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 62 6c   The [sqlite3_bl
3b40: 6f 62 5d 0a 66 69 6e 69 73 68 65 73 20 77 68 65  ob].finishes whe
3b50: 6e 20 69 74 20 69 73 20 5b 73 71 6c 69 74 65 33  n it is [sqlite3
3b60: 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 29 20 7c 20  _blob_close() | 
3b70: 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c 2f 70 3e 0a  closed].)^.</p>.
3b80: 0a 3c 70 3e 0a 5e 54 68 65 20 65 78 70 6c 69 63  .<p>.^The explic
3b90: 69 74 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  it COMMIT comman
3ba0: 64 20 72 75 6e 73 20 69 6d 6d 65 64 69 61 74 65  d runs immediate
3bb0: 6c 79 2c 20 65 76 65 6e 20 69 66 20 74 68 65 72  ly, even if ther
3bc0: 65 20 61 72 65 0a 70 65 6e 64 69 6e 67 20 5b 53  e are.pending [S
3bd0: 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
3be0: 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  s.  ^However, if
3bf0: 20 74 68 65 72 65 20 61 72 65 20 70 65 6e 64 69   there are pendi
3c00: 6e 67 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69  ng.write operati
3c10: 6f 6e 73 2c 20 74 68 65 20 43 4f 4d 4d 49 54 20  ons, the COMMIT 
3c20: 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c 20 66 61 69  command.will fai
3c30: 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20  l with an error 
3c40: 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f 42 55 53  code [SQLITE_BUS
3c50: 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 41  Y]..</p>..<p>.^A
3c60: 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 65 78 65  n attempt to exe
3c70: 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d 69 67 68  cute COMMIT migh
3c80: 74 20 61 6c 73 6f 20 72 65 73 75 6c 74 20 69 6e  t also result in
3c90: 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42 55 53 59   an [SQLITE_BUSY
3ca0: 5d 20 72 65 74 75 72 6e 20 63 6f 64 65 0a 69 66  ] return code.if
3cb0: 20 61 6e 20 61 6e 6f 74 68 65 72 20 74 68 72 65   an another thre
3cc0: 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 68 61  ad or process ha
3cd0: 73 20 61 20 5b 73 68 61 72 65 64 20 6c 6f 63 6b  s a [shared lock
3ce0: 5d 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  ] on the databas
3cf0: 65 0a 74 68 61 74 20 70 72 65 76 65 6e 74 65 64  e.that prevented
3d00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 72   the database fr
3d10: 6f 6d 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  om being updated
3d20: 2e 20 20 5e 57 68 65 6e 20 43 4f 4d 4d 49 54 20  .  ^When COMMIT 
3d30: 66 61 69 6c 73 20 69 6e 20 74 68 69 73 0a 77 61  fails in this.wa
3d40: 79 2c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  y, the transacti
3d50: 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76  on remains activ
3d60: 65 20 61 6e 64 20 74 68 65 20 43 4f 4d 4d 49 54  e and the COMMIT
3d70: 20 63 61 6e 20 62 65 20 72 65 74 72 69 65 64 20   can be retried 
3d80: 6c 61 74 65 72 0a 61 66 74 65 72 20 74 68 65 20  later.after the 
3d90: 72 65 61 64 65 72 20 68 61 73 20 68 61 64 20 61  reader has had a
3da0: 20 63 68 61 6e 63 65 20 74 6f 20 63 6c 65 61 72   chance to clear
3db0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65  ..</p>..<p>.^The
3dc0: 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 66   ROLLBACK will f
3dd0: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
3de0: 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f 42  r code [SQLITE_B
3df0: 55 53 59 5d 20 69 66 20 74 68 65 72 65 0a 61 72  USY] if there.ar
3e00: 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20 71 75  e any pending qu
3e10: 65 72 69 65 73 2e 20 20 5e 42 6f 74 68 20 72 65  eries.  ^Both re
3e20: 61 64 2d 6f 6e 6c 79 20 61 6e 64 20 72 65 61 64  ad-only and read
3e30: 2f 77 72 69 74 65 20 71 75 65 72 69 65 73 20 77  /write queries w
3e40: 69 6c 6c 0a 63 61 75 73 65 20 61 20 52 4f 4c 4c  ill.cause a ROLL
3e50: 42 41 43 4b 20 74 6f 20 66 61 69 6c 2e 20 20 41  BACK to fail.  A
3e60: 20 52 4f 4c 4c 42 41 43 4b 20 6d 75 73 74 20 66   ROLLBACK must f
3e70: 61 69 6c 20 69 66 20 74 68 65 72 65 20 61 72 65  ail if there are
3e80: 20 70 65 6e 64 69 6e 67 0a 72 65 61 64 20 6f 70   pending.read op
3e90: 65 72 61 74 69 6f 6e 73 20 28 75 6e 6c 69 6b 65  erations (unlike
3ea0: 20 43 4f 4d 4d 49 54 20 77 68 69 63 68 20 63 61   COMMIT which ca
3eb0: 6e 20 73 75 63 63 65 65 64 29 20 62 65 63 61 75  n succeed) becau
3ec0: 73 65 20 62 61 64 20 74 68 69 6e 67 73 0a 77 69  se bad things.wi
3ed0: 6c 6c 20 68 61 70 70 65 6e 20 69 66 20 74 68 65  ll happen if the
3ee0: 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 6d 61 67 65   in-memory image
3ef0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
3f00: 20 69 73 20 63 68 61 6e 67 65 64 20 6f 75 74 20   is changed out 
3f10: 66 72 6f 6d 20 75 6e 64 65 72 0a 61 6e 20 61 63  from under.an ac
3f20: 74 69 76 65 20 71 75 65 72 79 2e 0a 3c 2f 70 3e  tive query..</p>
3f30: 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41 47 4d 41  ..<p>.If [PRAGMA
3f40: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69   journal_mode] i
3f50: 73 20 73 65 74 20 74 6f 20 4f 46 46 20 28 74 68  s set to OFF (th
3f60: 75 73 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65  us disabling the
3f70: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
3f80: 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20 74 68 65  l.file) then the
3f90: 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65   behavior of the
3fa0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
3fb0: 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  d is undefined..
3fc0: 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 70 6f 6e  </p>..<h3>Respon
3fd0: 73 65 20 54 6f 20 45 72 72 6f 72 73 20 57 69 74  se To Errors Wit
3fe0: 68 69 6e 20 41 20 54 72 61 6e 73 61 63 74 69 6f  hin A Transactio
3ff0: 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28 49 66  n</h3>..<p> ^(If
4000: 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73 20 6f   certain kinds o
4010: 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72 20 77  f errors occur w
4020: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
4030: 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73 61 63  ion, the.transac
4040: 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61 79 20  tion may or may 
4050: 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20 62 61  not be rolled ba
4060: 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ck automatically
4070: 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20 74 68  .  The.errors th
4080: 61 74 20 63 61 75 73 65 20 74 68 65 20 62 65 68  at cause the beh
4090: 61 76 69 6f 72 20 69 6e 63 6c 75 64 65 3a 3c 2f  avior include:</
40a0: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53  p>..<ul>.<li> [S
40b0: 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74  QLITE_FULL]: dat
40c0: 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75  abase or disk fu
40d0: 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ll.<li> [SQLITE_
40e0: 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f  IOERR]: disk I/O
40f0: 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c   error.<li> [SQL
4100: 49 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62  ITE_BUSY]: datab
4110: 61 73 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e  ase in use by an
4120: 6f 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c  other process.<l
4130: 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  i> [SQLITE_NOMEM
4140: 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79  ]: out or memory
4150: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4e  .<li> [SQLITE_IN
4160: 54 45 52 52 55 50 54 5d 3a 20 70 72 6f 63 65 73  TERRUPT]: proces
4170: 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 69 6e  sing [sqlite3_in
4180: 74 65 72 72 75 70 74 7c 69 6e 74 65 72 72 75 70  terrupt|interrup
4190: 74 65 64 5d 0a 20 20 20 20 20 62 79 20 61 70 70  ted].     by app
41a0: 6c 69 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  lication request
41b0: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46  .</ul>)^..<p>.^F
41c0: 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20  or all of these 
41d0: 65 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61  errors, SQLite a
41e0: 74 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20  ttempts to undo 
41f0: 6a 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61  just the one sta
4200: 74 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f  tement.it was wo
4210: 72 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61  rking on and lea
4220: 76 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  ve changes from 
4230: 70 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73  prior statements
4240: 20 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65   within the.same
4250: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74   transaction int
4260: 61 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  act and continue
4270: 20 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61   with the transa
4280: 63 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72  ction.  ^However
4290: 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  , .depending on 
42a0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
42b0: 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e  ing evaluated an
42c0: 64 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77  d the point at w
42d0: 68 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f  hich the.error o
42e0: 63 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20  ccurs, it might 
42f0: 62 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72  be necessary for
4300: 20 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62   SQLite to rollb
4310: 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74  ack and.cancel t
4320: 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  he entire transa
4330: 63 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c  ction.  ^An appl
4340: 69 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c  ication can tell
4350: 20 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66   which.course of
4360: 20 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74   action SQLite t
4370: 6f 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65  ook by using the
4380: 0a 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  .[sqlite3_get_au
4390: 74 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61  tocommit()] C-la
43a0: 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65  nguage interface
43b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20  .</p>..<p>It is 
43c0: 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74  recommended that
43d0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65   applications re
43e0: 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72  spond to the err
43f0: 6f 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65  ors.listed above
4400: 20 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69   by explicitly i
4410: 73 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43  ssuing a ROLLBAC
4420: 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20  K command.  ^If 
4430: 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e  the .transaction
4440: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
4450: 6e 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75  n rolled back au
4460: 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74  tomatically.by t
4470: 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73  he error respons
4480: 65 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  e, then the ROLL
4490: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c  BACK command wil
44a0: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65  l fail with an.e
44b0: 72 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72  rror, but no har
44c0: 6d 20 69 73 20 63 61 75 73 65 64 20 62 79 20 74  m is caused by t
44d0: 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74  his.</p>..<p>Fut
44e0: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
44f0: 53 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e  SQLite may exten
4500: 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72  d the list of er
4510: 72 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74  rors which.might
4520: 20 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63   cause automatic
4530: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c   transaction rol
4540: 6c 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76  lback.  Future v
4550: 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74  ersions of.SQLit
4560: 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74  e might change t
4570: 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73  he error respons
4580: 65 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61  e.  In particula
4590: 72 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65  r, we may.choose
45a0: 20 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65   to simplify the
45b0: 20 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75   interface in fu
45c0: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
45d0: 20 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69   SQLite by.causi
45e0: 6e 67 20 74 68 65 20 65 72 72 6f 72 73 20 61 62  ng the errors ab
45f0: 6f 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20  ove to force an 
4600: 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f  unconditional ro
4610: 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63  llback.</p>..<tc
4620: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
4630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4670: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45  ##.Section {SAVE
4680: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
4690: 20 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45   {SAVEPOINT RELE
46a0: 41 53 45 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  ASE}..BubbleDiag
46b0: 72 61 6d 20 73 61 76 65 70 6f 69 6e 74 2d 73 74  ram savepoint-st
46c0: 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  mt.BubbleDiagram
46d0: 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a 42 75   release-stmt.Bu
46e0: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c  bbleDiagram roll
46f0: 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  back-stmt.</tcl>
4700: 0a 0a 3c 70 3e 20 5e 53 41 56 45 50 4f 49 4e 54  ..<p> ^SAVEPOINT
4710: 73 20 61 72 65 20 61 20 6d 65 74 68 6f 64 20 6f  s are a method o
4720: 66 20 63 72 65 61 74 69 6e 67 20 74 72 61 6e 73  f creating trans
4730: 61 63 74 69 6f 6e 73 2c 20 73 69 6d 69 6c 61 72  actions, similar
4740: 20 74 6f 0a 5b 42 45 47 49 4e 5d 20 61 6e 64 20   to.[BEGIN] and 
4750: 5b 43 4f 4d 4d 49 54 5d 2c 20 65 78 63 65 70 74  [COMMIT], except
4760: 20 74 68 61 74 20 74 68 65 20 53 41 56 45 50 4f   that the SAVEPO
4770: 49 4e 54 20 61 6e 64 20 52 45 4c 45 41 53 45 20  INT and RELEASE 
4780: 63 6f 6d 6d 61 6e 64 73 0a 61 72 65 20 6e 61 6d  commands.are nam
4790: 65 64 20 61 6e 64 20 6d 61 79 20 62 65 20 6e 65  ed and may be ne
47a0: 73 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  sted.</p>..<p> ^
47b0: 54 68 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f  The SAVEPOINT co
47c0: 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 61 20 6e  mmand starts a n
47d0: 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  ew transaction w
47e0: 69 74 68 20 61 20 6e 61 6d 65 2e 0a 5e 54 68 65  ith a name..^The
47f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 61 6d   transaction nam
4800: 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 75  es need not be u
4810: 6e 69 71 75 65 2e 0a 5e 28 41 20 53 41 56 45 50  nique..^(A SAVEP
4820: 4f 49 4e 54 20 63 61 6e 20 62 65 20 73 74 61 72  OINT can be star
4830: 74 65 64 20 65 69 74 68 65 72 20 77 69 74 68 69  ted either withi
4840: 6e 20 6f 72 20 6f 75 74 73 69 64 65 20 6f 66 0a  n or outside of.
4850: 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d  a [BEGIN]...[COM
4860: 4d 49 54 5d 2e 29 5e 20 20 5e 28 57 68 65 6e 20  MIT].)^  ^(When 
4870: 61 20 53 41 56 45 50 4f 49 4e 54 20 69 73 20 74  a SAVEPOINT is t
4880: 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 20 73 61  he outer-most sa
4890: 76 65 70 6f 69 6e 74 0a 61 6e 64 20 69 74 20 69  vepoint.and it i
48a0: 73 20 6e 6f 74 20 77 69 74 68 69 6e 20 61 20 5b  s not within a [
48b0: 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54  BEGIN]...[COMMIT
48c0: 5d 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  ] then the behav
48d0: 69 6f 72 20 69 73 20 74 68 65 0a 73 61 6d 65 20  ior is the.same 
48e0: 61 73 20 42 45 47 49 4e 20 44 45 46 45 52 52 45  as BEGIN DEFERRE
48f0: 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 2e 29 5e  D TRANSACTION.)^
4900: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f  </p>..<p>^The RO
4910: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
4920: 64 20 72 65 76 65 72 74 73 20 74 68 65 20 73 74  d reverts the st
4930: 61 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ate of the datab
4940: 61 73 65 20 62 61 63 6b 20 74 6f 20 77 68 61 74  ase back to what
4950: 0a 69 74 20 77 61 73 20 6a 75 73 74 20 61 66 74  .it was just aft
4960: 65 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  er the correspon
4970: 64 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 2e 20  ding SAVEPOINT. 
4980: 20 5e 4e 6f 74 65 20 74 68 61 74 20 75 6e 6c 69   ^Note that unli
4990: 6b 65 20 74 68 61 74 0a 70 6c 61 69 6e 20 5b 52  ke that.plain [R
49a0: 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64  OLLBACK] command
49b0: 20 28 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f   (without the TO
49c0: 20 6b 65 79 77 6f 72 64 29 20 74 68 65 20 52 4f   keyword) the RO
49d0: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
49e0: 64 0a 64 6f 65 73 20 6e 6f 74 20 63 61 6e 63 65  d.does not cance
49f0: 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  l the transactio
4a00: 6e 2e 20 20 5e 49 6e 73 74 65 61 64 20 6f 66 20  n.  ^Instead of 
4a10: 63 61 6e 63 65 6c 6c 69 6e 67 20 74 68 65 20 74  cancelling the t
4a20: 72 61 6e 73 61 63 74 69 6f 6e 2c 0a 74 68 65 20  ransaction,.the 
4a30: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d  ROLLBACK TO comm
4a40: 61 6e 64 20 72 65 73 74 61 72 74 73 20 74 68 65  and restarts the
4a50: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 67 61   transaction aga
4a60: 69 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  in at the beginn
4a70: 69 6e 67 2e 0a 5e 41 6c 6c 20 69 6e 74 65 72 76  ing..^All interv
4a80: 65 6e 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 73  ening SAVEPOINTs
4a90: 20 61 72 65 20 63 61 6e 63 65 6c 65 64 2c 20 68   are canceled, h
4aa0: 6f 77 65 76 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  owever.</p>..<p>
4ab0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
4ac0: 6d 61 6e 64 20 69 73 20 6c 69 6b 65 20 61 20 5b  mand is like a [
4ad0: 43 4f 4d 4d 49 54 5d 20 66 6f 72 20 61 20 53 41  COMMIT] for a SA
4ae0: 56 45 50 4f 49 4e 54 2e 0a 5e 54 68 65 20 52 45  VEPOINT..^The RE
4af0: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61  LEASE command ca
4b00: 75 73 65 73 20 61 6c 6c 20 73 61 76 65 70 6f 69  uses all savepoi
4b10: 6e 74 73 20 62 61 63 6b 20 74 6f 20 61 6e 64 20  nts back to and 
4b20: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 0a 6d  including the .m
4b30: 6f 73 74 20 72 65 63 65 6e 74 20 73 61 76 65 70  ost recent savep
4b40: 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61 74 63  oint with a matc
4b50: 68 69 6e 67 20 6e 61 6d 65 20 74 6f 20 62 65 20  hing name to be 
4b60: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
4b70: 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74   .transaction st
4b80: 61 63 6b 2e 20 20 5e 54 68 65 20 52 45 4c 45 41  ack.  ^The RELEA
4b90: 53 45 20 6f 66 20 61 6e 20 69 6e 6e 65 72 20 74  SE of an inner t
4ba0: 72 61 6e 73 61 63 74 69 6f 6e 0a 64 6f 65 73 20  ransaction.does 
4bb0: 6e 6f 74 20 63 61 75 73 65 20 61 6e 79 20 63 68  not cause any ch
4bc0: 61 6e 67 65 73 20 74 6f 20 62 65 20 77 72 69 74  anges to be writ
4bd0: 74 65 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62  ten to the datab
4be0: 61 73 65 20 66 69 6c 65 3b 20 69 74 20 6d 65 72  ase file; it mer
4bf0: 65 6c 79 0a 72 65 6d 6f 76 65 73 20 73 61 76 65  ely.removes save
4c00: 70 6f 69 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  points from the 
4c10: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
4c20: 6b 20 73 75 63 68 20 74 68 61 74 20 69 74 20 69  k such that it i
4c30: 73 0a 6e 6f 20 6c 6f 6e 67 65 72 20 70 6f 73 73  s.no longer poss
4c40: 69 62 6c 65 20 74 6f 20 52 4f 4c 4c 42 41 43 4b  ible to ROLLBACK
4c50: 20 54 4f 20 74 68 6f 73 65 20 73 61 76 65 70 6f   TO those savepo
4c60: 69 6e 74 73 2e 0a 5e 49 66 20 61 20 52 45 4c 45  ints..^If a RELE
4c70: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65  ASE command rele
4c80: 61 73 65 73 20 74 68 65 20 6f 75 74 65 72 6d 6f  ases the outermo
4c90: 73 74 20 73 61 76 65 70 6f 69 6e 74 2c 20 73 6f  st savepoint, so
4ca0: 0a 74 68 61 74 20 74 68 65 20 74 72 61 6e 73 61  .that the transa
4cb0: 63 74 69 6f 6e 20 73 74 61 63 6b 20 62 65 63 6f  ction stack beco
4cc0: 6d 65 73 20 65 6d 70 74 79 2c 20 74 68 65 6e 20  mes empty, then 
4cd0: 52 45 4c 45 41 53 45 20 69 73 20 74 68 65 20 73  RELEASE is the s
4ce0: 61 6d 65 0a 61 73 20 5b 43 4f 4d 4d 49 54 5d 2e  ame.as [COMMIT].
4cf0: 0a 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63  .^The [COMMIT] c
4d00: 6f 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20 75 73  ommand may be us
4d10: 65 64 20 74 6f 20 72 65 6c 65 61 73 65 20 61 6c  ed to release al
4d20: 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 61 6e 64  l savepoints and
4d30: 0a 63 6f 6d 6d 69 74 20 74 68 65 20 74 72 61 6e  .commit the tran
4d40: 73 61 63 74 69 6f 6e 20 65 76 65 6e 20 69 66 20  saction even if 
4d50: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4d60: 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73  was originally s
4d70: 74 61 72 74 65 64 0a 62 79 20 61 20 53 41 56 45  tarted.by a SAVE
4d80: 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 69 6e  POINT command in
4d90: 73 74 65 61 64 20 6f 66 20 61 20 5b 42 45 47 49  stead of a [BEGI
4da0: 4e 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  N] command.</p>.
4db0: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 73 61 76 65  .<p>^If the save
4dc0: 70 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20  point-name in a 
4dd0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4de0: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61  does not match a
4df0: 6e 79 0a 73 61 76 65 70 6f 69 6e 74 20 63 75 72  ny.savepoint cur
4e00: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 74 72  rently in the tr
4e10: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c  ansaction stack,
4e20: 20 74 68 65 6e 20 6e 6f 20 73 61 76 65 70 6f 69   then no savepoi
4e30: 6e 74 73 20 61 72 65 0a 72 65 6c 65 61 73 65 64  nts are.released
4e40: 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  , the database i
4e50: 73 20 75 6e 63 68 61 6e 67 65 64 2c 20 61 6e 64  s unchanged, and
4e60: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
4e70: 6d 61 6e 64 20 72 65 74 75 72 6e 73 0a 61 6e 20  mand returns.an 
4e80: 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  error.</p>..<p>^
4e90: 4e 6f 74 65 20 74 68 61 74 20 61 6e 20 69 6e 6e  Note that an inn
4ea0: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  er transaction m
4eb0: 69 67 68 74 20 63 6f 6d 6d 69 74 20 28 75 73 69  ight commit (usi
4ec0: 6e 67 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ng the RELEASE c
4ed0: 6f 6d 6d 61 6e 64 29 0a 62 75 74 20 74 68 65 6e  ommand).but then
4ee0: 20 6c 61 74 65 72 20 68 61 76 65 20 69 74 73 20   later have its 
4ef0: 77 6f 72 6b 20 75 6e 64 6f 6e 65 20 62 79 20 61  work undone by a
4f00: 20 52 4f 4c 4c 42 41 43 4b 20 69 6e 20 61 6e 20   ROLLBACK in an 
4f10: 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f  outer transactio
4f20: 6e 2e 0a 5e 41 20 70 6f 77 65 72 20 66 61 69 6c  n..^A power fail
4f30: 75 72 65 20 6f 72 20 70 72 6f 67 72 61 6d 20 63  ure or program c
4f40: 72 61 73 68 20 6f 72 20 4f 53 20 63 72 61 73 68  rash or OS crash
4f50: 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20   will cause the 
4f60: 6f 75 74 65 72 2d 6d 6f 73 74 0a 74 72 61 6e 73  outer-most.trans
4f70: 61 63 74 69 6f 6e 20 74 6f 20 72 6f 6c 6c 62 61  action to rollba
4f80: 63 6b 2c 20 75 6e 64 6f 69 6e 67 20 61 6c 6c 20  ck, undoing all 
4f90: 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76  changes that hav
4fa0: 65 20 6f 63 63 75 72 72 65 64 20 77 69 74 68 69  e occurred withi
4fb0: 6e 0a 74 68 61 74 20 6f 75 74 65 72 20 74 72 61  n.that outer tra
4fc0: 6e 73 61 63 74 69 6f 6e 2c 20 65 76 65 6e 20 63  nsaction, even c
4fd0: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
4fe0: 20 73 75 70 70 6f 73 65 64 6c 79 20 62 65 65 6e   supposedly been
4ff0: 20 22 63 6f 6d 6d 69 74 74 65 64 22 0a 62 79 20   "committed".by 
5000: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
5010: 61 6e 64 2e 20 20 5e 43 6f 6e 74 65 6e 74 20 69  and.  ^Content i
5020: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 63  s not actually c
5030: 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20  ommitted on the 
5040: 64 69 73 6b 20 0a 75 6e 74 69 6c 20 74 68 65 20  disk .until the 
5050: 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73 61  outermost transa
5060: 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f  ction commits.</
5070: 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  p>..<p>There are
5080: 20 73 65 76 65 72 61 6c 20 77 61 79 73 20 6f 66   several ways of
5090: 20 74 68 69 6e 6b 69 6e 67 20 61 62 6f 75 74 20   thinking about 
50a0: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
50b0: 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c  and:</p>..<ul>.<
50c0: 6c 69 3e 3c 70 3e 0a 53 6f 6d 65 20 70 65 6f 70  li><p>.Some peop
50d0: 6c 65 20 76 69 65 77 20 52 45 4c 45 41 53 45 20  le view RELEASE 
50e0: 61 73 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  as the equivalen
50f0: 74 20 6f 66 20 43 4f 4d 4d 49 54 20 66 6f 72 20  t of COMMIT for 
5100: 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 54 68 69  a SAVEPOINT..Thi
5110: 73 20 69 73 20 61 6e 20 61 63 63 65 70 74 61 62  s is an acceptab
5120: 6c 65 20 70 6f 69 6e 74 20 6f 66 20 76 69 65 77  le point of view
5130: 20 61 73 20 6c 6f 6e 67 20 61 73 20 6f 6e 65 20   as long as one 
5140: 72 65 6d 65 6d 62 65 72 73 20 74 68 61 74 20 74  remembers that t
5150: 68 65 0a 63 68 61 6e 67 65 73 20 63 6f 6d 6d 69  he.changes commi
5160: 74 74 65 64 20 62 79 20 61 6e 20 69 6e 6e 65 72  tted by an inner
5170: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67   transaction mig
5180: 68 74 20 6c 61 74 65 72 20 62 65 20 75 6e 64 6f  ht later be undo
5190: 6e 65 20 62 79 20 61 0a 72 6f 6c 6c 62 61 63 6b  ne by a.rollback
51a0: 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61   in an outer tra
51b0: 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c  nsaction.</p></l
51c0: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41 6e 6f 74  i>..<li><p>.Anot
51d0: 68 65 72 20 76 69 65 77 20 6f 66 20 52 45 4c 45  her view of RELE
51e0: 41 53 45 20 69 73 20 74 68 61 74 20 69 74 20 6d  ASE is that it m
51f0: 65 72 67 65 73 20 61 20 6e 61 6d 65 64 20 74 72  erges a named tr
5200: 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 6f 20 69  ansaction into i
5210: 74 73 0a 70 61 72 65 6e 74 20 74 72 61 6e 73 61  ts.parent transa
5220: 63 74 69 6f 6e 2c 20 73 6f 20 74 68 61 74 20 74  ction, so that t
5230: 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63  he named transac
5240: 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 72  tion and its par
5250: 65 6e 74 20 62 65 63 6f 6d 65 0a 74 68 65 20 73  ent become.the s
5260: 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ame transaction.
5270: 20 20 41 66 74 65 72 20 52 45 4c 45 41 53 45 2c    After RELEASE,
5280: 20 74 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73   the named trans
5290: 61 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70  action and its p
52a0: 61 72 65 6e 74 0a 77 69 6c 6c 20 63 6f 6d 6d 69  arent.will commi
52b0: 74 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 6f  t or rollback to
52c0: 67 65 74 68 65 72 2c 20 77 68 61 74 65 76 65 72  gether, whatever
52d0: 20 74 68 65 69 72 20 66 61 74 65 20 6d 61 79 20   their fate may 
52e0: 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  be..</p></li>..<
52f0: 6c 69 3e 3c 70 3e 0a 4f 6e 65 20 63 61 6e 20 61  li><p>.One can a
5300: 6c 73 6f 20 74 68 69 6e 6b 20 6f 66 20 73 61 76  lso think of sav
5310: 65 70 6f 69 6e 74 73 20 61 73 0a 22 6d 61 72 6b  epoints as."mark
5320: 73 22 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61  s" in the transa
5330: 63 74 69 6f 6e 20 74 69 6d 65 6c 69 6e 65 2e 20  ction timeline. 
5340: 20 49 6e 20 74 68 69 73 20 76 69 65 77 2c 20 74   In this view, t
5350: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d  he SAVEPOINT com
5360: 6d 61 6e 64 0a 63 72 65 61 74 65 73 20 61 20 6e  mand.creates a n
5370: 65 77 20 6d 61 72 6b 2c 20 74 68 65 20 52 4f 4c  ew mark, the ROL
5380: 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64  LBACK TO command
5390: 20 72 65 77 69 6e 64 73 20 74 68 65 20 74 69 6d   rewinds the tim
53a0: 65 6c 69 6e 65 20 62 61 63 6b 0a 74 6f 20 61 20  eline back.to a 
53b0: 70 6f 69 6e 74 20 6a 75 73 74 20 61 66 74 65 72  point just after
53c0: 20 74 68 65 20 6e 61 6d 65 64 20 6d 61 72 6b 2c   the named mark,
53d0: 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45   and the RELEASE
53e0: 20 63 6f 6d 6d 61 6e 64 0a 65 72 61 73 65 73 20   command.erases 
53f0: 6d 61 72 6b 73 20 66 72 6f 6d 20 74 68 65 20 74  marks from the t
5400: 69 6d 65 6c 69 6e 65 20 77 69 74 68 6f 75 74 20  imeline without 
5410: 61 63 74 75 61 6c 6c 79 20 6d 61 6b 69 6e 67 20  actually making 
5420: 61 6e 79 0a 63 68 61 6e 67 65 73 20 74 6f 20 74  any.changes to t
5430: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 3c 2f 70  he database..</p
5440: 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a  ></li>.</ul>....
5450: 3c 68 33 3e 54 72 61 6e 73 61 63 74 69 6f 6e 20  <h3>Transaction 
5460: 4e 65 73 74 69 6e 67 20 52 75 6c 65 73 3c 2f 68  Nesting Rules</h
5470: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 61 73 74  3>..<p>^The last
5480: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
5490: 72 74 65 64 20 77 69 6c 6c 20 62 65 20 74 68 65  rted will be the
54a0: 20 66 69 72 73 74 0a 74 72 61 6e 73 61 63 74 69   first.transacti
54b0: 6f 6e 20 63 6f 6d 6d 69 74 74 65 64 20 6f 72 20  on committed or 
54c0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 3c 2f 70 3e  rolled back.</p>
54d0: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 42 45 47 49 4e  ..<p>^The [BEGIN
54e0: 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 77  ] command only w
54f0: 6f 72 6b 73 20 69 66 20 74 68 65 20 74 72 61 6e  orks if the tran
5500: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 69 73  saction stack is
5510: 20 65 6d 70 74 79 2c 20 6f 72 0a 69 6e 20 6f 74   empty, or.in ot
5520: 68 65 72 20 77 6f 72 64 73 20 69 66 20 74 68 65  her words if the
5530: 72 65 20 61 72 65 20 6e 6f 20 70 65 6e 64 69 6e  re are no pendin
5540: 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  g transactions. 
5550: 20 5e 49 66 20 74 68 65 20 74 72 61 6e 73 61 63   ^If the transac
5560: 74 69 6f 6e 0a 73 74 61 63 6b 20 69 73 20 6e 6f  tion.stack is no
5570: 74 20 65 6d 70 74 79 20 77 68 65 6e 20 74 68 65  t empty when the
5580: 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64   [BEGIN] command
5590: 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 65   is invoked, the
55a0: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 66 61  n the command.fa
55b0: 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ils with an erro
55c0: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
55d0: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
55e0: 20 63 6f 6d 6d 69 74 73 20 61 6c 6c 20 6f 75 74   commits all out
55f0: 73 74 61 6e 64 69 6e 67 20 74 72 61 6e 73 61 63  standing transac
5600: 74 69 6f 6e 73 20 61 6e 64 20 6c 65 61 76 65 73  tions and leaves
5610: 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  .the transaction
5620: 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70   stack empty.</p
5630: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41  >..<p>^The RELEA
5640: 53 45 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74  SE command start
5650: 73 20 77 69 74 68 20 74 68 65 20 6d 6f 73 74 20  s with the most 
5660: 72 65 63 65 6e 74 20 61 64 64 69 74 69 6f 6e 20  recent addition 
5670: 74 6f 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69  to the.transacti
5680: 6f 6e 20 73 74 61 63 6b 20 61 6e 64 20 72 65 6c  on stack and rel
5690: 65 61 73 65 73 20 73 61 76 65 70 6f 69 6e 74 73  eases savepoints
56a0: 20 62 61 63 6b 77 61 72 64 73 20 0a 69 6e 20 74   backwards .in t
56b0: 69 6d 65 20 75 6e 74 69 6c 20 69 74 20 72 65 6c  ime until it rel
56c0: 65 61 73 65 73 20 61 20 73 61 76 65 70 6f 69 6e  eases a savepoin
56d0: 74 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  t with a matchin
56e0: 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65  g savepoint-name
56f0: 2e 0a 5e 50 72 69 6f 72 20 73 61 76 65 70 6f 69  ..^Prior savepoi
5700: 6e 74 73 2c 20 65 76 65 6e 20 73 61 76 65 70 6f  nts, even savepo
5710: 69 6e 74 73 20 77 69 74 68 20 6d 61 74 63 68 69  ints with matchi
5720: 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d  ng savepoint-nam
5730: 65 73 2c 20 61 72 65 0a 75 6e 63 68 61 6e 67 65  es, are.unchange
5740: 64 2e 0a 5e 49 66 20 74 68 65 20 52 45 4c 45 41  d..^If the RELEA
5750: 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65  SE command cause
5760: 73 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f  s the.transactio
5770: 6e 20 73 74 61 63 6b 20 74 6f 20 62 65 63 6f 6d  n stack to becom
5780: 65 20 65 6d 70 74 79 20 28 69 66 20 74 68 65 20  e empty (if the 
5790: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
57a0: 72 65 6c 65 61 73 65 73 20 74 68 65 0a 6f 75 74  releases the.out
57b0: 65 72 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69  ermost transacti
57c0: 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61 63  on from the stac
57d0: 6b 29 20 74 68 65 6e 20 74 68 65 20 74 72 61 6e  k) then the tran
57e0: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e  saction commits.
57f0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 52  </p>..<p>^The [R
5800: 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64  OLLBACK] command
5810: 20 77 69 74 68 6f 75 74 20 61 20 54 4f 20 63 6c   without a TO cl
5820: 61 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 73  ause rolls backs
5830: 20 61 6c 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e   all transaction
5840: 73 0a 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65  s.and leaves the
5850: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
5860: 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c  ck empty.</p>..<
5870: 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20  p>^The ROLLBACK 
5880: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61 20 54  command with a T
5890: 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62  O clause rolls b
58a0: 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ack transactions
58b0: 20 67 6f 69 6e 67 0a 62 61 63 6b 77 61 72 64 73   going.backwards
58c0: 20 69 6e 20 74 69 6d 65 20 62 61 63 6b 20 74 6f   in time back to
58d0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
58e0: 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20   SAVEPOINT with 
58f0: 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e  a matching name.
5900: 0a 5e 54 68 65 20 53 41 56 45 50 4f 49 4e 54 20  .^The SAVEPOINT 
5910: 77 69 74 68 20 74 68 65 20 6d 61 74 63 68 69 6e  with the matchin
5920: 67 20 6e 61 6d 65 20 72 65 6d 61 69 6e 73 20 6f  g name remains o
5930: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
5940: 6e 20 73 74 61 63 6b 2c 0a 62 75 74 20 61 6c 6c  n stack,.but all
5950: 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65   database change
5960: 73 20 74 68 61 74 20 6f 63 63 75 72 72 65 64 20  s that occurred 
5970: 61 66 74 65 72 20 74 68 61 74 20 53 41 56 45 50  after that SAVEP
5980: 4f 49 4e 54 20 77 61 73 20 63 72 65 61 74 65 64  OINT was created
5990: 0a 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  .are rolled back
59a0: 2e 20 20 5e 49 66 20 74 68 65 20 73 61 76 65 70  .  ^If the savep
59b0: 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52  oint-name in a R
59c0: 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61  OLLBACK TO comma
59d0: 6e 64 20 64 6f 65 73 20 6e 6f 74 0a 6d 61 74 63  nd does not.matc
59e0: 68 20 61 6e 79 20 53 41 56 45 50 4f 49 4e 54 20  h any SAVEPOINT 
59f0: 6f 6e 20 74 68 65 20 73 74 61 63 6b 2c 20 74 68  on the stack, th
5a00: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
5a10: 63 6f 6d 6d 61 6e 64 20 66 61 69 6c 73 20 77 69  command fails wi
5a20: 74 68 20 61 6e 0a 65 72 72 6f 72 20 61 6e 64 20  th an.error and 
5a30: 6c 65 61 76 65 73 20 74 68 65 20 73 74 61 74 65  leaves the state
5a40: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
5a50: 20 75 6e 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a   unchanged.</p>.
5a60: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
5a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5a80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5aa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ab0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 63  ######.Section c
5ac0: 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 7b  omment comment {
5ad0: 63 6f 6d 6d 65 6e 74 20 2a 63 6f 6d 6d 65 6e 74  comment *comment
5ae0: 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  s}..BubbleDiagra
5af0: 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74 61 78  m comment-syntax
5b00: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 43 6f 6d  .</tcl>..<p>^Com
5b10: 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 20 53 51  ments are not SQ
5b20: 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62 75 74 20  L commands, but 
5b30: 63 61 6e 20 6f 63 63 75 72 20 77 69 74 68 69 6e  can occur within
5b40: 20 74 68 65 20 74 65 78 74 20 6f 66 0a 53 51 4c   the text of.SQL
5b50: 20 71 75 65 72 69 65 73 20 70 61 73 73 65 64 20   queries passed 
5b60: 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  to [sqlite3_prep
5b70: 61 72 65 5f 76 32 28 29 5d 20 61 6e 64 20 72 65  are_v2()] and re
5b80: 6c 61 74 65 64 20 69 6e 74 65 72 66 61 63 65 73  lated interfaces
5b90: 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20  ..^Comments are 
5ba0: 74 72 65 61 74 65 64 20 61 73 20 77 68 69 74 65  treated as white
5bb0: 73 70 61 63 65 20 62 79 20 74 68 65 20 70 61 72  space by the par
5bc0: 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 63  ser..^Comments c
5bd0: 61 6e 20 62 65 67 69 6e 20 61 6e 79 77 68 65 72  an begin anywher
5be0: 65 20 77 68 69 74 65 73 70 61 63 65 20 0a 63 61  e whitespace .ca
5bf0: 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69 6e 63 6c  n be found, incl
5c00: 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70  uding inside exp
5c10: 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 73 70  ressions that sp
5c20: 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65  an multiple line
5c30: 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c  s..</p>..<p>^SQL
5c40: 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 20   comments begin 
5c50: 77 69 74 68 20 74 77 6f 20 63 6f 6e 73 65 63 75  with two consecu
5c60: 74 69 76 65 20 22 2d 22 20 63 68 61 72 61 63 74  tive "-" charact
5c70: 65 72 73 20 28 41 53 43 49 49 20 30 78 32 64 29  ers (ASCII 0x2d)
5c80: 0a 61 6e 64 20 65 78 74 65 6e 64 20 75 70 20 74  .and extend up t
5c90: 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20  o and including 
5ca0: 74 68 65 20 6e 65 78 74 20 6e 65 77 6c 69 6e 65  the next newline
5cb0: 20 63 68 61 72 61 63 74 65 72 20 28 41 53 43 49   character (ASCI
5cc0: 49 20 30 78 30 61 29 0a 6f 72 20 75 6e 74 69 6c  I 0x0a).or until
5cd0: 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75   the end of inpu
5ce0: 74 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d  t, whichever com
5cf0: 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e 0a 0a 3c  es first.</p>..<
5d00: 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65  p>^C-style comme
5d10: 6e 74 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22  nts begin.with "
5d20: 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e 64 20 75  /*" and extend u
5d30: 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
5d40: 6e 67 20 74 68 65 20 6e 65 78 74 20 22 2a 2f 22  ng the next "*/"
5d50: 20 63 68 61 72 61 63 74 65 72 20 70 61 69 72 0a   character pair.
5d60: 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64  or until the end
5d70: 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68   of input, which
5d80: 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74  ever comes first
5d90: 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d  .  ^C-style comm
5da0: 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e 20 6d 75  ents.can span mu
5db0: 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e 20 3c 2f  ltiple lines. </
5dc0: 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73  p>..<p>^Comments
5dd0: 20 63 61 6e 20 61 70 70 65 61 72 20 61 6e 79 77   can appear anyw
5de0: 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20  here whitespace 
5df0: 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e 63 6c 75  can occur,.inclu
5e00: 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72  ding inside expr
5e10: 65 73 73 69 6f 6e 73 20 61 6e 64 20 69 6e 20 74  essions and in t
5e20: 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 6f 74 68  he middle of oth
5e30: 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  er SQL statement
5e40: 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 64 6f 20  s..^Comments do 
5e50: 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e 0a 0a  not nest..</p>..
5e60: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
5e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5eb0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
5ec0: 52 45 41 54 45 20 49 4e 44 45 58 7d 20 63 72 65  REATE INDEX} cre
5ed0: 61 74 65 69 6e 64 65 78 20 7b 7b 43 52 45 41 54  ateindex {{CREAT
5ee0: 45 20 49 4e 44 45 58 7d 7d 0a 0a 42 75 62 62 6c  E INDEX}}..Bubbl
5ef0: 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d  eDiagram create-
5f00: 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 42 75 62  index-stmt 1.Bub
5f10: 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 64 65 78  bleDiagram index
5f20: 65 64 2d 63 6f 6c 75 6d 6e 0a 3c 2f 74 63 6c 3e  ed-column.</tcl>
5f30: 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45  ..<p>^The CREATE
5f40: 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63   INDEX command c
5f50: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6b  onsists of the k
5f60: 65 79 77 6f 72 64 73 20 22 43 52 45 41 54 45 20  eywords "CREATE 
5f70: 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a  INDEX" followed.
5f80: 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  by the name of t
5f90: 68 65 20 6e 65 77 20 69 6e 64 65 78 2c 20 74 68  he new index, th
5fa0: 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20  e keyword "ON", 
5fb0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 70 72  the name of a pr
5fc0: 65 76 69 6f 75 73 6c 79 0a 63 72 65 61 74 65 64  eviously.created
5fd0: 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 74   table that is t
5fe0: 6f 20 62 65 20 69 6e 64 65 78 65 64 2c 20 61 6e  o be indexed, an
5ff0: 64 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  d a parenthesize
6000: 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 73 20  d list of names 
6010: 6f 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of.columns in th
6020: 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
6030: 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 69 6e   used for the in
6040: 64 65 78 20 6b 65 79 2e 3c 2f 70 3e 0a 0a 3c 74  dex key.</p>..<t
6050: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
6060: 64 65 73 63 69 64 78 7d 20 7b 64 65 73 63 65 6e  descidx} {descen
6070: 64 69 6e 67 20 69 6e 64 69 63 65 73 7d 20 7b 64  ding indices} {d
6080: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 7d  escending index}
6090: 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63 68 20  </tcl>.<p>^Each 
60a0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20  column name can 
60b0: 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f  be followed by o
60c0: 6e 65 20 6f 66 20 74 68 65 20 22 41 53 43 22 20  ne of the "ASC" 
60d0: 6f 72 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72  or "DESC" keywor
60e0: 64 73 0a 74 6f 20 69 6e 64 69 63 61 74 65 20 73  ds.to indicate s
60f0: 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65  ort order.  ^The
6100: 20 73 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20   sort order may 
6110: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67  or may not be ig
6120: 6e 6f 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a  nored depending.
6130: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
6140: 66 69 6c 65 20 66 6f 72 6d 61 74 2c 20 61 6e 64  file format, and
6150: 20 69 6e 20 70 61 72 74 69 63 75 6c 61 72 20 74   in particular t
6160: 68 65 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61  he [schema forma
6170: 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54 68 65 20  t number]..^The 
6180: 22 6c 65 67 61 63 79 22 20 73 63 68 65 6d 61 20  "legacy" schema 
6190: 66 6f 72 6d 61 74 20 28 31 29 20 69 67 6e 6f 72  format (1) ignor
61a0: 65 73 20 69 6e 64 65 78 0a 73 6f 72 74 20 6f 72  es index.sort or
61b0: 64 65 72 2e 20 20 5e 54 68 65 20 64 65 73 63 65  der.  ^The desce
61c0: 6e 64 69 6e 67 20 69 6e 64 65 78 20 73 63 68 65  nding index sche
61d0: 6d 61 20 66 6f 72 6d 61 74 20 28 34 29 20 74 61  ma format (4) ta
61e0: 6b 65 73 20 69 6e 64 65 78 20 73 6f 72 74 20 6f  kes index sort o
61f0: 72 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75 6e  rder.into accoun
6200: 74 2e 20 20 5e 28 4f 6e 6c 79 20 63 6f 70 69 65  t.  ^(Only copie
6210: 73 20 6f 66 20 53 51 4c 69 74 65 20 6e 65 77 65  s of SQLite newe
6220: 72 20 74 68 61 6e 20 5b 76 65 72 73 69 6f 6e 20  r than [version 
6230: 33 2e 33 2e 30 5d 20 0a 28 72 65 6c 65 61 73 65  3.3.0] .(release
6240: 64 20 6f 6e 20 32 30 30 36 2d 30 31 2d 31 30 29  d on 2006-01-10)
6250: 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64   are able to und
6260: 65 72 73 74 61 6e 64 20 74 68 65 20 6e 65 77 65  erstand the newe
6270: 72 20 64 65 73 63 65 6e 64 69 6e 67 0a 69 6e 64  r descending.ind
6280: 65 78 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 29  ex file format.)
6290: 5e 20 20 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  ^  For compatibi
62a0: 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20 6f 66  lity, version of
62b0: 20 53 51 4c 69 74 65 20 62 65 74 77 65 65 6e 20   SQLite between 
62c0: 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e 39 20  3.3.0.and 3.7.9 
62d0: 75 73 65 20 74 68 65 20 6c 65 67 61 63 79 20 73  use the legacy s
62e0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62 79 20  chema format by 
62f0: 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20 6e 65  default.  The ne
6300: 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  wer schema forma
6310: 74 20 69 73 0a 75 73 65 64 20 62 79 20 64 65 66  t is.used by def
6320: 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f 6e 20  ault in version 
6330: 33 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74 65 72  3.7.10 and later
6340: 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f 66  ..^The [legacy_f
6350: 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d  ile_format pragm
6360: 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  a] can be used t
6370: 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74 68 65  o change set the
6380: 20 73 70 65 63 69 66 69 63 0a 62 65 68 61 76 69   specific.behavi
6390: 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72 73 69  or for any versi
63a0: 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70  on of SQLite.</p
63b0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41  >..<p>^The COLLA
63c0: 54 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f 6e  TE clause option
63d0: 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65  ally following e
63e0: 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ach column name 
63f0: 64 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c 61 74  defines a.collat
6400: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 75 73 65  ing sequence use
6410: 64 20 66 6f 72 20 74 65 78 74 20 65 6e 74 72 69  d for text entri
6420: 65 73 20 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d  es in that colum
6430: 6e 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20  n..^The default 
6440: 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e  collating.sequen
6450: 63 65 20 69 73 20 74 68 65 20 63 6f 6c 6c 61 74  ce is the collat
6460: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 66  ing sequence def
6470: 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20 63 6f  ined for that co
6480: 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45  lumn in the.[CRE
6490: 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
64a0: 6d 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20 6e 6f  ment.  ^Or if no
64b0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
64c0: 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69 73 65  nce is otherwise
64d0: 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62 75   defined,.the bu
64e0: 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f  ilt-in BINARY co
64f0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
6500: 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c   is used.</p>..<
6510: 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61  p>There are no a
6520: 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73 20  rbitrary limits 
6530: 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  on the number of
6540: 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 63 61   indices that ca
6550: 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20 74 6f  n be.attached to
6560: 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 2e   a single table.
6570: 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f    ^(The number o
6580: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20  f columns in an 
6590: 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74 65  index is .limite
65a0: 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73  d to the value s
65b0: 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33 5f 6c  et by.[sqlite3_l
65c0: 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f 4c 49  imit]([SQLITE_LI
65d0: 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29  MIT_COLUMN],...)
65e0: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  .)^</p>..<tcl>hd
65f0: 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65  _fragment unique
6600: 69 64 78 20 7b 75 6e 69 71 75 65 20 69 6e 64 65  idx {unique inde
6610: 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66 20  x}</tcl>.<p>^If 
6620: 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f  the UNIQUE keywo
6630: 72 64 20 61 70 70 65 61 72 73 20 62 65 74 77 65  rd appears betwe
6640: 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49 4e  en CREATE and IN
6650: 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63 61  DEX then duplica
6660: 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65 73  te.index entries
6670: 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64   are not allowed
6680: 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74 20  .  ^Any attempt 
6690: 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70 6c  to insert a dupl
66a0: 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c  icate entry.will
66b0: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72   result in an er
66c0: 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20 70  ror.  ^For the p
66d0: 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71 75  urposes of uniqu
66e0: 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20 4e  e indices, all N
66f0: 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20 63  ULL values.are c
6700: 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64 69 66  onsidered to dif
6710: 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20  ferent from all 
6720: 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65  other NULL value
6730: 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20 75  s and are thus u
6740: 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20 6f  nique..This is o
6750: 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70 6f  ne of the two po
6760: 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65 74  ssible interpret
6770: 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 51  ations of the SQ
6780: 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28 74  L-92 standard.(t
6790: 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20 74  he language in t
67a0: 68 65 20 73 74 61 6e 64 61 72 64 20 69 73 20 61  he standard is a
67b0: 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69 73  mbiguous) and is
67c0: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   the interpretat
67d0: 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ion.followed by 
67e0: 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53 51  PostgreSQL, MySQ
67f0: 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e 64  L, Firebird, and
6800: 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72 6d   Oracle.  Inform
6810: 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66 74  ix and.Microsoft
6820: 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c 6c   SQL Server foll
6830: 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e 74  ow the other int
6840: 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
6850: 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e  he standard.</p>
6860: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
6870: 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49  ional IF NOT EXI
6880: 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72  STS clause is pr
6890: 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65  esent and anothe
68a0: 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68 65  r index.with the
68b0: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61   same name alrea
68c0: 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20  dy exists, then 
68d0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63  this command bec
68e0: 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70  omes a no-op.</p
68f0: 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20 61  >..<p>^Indexes a
6900: 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68 20  re removed with 
6910: 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d  the [DROP INDEX]
6920: 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a   command.</p>...
6930: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
6940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6980: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52  ####.Section {CR
6990: 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72 65  EATE TABLE} {cre
69a0: 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45 41  atetable} {{CREA
69b0: 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 42 75 62 62  TE TABLE}}..Bubb
69c0: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
69d0: 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a 42 75  -table-stmt 1.Bu
69e0: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6c 75  bbleDiagram colu
69f0: 6d 6e 2d 64 65 66 0a 42 75 62 62 6c 65 44 69 61  mn-def.BubbleDia
6a00: 67 72 61 6d 20 74 79 70 65 2d 6e 61 6d 65 0a 42  gram type-name.B
6a10: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6c  ubbleDiagram col
6a20: 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 42  umn-constraint.B
6a30: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 74 61 62  ubbleDiagram tab
6a40: 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 42 75  le-constraint.Bu
6a50: 62 62 6c 65 44 69 61 67 72 61 6d 20 66 6f 72 65  bbleDiagram fore
6a60: 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 0a 3c  ign-key-clause.<
6a70: 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 22 43  /tcl>..<p>The "C
6a80: 52 45 41 54 45 20 54 41 42 4c 45 22 20 63 6f 6d  REATE TABLE" com
6a90: 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20  mand is used to 
6aa0: 63 72 65 61 74 65 20 61 20 6e 65 77 20 74 61 62  create a new tab
6ab0: 6c 65 20 69 6e 20 61 6e 20 53 51 4c 69 74 65 20  le in an SQLite 
6ac0: 0a 64 61 74 61 62 61 73 65 2e 20 41 20 43 52 45  .database. A CRE
6ad0: 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e  ATE TABLE comman
6ae0: 64 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  d specifies the 
6af0: 66 6f 6c 6c 6f 77 69 6e 67 20 61 74 74 72 69 62  following attrib
6b00: 75 74 65 73 20 6f 66 20 74 68 65 0a 6e 65 77 20  utes of the.new 
6b10: 74 61 62 6c 65 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c  table:..<ul>.  <
6b20: 6c 69 3e 3c 70 3e 54 68 65 20 6e 61 6d 65 20 6f  li><p>The name o
6b30: 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e  f the new table.
6b40: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20  ..  <li><p> The 
6b50: 64 61 74 61 62 61 73 65 20 69 6e 20 77 68 69 63  database in whic
6b60: 68 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  h the new table 
6b70: 69 73 20 63 72 65 61 74 65 64 2e 20 54 61 62 6c  is created. Tabl
6b80: 65 73 20 6d 61 79 20 62 65 20 0a 20 20 20 20 20  es may be .     
6b90: 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20   created in the 
6ba0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
6bb0: 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
6bc0: 2c 20 6f 72 20 69 6e 20 61 6e 79 20 61 74 74 61  , or in any atta
6bd0: 63 68 65 64 0a 20 20 20 20 20 20 64 61 74 61 62  ched.      datab
6be0: 61 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20  ase...  <li><p> 
6bf0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 65 61 63 68  The name 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 54 68 65 20 64 65 63 6c 61 72 65 64 20 74 79   The declared ty
6c30: 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  pe of each colum
6c40: 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  n in the table..
6c50: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66  .  <li><p> A def
6c60: 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 65 78  ault value or ex
6c70: 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 65 61 63  pression for eac
6c80: 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
6c90: 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  table...  <li><p
6ca0: 3e 20 41 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  > A default coll
6cb0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74  ation sequence t
6cc0: 6f 20 75 73 65 20 77 69 74 68 20 65 61 63 68 20  o use with each 
6cd0: 63 6f 6c 75 6d 6e 2e 0a 0a 20 20 3c 6c 69 3e 3c  column...  <li><
6ce0: 70 3e 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20 61  p> Optionally, a
6cf0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72   PRIMARY KEY for
6d00: 20 74 68 65 20 74 61 62 6c 65 2e 20 42 6f 74 68   the table. Both
6d10: 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 61   single column a
6d20: 6e 64 0a 20 20 20 20 20 20 20 63 6f 6d 70 6f 73  nd.       compos
6d30: 69 74 65 20 28 6d 75 6c 74 69 70 6c 65 20 63 6f  ite (multiple co
6d40: 6c 75 6d 6e 29 20 70 72 69 6d 61 72 79 20 6b 65  lumn) primary ke
6d50: 79 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ys are supported
6d60: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 73  ...  <li><p> A s
6d70: 65 74 20 6f 66 20 53 51 4c 20 63 6f 6e 73 74 72  et of SQL constr
6d80: 61 69 6e 74 73 20 66 6f 72 20 65 61 63 68 20 74  aints for each t
6d90: 61 62 6c 65 2e 20 53 51 4c 69 74 65 20 73 75 70  able. SQLite sup
6da0: 70 6f 72 74 73 20 55 4e 49 51 55 45 2c 20 4e 4f  ports UNIQUE, NO
6db0: 54 0a 20 20 20 20 20 20 20 4e 55 4c 4c 2c 20 43  T.       NULL, C
6dc0: 48 45 43 4b 20 61 6e 64 20 46 4f 52 45 49 47 4e  HECK and FOREIGN
6dd0: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73   KEY constraints
6de0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72  ..</ul>..<p>Ever
6df0: 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  y CREATE TABLE s
6e00: 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70  tatement must sp
6e10: 65 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72  ecify a name for
6e20: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a   the new table..
6e30: 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20    ^(Table names 
6e40: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
6e50: 22 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65  "sqlite_" are re
6e60: 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72  served for inter
6e70: 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73  nal use. It.  is
6e80: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74   an error to att
6e90: 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61  empt to create a
6ea0: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61   table with a na
6eb0: 6d 65 20 74 68 61 74 20 73 74 61 72 74 73 20 77  me that starts w
6ec0: 69 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e  ith.  "sqlite_".
6ed0: 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c  )^..<p> ^If a &l
6ee0: 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26  t;database-name&
6ef0: 67 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64  gt; is specified
6f00: 2c 20 69 74 20 6d 75 73 74 20 62 65 20 65 69 74  , it must be eit
6f10: 68 65 72 20 22 6d 61 69 6e 22 2c 20 0a 20 20 22  her "main", .  "
6f20: 74 65 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e 61  temp", or the na
6f30: 6d 65 20 6f 66 20 61 6e 20 5b 41 54 54 41 43 48  me of an [ATTACH
6f40: 20 44 41 54 41 42 41 53 45 7c 61 74 74 61 63 68   DATABASE|attach
6f50: 65 64 20 64 61 74 61 62 61 73 65 5d 2e 20 5e 49  ed database]. ^I
6f60: 6e 20 74 68 69 73 20 63 61 73 65 0a 20 20 74 68  n this case.  th
6f70: 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63  e new table is c
6f80: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6e 61  reated in the na
6f90: 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49  med database. ^I
6fa0: 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20  f the "TEMP" or 
6fb0: 22 54 45 4d 50 4f 52 41 52 59 22 0a 20 20 6b 65  "TEMPORARY".  ke
6fc0: 79 77 6f 72 64 20 6f 63 63 75 72 73 20 62 65 74  yword occurs bet
6fd0: 77 65 65 6e 20 74 68 65 20 22 43 52 45 41 54 45  ween the "CREATE
6fe0: 22 20 61 6e 64 20 22 54 41 42 4c 45 22 20 74 68  " and "TABLE" th
6ff0: 65 6e 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  en the new table
7000: 20 69 73 0a 20 20 63 72 65 61 74 65 64 20 69 6e   is.  created in
7010: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
7020: 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72  se. ^It is an er
7030: 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62  ror to specify b
7040: 6f 74 68 20 61 20 0a 20 20 26 6c 74 3b 64 61 74  oth a .  &lt;dat
7050: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 61  abase-name&gt; a
7060: 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72 20 54  nd the TEMP or T
7070: 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64  EMPORARY keyword
7080: 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a 20 20 26  , unless the.  &
7090: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
70a0: 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20  &gt; is "temp". 
70b0: 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20  ^If no database 
70c0: 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
70d0: 64 20 61 6e 64 20 74 68 65 0a 20 20 54 45 4d 50  d and the.  TEMP
70e0: 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20   keyword is not 
70f0: 70 72 65 73 65 6e 74 20 74 68 65 6e 20 74 68 65  present then the
7100: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
7110: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 0a 20 20  d in the main.  
7120: 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 0a 20  database...<p>. 
7130: 20 5e 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20   ^It is usually 
7140: 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65  an error to atte
7150: 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20  mpt to create a 
7160: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 20 64  new table in a d
7170: 61 74 61 62 61 73 65 20 74 68 61 74 0a 20 20 61  atabase that.  a
7180: 6c 72 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20  lready contains 
7190: 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f  a table, index o
71a0: 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61  r view of the sa
71b0: 6d 65 20 6e 61 6d 65 2e 20 5e 48 6f 77 65 76 65  me name. ^Howeve
71c0: 72 2c 20 69 66 20 74 68 65 0a 20 20 22 49 46 20  r, if the.  "IF 
71d0: 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75  NOT EXISTS" clau
71e0: 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  se is specified 
71f0: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43  as part of the C
7200: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
7210: 65 6d 65 6e 74 20 61 6e 64 0a 20 20 61 20 74 61  ement and.  a ta
7220: 62 6c 65 20 6f 72 20 76 69 65 77 20 6f 66 20 74  ble or view of t
7230: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72  he same name alr
7240: 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65  eady exists, the
7250: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
7260: 6d 6d 61 6e 64 0a 20 20 73 69 6d 70 6c 79 20 68  mmand.  simply h
7270: 61 73 20 6e 6f 20 65 66 66 65 63 74 20 28 61 6e  as no effect (an
7280: 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61  d no error messa
7290: 67 65 20 69 73 20 72 65 74 75 72 6e 65 64 29 2e  ge is returned).
72a0: 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 73 74   ^An error is st
72b0: 69 6c 6c 0a 20 20 72 65 74 75 72 6e 65 64 20 69  ill.  returned i
72c0: 66 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 6e  f the table cann
72d0: 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 62 65  ot be created be
72e0: 63 61 75 73 65 20 6f 66 20 61 6e 20 65 78 69 73  cause of an exis
72f0: 74 69 6e 67 20 69 6e 64 65 78 2c 20 65 76 65 6e  ting index, even
7300: 20 0a 20 20 69 66 20 74 68 65 20 22 49 46 20 4e   .  if the "IF N
7310: 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75 73  OT EXISTS" claus
7320: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
7330: 0a 3c 70 3e 5e 49 74 20 69 73 20 6e 6f 74 20 61  .<p>^It is not a
7340: 6e 20 65 72 72 6f 72 20 74 6f 20 63 72 65 61 74  n error to creat
7350: 65 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 68  e a table that h
7360: 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
7370: 20 61 73 20 61 6e 20 0a 20 20 65 78 69 73 74 69   as an .  existi
7380: 6e 67 20 5b 43 52 45 41 54 45 20 54 52 49 47 47  ng [CREATE TRIGG
7390: 45 52 7c 74 72 69 67 67 65 72 5d 2e 0a 0a 3c 70  ER|trigger]...<p
73a0: 3e 5e 54 61 62 6c 65 73 20 61 72 65 20 72 65 6d  >^Tables are rem
73b0: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  oved using the [
73c0: 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74  DROP TABLE] stat
73d0: 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c 68  ement.  </p>..<h
73e0: 33 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e  3>CREATE TABLE .
73f0: 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 53 74 61  .. AS SELECT Sta
7400: 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70  tements</h3>..<p
7410: 3e 5e 28 41 20 22 43 52 45 41 54 45 20 54 41 42  >^(A "CREATE TAB
7420: 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54  LE ... AS SELECT
7430: 22 20 73 74 61 74 65 6d 65 6e 74 20 63 72 65 61  " statement crea
7440: 74 65 73 20 61 6e 64 20 70 6f 70 75 6c 61 74 65  tes and populate
7450: 73 20 61 20 64 61 74 61 62 61 73 65 0a 74 61 62  s a database.tab
7460: 6c 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  le based on the 
7470: 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
7480: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e  ECT statement.)^
7490: 20 5e 28 54 68 65 20 74 61 62 6c 65 20 68 61 73   ^(The table has
74a0: 20 74 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72   the same.number
74b0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74   of columns as t
74c0: 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  he rows returned
74d0: 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
74e0: 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61  tatement. The na
74f0: 6d 65 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d  me of.each colum
7500: 6e 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  n is the same as
7510: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
7520: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63   corresponding c
7530: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73  olumn in the res
7540: 75 6c 74 0a 73 65 74 20 6f 66 20 74 68 65 20 53  ult.set of the S
7550: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
7560: 29 5e 20 5e 28 54 68 65 20 64 65 63 6c 61 72 65  )^ ^(The declare
7570: 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  d type of each c
7580: 6f 6c 75 6d 6e 20 69 73 20 64 65 74 65 72 6d 69  olumn is determi
7590: 6e 65 64 0a 62 79 20 74 68 65 20 5b 65 78 70 72  ned.by the [expr
75a0: 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d  ession affinity]
75b0: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
75c0: 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nding expression
75d0: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
75e0: 65 74 0a 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et.of the SELECT
75f0: 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 73 20 66   statement, as f
7600: 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63  ollows:.</p>..<c
7610: 65 6e 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72  enter><table bor
7620: 64 65 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68  der=1>.  <tr><th
7630: 3e 45 78 70 72 65 73 73 69 6f 6e 20 41 66 66 69  >Expression Affi
7640: 6e 69 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d  nity   <th>Colum
7650: 6e 20 44 65 63 6c 61 72 65 64 20 54 79 70 65 0a  n Declared Type.
7660: 20 20 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20 20    <tr><td>TEXT  
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7680: 3c 74 64 3e 22 54 45 58 54 22 0a 20 20 3c 74 72  <td>"TEXT".  <tr
7690: 3e 3c 74 64 3e 4e 55 4d 45 52 49 43 20 20 20 20  ><td>NUMERIC    
76a0: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
76b0: 4e 55 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49  NUM".  <tr><td>I
76c0: 4e 54 45 47 45 52 20 20 20 20 20 20 20 20 20 20  NTEGER          
76d0: 20 20 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20       <td>"INT". 
76e0: 20 3c 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20   <tr><td>REAL   
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c                 <
7700: 74 64 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e  td>"REAL".  <tr>
7710: 3c 74 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20 20  <td>NONE        
7720: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 22            <td>""
7730: 20 28 65 6d 70 74 79 20 73 74 72 69 6e 67 29 0a   (empty string).
7740: 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72  </table></center
7750: 3e 29 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c  >)^..<p>^(A tabl
7760: 65 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  e created using 
7770: 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20  CREATE TABLE AS 
7780: 68 61 73 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b  has no PRIMARY K
7790: 45 59 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72  EY and no.constr
77a0: 61 69 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e  aints of any kin
77b0: 64 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  d. The default v
77c0: 61 6c 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  alue of each col
77d0: 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65  umn is NULL. The
77e0: 20 64 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69   default.collati
77f0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  on sequence for 
7800: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  each column of t
7810: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20  he new table is 
7820: 42 49 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54  BINARY.)^..<p>^T
7830: 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73  ables created us
7840: 69 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c 45  ing CREATE TABLE
7850: 20 41 53 20 61 72 65 20 69 6e 69 74 69 61 6c 6c   AS are initiall
7860: 79 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68  y populated with
7870: 20 74 68 65 0a 72 6f 77 73 20 6f 66 20 64 61 74   the.rows of dat
7880: 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  a returned by th
7890: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
78a0: 6e 74 2e 20 5e 52 6f 77 73 20 61 72 65 20 61 73  nt. ^Rows are as
78b0: 73 69 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75  signed contiguou
78c0: 73 6c 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72  sly.ascending [r
78d0: 6f 77 69 64 5d 20 76 61 6c 75 65 73 2c 20 73 74  owid] values, st
78e0: 61 72 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69  arting with 1, i
78f0: 6e 20 74 68 65 20 5b 6f 72 64 65 72 20 62 79 7c  n the [order by|
7900: 6f 72 64 65 72 5d 20 74 68 61 74 20 74 68 65 79  order] that they
7910: 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79  .are returned by
7920: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
7930: 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ement...<tcl>hd_
7940: 66 72 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63  fragment {tablec
7950: 6f 6c 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64  oldef} {column d
7960: 65 66 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75  efinition} {colu
7970: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c  mn definitions}<
7980: 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e  /tcl>.<h3>Column
7990: 20 44 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33   Definitions</h3
79a0: 3e 0a 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20  >..<p>Unless it 
79b0: 69 73 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  is a CREATE TABL
79c0: 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20  E ... AS SELECT 
79d0: 73 74 61 74 65 6d 65 6e 74 2c 20 61 20 43 52 45  statement, a CRE
79e0: 41 54 45 20 54 41 42 4c 45 20 69 6e 63 6c 75 64  ATE TABLE includ
79f0: 65 73 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b  es.one or more [
7a00: 63 6f 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d  column-def|colum
7a10: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20  n definitions], 
7a20: 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
7a30: 77 65 64 20 62 79 20 61 20 6c 69 73 74 20 6f 66  wed by a list of
7a40: 0a 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69  .[table-constrai
7a50: 6e 74 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72 61  nt|table constra
7a60: 69 6e 74 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c  ints].  Each col
7a70: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 63  umn definition c
7a80: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 0a 6e  onsists of the.n
7a90: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ame of the colum
7aa0: 6e 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  n, optionally fo
7ab0: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 64 65  llowed by the de
7ac0: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
7ad0: 68 65 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20  he column,.then 
7ae0: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69  one or more opti
7af0: 6f 6e 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e  onal [column-con
7b00: 73 74 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63  straint|column c
7b10: 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63  onstraints]. Inc
7b20: 6c 75 64 65 64 20 69 6e 0a 74 68 65 20 64 65 66  luded in.the def
7b30: 69 6e 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75  inition of "colu
7b40: 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 22 20  mn constraints" 
7b50: 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
7b60: 20 6f 66 20 74 68 65 20 70 72 65 76 69 6f 75 73   of the previous
7b70: 0a 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20 74  .statement are t
7b80: 68 65 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44  he COLLATE and D
7b90: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 73 2c 20  EFAULT clauses, 
7ba0: 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73  even though thes
7bb0: 65 20 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79  e are not really
7bc0: 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20  .constraints in 
7bd0: 74 68 65 20 73 65 6e 73 65 20 74 68 61 74 20 74  the sense that t
7be0: 68 65 79 20 64 6f 20 6e 6f 74 20 72 65 73 74 72  hey do not restr
7bf0: 69 63 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ict the data tha
7c00: 74 20 74 68 65 20 74 61 62 6c 65 20 6d 61 79 0a  t the table may.
7c10: 63 6f 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74 68  contain. The oth
7c20: 65 72 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d  er constraints -
7c30: 20 4e 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b   NOT NULL, CHECK
7c40: 2c 20 55 4e 49 51 55 45 2c 20 50 52 49 4d 41 52  , UNIQUE, PRIMAR
7c50: 59 20 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49 47  Y KEY and.FOREIG
7c60: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
7c70: 73 20 2d 20 69 6d 70 6f 73 65 20 72 65 73 74 72  s - impose restr
7c80: 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74  ictions on the t
7c90: 61 62 6c 65 73 20 64 61 74 61 2c 20 61 6e 64 20  ables data, and 
7ca0: 61 72 65 20 61 72 65 0a 64 65 73 63 72 69 62 65  are are.describe
7cb0: 64 20 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61  d under [constra
7cc0: 69 6e 74 73 7c 53 51 4c 20 44 61 74 61 20 43 6f  ints|SQL Data Co
7cd0: 6e 73 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77  nstraints] below
7ce0: 2e 0a 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f  ...<p>^Unlike mo
7cf0: 73 74 20 53 51 4c 20 64 61 74 61 62 61 73 65 73  st SQL databases
7d00: 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
7d10: 74 20 72 65 73 74 72 69 63 74 20 74 68 65 20 74  t restrict the t
7d20: 79 70 65 20 6f 66 20 64 61 74 61 20 74 68 61 74  ype of data that
7d30: 0a 6d 61 79 20 62 65 20 69 6e 73 65 72 74 65 64  .may be inserted
7d40: 20 69 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62   into a column b
7d50: 61 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75  ased on the colu
7d60: 6d 6e 73 20 64 65 63 6c 61 72 65 64 20 74 79 70  mns declared typ
7d70: 65 2e 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69  e. Instead,.SQLi
7d80: 74 65 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63  te uses [dynamic
7d90: 20 74 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64   typing]. ^The d
7da0: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20  eclared type of 
7db0: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  a column is used
7dc0: 20 74 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74 68   to.determine th
7dd0: 65 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20  e [affinity] of 
7de0: 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e  the column only.
7df0: 0a 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54  ..<p>The DEFAULT
7e00: 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
7e10: 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  s a default valu
7e20: 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65  e to use for the
7e30: 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61   column if no.va
7e40: 6c 75 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c  lue is explicitl
7e50: 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  y provided by th
7e60: 65 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e  e user when doin
7e70: 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e  g an [INSERT]. ^
7e80: 49 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65  If there.is no e
7e90: 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20  xplicit DEFAULT 
7ea0: 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
7eb0: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
7ec0: 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nition, then the
7ed0: 20 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20   .default value 
7ee0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  of the column is
7ef0: 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c   NULL. ^(An expl
7f00: 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61  icit DEFAULT cla
7f10: 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a  use may specify.
7f20: 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  that the default
7f30: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
7f40: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  a string constan
7f50: 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61  t, a blob consta
7f60: 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d  nt, a.signed-num
7f70: 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73  ber, or any cons
7f80: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
7f90: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65  enclosed in pare
7fa0: 6e 74 68 65 73 65 73 2e 20 41 6e 20 65 78 70 6c  ntheses. An expl
7fb0: 69 63 69 74 0a 64 65 66 61 75 6c 74 20 76 61 6c  icit.default val
7fc0: 75 65 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f  ue may also be o
7fd0: 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 61  ne of the specia
7fe0: 6c 20 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65  l case-independe
7ff0: 6e 74 20 6b 65 79 77 6f 72 64 73 0a 43 55 52 52  nt keywords.CURR
8000: 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e  ENT_TIME, CURREN
8010: 54 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45 4e  T_DATE or CURREN
8020: 54 5f 54 49 4d 45 53 54 41 4d 50 2e 29 5e 20 5e  T_TIMESTAMP.)^ ^
8030: 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
8040: 20 6f 66 20 74 68 65 0a 44 45 46 41 55 4c 54 20   of the.DEFAULT 
8050: 63 6c 61 75 73 65 2c 20 61 6e 20 65 78 70 72 65  clause, an expre
8060: 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65  ssion is conside
8070: 72 65 64 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f  red constant pro
8080: 76 69 64 65 64 20 74 68 61 74 20 69 74 20 64 6f  vided that it do
8090: 65 73 0a 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  es.not contain a
80a0: 6e 79 20 73 75 62 2d 71 75 65 72 69 65 73 20 6f  ny sub-queries o
80b0: 72 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  r string constan
80c0: 74 73 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 64  ts enclosed in d
80d0: 6f 75 62 6c 65 20 71 75 6f 74 65 73 2e 0a 0a 3c  ouble quotes...<
80e0: 70 3e 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20  p>^(Each time a 
80f0: 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20  row is inserted 
8100: 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  into the table b
8110: 79 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  y an INSERT stat
8120: 65 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73  ement that .does
8130: 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70   not provide exp
8140: 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72  licit values for
8150: 20 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d   all table colum
8160: 6e 73 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  ns the values st
8170: 6f 72 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20  ored in.the new 
8180: 72 6f 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e  row are determin
8190: 65 64 20 62 79 20 74 68 65 69 72 20 64 65 66 61  ed by their defa
81a0: 75 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73  ult values)^, as
81b0: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a   follows:..<ul>.
81c0: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
81d0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
81e0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  f the column is 
81f0: 61 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c  a constant NULL,
8200: 20 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20   text, blob or. 
8210: 20 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72     signed-number
8220: 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61   value, then tha
8230: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
8240: 64 69 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20  directly in the 
8250: 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e  new row...  <li>
8260: 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75  <p>^If the defau
8270: 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f  lt value of a co
8280: 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
8290: 73 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68  ssion in parenth
82a0: 65 73 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74  eses, then.    t
82b0: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
82c0: 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
82d0: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73  for each row ins
82e0: 65 72 74 65 64 20 61 6e 64 20 74 68 65 20 72 65  erted and the re
82f0: 73 75 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69  sults.    used i
8300: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a  n the new row...
8310: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
8320: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
8330: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55  f a column is CU
8340: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
8350: 45 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20  ENT_DATE or.    
8360: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
8370: 50 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  P, then the valu
8380: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65  e used in the ne
8390: 77 20 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a  w row is a text.
83a0: 20 20 20 20 72 65 70 72 65 73 65 6e 74 61 74 69      representati
83b0: 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  on of the curren
83c0: 74 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f  t UTC date and/o
83d0: 72 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52  r time. ^For CUR
83e0: 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20  RENT_TIME, the. 
83f0: 20 20 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65     format of the
8400: 20 76 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d   value is "HH:MM
8410: 3a 53 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45  :SS". ^For CURRE
8420: 4e 54 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d  NT_DATE, "YYYY-M
8430: 4d 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20  M-DD". ^The.    
8440: 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45  format for CURRE
8450: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20  NT_TIMESTAMP is 
8460: 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  "YYYY-MM-DD HH:M
8470: 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  M:SS"..</ul>..<p
8480: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
8490: 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
84a0: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f  he name of a [co
84b0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
84c0: 5d 20 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20  ] to use as.the 
84d0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
84e0: 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74  n sequence for t
84f0: 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e  he column. ^If n
8500: 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  o COLLATE clause
8510: 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
8520: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
8530: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
8540: 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e   [BINARY]...<p>^
8550: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
8560: 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65  lumns in a table
8570: 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74   is limited by t
8580: 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43  he [SQLITE_MAX_C
8590: 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74  OLUMN].compile-t
85a0: 69 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e  ime parameter. ^
85b0: 41 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  A single row of 
85c0: 61 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73  a table cannot s
85d0: 74 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b  tore more than.[
85e0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
85f0: 48 5d 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  H] bytes of data
8600: 2e 20 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65  . ^Both of these
8610: 20 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c   limits can be l
8620: 6f 77 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d  owered at.runtim
8630: 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  e using the [sql
8640: 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f  ite3_limit()] C/
8650: 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  C++ interface.</
8660: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
8670: 6d 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74  ment {constraint
8680: 73 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d  s} {constraints}
8690: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44  </tcl>.<h3>SQL D
86a0: 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c  ata Constraints<
86b0: 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /h3>..<tcl>hd_fr
86c0: 61 67 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f  agment primkeyco
86d0: 6e 73 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59  nst {PRIMARY KEY
86e0: 7d 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63  } {PRIMARY KEY c
86f0: 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e  onstraint}</tcl>
8700: 0a 3c 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20  .<p>^Each table 
8710: 69 6e 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61  in SQLite may ha
8720: 76 65 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c  ve at most one <
8730: 62 3e 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62  b>PRIMARY KEY</b
8740: 3e 2e 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79  >. ^If the.  key
8750: 77 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45  words PRIMARY KE
8760: 59 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  Y are added to a
8770: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
8780: 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69  on, then the pri
8790: 6d 61 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74  mary key.  for t
87a0: 68 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74  he table consist
87b0: 73 20 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65  s of that single
87c0: 20 63 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66   column. ^Or, if
87d0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
87e0: 6c 61 75 73 65 20 0a 20 20 69 73 20 73 70 65 63  lause .  is spec
87f0: 69 66 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c  ified as a [tabl
8800: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74  e-constraint], t
8810: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
8820: 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
8830: 0a 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  .  consists of t
8840: 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d  he list of colum
8850: 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ns specified as 
8860: 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d  part of the PRIM
8870: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a  ARY KEY clause..
8880: 20 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d    ^If there is m
8890: 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 50 52 49  ore than one PRI
88a0: 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20  MARY KEY clause 
88b0: 69 6e 20 61 20 73 69 6e 67 6c 65 20 43 52 45 41  in a single CREA
88c0: 54 45 20 54 41 42 4c 45 0a 20 20 73 74 61 74 65  TE TABLE.  state
88d0: 6d 65 6e 74 2c 20 69 74 20 69 73 20 61 6e 20 65  ment, it is an e
88e0: 72 72 6f 72 2e 0a 0a 3c 70 3e 49 66 20 61 20 74  rror...<p>If a t
88f0: 61 62 6c 65 20 68 61 73 20 61 20 73 69 6e 67 6c  able has a singl
8900: 65 20 63 6f 6c 75 6d 6e 20 70 72 69 6d 61 72 79  e column primary
8910: 20 6b 65 79 2c 20 61 6e 64 20 74 68 65 20 64 65   key, and the de
8920: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
8930: 68 61 74 0a 20 20 63 6f 6c 75 6d 6e 20 69 73 20  hat.  column is 
8940: 22 49 4e 54 45 47 45 52 22 2c 20 74 68 65 6e 20  "INTEGER", then 
8950: 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 6b 6e  the column is kn
8960: 6f 77 6e 20 61 73 20 61 6e 20 5b 49 4e 54 45 47  own as an [INTEG
8970: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e  ER PRIMARY KEY].
8980: 0a 20 20 53 65 65 20 62 65 6c 6f 77 20 66 6f 72  .  See below for
8990: 20 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f   a description o
89a0: 66 20 74 68 65 20 73 70 65 63 69 61 6c 20 70 72  f the special pr
89b0: 6f 70 65 72 74 69 65 73 20 61 6e 64 20 62 65 68  operties and beh
89c0: 61 76 69 6f 72 73 0a 20 20 61 73 73 6f 63 69 61  aviors.  associa
89d0: 74 65 64 20 77 69 74 68 20 61 6e 20 5b 49 4e 54  ted with an [INT
89e0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
89f0: 5d 2e 0a 0a 3c 70 3e 5e 45 61 63 68 20 72 6f 77  ]...<p>^Each row
8a00: 20 69 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68   in a table with
8a10: 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6d   a primary key m
8a20: 75 73 74 20 66 65 61 74 75 72 65 20 61 20 75 6e  ust feature a un
8a30: 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  ique combination
8a40: 0a 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  .  of values in 
8a50: 69 74 73 20 70 72 69 6d 61 72 79 20 6b 65 79 20  its primary key 
8a60: 63 6f 6c 75 6d 6e 73 2e 20 5e 46 6f 72 20 74 68  columns. ^For th
8a70: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65  e purposes of de
8a80: 74 65 72 6d 69 6e 69 6e 67 0a 20 20 74 68 65 20  termining.  the 
8a90: 75 6e 69 71 75 65 6e 65 73 73 20 6f 66 20 70 72  uniqueness of pr
8aa0: 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73  imary key values
8ab0: 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  , NULL values ar
8ac0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 73  e considered dis
8ad0: 74 69 6e 63 74 20 66 72 6f 6d 0a 20 20 61 6c 6c  tinct from.  all
8ae0: 20 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69   other values, i
8af0: 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20 4e  ncluding other N
8b00: 55 4c 4c 73 2e 20 5e 49 66 20 61 6e 20 5b 49 4e  ULLs. ^If an [IN
8b10: 53 45 52 54 5d 20 6f 72 20 5b 55 50 44 41 54 45  SERT] or [UPDATE
8b20: 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 61 74  ].  statement at
8b30: 74 65 6d 70 74 73 20 74 6f 20 6d 6f 64 69 66 79  tempts to modify
8b40: 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e 74 65   the table conte
8b50: 6e 74 20 73 6f 20 74 68 61 74 20 74 77 6f 20 6f  nt so that two o
8b60: 72 20 6d 6f 72 65 20 72 6f 77 73 0a 20 20 66 65  r more rows.  fe
8b70: 61 74 75 72 65 20 69 64 65 6e 74 69 63 61 6c 20  ature identical 
8b80: 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75  primary key valu
8b90: 65 73 2c 20 69 74 20 69 73 20 61 20 63 6f 6e 73  es, it is a cons
8ba0: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
8bb0: 2e 0a 20 20 41 63 63 6f 72 64 69 6e 67 20 74 6f  ..  According to
8bc0: 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72   the SQL standar
8bd0: 64 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 73  d, PRIMARY KEY s
8be0: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 69 6d 70  hould always imp
8bf0: 6c 79 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 20 20 55  ly NOT NULL..  U
8c00: 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 64 75  nfortunately, du
8c10: 65 20 74 6f 20 61 20 6c 6f 6e 67 2d 73 74 61 6e  e to a long-stan
8c20: 64 69 6e 67 20 63 6f 64 69 6e 67 20 6f 76 65 72  ding coding over
8c30: 73 69 67 68 74 2c 20 74 68 69 73 20 69 73 20 6e  sight, this is n
8c40: 6f 74 20 74 68 65 0a 20 20 63 61 73 65 20 69 6e  ot the.  case in
8c50: 20 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73   SQLite. ^Unless
8c60: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61   the column is a
8c70: 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n [INTEGER PRIMA
8c80: 52 59 20 4b 45 59 5d 20 53 51 4c 69 74 65 0a 20  RY KEY] SQLite. 
8c90: 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c   allows NULL val
8ca0: 75 65 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59  ues in a PRIMARY
8cb0: 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 57 65   KEY column.  We
8cc0: 20 63 6f 75 6c 64 20 63 68 61 6e 67 65 20 53 51   could change SQ
8cd0: 4c 69 74 65 20 74 6f 0a 20 20 63 6f 6e 66 6f 72  Lite to.  confor
8ce0: 6d 20 74 6f 20 74 68 65 20 73 74 61 6e 64 61 72  m to the standar
8cf0: 64 20 28 61 6e 64 20 77 65 20 6d 69 67 68 74 20  d (and we might 
8d00: 64 6f 20 73 6f 20 69 6e 20 74 68 65 20 66 75 74  do so in the fut
8d10: 75 72 65 29 2c 20 62 75 74 20 62 79 20 74 68 65  ure), but by the
8d20: 20 74 69 6d 65 0a 20 20 74 68 65 20 6f 76 65 72   time.  the over
8d30: 73 69 67 68 74 20 77 61 73 20 64 69 73 63 6f 76  sight was discov
8d40: 65 72 65 64 2c 20 53 51 4c 69 74 65 20 77 61 73  ered, SQLite was
8d50: 20 69 6e 20 73 75 63 68 20 77 69 64 65 20 75 73   in such wide us
8d60: 65 20 74 68 61 74 20 77 65 20 66 65 61 72 65 64  e that we feared
8d70: 0a 20 20 62 72 65 61 6b 69 6e 67 20 6c 65 67 61  .  breaking lega
8d80: 63 79 20 63 6f 64 65 20 69 66 20 77 65 20 66 69  cy code if we fi
8d90: 78 65 64 20 74 68 65 20 70 72 6f 62 6c 65 6d 2e  xed the problem.
8da0: 20 20 53 6f 20 66 6f 72 20 6e 6f 77 20 77 65 20    So for now we 
8db0: 68 61 76 65 20 63 68 6f 73 65 6e 20 74 6f 0a 20  have chosen to. 
8dc0: 20 63 6f 6e 74 69 6e 75 65 20 61 6c 6c 6f 77 69   continue allowi
8dd0: 6e 67 20 4e 55 4c 4c 73 20 69 6e 20 50 52 49 4d  ng NULLs in PRIM
8de0: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e  ARY KEY columns.
8df0: 20 20 44 65 76 65 6c 6f 70 65 72 73 20 73 68 6f    Developers sho
8e00: 75 6c 64 20 62 65 0a 20 20 61 77 61 72 65 2c 20  uld be.  aware, 
8e10: 68 6f 77 65 76 65 72 2c 20 74 68 61 74 20 77 65  however, that we
8e20: 20 6d 61 79 20 63 68 61 6e 67 65 20 53 51 4c 69   may change SQLi
8e30: 74 65 20 74 6f 20 63 6f 6e 66 6f 72 6d 20 74 6f  te to conform to
8e40: 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72   the SQL standar
8e50: 64 20 69 6e 0a 20 20 66 75 74 75 72 65 20 61 6e  d in.  future an
8e60: 64 20 73 68 6f 75 6c 64 20 64 65 73 69 67 6e 20  d should design 
8e70: 6e 65 77 20 70 72 6f 67 72 61 6d 73 20 61 63 63  new programs acc
8e80: 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c 74 63 6c 3e  ordingly...<tcl>
8e90: 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71  hd_fragment uniq
8ea0: 75 65 63 6f 6e 73 74 20 7b 55 4e 49 51 55 45 7d  ueconst {UNIQUE}
8eb0: 20 7b 75 6e 69 71 75 65 20 63 6f 6e 73 74 72 61   {unique constra
8ec0: 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41  int}</tcl>.<p>^A
8ed0: 20 3c 62 3e 55 4e 49 51 55 45 3c 2f 62 3e 20 63   <b>UNIQUE</b> c
8ee0: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73 69 6d  onstraint is sim
8ef0: 69 6c 61 72 20 74 6f 20 61 20 50 52 49 4d 41 52  ilar to a PRIMAR
8f00: 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
8f10: 2c 20 65 78 63 65 70 74 0a 20 20 74 68 61 74 20  , except.  that 
8f20: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d  a single table m
8f30: 61 79 20 68 61 76 65 20 61 6e 79 20 6e 75 6d 62  ay have any numb
8f40: 65 72 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e  er of UNIQUE con
8f50: 73 74 72 61 69 6e 74 73 2e 20 5e 46 6f 72 20 65  straints. ^For e
8f60: 61 63 68 0a 20 20 55 4e 49 51 55 45 20 63 6f 6e  ach.  UNIQUE con
8f70: 73 74 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74  straint on the t
8f80: 61 62 6c 65 2c 20 65 61 63 68 20 72 6f 77 20 6d  able, each row m
8f90: 75 73 74 20 66 65 61 74 75 72 65 20 61 20 75 6e  ust feature a un
8fa0: 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  ique combination
8fb0: 0a 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  .  of values in 
8fc0: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e  the columns iden
8fd0: 74 69 66 69 65 64 20 62 79 20 74 68 65 20 55 4e  tified by the UN
8fe0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e  IQUE constraint.
8ff0: 20 5e 41 73 20 77 69 74 68 0a 20 20 50 52 49 4d   ^As with.  PRIM
9000: 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  ARY KEY constrai
9010: 6e 74 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72  nts, for the pur
9020: 70 6f 73 65 73 20 6f 66 20 55 4e 49 51 55 45 20  poses of UNIQUE 
9030: 63 6f 6e 73 74 72 61 69 6e 74 73 20 4e 55 4c 4c  constraints NULL
9040: 20 76 61 6c 75 65 73 0a 20 20 61 72 65 20 63 6f   values.  are co
9050: 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63  nsidered distinc
9060: 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72  t from all other
9070: 20 76 61 6c 75 65 73 20 28 69 6e 63 6c 75 64 69   values (includi
9080: 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 29 2e  ng other NULLs).
9090: 0a 20 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52  .  ^If an [INSER
90a0: 54 5d 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73  T] or [UPDATE] s
90b0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
90c0: 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20  s to modify the 
90d0: 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20 73 6f  table content so
90e0: 0a 20 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d  .  that two or m
90f0: 6f 72 65 20 72 6f 77 73 20 66 65 61 74 75 72 65  ore rows feature
9100: 20 69 64 65 6e 74 69 63 61 6c 20 76 61 6c 75 65   identical value
9110: 73 20 69 6e 20 61 20 73 65 74 20 6f 66 20 63 6f  s in a set of co
9120: 6c 75 6d 6e 73 20 74 68 61 74 0a 20 20 61 72 65  lumns that.  are
9130: 20 73 75 62 6a 65 63 74 20 74 6f 20 61 20 55 4e   subject to a UN
9140: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2c  IQUE constraint,
9150: 20 69 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61   it is a constra
9160: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 0a  int violation...
9170: 3c 70 3e 5e 5b 49 4e 54 45 47 45 52 20 50 52 49  <p>^[INTEGER PRI
9180: 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e  MARY KEY] column
9190: 73 20 61 73 69 64 65 2c 20 62 6f 74 68 20 55 4e  s aside, both UN
91a0: 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59  IQUE and PRIMARY
91b0: 20 4b 45 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e   KEY.  constrain
91c0: 74 73 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74  ts are implement
91d0: 65 64 20 62 79 20 63 72 65 61 74 69 6e 67 20 61  ed by creating a
91e0: 6e 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 64  n index in the d
91f0: 61 74 61 62 61 73 65 20 28 69 6e 20 74 68 65 20  atabase (in the 
9200: 73 61 6d 65 0a 20 20 77 61 79 20 61 73 20 61 20  same.  way as a 
9210: 5b 43 52 45 41 54 45 20 49 4e 44 45 58 7c 22 43  [CREATE INDEX|"C
9220: 52 45 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44  REATE UNIQUE IND
9230: 45 58 22 5d 20 73 74 61 74 65 6d 65 6e 74 20 77  EX"] statement w
9240: 6f 75 6c 64 29 2e 20 5e 53 75 63 68 20 61 6e 20  ould). ^Such an 
9250: 0a 20 20 69 6e 64 65 78 20 69 73 20 75 73 65 64  .  index is used
9260: 20 6c 69 6b 65 20 61 6e 79 20 6f 74 68 65 72 20   like any other 
9270: 69 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74  index in the dat
9280: 61 62 61 73 65 20 74 6f 20 5b 6f 70 74 69 6d 69  abase to [optimi
9290: 7a 65 72 7c 6f 70 74 69 6d 69 7a 65 0a 20 20 71  zer|optimize.  q
92a0: 75 65 72 69 65 73 5d 2e 20 20 41 73 20 61 20 72  ueries].  As a r
92b0: 65 73 75 6c 74 2c 20 74 68 65 72 65 20 6f 66 74  esult, there oft
92c0: 65 6e 20 6e 6f 20 61 64 76 61 6e 74 61 67 65 20  en no advantage 
92d0: 28 62 75 74 20 73 69 67 6e 69 66 69 63 61 6e 74  (but significant
92e0: 20 6f 76 65 72 68 65 61 64 29 0a 20 20 69 6e 20   overhead).  in 
92f0: 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65  creating an inde
9300: 78 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 63 6f  x on a set of co
9310: 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 61  lumns that are a
9320: 6c 72 65 61 64 79 20 63 6f 6c 6c 65 63 74 69 76  lready collectiv
9330: 65 6c 79 0a 20 20 73 75 62 6a 65 63 74 20 74 6f  ely.  subject to
9340: 20 61 20 55 4e 49 51 55 45 20 6f 72 20 50 52 49   a UNIQUE or PRI
9350: 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
9360: 69 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  int...<tcl>hd_fr
9370: 61 67 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d  agment {ckconst}
9380: 20 7b 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20   {CHECK} {CHECK 
9390: 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48 45  constraint} {CHE
93a0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c  CK constraints}<
93b0: 2f 74 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e  /tcl>.<p>^(A <b>
93c0: 43 48 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72  CHECK</b> constr
93d0: 61 69 6e 74 20 6d 61 79 20 62 65 20 61 74 74 61  aint may be atta
93e0: 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  ched to a column
93f0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20   definition or. 
9400: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20   specified as a 
9410: 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  table constraint
9420: 2e 20 49 6e 20 70 72 61 63 74 69 63 65 20 69 74  . In practice it
9430: 20 6d 61 6b 65 73 20 6e 6f 20 64 69 66 66 65 72   makes no differ
9440: 65 6e 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20  ence.)^ ^(Each. 
9450: 20 74 69 6d 65 20 61 20 6e 65 77 20 72 6f 77 20   time a new row 
9460: 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
9470: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 61 6e   the table or an
9480: 20 65 78 69 73 74 69 6e 67 20 72 6f 77 20 69 73   existing row is
9490: 20 75 70 64 61 74 65 64 2c 0a 20 20 74 68 65 20   updated,.  the 
94a0: 65 78 70 72 65 73 73 69 6f 6e 20 61 73 73 6f 63  expression assoc
94b0: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
94c0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
94d0: 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e   is evaluated an
94e0: 64 0a 20 20 63 61 73 74 20 74 6f 20 61 20 4e 55  d.  cast to a NU
94f0: 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74  MERIC value in t
9500: 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61  he same way as a
9510: 20 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f   [CAST expressio
9520: 6e 5d 2e 20 49 66 20 74 68 65 20 0a 20 20 72 65  n]. If the .  re
9530: 73 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e  sult is zero (in
9540: 74 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72  teger value 0 or
9550: 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29   real value 0.0)
9560: 2c 20 74 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  , then a constra
9570: 69 6e 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20  int.  violation 
9580: 68 61 73 20 6f 63 63 75 72 72 65 64 2e 29 5e 20  has occurred.)^ 
9590: 5e 49 66 20 74 68 65 20 43 48 45 43 4b 20 65 78  ^If the CHECK ex
95a0: 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
95b0: 65 73 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20  es to NULL, or. 
95c0: 20 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a   any other non-z
95d0: 65 72 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73  ero value, it is
95e0: 20 6e 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e   not a constrain
95f0: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e  t violation..  ^
9600: 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  The expression o
9610: 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  f a CHECK constr
9620: 61 69 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  aint may not con
9630: 74 61 69 6e 20 61 20 73 75 62 71 75 65 72 79 2e  tain a subquery.
9640: 0a 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74  ..<p>CHECK const
9650: 72 61 69 6e 74 73 20 68 61 76 65 20 62 65 65 6e  raints have been
9660: 20 73 75 70 70 6f 72 74 65 64 20 73 69 6e 63 65   supported since
9670: 20 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30 5d   [version 3.3.0]
9680: 2e 20 50 72 69 6f 72 20 74 6f 0a 20 20 76 65 72  . Prior to.  ver
9690: 73 69 6f 6e 20 33 2e 33 2e 30 2c 20 43 48 45 43  sion 3.3.0, CHEC
96a0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65  K constraints we
96b0: 72 65 20 70 61 72 73 65 64 20 62 75 74 20 6e 6f  re parsed but no
96c0: 74 20 65 6e 66 6f 72 63 65 64 2e 0a 0a 3c 74 63  t enforced...<tc
96d0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 6e  l>hd_fragment {n
96e0: 6f 74 6e 75 6c 6c 63 6f 6e 73 74 7d 20 7b 4e 4f  otnullconst} {NO
96f0: 54 20 4e 55 4c 4c 7d 20 7b 4e 4f 54 20 4e 55 4c  T NULL} {NOT NUL
9700: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74  L constraint}</t
9710: 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54  cl>.<p>^A <b>NOT
9720: 20 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72   NULL</b> constr
9730: 61 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65  aint may only be
9740: 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 63   attached to a c
9750: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
9760: 2c 0a 20 20 6e 6f 74 20 73 70 65 63 69 66 69 65  ,.  not specifie
9770: 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e  d as a table con
9780: 73 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20 73 75  straint.  Not su
9790: 72 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28 61 20  rprisingly, ^(a 
97a0: 4e 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74  NOT NULL.  const
97b0: 72 61 69 6e 74 20 64 69 63 74 61 74 65 73 20 74  raint dictates t
97c0: 68 61 74 20 74 68 65 20 61 73 73 6f 63 69 61 74  hat the associat
97d0: 65 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  ed column may no
97e0: 74 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55 4c 4c  t contain a NULL
97f0: 20 76 61 6c 75 65 2e 0a 20 20 41 74 74 65 6d 70   value..  Attemp
9800: 74 69 6e 67 20 74 6f 20 73 65 74 20 74 68 65 20  ting to set the 
9810: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20  column value to 
9820: 4e 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65 72 74  NULL when insert
9830: 69 6e 67 20 61 20 6e 65 77 20 72 6f 77 20 6f 72  ing a new row or
9840: 0a 20 20 75 70 64 61 74 69 6e 67 20 61 6e 20 65  .  updating an e
9850: 78 69 73 74 69 6e 67 20 6f 6e 65 20 63 61 75 73  xisting one caus
9860: 65 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  es a constraint 
9870: 76 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70  violation.)^..<p
9880: 3e 45 78 61 63 74 6c 79 20 68 6f 77 20 61 20 63  >Exactly how a c
9890: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
98a0: 69 6f 6e 20 69 73 20 64 65 61 6c 74 20 77 69 74  ion is dealt wit
98b0: 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  h is determined 
98c0: 62 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66 6c 69  by the.  [confli
98d0: 63 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73 74 72  ct clause|constr
98e0: 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
98f0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
9900: 68 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50 52 49  hm]. Each .  PRI
9910: 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45  MARY KEY, UNIQUE
9920: 2c 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64 20 43  , NOT NULL and C
9930: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
9940: 68 61 73 20 61 20 64 65 66 61 75 6c 74 20 63 6f  has a default co
9950: 6e 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c 75 74  nflict.  resolut
9960: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20 5e  ion algorithm. ^
9970: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49  PRIMARY KEY, UNI
9980: 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c  QUE and NOT NULL
9990: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 61 79   constraints may
99a0: 20 62 65 0a 20 20 65 78 70 6c 69 63 69 74 6c 79   be.  explicitly
99b0: 20 61 73 73 69 67 6e 65 64 20 61 20 64 65 66 61   assigned a defa
99c0: 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
99d0: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
99e0: 6d 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 0a 20  m by including. 
99f0: 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61   a [conflict-cla
9a00: 75 73 65 5d 20 69 6e 20 74 68 65 69 72 20 64 65  use] in their de
9a10: 66 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20  finitions. ^Or, 
9a20: 69 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  if a constraint 
9a30: 64 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64 6f 65  definition.  doe
9a40: 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 20  s not include a 
9a50: 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65  [conflict-clause
9a60: 5d 20 6f 72 20 69 74 20 69 73 20 61 20 43 48 45  ] or it is a CHE
9a70: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74  CK constraint, t
9a80: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 63 6f 6e  he default.  con
9a90: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
9aa0: 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42   algorithm is AB
9ab0: 4f 52 54 2e 20 5e 44 69 66 66 65 72 65 6e 74 20  ORT. ^Different 
9ac0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 74 68  constraints with
9ad0: 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 74 61  in the.  same ta
9ae0: 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66  ble may have dif
9af0: 66 65 72 65 6e 74 20 64 65 66 61 75 6c 74 20 63  ferent default c
9b00: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
9b10: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e 20 53  on algorithms. S
9b20: 65 65 0a 20 20 74 68 65 20 73 65 63 74 69 6f 6e  ee.  the section
9b30: 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46   titled [ON CONF
9b40: 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69  LICT] for additi
9b50: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
9b60: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
9b70: 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47  ent rowid {INTEG
9b80: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20  ER PRIMARY KEY} 
9b90: 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c  ROWID rowid</tcl
9ba0: 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e 64  >.<h3>ROWIDs and
9bb0: 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49   the INTEGER PRI
9bc0: 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c  MARY KEY</h3>..<
9bd0: 70 3e 5e 45 76 65 72 79 20 72 6f 77 20 6f 66 20  p>^Every row of 
9be0: 65 76 65 72 79 20 53 51 4c 69 74 65 20 74 61 62  every SQLite tab
9bf0: 6c 65 20 68 61 73 20 61 20 36 34 2d 62 69 74 20  le has a 64-bit 
9c00: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b  signed integer k
9c10: 65 79 20 0a 74 68 61 74 20 75 6e 69 71 75 65 6c  ey .that uniquel
9c20: 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  y identifies the
9c30: 20 72 6f 77 20 77 69 74 68 69 6e 20 69 74 73 20   row within its 
9c40: 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 74 65  table. This inte
9c50: 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79 0a 63  ger is usually.c
9c60: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77 69 64  alled the "rowid
9c70: 22 2e 20 5e 54 68 65 20 72 6f 77 69 64 20 76 61  ". ^The rowid va
9c80: 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63 65 73  lue can be acces
9c90: 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66  sed using one of
9ca0: 20 74 68 65 20 73 70 65 63 69 61 6c 0a 63 61 73   the special.cas
9cb0: 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6e 61  e-independent na
9cc0: 6d 65 73 20 22 72 6f 77 69 64 22 2c 20 22 6f 69  mes "rowid", "oi
9cd0: 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22  d", or "_rowid_"
9ce0: 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 63   in place of a c
9cf0: 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20  olumn name..^If 
9d00: 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  a table contains
9d10: 20 61 20 75 73 65 72 20 64 65 66 69 6e 65 64 20   a user defined 
9d20: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22 72 6f  column named "ro
9d30: 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22  wid", "oid" or "
9d40: 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e 20 74  _rowid_",.then t
9d50: 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79 73 20  hat name always 
9d60: 72 65 66 65 72 73 20 74 68 65 20 65 78 70 6c 69  refers the expli
9d70: 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20 63  citly declared c
9d80: 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74  olumn and cannot
9d90: 20 62 65 20 75 73 65 64 0a 74 6f 20 72 65 74 72   be used.to retr
9da0: 69 65 76 65 20 74 68 65 20 69 6e 74 65 67 65 72  ieve the integer
9db0: 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a 0a 3c   rowid value...<
9dc0: 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20 65  p>The data for e
9dd0: 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53 51 4c  ach table in SQL
9de0: 69 74 65 20 69 73 20 73 74 6f 72 65 64 20 61 73  ite is stored as
9df0: 20 61 20 42 2d 54 72 65 65 20 73 74 72 75 63 74   a B-Tree struct
9e00: 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61  ure containing.a
9e10: 6e 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  n entry for each
9e20: 20 74 61 62 6c 65 20 72 6f 77 2c 20 75 73 69 6e   table row, usin
9e30: 67 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75  g the rowid valu
9e40: 65 20 61 73 20 74 68 65 20 6b 65 79 2e 20 54 68  e as the key. Th
9e50: 69 73 20 6d 65 61 6e 73 20 74 68 61 74 0a 72 65  is means that.re
9e60: 74 72 69 65 76 69 6e 67 20 6f 72 20 73 6f 72 74  trieving or sort
9e70: 69 6e 67 20 72 65 63 6f 72 64 73 20 62 79 20 72  ing records by r
9e80: 6f 77 69 64 20 69 73 20 66 61 73 74 2e 20 53 65  owid is fast. Se
9e90: 61 72 63 68 69 6e 67 20 66 6f 72 20 61 20 72 65  arching for a re
9ea0: 63 6f 72 64 20 77 69 74 68 20 61 0a 73 70 65 63  cord with a.spec
9eb0: 69 66 69 63 20 72 6f 77 69 64 2c 20 6f 72 20 66  ific rowid, or f
9ec0: 6f 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 77  or all records w
9ed0: 69 74 68 20 72 6f 77 69 64 73 20 77 69 74 68 69  ith rowids withi
9ee0: 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 72 61  n a specified ra
9ef0: 6e 67 65 20 69 73 0a 61 72 6f 75 6e 64 20 74 77  nge is.around tw
9f00: 69 63 65 20 61 73 20 66 61 73 74 20 61 73 20 61  ice as fast as a
9f10: 20 73 69 6d 69 6c 61 72 20 73 65 61 72 63 68 20   similar search 
9f20: 6d 61 64 65 20 62 79 20 73 70 65 63 69 66 79 69  made by specifyi
9f30: 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 50 52 49  ng any other PRI
9f40: 4d 41 52 59 0a 4b 45 59 20 6f 72 20 69 6e 64 65  MARY.KEY or inde
9f50: 78 65 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 20  xed value...<p> 
9f60: 5e 57 69 74 68 20 6f 6e 65 20 65 78 63 65 70 74  ^With one except
9f70: 69 6f 6e 2c 20 69 66 20 61 20 74 61 62 6c 65 20  ion, if a table 
9f80: 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
9f90: 79 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20  y that consists 
9fa0: 6f 66 20 61 20 73 69 6e 67 6c 65 0a 63 6f 6c 75  of a single.colu
9fb0: 6d 6e 2c 20 61 6e 64 20 74 68 65 20 64 65 63 6c  mn, and the decl
9fc0: 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 61  ared type of tha
9fd0: 74 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54  t column is "INT
9fe0: 45 47 45 52 22 20 69 6e 20 61 6e 79 20 6d 69 78  EGER" in any mix
9ff0: 74 75 72 65 20 6f 66 0a 75 70 70 65 72 20 61 6e  ture of.upper an
a000: 64 20 6c 6f 77 65 72 20 63 61 73 65 2c 20 74 68  d lower case, th
a010: 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65  en the column be
a020: 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66  comes an alias f
a030: 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 20 53 75  or the rowid. Su
a040: 63 68 20 61 0a 63 6f 6c 75 6d 6e 20 69 73 20 75  ch a.column is u
a050: 73 75 61 6c 6c 79 20 72 65 66 65 72 72 65 64 20  sually referred 
a060: 74 6f 20 61 73 20 61 6e 20 22 69 6e 74 65 67 65  to as an "intege
a070: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 22 2e 20  r primary key". 
a080: 41 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  A PRIMARY KEY co
a090: 6c 75 6d 6e 0a 6f 6e 6c 79 20 62 65 63 6f 6d 65  lumn.only become
a0a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  s an integer pri
a0b0: 6d 61 72 79 20 6b 65 79 20 69 66 20 74 68 65 20  mary key if the 
a0c0: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6e 61  declared type na
a0d0: 6d 65 20 69 73 20 65 78 61 63 74 6c 79 0a 22 49  me is exactly."I
a0e0: 4e 54 45 47 45 52 22 2e 20 20 5e 4f 74 68 65 72  NTEGER".  ^Other
a0f0: 20 69 6e 74 65 67 65 72 20 74 79 70 65 20 6e 61   integer type na
a100: 6d 65 73 20 6c 69 6b 65 20 22 49 4e 54 22 20 6f  mes like "INT" o
a110: 72 20 22 42 49 47 49 4e 54 22 20 6f 72 20 22 53  r "BIGINT" or "S
a120: 48 4f 52 54 20 49 4e 54 45 47 45 52 22 0a 6f 72  HORT INTEGER".or
a130: 20 22 55 4e 53 49 47 4e 45 44 20 49 4e 54 45 47   "UNSIGNED INTEG
a140: 45 52 22 20 63 61 75 73 65 73 20 74 68 65 20 70  ER" causes the p
a150: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
a160: 6e 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  n to behave as a
a170: 6e 20 6f 72 64 69 6e 61 72 79 0a 74 61 62 6c 65  n ordinary.table
a180: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74   column with int
a190: 65 67 65 72 20 5b 61 66 66 69 6e 69 74 79 5d 20  eger [affinity] 
a1a0: 61 6e 64 20 61 20 75 6e 69 71 75 65 20 69 6e 64  and a unique ind
a1b0: 65 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c  ex, not as an al
a1c0: 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f 77 69  ias for.the rowi
a1d0: 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 63 65  d...<p> The exce
a1e0: 70 74 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20  ption mentioned 
a1f0: 61 62 6f 76 65 20 69 73 20 74 68 61 74 20 5e 69  above is that ^i
a200: 66 20 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f  f the declaratio
a210: 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 77 69  n of a column wi
a220: 74 68 0a 64 65 63 6c 61 72 65 64 20 74 79 70 65  th.declared type
a230: 20 22 49 4e 54 45 47 45 52 22 20 69 6e 63 6c 75   "INTEGER" inclu
a240: 64 65 73 20 61 6e 20 22 50 52 49 4d 41 52 59 20  des an "PRIMARY 
a250: 4b 45 59 20 44 45 53 43 22 20 63 6c 61 75 73 65  KEY DESC" clause
a260: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 62 65  , it does not.be
a270: 63 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20 66 6f  come an alias fo
a280: 72 20 74 68 65 20 72 6f 77 69 64 20 61 6e 64 20  r the rowid and 
a290: 69 73 20 6e 6f 74 20 63 6c 61 73 73 69 66 69 65  is not classifie
a2a0: 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  d as an integer 
a2b0: 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 54 68 69  primary key..Thi
a2c0: 73 20 71 75 69 72 6b 20 69 73 20 6e 6f 74 20 62  s quirk is not b
a2d0: 79 20 64 65 73 69 67 6e 2e 20 49 74 20 69 73 20  y design. It is 
a2e0: 64 75 65 20 74 6f 20 61 20 62 75 67 20 69 6e 20  due to a bug in 
a2f0: 65 61 72 6c 79 20 76 65 72 73 69 6f 6e 73 20 6f  early versions o
a300: 66 20 53 51 4c 69 74 65 2e 0a 42 75 74 20 66 69  f SQLite..But fi
a310: 78 69 6e 67 20 74 68 65 20 62 75 67 20 63 6f 75  xing the bug cou
a320: 6c 64 20 72 65 73 75 6c 74 20 69 6e 20 76 65 72  ld result in ver
a330: 79 20 73 65 72 69 6f 75 73 20 62 61 63 6b 77 61  y serious backwa
a340: 72 64 73 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c  rds incompatibil
a350: 69 74 69 65 73 2e 0a 54 68 65 20 53 51 4c 69 74  ities..The SQLit
a360: 65 20 64 65 76 65 6c 6f 70 65 72 73 20 66 65 65  e developers fee
a370: 6c 20 74 68 61 74 20 67 6f 6f 66 79 20 62 65 68  l that goofy beh
a380: 61 76 69 6f 72 20 69 6e 20 61 20 63 6f 72 6e 65  avior in a corne
a390: 72 20 63 61 73 65 20 69 73 20 66 61 72 20 62 65  r case is far be
a3a0: 74 74 65 72 0a 74 68 61 6e 20 61 20 63 6f 6d 70  tter.than a comp
a3b0: 61 74 69 62 69 6c 69 74 79 20 62 72 65 61 6b 2c  atibility break,
a3c0: 20 73 6f 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   so the original
a3d0: 20 62 65 68 61 76 69 6f 72 20 69 73 20 72 65 74   behavior is ret
a3e0: 61 69 6e 65 64 2e 20 54 68 69 73 20 6d 65 61 6e  ained. This mean
a3f0: 73 0a 74 68 61 74 20 5e 28 74 68 65 20 66 6f 6c  s.that ^(the fol
a400: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 74 61 62  lowing three tab
a410: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
a420: 61 6c 6c 20 63 61 75 73 65 20 74 68 65 20 63 6f  all cause the co
a430: 6c 75 6d 6e 20 22 78 22 20 74 6f 20 62 65 20 61  lumn "x" to be a
a440: 6e 0a 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n.alias for the 
a450: 72 6f 77 69 64 20 28 61 6e 20 69 6e 74 65 67 65  rowid (an intege
a460: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3a 0a  r primary key):.
a470: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52  .<ul>.<li><tt>CR
a480: 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
a490: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
a4a0: 45 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f  EY ASC, y, z);</
a4b0: 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41  tt>.<li><tt>CREA
a4c0: 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
a4d0: 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d  EGER, y, z, PRIM
a4e0: 41 52 59 20 4b 45 59 28 78 20 41 53 43 29 29 3b  ARY KEY(x ASC));
a4f0: 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52  </tt>.<li><tt>CR
a500: 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
a510: 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52  NTEGER, y, z, PR
a520: 49 4d 41 52 59 20 4b 45 59 28 78 20 44 45 53 43  IMARY KEY(x DESC
a530: 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e  ));</tt>.</ul>)^
a540: 0a 0a 3c 70 3e 42 75 74 20 5e 28 74 68 65 20 66  ..<p>But ^(the f
a550: 6f 6c 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61  ollowing declara
a560: 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65  tion does not re
a570: 73 75 6c 74 20 69 6e 20 22 78 22 20 62 65 69 6e  sult in "x" bein
a580: 67 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74  g an alias for.t
a590: 68 65 20 72 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c  he rowid:.<ul>.<
a5a0: 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41  li><tt>CREATE TA
a5b0: 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 20  BLE t(x INTEGER 
a5c0: 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43  PRIMARY KEY DESC
a5d0: 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f  , y, z);</tt>.</
a5e0: 75 6c 3e 29 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64  ul>)^..<p>^Rowid
a5f0: 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 6d   values may be m
a600: 6f 64 69 66 69 65 64 20 75 73 69 6e 67 20 61 6e  odified using an
a610: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
a620: 74 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 77 61  t in the same.wa
a630: 79 20 61 73 20 61 6e 79 20 6f 74 68 65 72 20 63  y as any other c
a640: 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c  olumn value can,
a650: 20 65 69 74 68 65 72 20 75 73 69 6e 67 20 6f 6e   either using on
a660: 65 20 6f 66 20 74 68 65 20 62 75 69 6c 74 2d 69  e of the built-i
a670: 6e 20 61 6c 69 61 73 65 73 0a 28 22 72 6f 77 69  n aliases.("rowi
a680: 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72  d", "oid" or "_r
a690: 6f 77 69 64 5f 22 29 20 6f 72 20 62 79 20 75 73  owid_") or by us
a6a0: 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 63 72 65  ing an alias cre
a6b0: 61 74 65 64 20 62 79 20 61 6e 20 69 6e 74 65 67  ated by an integ
a6c0: 65 72 0a 70 72 69 6d 61 72 79 20 6b 65 79 2e 20  er.primary key. 
a6d0: 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49  ^Similarly, an I
a6e0: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
a6f0: 6d 61 79 20 70 72 6f 76 69 64 65 20 61 20 76 61  may provide a va
a700: 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20 74 68  lue to use as th
a710: 65 0a 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68  e.rowid for each
a720: 20 72 6f 77 20 69 6e 73 65 72 74 65 64 2e 20 5e   row inserted. ^
a730: 28 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53  (Unlike normal S
a740: 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 61  QLite columns, a
a750: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
a760: 79 0a 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63  y.key or rowid c
a770: 6f 6c 75 6d 6e 20 6d 75 73 74 20 63 6f 6e 74 61  olumn must conta
a780: 69 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  in integer value
a790: 73 2e 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61  s. Integer prima
a7a0: 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 0a  ry key or rowid.
a7b0: 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20  columns are not 
a7c0: 61 62 6c 65 20 74 6f 20 68 6f 6c 64 20 66 6c 6f  able to hold flo
a7d0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
a7e0: 65 73 2c 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f  es, strings, BLO
a7f0: 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a  Bs, or NULLs.)^.
a800: 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54  .<p>^If an UPDAT
a810: 45 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65  E statement atte
a820: 6d 70 74 73 20 74 6f 20 73 65 74 20 61 6e 20 69  mpts to set an i
a830: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
a840: 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75  ey or rowid colu
a850: 6d 6e 0a 74 6f 20 61 20 4e 55 4c 4c 20 6f 72 20  mn.to a NULL or 
a860: 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72 20 74  blob value, or t
a870: 6f 20 61 20 73 74 72 69 6e 67 20 6f 72 20 72 65  o a string or re
a880: 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63 61  al value that ca
a890: 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73  nnot be lossless
a8a0: 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly.converted to 
a8b0: 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 20 22 64  an integer, a "d
a8c0: 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68  atatype mismatch
a8d0: 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61  " error occurs a
a8e0: 6e 64 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  nd the statement
a8f0: 0a 69 73 20 61 62 6f 72 74 65 64 2e 20 5e 49 66  .is aborted. ^If
a900: 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
a910: 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f  ment attempts to
a920: 20 69 6e 73 65 72 74 20 61 20 62 6c 6f 62 20 76   insert a blob v
a930: 61 6c 75 65 2c 20 6f 72 20 61 20 73 74 72 69 6e  alue, or a strin
a940: 67 0a 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  g.or real value 
a950: 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c  that cannot be l
a960: 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
a970: 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
a980: 72 20 69 6e 74 6f 20 61 6e 0a 69 6e 74 65 67 65  r into an.intege
a990: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72  r primary key or
a9a0: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61   rowid column, a
a9b0: 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61   "datatype misma
a9c0: 74 63 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72  tch" error occur
a9d0: 73 20 61 6e 64 20 74 68 65 0a 73 74 61 74 65 6d  s and the.statem
a9e0: 65 6e 74 20 69 73 20 61 62 6f 72 74 65 64 2e 0a  ent is aborted..
a9f0: 0a 3c 70 3e 5e 49 66 20 61 6e 20 49 4e 53 45 52  .<p>^If an INSER
aa00: 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65  T statement atte
aa10: 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20 61  mpts to insert a
aa20: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f   NULL value into
aa30: 20 61 20 72 6f 77 69 64 20 6f 72 0a 69 6e 74 65   a rowid or.inte
aa40: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
aa50: 63 6f 6c 75 6d 6e 2c 20 74 68 65 20 73 79 73 74  column, the syst
aa60: 65 6d 20 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e  em chooses an in
aa70: 74 65 67 65 72 20 76 61 6c 75 65 20 74 6f 20 75  teger value to u
aa80: 73 65 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20  se as the.rowid 
aa90: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 41  automatically. A
aaa0: 20 64 65 74 61 69 6c 65 64 20 64 65 73 63 72 69   detailed descri
aab0: 70 74 69 6f 6e 20 6f 66 20 68 6f 77 20 74 68 69  ption of how thi
aac0: 73 20 69 73 20 64 6f 6e 65 20 69 73 20 70 72 6f  s is done is pro
aad0: 76 69 64 65 64 0a 3c 61 20 68 72 65 66 3d 22 61  vided.<a href="a
aae0: 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70  utoinc.html">sep
aaf0: 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e  arately</a>.</p>
ab00: 0a 0a 3c 70 3e 5e 28 54 68 65 20 5b 70 61 72 65  ..<p>^(The [pare
ab10: 6e 74 20 6b 65 79 5d 20 6f 66 20 61 20 5b 66 6f  nt key] of a [fo
ab20: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
ab30: 61 69 6e 74 5d 20 69 73 20 6e 6f 74 20 61 6c 6c  aint] is not all
ab40: 6f 77 65 64 20 74 6f 0a 75 73 65 20 74 68 65 20  owed to.use the 
ab50: 72 6f 77 69 64 2e 20 20 54 68 65 20 70 61 72 65  rowid.  The pare
ab60: 6e 74 20 6b 65 79 20 6d 75 73 74 20 75 73 65 64  nt key must used
ab70: 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f   named columns o
ab80: 6e 6c 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c  nly.)^</p>..<tcl
ab90: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
aba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abe0: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
abf0: 20 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65   TRIGGER} create
ac00: 74 72 69 67 67 65 72 20 7b 7b 43 52 45 41 54 45  trigger {{CREATE
ac10: 20 54 52 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62   TRIGGER}}..Bubb
ac20: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
ac30: 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 20 31 0a  -trigger-stmt 1.
ac40: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
ac50: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73  CREATE TRIGGER s
ac60: 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
ac70: 20 74 6f 20 61 64 64 20 74 72 69 67 67 65 72 73   to add triggers
ac80: 20 74 6f 20 74 68 65 20 0a 64 61 74 61 62 61 73   to the .databas
ac90: 65 20 73 63 68 65 6d 61 2e 20 5e 54 72 69 67 67  e schema. ^Trigg
aca0: 65 72 73 20 61 72 65 20 64 61 74 61 62 61 73 65  ers are database
acb0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 0a 74 68 61   operations .tha
acc0: 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  t are automatica
acd0: 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77 68  lly performed wh
ace0: 65 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 64  en a specified d
acf0: 61 74 61 62 61 73 65 20 65 76 65 6e 74 0a 6f 63  atabase event.oc
ad00: 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e  curs.  </p>..<p>
ad10: 5e 41 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  ^A trigger may b
ad20: 65 20 73 70 65 63 69 66 69 65 64 20 74 6f 20 66  e specified to f
ad30: 69 72 65 20 77 68 65 6e 65 76 65 72 20 61 20 5b  ire whenever a [
ad40: 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54  DELETE], [INSERT
ad50: 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f  ],.or [UPDATE] o
ad60: 66 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20 64  f a.particular d
ad70: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 63  atabase table oc
ad80: 63 75 72 73 2c 20 6f 72 20 77 68 65 6e 65 76 65  curs, or wheneve
ad90: 72 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63  r an [UPDATE] oc
ada0: 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f  curs on.on one o
adb0: 72 20 6d 6f 72 65 20 73 70 65 63 69 66 69 65 64  r more specified
adc0: 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61   columns of a ta
add0: 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74  ble.</p>..<p>^At
ade0: 20 74 68 69 73 20 74 69 6d 65 20 53 51 4c 69 74   this time SQLit
adf0: 65 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20  e supports only 
ae00: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 74 72 69  FOR EACH ROW tri
ae10: 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45  ggers, not FOR E
ae20: 41 43 48 0a 53 54 41 54 45 4d 45 4e 54 20 74 72  ACH.STATEMENT tr
ae30: 69 67 67 65 72 73 2e 20 5e 48 65 6e 63 65 20 65  iggers. ^Hence e
ae40: 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69 66  xplicitly specif
ae50: 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20 52 4f  ying FOR EACH RO
ae60: 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e  W is optional..^
ae70: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 6d 70  FOR EACH ROW imp
ae80: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 53 51  lies that the SQ
ae90: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
aea0: 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 74 72  cified in the tr
aeb0: 69 67 67 65 72 0a 6d 61 79 20 62 65 20 65 78 65  igger.may be exe
aec0: 63 75 74 65 64 20 28 64 65 70 65 6e 64 69 6e 67  cuted (depending
aed0: 20 6f 6e 20 74 68 65 20 57 48 45 4e 20 63 6c 61   on the WHEN cla
aee0: 75 73 65 29 20 66 6f 72 20 65 61 63 68 20 64 61  use) for each da
aef0: 74 61 62 61 73 65 20 72 6f 77 20 62 65 69 6e 67  tabase row being
af00: 0a 69 6e 73 65 72 74 65 64 2c 20 75 70 64 61 74  .inserted, updat
af10: 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79  ed or deleted by
af20: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63   the statement c
af30: 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67  ausing the trigg
af40: 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a  er to fire.</p>.
af50: 0a 3c 70 3e 5e 28 42 6f 74 68 20 74 68 65 20 57  .<p>^(Both the W
af60: 48 45 4e 20 63 6c 61 75 73 65 20 61 6e 64 20 74  HEN clause and t
af70: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
af80: 6e 73 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c  ns may access el
af90: 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72  ements of .the r
afa0: 6f 77 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65  ow being inserte
afb0: 64 2c 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70  d, deleted or up
afc0: 64 61 74 65 64 20 75 73 69 6e 67 20 72 65 66 65  dated using refe
afd0: 72 65 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f  rences of the fo
afe0: 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75  rm ."NEW.<i>colu
aff0: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64  mn-name</i>" and
b000: 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d   "OLD.<i>column-
b010: 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65  name</i>", where
b020: 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
b030: 2f 69 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  /i> is the name 
b040: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  of a column from
b050: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
b060: 74 68 65 20 74 72 69 67 67 65 72 0a 69 73 20 61  the trigger.is a
b070: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e 29  ssociated with.)
b080: 5e 20 5e 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20  ^ ^(OLD and NEW 
b090: 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f  references may o
b0a0: 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 74  nly be used in t
b0b0: 72 69 67 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74  riggers on.event
b0c0: 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 79  s for which they
b0d0: 20 61 72 65 20 72 65 6c 65 76 61 6e 74 2c 20 61   are relevant, a
b0e0: 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
b0f0: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
b100: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a  cellpadding=10>.
b110: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
b120: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
b130: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
b140: 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e  >INSERT</i></td>
b150: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
b160: 22 3e 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73  ">NEW references
b170: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
b180: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76  </tr>.<tr>.<td v
b190: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
b1a0: 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d  n="right" width=
b1b0: 31 32 30 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69  120><i>UPDATE</i
b1c0: 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  ></td>.<td valig
b1d0: 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20  n="top">NEW and 
b1e0: 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61  OLD references a
b1f0: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
b200: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  tr>.<tr>.<td val
b210: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
b220: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
b230: 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c  0><i>DELETE</i><
b240: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
b250: 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66 65 72 65  "top">OLD refere
b260: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
b270: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  td>.</tr>.</tabl
b280: 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49  e>.</p>)^..<p>^I
b290: 66 20 61 20 57 48 45 4e 20 63 6c 61 75 73 65 20  f a WHEN clause 
b2a0: 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65  is supplied, the
b2b0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
b2c0: 73 70 65 63 69 66 69 65 64 0a 61 72 65 20 6f 6e  specified.are on
b2d0: 6c 79 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  ly executed for 
b2e0: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
b2f0: 68 65 20 57 48 45 4e 0a 63 6c 61 75 73 65 20 69  he WHEN.clause i
b300: 73 20 74 72 75 65 2e 20 5e 49 66 20 6e 6f 20 57  s true. ^If no W
b310: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
b320: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
b330: 73 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 65  statements.are e
b340: 78 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20  xecuted for all 
b350: 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  rows.</p>..<p>^T
b360: 68 65 20 42 45 46 4f 52 45 20 6f 72 20 41 46 54  he BEFORE or AFT
b370: 45 52 20 6b 65 79 77 6f 72 64 20 64 65 74 65 72  ER keyword deter
b380: 6d 69 6e 65 73 20 77 68 65 6e 20 74 68 65 20 74  mines when the t
b390: 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 0a 77  rigger actions.w
b3a0: 69 6c 6c 20 62 65 20 65 78 65 63 75 74 65 64 20  ill be executed 
b3b0: 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20  relative to the 
b3c0: 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66  insertion, modif
b3d0: 69 63 61 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76  ication or remov
b3e0: 61 6c 20 6f 66 20 74 68 65 0a 61 73 73 6f 63 69  al of the.associ
b3f0: 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c  ated row.</p>..<
b400: 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49  p>^An [ON CONFLI
b410: 43 54 5d 20 63 6c 61 75 73 65 20 6d 61 79 20 62  CT] clause may b
b420: 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  e specified as p
b430: 61 72 74 20 6f 66 20 61 6e 20 5b 55 50 44 41 54  art of an [UPDAT
b440: 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61  E] or [INSERT].a
b450: 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 74 68 65  ction within the
b460: 20 62 6f 64 79 20 6f 66 20 74 68 65 20 74 72 69   body of the tri
b470: 67 67 65 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69  gger..^However i
b480: 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  f an [ON CONFLIC
b490: 54 5d 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  T] clause is spe
b4a0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
b4b0: 66 20 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74  f .the statement
b4c0: 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72 69   causing the tri
b4d0: 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68  gger to fire, th
b4e0: 65 6e 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64  en conflict hand
b4f0: 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74  ling.policy of t
b500: 68 65 20 6f 75 74 65 72 20 73 74 61 74 65 6d 65  he outer stateme
b510: 6e 74 20 69 73 20 75 73 65 64 20 69 6e 73 74 65  nt is used inste
b520: 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69  ad.</p>..<p>^Tri
b530: 67 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61  ggers are automa
b540: 74 69 63 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52  tically [DROP TR
b550: 49 47 47 45 52 20 7c 20 64 72 6f 70 70 65 64 5d  IGGER | dropped]
b560: 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20  .when the table 
b570: 74 68 61 74 20 74 68 65 79 20 61 72 65 20 0a 61  that they are .a
b580: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 28  ssociated with (
b590: 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d  the <i>table-nam
b5a0: 65 3c 2f 69 3e 20 74 61 62 6c 65 29 20 69 73 20  e</i> table) is 
b5b0: 0a 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64  .[DROP TABLE | d
b5c0: 72 6f 70 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76  ropped].  ^Howev
b5d0: 65 72 20 69 66 20 74 68 65 20 74 72 69 67 67 65  er if the trigge
b5e0: 72 20 61 63 74 69 6f 6e 73 20 72 65 66 65 72 65  r actions refere
b5f0: 6e 63 65 0a 6f 74 68 65 72 20 74 61 62 6c 65 73  nce.other tables
b600: 2c 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  , the trigger is
b610: 20 6e 6f 74 20 64 72 6f 70 70 65 64 20 6f 72 20   not dropped or 
b620: 6d 6f 64 69 66 69 65 64 20 69 66 20 74 68 6f 73  modified if thos
b630: 65 20 6f 74 68 65 72 0a 74 61 62 6c 65 73 20 61  e other.tables a
b640: 72 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c  re [DROP TABLE |
b650: 20 64 72 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c   dropped] or [AL
b660: 54 45 52 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69  TER TABLE | modi
b670: 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  fied].</p>..<p>^
b680: 54 72 69 67 67 65 72 73 20 61 72 65 20 72 65 6d  Triggers are rem
b690: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  oved using the [
b6a0: 44 52 4f 50 20 54 52 49 47 47 45 52 5d 20 73 74  DROP TRIGGER] st
b6b0: 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68  atement.</p>..<h
b6c0: 33 3e 53 79 6e 74 61 78 20 52 65 73 74 72 69 63  3>Syntax Restric
b6d0: 74 69 6f 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c  tions On UPDATE,
b6e0: 20 44 45 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53   DELETE, and INS
b6f0: 45 52 54 20 53 74 61 74 65 6d 65 6e 74 73 20 57  ERT Statements W
b700: 69 74 68 69 6e 0a 20 20 20 20 54 72 69 67 67 65  ithin.    Trigge
b710: 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  rs</h3>..<p>^The
b720: 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45   [UPDATE], [DELE
b730: 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54  TE], and [INSERT
b740: 5d 0a 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  ].statements wit
b750: 68 69 6e 20 74 72 69 67 67 65 72 73 20 64 6f 20  hin triggers do 
b760: 6e 6f 74 20 73 75 70 70 6f 72 74 0a 74 68 65 20  not support.the 
b770: 66 75 6c 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  full syntax for 
b780: 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54  [UPDATE], [DELET
b790: 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d  E], and [INSERT]
b7a0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 54 68   statements.  Th
b7b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74  e following.rest
b7c0: 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c  rictions apply:<
b7d0: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
b7e0: 3e 0a 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f  >.  ^(The name o
b7f0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  f the table to b
b800: 65 20 6d 6f 64 69 66 69 65 64 20 69 6e 20 61 6e  e modified in an
b810: 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45   [UPDATE], [DELE
b820: 54 45 5d 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d  TE], or [INSERT]
b830: 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73  .  statement mus
b840: 74 20 62 65 20 61 6e 20 75 6e 71 75 61 6c 69 66  t be an unqualif
b850: 69 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20  ied table name. 
b860: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
b870: 20 6f 6e 65 20 6d 75 73 74 0a 20 20 75 73 65 20   one must.  use 
b880: 6a 75 73 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61  just "<i>tablena
b890: 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e  me</i>" not "<i>
b8a0: 64 61 74 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e  database</i><b>.
b8b0: 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65  </b><i>tablename
b8c0: 3c 2f 69 3e 22 0a 20 20 77 68 65 6e 20 73 70 65  </i>".  when spe
b8d0: 63 69 66 79 69 6e 67 20 74 68 65 20 74 61 62 6c  cifying the tabl
b8e0: 65 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65  e.)^  ^The table
b8f0: 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20   to be modified 
b900: 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68  must exist in th
b910: 65 0a 20 20 73 61 6d 65 20 64 61 74 61 62 61 73  e.  same databas
b920: 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6f  e as the table o
b930: 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
b940: 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61  the trigger is a
b950: 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c  ttached..  </p><
b960: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  /li>..<li><p>.  
b970: 5e 54 68 65 20 22 49 4e 53 45 52 54 20 49 4e 54  ^The "INSERT INT
b980: 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 20 44  O <i>table</i> D
b990: 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66  EFAULT VALUES" f
b9a0: 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49 4e 53 45  orm of the [INSE
b9b0: 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 20 20  RT] statement.  
b9c0: 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  is not supported
b9d0: 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ..  </p></li>..<
b9e0: 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 49 4e  li><p>.  ^The IN
b9f0: 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54  DEXED BY and NOT
ba00: 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73   INDEXED clauses
ba10: 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74   are not support
ba20: 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20  ed for [UPDATE] 
ba30: 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73  and.  [DELETE] s
ba40: 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70  tatements..  </p
ba50: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
ba60: 20 20 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59    ^(The ORDER BY
ba70: 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
ba80: 65 73 20 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61  es on [UPDATE] a
ba90: 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74  nd [DELETE] stat
baa0: 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20  ements are not. 
bab0: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 4f 52 44   supported.  ORD
bac0: 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
bad0: 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79  are not normally
bae0: 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b   supported for [
baf0: 55 50 44 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45  UPDATE] or.  [DE
bb00: 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e  LETE] in any con
bb10: 74 65 78 74 20 62 75 74 20 63 61 6e 20 62 65 20  text but can be 
bb20: 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d  enabled for top-
bb30: 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 73  level statements
bb40: 0a 20 20 75 73 69 6e 67 20 74 68 65 20 5b 53 51  .  using the [SQ
bb50: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
bb60: 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
bb70: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
bb80: 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a  tion.  However,.
bb90: 20 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74    that compile-t
bba0: 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20  ime option only 
bbb0: 61 70 70 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c  applies to top-l
bbc0: 65 76 65 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e  evel [UPDATE] an
bbd0: 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20 73 74 61  d [DELETE].  sta
bbe0: 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50  tements, not [UP
bbf0: 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54  DATE] and [DELET
bc00: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  E] statements wi
bc10: 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e  thin triggers.)^
bc20: 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75  .  </p></li>.</u
bc30: 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  l>..<tcl>hd_frag
bc40: 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f 6f 66 5f  ment instead_of_
bc50: 74 72 69 67 67 65 72 20 7b 49 4e 53 54 45 41 44  trigger {INSTEAD
bc60: 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44 20 4f 46   OF} {INSTEAD OF
bc70: 20 74 72 69 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a   trigger}</tcl>.
bc80: 3c 68 33 3e 49 4e 53 54 45 41 44 20 4f 46 20 74  <h3>INSTEAD OF t
bc90: 72 69 67 67 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e  rigger</h3>..<p>
bca0: 5e 54 72 69 67 67 65 72 73 20 6d 61 79 20 62 65  ^Triggers may be
bcb0: 20 63 72 65 61 74 65 64 20 6f 6e 20 5b 76 69 65   created on [vie
bcc0: 77 73 5d 2c 20 61 73 20 77 65 6c 6c 20 61 73 20  ws], as well as 
bcd0: 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c  ordinary tables,
bce0: 20 62 79 0a 73 70 65 63 69 66 79 69 6e 67 20 49   by.specifying I
bcf0: 4e 53 54 45 41 44 20 4f 46 20 69 6e 20 74 68 65  NSTEAD OF in the
bd00: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
bd10: 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 49 66 20  statement. .^If 
bd20: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49  one or more ON I
bd30: 4e 53 45 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45  NSERT, ON DELETE
bd40: 0a 6f 72 20 4f 4e 20 55 50 44 41 54 45 20 74 72  .or ON UPDATE tr
bd50: 69 67 67 65 72 73 20 61 72 65 20 64 65 66 69 6e  iggers are defin
bd60: 65 64 20 6f 6e 20 61 20 76 69 65 77 2c 20 74 68  ed on a view, th
bd70: 65 6e 20 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a  en it is not an.
bd80: 65 72 72 6f 72 20 74 6f 20 65 78 65 63 75 74 65  error to execute
bd90: 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
bda0: 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  TE or UPDATE sta
bdb0: 74 65 6d 65 6e 74 20 6f 6e 20 74 68 65 20 76 69  tement on the vi
bdc0: 65 77 2c 20 0a 72 65 73 70 65 63 74 69 76 65 6c  ew, .respectivel
bdd0: 79 2e 20 20 5e 49 6e 73 74 65 61 64 2c 0a 65 78  y.  ^Instead,.ex
bde0: 65 63 75 74 69 6e 67 20 61 6e 20 49 4e 53 45 52  ecuting an INSER
bdf0: 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  T, DELETE or UPD
be00: 41 54 45 20 6f 6e 20 74 68 65 20 76 69 65 77 20  ATE on the view 
be10: 63 61 75 73 65 73 20 74 68 65 20 61 73 73 6f 63  causes the assoc
be20: 69 61 74 65 64 0a 74 72 69 67 67 65 72 73 20 74  iated.triggers t
be30: 6f 20 66 69 72 65 2e 20 5e 54 68 65 20 72 65 61  o fire. ^The rea
be40: 6c 20 74 61 62 6c 65 73 20 75 6e 64 65 72 6c 79  l tables underly
be50: 69 6e 67 20 74 68 65 20 76 69 65 77 20 61 72 65  ing the view are
be60: 20 6e 6f 74 20 6d 6f 64 69 66 69 65 64 0a 28 65   not modified.(e
be70: 78 63 65 70 74 20 70 6f 73 73 69 62 6c 79 20 65  xcept possibly e
be80: 78 70 6c 69 63 69 74 6c 79 2c 20 62 79 20 61 20  xplicitly, by a 
be90: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 29  trigger program)
bea0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  .</p>..<p>^Note 
beb0: 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65  that the [sqlite
bec0: 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64  3_changes()] and
bed0: 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
bee0: 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72  changes()] inter
bef0: 66 61 63 65 73 0a 64 6f 20 6e 6f 74 20 63 6f 75  faces.do not cou
bf00: 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72  nt INSTEAD OF tr
bf10: 69 67 67 65 72 20 66 69 72 69 6e 67 73 2c 20 62  igger firings, b
bf20: 75 74 20 74 68 65 0a 5b 63 6f 75 6e 74 5f 63 68  ut the.[count_ch
bf30: 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 20 64 6f  anges pragma] do
bf40: 65 73 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44  es count INSTEAD
bf50: 20 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69   OF trigger firi
bf60: 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61  ng.</p>..<h3>Exa
bf70: 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  mples</h3>..<p>^
bf80: 28 41 73 73 75 6d 69 6e 67 20 74 68 61 74 20 63  (Assuming that c
bf90: 75 73 74 6f 6d 65 72 20 72 65 63 6f 72 64 73 20  ustomer records 
bfa0: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
bfb0: 65 20 22 63 75 73 74 6f 6d 65 72 73 22 20 74 61  e "customers" ta
bfc0: 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72  ble, and.that or
bfd0: 64 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20  der records are 
bfe0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 6f  stored in the "o
bff0: 72 64 65 72 73 22 20 74 61 62 6c 65 2c 20 74 68  rders" table, th
c000: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 72 69 67  e following trig
c010: 67 65 72 0a 65 6e 73 75 72 65 73 20 74 68 61 74  ger.ensures that
c020: 20 61 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20   all associated 
c030: 6f 72 64 65 72 73 20 61 72 65 20 72 65 64 69 72  orders are redir
c040: 65 63 74 65 64 20 77 68 65 6e 20 61 20 63 75 73  ected when a cus
c050: 74 6f 6d 65 72 20 63 68 61 6e 67 65 73 0a 68 69  tomer changes.hi
c060: 73 20 6f 72 20 68 65 72 20 61 64 64 72 65 73 73  s or her address
c070: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
c080: 70 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 52 49  ple {.CREATE TRI
c090: 47 47 45 52 20 75 70 64 61 74 65 5f 63 75 73 74  GGER update_cust
c0a0: 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 55 50 44  omer_address UPD
c0b0: 41 54 45 20 4f 46 20 61 64 64 72 65 73 73 20 4f  ATE OF address O
c0c0: 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a 20 20 42  N customers .  B
c0d0: 45 47 49 4e 0a 20 20 20 20 55 50 44 41 54 45 20  EGIN.    UPDATE 
c0e0: 6f 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65  orders SET addre
c0f0: 73 73 20 3d 20 6e 65 77 2e 61 64 64 72 65 73 73  ss = new.address
c100: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
c110: 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b  name = old.name;
c120: 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a  .  END;.}</tcl>.
c130: 0a 3c 70 3e 57 69 74 68 20 74 68 69 73 20 74 72  .<p>With this tr
c140: 69 67 67 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c  igger installed,
c150: 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 73   executing the s
c160: 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c  tatement:</p>..<
c170: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50  tcl>Example {.UP
c180: 44 41 54 45 20 63 75 73 74 6f 6d 65 72 73 20 53  DATE customers S
c190: 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20  ET address = '1 
c1a0: 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20  Main St.' WHERE 
c1b0: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
c1c0: 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  es';.}</tcl>..<p
c1d0: 3e 63 61 75 73 65 73 20 74 68 65 20 66 6f 6c 6c  >causes the foll
c1e0: 6f 77 69 6e 67 20 74 6f 20 62 65 20 61 75 74 6f  owing to be auto
c1f0: 6d 61 74 69 63 61 6c 6c 79 20 65 78 65 63 75 74  matically execut
c200: 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78  ed:</p>..<tcl>Ex
c210: 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f  ample {.UPDATE o
c220: 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73  rders SET addres
c230: 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27  s = '1 Main St.'
c240: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
c250: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
c260: 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a  es';.}</tcl>)^..
c270: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
c280: 20 75 6e 64 65 66 5f 62 65 66 6f 72 65 20 7b 75   undef_before {u
c290: 6e 64 65 66 69 6e 65 64 20 42 45 46 4f 52 45 20  ndefined BEFORE 
c2a0: 74 72 69 67 67 65 72 20 62 65 68 61 76 69 6f 72  trigger behavior
c2b0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 61 75 74  }</tcl>.<h3>Caut
c2c0: 69 6f 6e 73 20 4f 6e 20 54 68 65 20 55 73 65 20  ions On The Use 
c2d0: 4f 66 20 42 45 46 4f 52 45 20 74 72 69 67 67 65  Of BEFORE trigge
c2e0: 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61  rs</h3>..<p>If a
c2f0: 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 6f   BEFORE UPDATE o
c300: 72 20 42 45 46 4f 52 45 20 44 45 4c 45 54 45 20  r BEFORE DELETE 
c310: 74 72 69 67 67 65 72 20 6d 6f 64 69 66 69 65 73  trigger modifies
c320: 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f   or deletes a ro
c330: 77 0a 74 68 61 74 20 77 61 73 20 74 6f 20 68 61  w.that was to ha
c340: 76 65 20 62 65 65 6e 20 75 70 64 61 74 65 64 20  ve been updated 
c350: 6f 72 20 64 65 6c 65 74 65 64 2c 20 74 68 65 6e  or deleted, then
c360: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
c370: 68 65 20 73 75 62 73 65 71 75 65 6e 74 0a 75 70  he subsequent.up
c380: 64 61 74 65 20 6f 72 20 64 65 6c 65 74 65 20 6f  date or delete o
c390: 70 65 72 61 74 69 6f 6e 20 69 73 20 75 6e 64 65  peration is unde
c3a0: 66 69 6e 65 64 2e 20 20 46 75 72 74 68 65 72 6d  fined.  Furtherm
c3b0: 6f 72 65 2c 20 69 66 20 61 20 42 45 46 4f 52 45  ore, if a BEFORE
c3c0: 20 74 72 69 67 67 65 72 0a 6d 6f 64 69 66 69 65   trigger.modifie
c3d0: 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72  s or deletes a r
c3e0: 6f 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 75  ow, then it is u
c3f0: 6e 64 65 66 69 6e 65 64 20 77 68 65 74 68 65 72  ndefined whether
c400: 20 6f 72 20 6e 6f 74 20 41 46 54 45 52 20 74 72   or not AFTER tr
c410: 69 67 67 65 72 73 0a 74 68 61 74 20 77 6f 75 6c  iggers.that woul
c420: 64 20 68 61 76 65 20 6f 74 68 65 72 77 69 73 65  d have otherwise
c430: 20 72 75 6e 20 6f 6e 20 74 68 6f 73 65 20 72 6f   run on those ro
c440: 77 73 20 77 69 6c 6c 20 69 6e 20 66 61 63 74 20  ws will in fact 
c450: 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  run..</p>..<p>Th
c460: 65 20 76 61 6c 75 65 20 6f 66 20 4e 45 57 2e 72  e value of NEW.r
c470: 6f 77 69 64 20 69 73 20 75 6e 64 65 66 69 6e 65  owid is undefine
c480: 64 20 69 6e 20 61 20 42 45 46 4f 52 45 20 49 4e  d in a BEFORE IN
c490: 53 45 52 54 20 74 72 69 67 67 65 72 20 69 6e 20  SERT trigger in 
c4a0: 77 68 69 63 68 0a 74 68 65 20 72 6f 77 69 64 20  which.the rowid 
c4b0: 69 73 20 6e 6f 74 20 65 78 70 6c 69 63 69 74 6c  is not explicitl
c4c0: 79 20 73 65 74 20 74 6f 20 61 6e 20 69 6e 74 65  y set to an inte
c4d0: 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63  ger.</p>..<p>Bec
c4e0: 61 75 73 65 20 6f 66 20 74 68 65 20 62 65 68 61  ause of the beha
c4f0: 76 69 6f 72 73 20 64 65 73 63 72 69 62 65 64 20  viors described 
c500: 61 62 6f 76 65 2c 20 70 72 6f 67 72 61 6d 6d 65  above, programme
c510: 72 73 20 61 72 65 20 65 6e 63 6f 75 72 61 67 65  rs are encourage
c520: 64 20 74 6f 0a 70 72 65 66 65 72 20 41 46 54 45  d to.prefer AFTE
c530: 52 20 74 72 69 67 67 65 72 73 20 6f 76 65 72 20  R triggers over 
c540: 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 73 2e  BEFORE triggers.
c550: 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 68 65 20 52 41  </p>..<h3>The RA
c560: 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 3c 2f  ISE() function</
c570: 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70 65 63  h3>..<p>^(A spec
c580: 69 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ial SQL function
c590: 20 52 41 49 53 45 28 29 20 6d 61 79 20 62 65 20   RAISE() may be 
c5a0: 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 74 72  used within a tr
c5b0: 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c 29 5e  igger-program,)^
c5c0: 0a 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77  .with the follow
c5d0: 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20 0a  ing syntax</p> .
c5e0: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
c5f0: 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74 69  ram raise-functi
c600: 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 57 68  on</tcl>..<p>^Wh
c610: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 69  en one of the fi
c620: 72 73 74 20 74 68 72 65 65 20 66 6f 72 6d 73 20  rst three forms 
c630: 69 73 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67  is called during
c640: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
c650: 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20  .execution, the 
c660: 73 70 65 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f  specified [ON CO
c670: 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65 73 73 69  NFLICT] processi
c680: 6e 67 20 69 73 20 70 65 72 66 6f 72 6d 65 64 0a  ng is performed.
c690: 28 65 69 74 68 65 72 20 41 42 4f 52 54 2c 20 46  (either ABORT, F
c6a0: 41 49 4c 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 29  AIL or ROLLBACK)
c6b0: 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74   and the current
c6c0: 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65   query terminate
c6d0: 73 2e 0a 41 6e 20 65 72 72 6f 72 20 63 6f 64 65  s..An error code
c6e0: 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53   of [SQLITE_CONS
c6f0: 54 52 41 49 4e 54 5d 20 69 73 20 72 65 74 75 72  TRAINT] is retur
c700: 6e 65 64 20 74 6f 20 74 68 65 20 61 70 70 6c 69  ned to the appli
c710: 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69  cation,.along wi
c720: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
c730: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c   error message.<
c740: 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52 41  /p>..<p>^When RA
c750: 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20 63  ISE(IGNORE) is c
c760: 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61 69  alled, the remai
c770: 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75 72 72  nder of the curr
c780: 65 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f 67  ent trigger prog
c790: 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d 65  ram,.the stateme
c7a0: 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74  nt that caused t
c7b0: 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
c7c0: 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e  am to execute an
c7d0: 64 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74  d any subsequent
c7e0: 0a 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d  .trigger program
c7f0: 73 20 74 68 61 74 20 77 6f 75 6c 64 20 6f 66 20  s that would of 
c800: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 61 72  been executed ar
c810: 65 20 61 62 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f  e abandoned. ^No
c820: 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65   database.change
c830: 73 20 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63  s are rolled bac
c840: 6b 2e 20 20 5e 49 66 20 74 68 65 20 73 74 61 74  k.  ^If the stat
c850: 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65  ement that cause
c860: 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  d the trigger pr
c870: 6f 67 72 61 6d 0a 74 6f 20 65 78 65 63 75 74 65  ogram.to execute
c880: 20 69 73 20 69 74 73 65 6c 66 20 70 61 72 74 20   is itself part 
c890: 6f 66 20 61 20 74 72 69 67 67 65 72 20 70 72 6f  of a trigger pro
c8a0: 67 72 61 6d 2c 20 74 68 65 6e 20 74 68 61 74 20  gram, then that 
c8b0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a  trigger program.
c8c0: 72 65 73 75 6d 65 73 20 65 78 65 63 75 74 69 6f  resumes executio
c8d0: 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  n at the beginni
c8e0: 6e 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73  ng of the next s
c8f0: 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  tep..</p>...<tcl
c900: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
c910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c950: 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  #.Section {CREAT
c960: 45 20 56 49 45 57 7d 20 7b 63 72 65 61 74 65 76  E VIEW} {createv
c970: 69 65 77 7d 20 7b 7b 43 52 45 41 54 45 20 56 49  iew} {{CREATE VI
c980: 45 57 7d 20 76 69 65 77 20 2a 76 69 65 77 73 7d  EW} view *views}
c990: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
c9a0: 63 72 65 61 74 65 2d 76 69 65 77 2d 73 74 6d 74  create-view-stmt
c9b0: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54   1.</tcl>..<p>^T
c9c0: 68 65 20 43 52 45 41 54 45 20 56 49 45 57 20 63  he CREATE VIEW c
c9d0: 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e 73 20 61  ommand assigns a
c9e0: 20 6e 61 6d 65 20 74 6f 20 61 20 70 72 65 2d 70   name to a pre-p
c9f0: 61 63 6b 61 67 65 64 20 0a 5b 53 45 4c 45 43 54  ackaged .[SELECT
ca00: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f  ] statement. .^O
ca10: 6e 63 65 20 74 68 65 20 76 69 65 77 20 69 73 20  nce the view is 
ca20: 63 72 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20  created, it can 
ca30: 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 46  be used in the F
ca40: 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e  ROM clause.of an
ca50: 6f 74 68 65 72 20 5b 53 45 4c 45 43 54 5d 20 69  other [SELECT] i
ca60: 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
ca70: 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le name..</p>..<
ca80: 70 3e 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22  p>^If the "TEMP"
ca90: 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20   or "TEMPORARY" 
caa0: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69  keyword occurs i
cab0: 6e 20 62 65 74 77 65 65 6e 20 22 43 52 45 41 54  n between "CREAT
cac0: 45 22 0a 61 6e 64 20 22 56 49 45 57 22 20 74 68  E".and "VIEW" th
cad0: 65 6e 20 74 68 65 20 76 69 65 77 20 74 68 61 74  en the view that
cae0: 20 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f   is created is o
caf0: 6e 6c 79 20 76 69 73 69 62 6c 65 20 74 6f 20 74  nly visible to t
cb00: 68 65 0a 70 72 6f 63 65 73 73 20 74 68 61 74 20  he.process that 
cb10: 6f 70 65 6e 65 64 20 74 68 65 20 64 61 74 61 62  opened the datab
cb20: 61 73 65 20 61 6e 64 20 69 73 20 61 75 74 6f 6d  ase and is autom
cb30: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
cb40: 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61   when.the databa
cb50: 73 65 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70  se is closed.</p
cb60: 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74  >..<p> ^If a &lt
cb70: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
cb80: 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  t; is specified,
cb90: 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 69   then the view i
cba0: 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68  s created in .th
cbb0: 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65  e named database
cbc0: 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  . ^It is an erro
cbd0: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
cbe0: 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  h a &lt;database
cbf0: 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68  -name&gt;.and th
cc00: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 6f  e TEMP keyword o
cc10: 6e 20 61 20 56 49 45 57 2c 20 75 6e 6c 65 73 73  n a VIEW, unless
cc20: 20 74 68 65 20 26 6c 74 3b 64 61 74 61 62 61 73   the &lt;databas
cc30: 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 22 74  e-name&gt; is "t
cc40: 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20 64 61 74  emp"..^If no dat
cc50: 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73 70  abase name is sp
cc60: 65 63 69 66 69 65 64 2c 20 61 6e 64 20 74 68 65  ecified, and the
cc70: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73   TEMP keyword is
cc80: 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a 74 68   not present,.th
cc90: 65 20 56 49 45 57 20 69 73 20 63 72 65 61 74 65  e VIEW is create
cca0: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  d in the main da
ccb0: 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tabase.</p>..<p>
ccc0: 5e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c  ^You cannot [DEL
ccd0: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20  ETE], [INSERT], 
cce0: 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 20 76 69  or [UPDATE] a vi
ccf0: 65 77 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20  ew.  ^Views are 
cd00: 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51  read-only .in SQ
cd10: 4c 69 74 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c  Lite.  ^However,
cd20: 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 79   in many cases y
cd30: 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49  ou can use an.[I
cd40: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
cd50: 72 5d 20 6f 6e 20 74 68 65 20 76 69 65 77 20 74  r] on the view t
cd60: 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68  o accomplish .th
cd70: 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e  e same thing.  ^
cd80: 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f 76 65  Views are remove
cd90: 64 20 0a 77 69 74 68 20 74 68 65 20 5b 44 52 4f  d .with the [DRO
cda0: 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e  P VIEW] command.
cdb0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
cdc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cdd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cde0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cdf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ce00: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
ce10: 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 52 54 55  on {CREATE VIRTU
ce20: 41 4c 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74  AL TABLE} {creat
ce30: 65 76 74 61 62 7d 20 7b 7b 43 52 45 41 54 45 20  evtab} {{CREATE 
ce40: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a  VIRTUAL TABLE}}.
ce50: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  .BubbleDiagram c
ce60: 72 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61  reate-virtual-ta
ce70: 62 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ble-stmt 1.</tcl
ce80: 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c  >..<p>A [virtual
ce90: 20 74 61 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e   table] is an in
cea0: 74 65 72 66 61 63 65 20 74 6f 20 61 6e 20 65 78  terface to an ex
ceb0: 74 65 72 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f  ternal storage o
cec0: 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e  r computation.en
ced0: 67 69 6e 65 20 74 68 61 74 20 61 70 70 65 61 72  gine that appear
cee0: 73 20 74 6f 20 62 65 20 61 20 74 61 62 6c 65 20  s to be a table 
cef0: 62 75 74 20 64 6f 65 73 20 6e 6f 74 20 61 63 74  but does not act
cf00: 75 61 6c 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f  ually store info
cf10: 72 6d 61 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64  rmation.in the d
cf20: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70  atabase file.</p
cf30: 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c  >..<p>In general
cf40: 2c 20 79 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79  , you can do any
cf50: 74 68 69 6e 67 20 77 69 74 68 20 61 20 5b 76 69  thing with a [vi
cf60: 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 74 68 61  rtual table] tha
cf70: 74 20 63 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69  t can be done.wi
cf80: 74 68 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  th an ordinary t
cf90: 61 62 6c 65 2c 20 65 78 63 65 70 74 20 74 68 61  able, except tha
cfa0: 74 20 5e 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72  t ^you cannot cr
cfb0: 65 61 74 65 20 69 6e 64 69 63 65 73 20 6f 72 20  eate indices or 
cfc0: 74 72 69 67 67 65 72 73 20 6f 6e 20 61 0a 76 69  triggers on a.vi
cfd0: 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53  rtual table.  ^S
cfe0: 6f 6d 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ome virtual tabl
cff0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
d000: 73 20 6d 69 67 68 74 20 69 6d 70 6f 73 65 20 61  s might impose a
d010: 64 64 69 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69  dditional.restri
d020: 63 74 69 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61  ctions.  For exa
d030: 6d 70 6c 65 2c 20 6d 61 6e 79 20 76 69 72 74 75  mple, many virtu
d040: 61 6c 20 74 61 62 6c 65 73 20 61 72 65 20 72 65  al tables are re
d050: 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70  ad-only.</p>..<p
d060: 3e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d  >The &lt;module-
d070: 6e 61 6d 65 26 67 74 3b 20 69 73 20 74 68 65 20  name&gt; is the 
d080: 6e 61 6d 65 20 6f 66 20 61 6e 20 6f 62 6a 65 63  name of an objec
d090: 74 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  t that implement
d0a0: 73 0a 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s.the virtual ta
d0b0: 62 6c 65 2e 20 20 5e 54 68 65 20 26 6c 74 3b 6d  ble.  ^The &lt;m
d0c0: 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20 6d  odule-name&gt; m
d0d0: 75 73 74 20 62 65 20 72 65 67 69 73 74 65 72 65  ust be registere
d0e0: 64 20 77 69 74 68 0a 74 68 65 20 53 51 4c 69 74  d with.the SQLit
d0f0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
d100: 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c  ction using.[sql
d110: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
d120: 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65  le()] or [sqlite
d130: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f  3_create_module_
d140: 76 32 28 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69  v2()].prior to i
d150: 73 73 75 69 6e 67 20 74 68 65 20 43 52 45 41 54  ssuing the CREAT
d160: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
d170: 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
d180: 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a 65 72  module takes zer
d190: 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d  o or more comma-
d1a0: 73 65 70 61 72 61 74 65 64 20 61 72 67 75 6d 65  separated argume
d1b0: 6e 74 73 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65  nts..^The argume
d1c0: 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73 74 20  nts can be just 
d1d0: 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74 20 61  about any text a
d1e0: 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68 61 73  s long as it has
d1f0: 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74   balanced.parent
d200: 68 65 73 65 73 2e 20 20 54 68 65 20 61 72 67 75  heses.  The argu
d210: 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73 20 73  ment syntax is s
d220: 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65 6e 65  ufficiently gene
d230: 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61 72 67  ral that the.arg
d240: 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6d 61  uments can be ma
d250: 64 65 20 74 6f 20 61 70 70 65 61 72 20 61 73 20  de to appear as 
d260: 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69  [column definiti
d270: 6f 6e 73 5d 20 69 6e 20 61 20 74 72 61 64 69 74  ons] in a tradit
d280: 69 6f 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54 41  ional.[CREATE TA
d290: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
d2a0: 20 0a 5e 53 51 4c 69 74 65 20 70 61 73 73 65 73   .^SQLite passes
d2b0: 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 72 67 75   the module argu
d2c0: 6d 65 6e 74 73 20 64 69 72 65 63 74 6c 79 0a 74  ments directly.t
d2d0: 6f 20 74 68 65 20 5b 78 43 72 65 61 74 65 5d 20  o the [xCreate] 
d2e0: 61 6e 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d  and [xConnect] m
d2f0: 65 74 68 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f  ethods of the mo
d300: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
d310: 69 6f 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79 20  ion.without any 
d320: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 2e 20  interpretation. 
d330: 20 49 74 20 69 73 20 74 68 65 20 72 65 73 70 6f   It is the respo
d340: 6e 73 69 62 69 6c 69 74 79 0a 6f 66 20 74 68 65  nsibility.of the
d350: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
d360: 74 61 74 69 6f 6e 20 74 6f 20 70 61 72 73 65 20  tation to parse 
d370: 61 6e 64 20 69 6e 74 65 72 70 72 65 74 20 69 74  and interpret it
d380: 73 20 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e  s own arguments.
d390: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74  </p>..<p>^A virt
d3a0: 75 61 6c 20 74 61 62 6c 65 20 69 73 20 64 65 73  ual table is des
d3b0: 74 72 6f 79 65 64 20 75 73 69 6e 67 20 74 68 65  troyed using the
d3c0: 20 6f 72 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20   ordinary.[DROP 
d3d0: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
d3e0: 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f 0a 44  .  There is no.D
d3f0: 52 4f 50 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ROP VIRTUAL TABL
d400: 45 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  E statement.</p>
d410: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
d420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d460: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 44  ######.Section D
d470: 45 4c 45 54 45 20 64 65 6c 65 74 65 20 7b 44 45  ELETE delete {DE
d480: 4c 45 54 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a  LETE *DELETEs}..
d490: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
d4a0: 6c 65 74 65 2d 73 74 6d 74 20 31 0a 42 75 62 62  lete-stmt 1.Bubb
d4b0: 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66  leDiagram qualif
d4c0: 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c  ied-table-name.<
d4d0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45  /tcl>..<p>The DE
d4e0: 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d  LETE command rem
d4f0: 6f 76 65 73 20 72 65 63 6f 72 64 73 20 66 72 6f  oves records fro
d500: 6d 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e  m the table iden
d510: 74 69 66 69 65 64 20 62 79 20 74 68 65 0a 20 20  tified by the.  
d520: 20 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61   <i>qualified-ta
d530: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 0a 0a  ble-name</i>. ..
d540: 3c 70 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45  <p>^If the WHERE
d550: 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70   clause is not p
d560: 72 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f  resent, all reco
d570: 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  rds in the table
d580: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20   are deleted..  
d590: 20 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c 61   ^If a WHERE cla
d5a0: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
d5b0: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65   then only those
d5c0: 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
d5d0: 74 68 65 0a 20 20 20 72 65 73 75 6c 74 20 6f 66  the.   result of
d5e0: 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
d5f0: 57 48 45 52 45 20 63 6c 61 75 73 65 20 61 73 20  WHERE clause as 
d600: 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  a [boolean expre
d610: 73 73 69 6f 6e 7c 0a 20 20 20 62 6f 6f 6c 65 61  ssion|.   boolea
d620: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
d630: 74 72 75 65 5d 20 61 72 65 20 64 65 6c 65 74 65  true] are delete
d640: 64 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  d...<h3>Restrict
d650: 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53  ions on DELETE S
d660: 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
d670: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
d680: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h3>..<p>The fol
d690: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
d6a0: 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c  ons apply to DEL
d6b0: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74  ETE statements t
d6c0: 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e  hat occur within
d6d0: 20 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20   the.   body of 
d6e0: 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
d6f0: 52 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c  R] statement:..<
d700: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  ul>.  <li><p>^Th
d710: 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
d720: 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73  /i> specified as
d730: 20 70 61 72 74 20 6f 66 20 61 20 44 45 4c 45 54   part of a DELET
d740: 45 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  E statement with
d750: 69 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65 72  in.    a trigger
d760: 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e   body must be un
d770: 71 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e  qualified.  ^(In
d780: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
d790: 65 0a 20 20 20 20 3c 69 3e 64 61 74 61 62 61 73  e.    <i>databas
d7a0: 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  e-name</i><b>.</
d7b0: 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65  b> prefix on the
d7c0: 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e   table name is n
d7d0: 6f 74 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20  ot allowed .    
d7e0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
d7f0: 29 5e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  )^ ^If the table
d800: 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
d810: 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65  igger is attache
d820: 64 20 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20  d is.    not in 
d830: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
d840: 65 2c 20 74 68 65 6e 20 44 45 4c 45 54 45 20 73  e, then DELETE s
d850: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
d860: 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20   the trigger.   
d870: 20 62 6f 64 79 20 6d 75 73 74 20 6f 70 65 72 61   body must opera
d880: 74 65 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74  te on tables wit
d890: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
d8a0: 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66  abase as it. ^If
d8b0: 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 74   the table.    t
d8c0: 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
d8d0: 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20  ger is attached 
d8e0: 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64  is in the TEMP d
d8f0: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
d900: 65 0a 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65  e.    unqualifie
d910: 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
d920: 62 6c 65 20 62 65 69 6e 67 20 64 65 6c 65 74 65  ble being delete
d930: 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e  d is resolved in
d940: 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
d950: 0a 20 20 20 20 69 74 20 69 73 20 66 6f 72 20 61  .    it is for a
d960: 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
d970: 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69  ment (by searchi
d980: 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d  ng first the TEM
d990: 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  P database, then
d9a0: 0a 20 20 20 20 74 68 65 20 6d 61 69 6e 20 64 61  .    the main da
d9b0: 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79  tabase, then any
d9c0: 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73   other databases
d9d0: 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
d9e0: 65 79 20 77 65 72 65 0a 20 20 20 20 61 74 74 61  ey were.    atta
d9f0: 63 68 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c  ched)..    .  <l
da00: 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  i><p>^The INDEXE
da10: 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
da20: 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
da30: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20   not allowed on 
da40: 44 45 4c 45 54 45 0a 20 20 20 20 73 74 61 74 65  DELETE.    state
da50: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
da60: 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c  ggers.</p>..  <l
da70: 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  i><p>^The LIMIT 
da80: 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
da90: 75 73 65 73 20 28 64 65 73 63 72 69 62 65 64 20  uses (described 
daa0: 62 65 6c 6f 77 29 20 61 72 65 20 75 6e 73 75 70  below) are unsup
dab0: 70 6f 72 74 65 64 20 66 6f 72 0a 20 20 20 20 44  ported for.    D
dac0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
dad0: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
dae0: 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33  .</p>.</ul>..<h3
daf0: 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20  >Optional LIMIT 
db00: 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
db10: 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  uses</h3>..<p>^(
db20: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
db30: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b  piled with the [
db40: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
db50: 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
db60: 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  T].compile-time 
db70: 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  option, then the
db80: 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44   syntax of the D
db90: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
dba0: 69 73 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74  is.extended by t
dbb0: 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f  he addition of o
dbc0: 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59  ptional ORDER BY
dbd0: 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
dbe0: 65 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  es:)^</p>..<tcl>
dbf0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
dc00: 6c 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65  lete-stmt-limite
dc10: 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20  d</tcl>..<p>^If 
dc20: 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  a DELETE stateme
dc30: 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63  nt has a LIMIT c
dc40: 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d  lause, the maxim
dc50: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  um number of row
dc60: 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 64  s that.will be d
dc70: 65 6c 65 74 65 64 20 69 73 20 66 6f 75 6e 64 20  eleted is found 
dc80: 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
dc90: 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65  e accompanying e
dca0: 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61  xpression and ca
dcb0: 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69  sting.it to an i
dcc0: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 49  nteger value. ^I
dcd0: 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
dce0: 74 68 65 20 65 76 61 6c 75 61 74 69 6e 67 20 74  the evaluating t
dcf0: 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a  he LIMIT clause.
dd00: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
dd10: 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
dd20: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  o an integer val
dd30: 75 65 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  ue, it is an err
dd40: 6f 72 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76 65  or. ^A .negative
dd50: 20 4c 49 4d 49 54 20 76 61 6c 75 65 20 69 73 20   LIMIT value is 
dd60: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22  interpreted as "
dd70: 6e 6f 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20  no limit". ^(If 
dd80: 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
dd90: 6d 65 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20 61  ment .also has a
dda0: 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  n OFFSET clause,
ddb0: 20 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69   then it is simi
ddc0: 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20  larly evaluated 
ddd0: 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 0a 69  and cast to an.i
dde0: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 41 67  nteger value. Ag
ddf0: 61 69 6e 2c 20 69 74 20 69 73 20 61 6e 20 65 72  ain, it is an er
de00: 72 6f 72 20 69 66 20 74 68 65 20 76 61 6c 75 65  ror if the value
de10: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
de20: 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20  essly.converted 
de30: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e  to an integer.)^
de40: 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f   ^If there is no
de50: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
de60: 6f 72 20 74 68 65 20 63 61 6c 63 75 6c 61 74 65  or the calculate
de70: 64 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  d.integer value 
de80: 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
de90: 20 65 66 66 65 63 74 69 76 65 20 4f 46 46 53 45   effective OFFSE
dea0: 54 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e  T value is zero.
deb0: 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 44 45  ..<p>^(If the DE
dec0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  LETE statement h
ded0: 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63  as an ORDER BY c
dee0: 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
def0: 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20  rows that would 
df00: 0a 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74  .be deleted in t
df10: 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
df20: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
df30: 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64  re sorted accord
df40: 69 6e 67 20 74 6f 20 74 68 65 20 0a 4f 52 44 45  ing to the .ORDE
df50: 52 20 42 59 2e 20 54 68 65 20 66 69 72 73 74 20  R BY. The first 
df60: 3c 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77  <i>M</i> rows, w
df70: 68 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73  here <i>M</i> is
df80: 20 74 68 65 20 76 61 6c 75 65 20 66 6f 75 6e 64   the value found
df90: 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   by.evaluating t
dfa0: 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
dfb0: 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65   expression, are
dfc0: 20 73 6b 69 70 70 65 64 2c 20 61 6e 64 20 74 68   skipped, and th
dfd0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e  e following .<i>
dfe0: 4e 3c 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e  N</i>, where <i>
dff0: 4e 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c  N</i> is the val
e000: 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ue of the LIMIT 
e010: 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20  expression, are 
e020: 64 65 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74  deleted.)^.^If t
e030: 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
e040: 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73  an <i>N</i> rows
e050: 20 72 65 6d 61 69 6e 69 6e 67 20 61 66 74 65 72   remaining after
e060: 20 74 61 6b 69 6e 67 20 74 68 65 20 4f 46 46 53   taking the OFFS
e070: 45 54 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61  ET clause.into a
e080: 63 63 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74 68  ccount, or if th
e090: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 65  e LIMIT clause e
e0a0: 76 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6e 65  valuated to a ne
e0b0: 67 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68  gative value, th
e0c0: 65 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67  en all.remaining
e0d0: 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65   rows are delete
e0e0: 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44  d...<p>^If the D
e0f0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
e100: 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20  has no ORDER BY 
e110: 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c  clause, then all
e120: 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64   rows that.would
e130: 20 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74   be deleted in t
e140: 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
e150: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
e160: 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20  re assembled in 
e170: 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64  an.arbitrary ord
e180: 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69  er before applyi
e190: 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64  ng the LIMIT and
e1a0: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20   OFFSET clauses 
e1b0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 74 68  to determine .th
e1c0: 65 20 73 75 62 73 65 74 20 74 68 61 74 20 61 72  e subset that ar
e1d0: 65 20 61 63 74 75 61 6c 6c 79 20 64 65 6c 65 74  e actually delet
e1e0: 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52  ed...<p>^(The OR
e1f0: 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
e200: 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
e210: 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  ent is used only
e220: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
e230: 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69  ich.rows fall wi
e240: 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20  thin the LIMIT. 
e250: 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  The order in whi
e260: 63 68 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65  ch rows are dele
e270: 74 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ted is arbitrary
e280: 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c  .and is not infl
e290: 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52  uenced by the OR
e2a0: 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e  DER BY clause.)^
e2b0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
e2c0: 6e 74 20 74 72 75 6e 63 61 74 65 6f 70 74 20 7b  nt truncateopt {
e2d0: 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
e2e0: 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ation}</tcl>.<h3
e2f0: 3e 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f 70  >The Truncate Op
e300: 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a  timization</h3>.
e310: 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57 48  .<p>^When the WH
e320: 45 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ERE is omitted f
e330: 72 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74 61  rom a DELETE sta
e340: 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 74  tement and the t
e350: 61 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65 74  able.being delet
e360: 65 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67 65  ed has no trigge
e370: 72 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20  rs,.SQLite uses 
e380: 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  an optimization 
e390: 74 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e 74  to erase the ent
e3a0: 69 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e  ire table conten
e3b0: 74 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  t.without having
e3c0: 20 74 6f 20 76 69 73 69 74 20 65 61 63 68 20 72   to visit each r
e3d0: 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ow of the table 
e3e0: 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68  individually..Th
e3f0: 69 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f 70  is "truncate" op
e400: 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73  timization makes
e410: 20 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e 20   the delete run 
e420: 6d 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72 69  much faster..Pri
e430: 6f 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76 65  or to SQLite [ve
e440: 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74 68  rsion 3.6.5], th
e450: 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d  e truncate optim
e460: 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61  ization.also mea
e470: 6e 74 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c  nt that the [sql
e480: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20  ite3_changes()] 
e490: 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74  and.[sqlite3_tot
e4a0: 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e  al_changes()] in
e4b0: 74 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65  terfaces.and the
e4c0: 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20   [count_changes 
e4d0: 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74  pragma].will not
e4e0: 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e   actually return
e4f0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
e500: 65 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54  eleted rows.  .T
e510: 68 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20  hat problem has 
e520: 62 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66  been fixed as of
e530: 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d   [version 3.6.5]
e540: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63  ...<p>^The trunc
e550: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
e560: 20 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e   can be permanen
e570: 74 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72  tly disabled for
e580: 20 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20   all queries.by 
e590: 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69  recompiling.SQLi
e5a0: 74 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  te with the [SQL
e5b0: 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54  ITE_OMIT_TRUNCAT
e5c0: 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20  E_OPTIMIZATION] 
e5d0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69  compile-time swi
e5e0: 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  tch.</p>..<p>The
e5f0: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
e600: 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20  zation can also 
e610: 62 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72  be disabled at r
e620: 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65  untime using.the
e630: 20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75   [sqlite3_set_au
e640: 74 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65  thorizer()] inte
e650: 72 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61  rface.  ^If an a
e660: 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61  uthorizer callba
e670: 63 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49  ck.returns [SQLI
e680: 54 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61  TE_IGNORE] for a
e690: 6e 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  n [SQLITE_DELETE
e6a0: 5d 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74  ] action code, t
e6b0: 68 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f  hen.the DELETE o
e6c0: 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72  peration will pr
e6d0: 6f 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72  oceed but the tr
e6e0: 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74  uncate optimizat
e6f0: 69 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61  ion will.be bypa
e700: 73 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69  ssed and rows wi
e710: 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e  ll be deleted on
e720: 65 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c  e by one.</p>..<
e730: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
e740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e780: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45  ####.Section {DE
e790: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
e7a0: 65 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a 42  etach *DETACH..B
e7b0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 74  ubbleDiagram det
e7c0: 61 63 68 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ach-stmt 1.</tcl
e7d0: 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74  >..<p>^This stat
e7e0: 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73 20 61  ement detaches a
e7f0: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74  n additional dat
e800: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e810: 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61 74 74   previously .att
e820: 61 63 68 65 64 20 75 73 69 6e 67 20 74 68 65 20  ached using the 
e830: 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65 6d 65  [ATTACH] stateme
e840: 6e 74 2e 20 20 0a 5e 49 74 20 69 73 20 70 6f 73  nt.  .^It is pos
e850: 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 74 68  sible to have th
e860: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
e870: 66 69 6c 65 20 61 74 74 61 63 68 65 64 20 6d 75  file attached mu
e880: 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75 73 69  ltiple times usi
e890: 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20 6e 61  ng .different na
e8a0: 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63 68 69  mes, and detachi
e8b0: 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f  ng one connectio
e8c0: 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69 6c 6c  n to a file will
e8d0: 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74 68 65   leave the .othe
e8e0: 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a 0a  rs intact.</p>..
e8f0: 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65  <p>^This stateme
e900: 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20  nt will fail if 
e910: 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68 65  SQLite is in the
e920: 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72 61   middle of a tra
e930: 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a  nsaction.</p>...
e940: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
e950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e990: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
e9a0: 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e  OP INDEX} dropin
e9b0: 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58  dex {{DROP INDEX
e9c0: 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
e9d0: 6d 20 64 72 6f 70 2d 69 6e 64 65 78 2d 73 74 6d  m drop-index-stm
e9e0: 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  t 1.</tcl>..<p>^
e9f0: 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20 73  The DROP INDEX s
ea00: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
ea10: 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65 64 0a   an index added.
ea20: 77 69 74 68 20 74 68 65 20 5b 43 52 45 41 54 45  with the [CREATE
ea30: 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e   INDEX] statemen
ea40: 74 2e 20 20 54 68 65 20 69 6e 64 65 78 20 69 73  t.  The index is
ea50: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f   completely remo
ea60: 76 65 64 20 66 72 6f 6d 0a 74 68 65 20 64 69 73  ved from.the dis
ea70: 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20 77 61 79  k.  The only way
ea80: 20 74 6f 20 72 65 63 6f 76 65 72 20 74 68 65 20   to recover the 
ea90: 69 6e 64 65 78 20 69 73 20 74 6f 20 72 65 65 6e  index is to reen
eaa0: 74 65 72 20 74 68 65 0a 61 70 70 72 6f 70 72 69  ter the.appropri
eab0: 61 74 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45  ate [CREATE INDE
eac0: 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  X] command.</p>.
ead0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
eae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eaf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb20: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
eb30: 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70 74  ROP TABLE} dropt
eb40: 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54 41 42 4c  able {{DROP TABL
eb50: 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  E}}..BubbleDiagr
eb60: 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73 74  am drop-table-st
eb70: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
eb80: 5e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20  ^The DROP TABLE 
eb90: 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65  statement remove
eba0: 73 20 61 20 74 61 62 6c 65 20 61 64 64 65 64 20  s a table added 
ebb0: 77 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45  with the.[CREATE
ebc0: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
ebd0: 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65  t.  The name spe
ebe0: 63 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61  cified is the.ta
ebf0: 62 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20  ble name.  ^The 
ec00: 64 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69 73  dropped table is
ec10: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f   completely remo
ec20: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ved from the dat
ec30: 61 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61 6e  abase .schema an
ec40: 64 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 2e  d the disk file.
ec50: 20 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20    The table can 
ec60: 6e 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64  not be recovered
ec70: 2e 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73  .  .^All indices
ec80: 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73   and triggers.as
ec90: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
eca0: 65 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f  e table are also
ecb0: 20 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   deleted.</p>..<
ecc0: 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  p>^The optional 
ecd0: 49 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  IF EXISTS clause
ece0: 20 73 75 70 70 72 65 73 73 65 73 20 74 68 65 20   suppresses the 
ecf0: 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64  error that would
ed00: 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74   normally.result
ed10: 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 64 6f   if the table do
ed20: 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70  es not exist.</p
ed30: 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69  >..<p>^If [forei
ed40: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
ed50: 74 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2c  ts] are enabled,
ed60: 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f   a DROP TABLE co
ed70: 6d 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20 61  mmand performs a
ed80: 6e 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45  n.implicit [DELE
ed90: 54 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d  TE | DELETE FROM
eda0: 20 26 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63 6f   &lt;tbl&gt;] co
edb0: 6d 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d  mmand before rem
edc0: 6f 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20  oving the.table 
edd0: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
ede0: 65 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74  e schema. ^Any t
edf0: 72 69 67 67 65 72 73 20 61 74 74 61 63 68 65 64  riggers attached
ee00: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72   to the table ar
ee10: 65 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74  e.dropped from t
ee20: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
ee30: 6d 61 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d  ma before the im
ee40: 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52  plicit DELETE FR
ee50: 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 0a  OM &lt;tbl&gt; .
ee60: 69 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20  is executed, so 
ee70: 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73  this cannot caus
ee80: 65 20 61 6e 79 20 74 72 69 67 67 65 72 73 20 74  e any triggers t
ee90: 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72  o fire. By contr
eea0: 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69  ast, ^an.implici
eeb0: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
eec0: 74 3b 74 62 6c 26 67 74 3b 20 64 6f 65 73 20 63  t;tbl&gt; does c
eed0: 61 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67 75  ause any configu
eee0: 72 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65 79  red.[foreign key
eef0: 20 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61 6b   actions] to tak
ef00: 65 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74 68  e place. .^If th
ef10: 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54  e implicit DELET
ef20: 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67  E FROM &lt;tbl&g
ef30: 74 3b 20 65 78 65 63 75 74 65 64 0a 61 73 20 70  t; executed.as p
ef40: 61 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41  art of a DROP TA
ef50: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c  BLE command viol
ef60: 61 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61  ates any immedia
ef70: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
ef80: 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65  onstraints,.an e
ef90: 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
efa0: 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
efb0: 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e  s not dropped. ^
efc0: 49 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74  If .the implicit
efd0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74   DELETE FROM &lt
efe0: 3b 74 62 6c 26 67 74 3b 20 63 61 75 73 65 73 20  ;tbl&gt; causes 
eff0: 61 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f  any .deferred fo
f000: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
f010: 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c  aints to be viol
f020: 61 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69  ated, and the vi
f030: 6f 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65  olations still.e
f040: 78 69 73 74 20 77 68 65 6e 20 74 68 65 20 74 72  xist when the tr
f050: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d  ansaction is com
f060: 6d 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72  mitted, an error
f070: 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 74 20   is returned at 
f080: 74 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d  the time.of comm
f090: 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  it...<tcl>.#####
f0a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f0b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f0d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f0e0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
f0f0: 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d  n {DROP TRIGGER}
f100: 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44   droptrigger {{D
f110: 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 42  ROP TRIGGER}}..B
f120: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
f130: 70 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 20 31  p-trigger-stmt 1
f140: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
f150: 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 73 74   DROP TRIGGER st
f160: 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20  atement removes 
f170: 61 20 74 72 69 67 67 65 72 20 63 72 65 61 74 65  a trigger create
f180: 64 20 62 79 20 74 68 65 20 0a 5b 43 52 45 41 54  d by the .[CREAT
f190: 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  E TRIGGER] state
f1a0: 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20 72 65 6d 6f  ment. ^Once remo
f1b0: 76 65 64 2c 20 74 68 65 20 74 72 69 67 67 65 72  ved, the trigger
f1c0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 20 6e   definition is n
f1d0: 6f 0a 6c 6f 6e 67 65 72 20 70 72 65 73 65 6e 74  o.longer present
f1e0: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   in the sqlite_m
f1f0: 61 73 74 65 72 20 28 6f 72 20 73 71 6c 69 74 65  aster (or sqlite
f200: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 74 61  _temp_master) ta
f210: 62 6c 65 20 61 6e 64 20 69 73 0a 6e 6f 74 20 66  ble and is.not f
f220: 69 72 65 64 20 62 79 20 61 6e 79 20 73 75 62 73  ired by any subs
f230: 65 71 75 65 6e 74 20 49 4e 53 45 52 54 2c 20 55  equent INSERT, U
f240: 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 20  PDATE or DELETE 
f250: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 70 3e  statements...<p>
f260: 5e 4e 6f 74 65 20 74 68 61 74 20 74 72 69 67 67  ^Note that trigg
f270: 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  ers are automati
f280: 63 61 6c 6c 79 20 64 72 6f 70 70 65 64 20 77 68  cally dropped wh
f290: 65 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  en the associate
f2a0: 64 20 74 61 62 6c 65 20 69 73 0a 64 72 6f 70 70  d table is.dropp
f2b0: 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ed...<tcl>.#####
f2c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f2d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f2e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f300: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
f310: 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72  n {DROP VIEW} dr
f320: 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50 20 56 49  opview {{DROP VI
f330: 45 57 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  EW}}..BubbleDiag
f340: 72 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74  ram drop-view-st
f350: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
f360: 5e 54 68 65 20 44 52 4f 50 20 56 49 45 57 20 73  ^The DROP VIEW s
f370: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
f380: 20 61 20 76 69 65 77 20 63 72 65 61 74 65 64 20   a view created 
f390: 62 79 20 74 68 65 20 5b 43 52 45 41 54 45 20 56  by the [CREATE V
f3a0: 49 45 57 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e  IEW] .  statemen
f3b0: 74 2e 20 5e 54 68 65 20 76 69 65 77 20 64 65 66  t. ^The view def
f3c0: 69 6e 69 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76  inition is remov
f3d0: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
f3e0: 62 61 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74  base schema, but
f3f0: 20 0a 20 20 6e 6f 20 61 63 74 75 61 6c 20 64 61   .  no actual da
f400: 74 61 20 69 6e 20 74 68 65 20 75 6e 64 65 72 6c  ta in the underl
f410: 79 69 6e 67 20 62 61 73 65 20 74 61 62 6c 65 73  ying base tables
f420: 20 69 73 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c   is modified...<
f430: 70 3e 5e 28 54 68 65 20 76 69 65 77 20 74 6f 20  p>^(The view to 
f440: 64 72 6f 70 20 69 73 20 69 64 65 6e 74 69 66 69  drop is identifi
f450: 65 64 20 62 79 20 74 68 65 20 76 69 65 77 2d 6e  ed by the view-n
f460: 61 6d 65 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c  ame and optional
f470: 20 0a 20 20 64 61 74 61 62 61 73 65 2d 6e 61 6d   .  database-nam
f480: 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  e specified as p
f490: 61 72 74 20 6f 66 20 74 68 65 20 44 52 4f 50 20  art of the DROP 
f4a0: 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2e 20  VIEW statement. 
f4b0: 54 68 69 73 20 0a 20 20 72 65 66 65 72 65 6e 63  This .  referenc
f4c0: 65 20 69 73 20 72 65 73 6f 6c 76 65 64 20 75 73  e is resolved us
f4d0: 69 6e 67 20 74 68 65 20 73 74 61 6e 64 61 72 64  ing the standard
f4e0: 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 5b   procedure for [
f4f0: 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f  object resolutio
f500: 6e 5d 2e 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66  n].)^..<p>.  ^If
f510: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
f520: 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f  iew cannot be fo
f530: 75 6e 64 20 61 6e 64 20 74 68 65 20 49 46 20 45  und and the IF E
f540: 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20  XISTS clause is 
f550: 6e 6f 74 20 0a 20 20 70 72 65 73 65 6e 74 2c 20  not .  present, 
f560: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20  it is an error. 
f570: 5e 49 66 20 74 68 65 20 73 70 65 63 69 66 69 65  ^If the specifie
f580: 64 20 76 69 65 77 20 63 61 6e 6e 6f 74 20 62 65  d view cannot be
f590: 20 66 6f 75 6e 64 20 61 6e 64 20 61 6e 20 49 46   found and an IF
f5a0: 0a 20 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  .  EXISTS clause
f5b0: 20 69 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74   is present in t
f5c0: 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61  he DROP VIEW sta
f5d0: 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  tement, then the
f5e0: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20   statement.  is 
f5f0: 61 20 6e 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e  a no-op....<tcl>
f600: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
f610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
f650: 53 65 63 74 69 6f 6e 20 7b 44 61 74 61 62 61 73  Section {Databas
f660: 65 20 4f 62 6a 65 63 74 20 4e 61 6d 65 20 52 65  e Object Name Re
f670: 73 6f 6c 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e  solution} {namin
f680: 67 7d 20 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f  g} {{object reso
f690: 6c 75 74 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a  lution}}.</tcl>.
f6a0: 0a 3c 70 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65  .<p>.  In SQLite
f6b0: 2c 20 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a  , a database obj
f6c0: 65 63 74 20 28 61 20 74 61 62 6c 65 2c 20 69 6e  ect (a table, in
f6d0: 64 65 78 2c 20 74 72 69 67 67 65 72 20 6f 72 20  dex, trigger or 
f6e0: 76 69 65 77 29 20 69 73 20 69 64 65 6e 74 69 66  view) is identif
f6f0: 69 65 64 0a 20 20 62 79 20 74 68 65 20 6e 61 6d  ied.  by the nam
f700: 65 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20  e of the object 
f710: 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of 
f720: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68 61  the database tha
f730: 74 20 69 74 20 72 65 73 69 64 65 73 20 69 6e 2e  t it resides in.
f740: 20 0a 20 20 44 61 74 61 62 61 73 65 20 6f 62 6a   .  Database obj
f750: 65 63 74 73 20 6d 61 79 20 72 65 73 69 64 65 20  ects may reside 
f760: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
f770: 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64  base, the temp d
f780: 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20  atabase, or in. 
f790: 20 61 6e 20 5b 41 54 54 41 43 48 7c 61 74 74 61   an [ATTACH|atta
f7a0: 63 68 65 64 20 64 61 74 61 62 61 73 65 5d 2e 0a  ched database]..
f7b0: 0a 3c 70 3e 0a 20 20 54 68 65 20 73 79 6e 74 61  .<p>.  The synta
f7c0: 78 20 6f 66 20 74 68 65 20 5b 44 52 4f 50 20 54  x of the [DROP T
f7d0: 41 42 4c 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44  ABLE], [DROP IND
f7e0: 45 58 5d 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d  EX], [DROP VIEW]
f7f0: 2c 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d  , [DROP TRIGGER]
f800: 2c 0a 20 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b  ,.  [REINDEX], [
f810: 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 61 6e 64  ALTER TABLE] and
f820: 20 6d 61 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d   many other comm
f830: 61 6e 64 73 20 61 6c 6c 20 70 65 72 6d 69 74 20  ands all permit 
f840: 74 68 65 20 75 73 65 72 20 74 6f 0a 20 20 73 70  the user to.  sp
f850: 65 63 69 66 79 20 61 20 64 61 74 61 62 61 73 65  ecify a database
f860: 20 6f 62 6a 65 63 74 20 65 69 74 68 65 72 20 62   object either b
f870: 79 20 69 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65  y its name alone
f880: 2c 20 6f 72 20 62 79 20 61 20 63 6f 6d 62 69 6e  , or by a combin
f890: 61 74 69 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e  ation of.  its n
f8a0: 61 6d 65 20 61 6e 64 20 74 68 65 20 6e 61 6d 65  ame and the name
f8b0: 20 6f 66 20 69 74 73 20 64 61 74 61 62 61 73 65   of its database
f8c0: 2e 20 5e 28 49 66 20 6e 6f 20 64 61 74 61 62 61  . ^(If no databa
f8d0: 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  se is specified 
f8e0: 61 73 20 70 61 72 74 0a 20 20 6f 66 20 74 68 65  as part.  of the
f8f0: 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
f900: 65 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73  e, then SQLite s
f910: 65 61 72 63 68 65 73 20 74 68 65 20 6d 61 69 6e  earches the main
f920: 2c 20 74 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61  , temp and all a
f930: 74 74 61 63 68 65 64 0a 20 20 64 61 74 61 62 61  ttached.  databa
f940: 73 65 73 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63  ses for an objec
f950: 74 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  t with a matchin
f960: 67 20 6e 61 6d 65 2e 20 54 68 65 20 74 65 6d 70  g name. The temp
f970: 20 64 61 74 61 62 61 73 65 20 69 73 20 73 65 61   database is sea
f980: 72 63 68 65 64 0a 20 20 66 69 72 73 74 2c 20 66  rched.  first, f
f990: 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 6d  ollowed by the m
f9a0: 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 66 6f  ain database, fo
f9b0: 6c 6c 6f 77 65 64 20 61 6c 6c 20 61 74 74 61 63  llowed all attac
f9c0: 68 65 64 20 64 61 74 61 62 61 73 65 73 20 69 6e  hed databases in
f9d0: 20 74 68 65 0a 20 20 6f 72 64 65 72 20 74 68 61   the.  order tha
f9e0: 74 20 74 68 65 79 20 77 65 72 65 20 61 74 74 61  t they were atta
f9f0: 63 68 65 64 2e 20 54 68 65 20 72 65 66 65 72 65  ched. The refere
fa00: 6e 63 65 20 72 65 73 6f 6c 76 65 73 20 74 6f 20  nce resolves to 
fa10: 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 0a  the first match.
fa20: 20 20 66 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65    found.)^ For e
fa30: 78 61 6d 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28  xample:..<pre>^(
fa40: 0a 20 20 20 20 20 20 2f 2a 20 41 64 64 20 61 20  .      /* Add a 
fa50: 74 61 62 6c 65 20 6e 61 6d 65 64 20 27 74 31 27  table named 't1'
fa60: 20 74 6f 20 74 68 65 20 74 65 6d 70 2c 20 6d 61   to the temp, ma
fa70: 69 6e 20 61 6e 64 20 61 6e 20 61 74 74 61 63 68  in and an attach
fa80: 65 64 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  ed database */. 
fa90: 20 20 20 20 20 41 54 54 41 43 48 20 27 66 69 6c       ATTACH 'fil
faa0: 65 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  e.db' AS aux;.  
fab0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
fac0: 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20   t1(x, y);.     
fad0: 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42   CREATE TEMP TAB
fae0: 4c 45 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20  LE t1(x, y);.   
faf0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
fb00: 61 75 78 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20  aux.t1(x, y);.. 
fb10: 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20       DROP TABLE 
fb20: 74 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  t1;         /* D
fb30: 72 6f 70 20 74 61 62 6c 65 20 69 6e 20 74 65 6d  rop table in tem
fb40: 70 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  p database */.  
fb50: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
fb60: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  1;         /* Dr
fb70: 6f 70 20 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e  op table in main
fb80: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20   database */.   
fb90: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
fba0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f  ;         /* Dro
fbb0: 70 20 74 61 62 6c 65 20 69 6e 20 61 75 78 20 64  p table in aux d
fbc0: 61 74 61 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70  atabase */.)^</p
fbd0: 72 65 3e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61  re>..<p>.  ^If a
fbe0: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69   database name i
fbf0: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
fc00: 61 72 74 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74  art of an object
fc10: 20 72 65 66 65 72 65 6e 63 65 2c 20 69 74 20 6d   reference, it m
fc20: 75 73 74 20 62 65 0a 20 20 65 69 74 68 65 72 20  ust be.  either 
fc30: 22 6d 61 69 6e 22 2c 20 6f 72 20 22 74 65 6d 70  "main", or "temp
fc40: 22 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66  " or the name of
fc50: 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
fc60: 61 62 61 73 65 2e 20 5e 4c 69 6b 65 20 6f 74 68  abase. ^Like oth
fc70: 65 72 0a 20 20 53 51 4c 20 69 64 65 6e 74 69 66  er.  SQL identif
fc80: 69 65 72 73 2c 20 64 61 74 61 62 61 73 65 20 6e  iers, database n
fc90: 61 6d 65 73 20 61 72 65 20 63 61 73 65 2d 69 6e  ames are case-in
fca0: 73 65 6e 73 69 74 69 76 65 2e 20 5e 49 66 20 61  sensitive. ^If a
fcb0: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 20   database name. 
fcc0: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74   is specified, t
fcd0: 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 6e 61 6d  hen only the nam
fce0: 65 64 20 64 61 74 61 62 61 73 65 20 69 73 20 73  ed database is s
fcf0: 65 61 72 63 68 65 64 20 66 6f 72 20 74 68 65 20  earched for the 
fd00: 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c  named object...<
fd10: 70 3e 0a 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74  p>.  Most object
fd20: 20 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20   references may 
fd30: 6f 6e 6c 79 20 72 65 73 6f 6c 76 65 20 74 6f 20  only resolve to 
fd40: 61 20 73 70 65 63 69 66 69 63 20 74 79 70 65 20  a specific type 
fd50: 6f 66 20 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20  of object (for. 
fd60: 20 65 78 61 6d 70 6c 65 20 61 20 72 65 66 65 72   example a refer
fd70: 65 6e 63 65 20 74 68 61 74 20 69 73 20 70 61 72  ence that is par
fd80: 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c  t of a DROP TABL
fd90: 45 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  E statement may 
fda0: 6f 6e 6c 79 20 72 65 73 6f 6c 76 65 0a 20 20 74  only resolve.  t
fdb0: 6f 20 61 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  o a table object
fdc0: 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20  , not an index, 
fdd0: 74 72 69 67 67 65 72 20 6f 72 20 76 69 65 77 29  trigger or view)
fde0: 2e 20 48 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d  . However in som
fdf0: 65 20 63 6f 6e 74 65 78 74 73 20 0a 20 20 28 65  e contexts .  (e
fe00: 2e 67 2e 20 5b 52 45 49 4e 44 45 58 5d 29 20 61  .g. [REINDEX]) a
fe10: 6e 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e  n object referen
fe20: 63 65 20 6d 61 79 20 62 65 20 72 65 73 6f 6c 76  ce may be resolv
fe30: 65 20 74 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f  e to more than o
fe40: 6e 65 20 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a  ne type.  of obj
fe50: 65 63 74 2e 20 5e 57 68 65 6e 20 73 65 61 72 63  ect. ^When searc
fe60: 68 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63  hing database sc
fe70: 68 65 6d 61 73 20 66 6f 72 20 61 20 6e 61 6d 65  hemas for a name
fe80: 64 20 6f 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74  d object, object
fe90: 73 20 6f 66 0a 20 20 74 79 70 65 73 20 74 68 61  s of.  types tha
fea0: 74 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  t cannot be used
feb0: 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context 
fec0: 6f 66 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  of the reference
fed0: 20 61 72 65 20 61 6c 77 61 79 73 20 0a 20 20 69   are always .  i
fee0: 67 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23  gnored...<tcl>.#
fef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff30: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
ff40: 63 74 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78  ction EXPLAIN ex
ff50: 70 6c 61 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42  plain EXPLAIN..B
ff60: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
ff70: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
ff80: 3e 5e 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  >^An SQL stateme
ff90: 6e 74 20 63 61 6e 20 62 65 20 70 72 65 63 65 64  nt can be preced
ffa0: 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72  ed by the keywor
ffb0: 64 20 22 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62  d "EXPLAIN" or.b
ffc0: 79 20 74 68 65 20 70 68 72 61 73 65 20 22 45 58  y the phrase "EX
ffd0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
ffe0: 22 2e 20 20 5e 45 69 74 68 65 72 20 6d 6f 64 69  ".  ^Either modi
fff0: 66 69 63 61 74 69 6f 6e 20 63 61 75 73 65 73 20  fication causes 
10000 74 68 65 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e  the.SQL statemen
10010 74 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  t to behave as a
10020 20 71 75 65 72 79 20 61 6e 64 20 74 6f 20 72 65   query and to re
10030 74 75 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  turn information
10040 20 61 62 6f 75 74 0a 68 6f 77 20 74 68 65 20 53   about.how the S
10050 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  QL statement wou
10060 6c 64 20 68 61 76 65 20 6f 70 65 72 61 74 65 64  ld have operated
10070 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
10080 6b 65 79 77 6f 72 64 20 6f 72 0a 70 68 72 61 73  keyword or.phras
10090 65 20 68 61 64 20 62 65 65 6e 20 6f 6d 69 74 74  e had been omitt
100a0 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ed.</p>..<p>The 
100b0 6f 75 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c  output from EXPL
100c0 41 49 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20  AIN and EXPLAIN 
100d0 51 55 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e  QUERY PLAN is in
100e0 74 65 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72  tended for.inter
100f0 61 63 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20  active analysis 
10100 61 6e 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74  and troubleshoot
10110 69 6e 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64  ing only.  The d
10120 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f  etails of the .o
10130 75 74 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65  utput format are
10140 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e   subject to chan
10150 67 65 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65  ge from one rele
10160 61 73 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  ase of SQLite to
10170 20 74 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69   the next..Appli
10180 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e  cations should n
10190 6f 74 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f  ot use EXPLAIN o
101a0 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  r EXPLAIN QUERY 
101b0 50 4c 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72  PLAN since.their
101c0 20 65 78 61 63 74 20 62 65 68 61 76 69 6f 72 20   exact behavior 
101d0 69 73 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20  is variable and 
101e0 6f 6e 6c 79 20 70 61 72 74 69 61 6c 6c 79 20 64  only partially d
101f0 6f 63 75 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a  ocumented.</p>..
10200 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50  <p>^When the EXP
10210 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70  LAIN keyword app
10220 65 61 72 73 20 62 79 20 69 74 73 65 6c 66 20 69  ears by itself i
10230 74 20 63 61 75 73 65 73 20 74 68 65 20 73 74 61  t causes the sta
10240 74 65 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65  tement.to behave
10250 20 61 73 20 61 20 71 75 65 72 79 20 74 68 61 74   as a query that
10260 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 65 71   returns the seq
10270 75 65 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75  uence of .[virtu
10280 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72  al machine instr
10290 75 63 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c  uctions] it woul
102a0 64 20 68 61 76 65 20 75 73 65 64 20 74 6f 20 65  d have used to e
102b0 78 65 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61  xecute the comma
102c0 6e 64 20 68 61 64 0a 74 68 65 20 45 58 50 4c 41  nd had.the EXPLA
102d0 49 4e 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62  IN keyword not b
102e0 65 65 6e 20 70 72 65 73 65 6e 74 2e 20 5e 57 68  een present. ^Wh
102f0 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
10300 55 45 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65  UERY PLAN phrase
10310 0a 61 70 70 65 61 72 73 2c 20 74 68 65 20 73 74  .appears, the st
10320 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 20  atement returns 
10330 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72  high-level infor
10340 6d 61 74 69 6f 6e 20 72 65 67 61 72 64 69 6e 67  mation regarding
10350 20 74 68 65 20 71 75 65 72 79 0a 70 6c 61 6e 20   the query.plan 
10360 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20  that would have 
10370 62 65 65 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20  been used...The 
10380 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
10390 41 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65  AN command is de
103a0 73 63 72 69 62 65 64 20 69 6e 20 0a 5b 65 78 70  scribed in .[exp
103b0 6c 61 69 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c  lain query plan|
103c0 6d 6f 72 65 20 64 65 74 61 69 6c 20 68 65 72 65  more detail here
103d0 5d 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ]...<tcl>.######
103e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
103f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10420 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
10430 20 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72   expression expr
10440 20 7b 2a 65 78 70 72 65 73 73 69 6f 6e 20 7b 65   {*expression {e
10450 78 70 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78  xpression syntax
10460 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
10470 6d 20 65 78 70 72 20 31 0a 42 75 62 62 6c 65 44  m expr 1.BubbleD
10480 69 61 67 72 61 6d 20 6c 69 74 65 72 61 6c 2d 76  iagram literal-v
10490 61 6c 75 65 0a 42 75 62 62 6c 65 44 69 61 67 72  alue.BubbleDiagr
104a0 61 6d 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72  am signed-number
104b0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
104c0 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 0a 3c 2f  aise-function.</
104d0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65  tcl>..<p>This se
104e0 63 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65  ction is differe
104f0 6e 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65  nt from the othe
10500 72 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20  rs.  Most other 
10510 73 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73  sections of.this
10520 20 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20   document talks 
10530 61 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c  about a particul
10540 61 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20  ar SQL command. 
10550 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f   This section do
10560 65 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75  es.not talk abou
10570 74 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63  t a standalone c
10580 6f 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74  ommand but about
10590 20 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77   "expressions" w
105a0 68 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d  hich are .subcom
105b0 70 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20  ponents of most 
105c0 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c  other commands.<
105d0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
105e0 67 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20  gment binaryops 
105f0 7b 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72  {binary operator
10600 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65  s}</tcl>.<h3>Ope
10610 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
10620 28 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61  (SQLite understa
10630 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nds the followin
10640 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  g binary operato
10650 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  rs, in order fro
10660 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77  m.highest to low
10670 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c  est precedence:<
10680 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
10690 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
106a0 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
106b0 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25  g>||.*    /    %
106c0 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b  .+    -.&lt;&lt;
106d0 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61     &gt;&gt;   &a
106e0 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20  mp;    |.&lt;   
106f0 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20   &lt;=   &gt;   
10700 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20   &gt;=.=    ==  
10710 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20   !=   &lt;&gt;  
10720 20 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e   </big>IS   IS N
10730 4f 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20  OT   IN   LIKE  
10740 20 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20   GLOB   MATCH   
10750 52 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52  REGEXP.AND   .OR
10760 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f  </font>.</pre></
10770 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
10780 70 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e  p>^(Supported un
10790 61 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61  ary prefix opera
107a0 74 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c  tors are these:<
107b0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
107c0 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
107d0 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
107e0 67 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20  g>-    +    ~   
107f0 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74   NOT</big></font
10800 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  >.</pre></blockq
10810 75 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  uote>)^..<tcl>hd
10820 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74  _fragment collat
10830 65 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65  eop {COLLATE ope
10840 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  rator}</tcl>.<p>
10850 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65  ^The COLLATE ope
10860 72 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79  rator is a unary
10870 20 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f   postfix.operato
10880 72 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61  r that assigns a
10890 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
108a0 65 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72  ence] to an expr
108b0 65 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c  ession..^The COL
108c0 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61  LATE operator ha
108d0 73 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65  s a higher prece
108e0 64 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72  dence (binds mor
108f0 65 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20  e tightly) than 
10900 61 6e 79 0a 62 69 6e 61 72 79 20 6f 70 65 72 61  any.binary opera
10910 74 6f 72 20 61 6e 64 20 61 6e 79 20 75 6e 61 72  tor and any unar
10920 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f  y prefix operato
10930 72 20 65 78 63 65 70 74 20 22 7e 22 2e 0a 28 43  r except "~"..(C
10940 4f 4c 4c 41 54 45 20 61 6e 64 20 22 7e 22 20 61  OLLATE and "~" a
10950 72 65 20 61 73 73 6f 63 69 61 74 69 76 65 20 73  re associative s
10960 6f 20 74 68 65 69 72 20 62 69 6e 64 69 6e 67 20  o their binding 
10970 6f 72 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d  order does not m
10980 61 74 74 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c  atter.).^The col
10990 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
109a0 73 65 74 20 62 79 20 74 68 65 20 43 4f 4c 4c 41  set by the COLLA
109b0 54 45 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 72  TE operator over
109c0 72 69 64 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74  rides the.collat
109d0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 74  ing sequence det
109e0 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 43  ermined by the C
109f0 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e  OLLATE clause in
10a00 20 61 20 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e   a table.[column
10a10 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65   definition]..Se
10a20 65 20 74 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67  e the [collating
10a30 20 73 65 71 75 65 6e 63 65 7c 20 64 65 74 61 69   sequence| detai
10a40 6c 65 64 20 64 69 73 63 75 73 73 69 6f 6e 20 6f  led discussion o
10a50 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  n collating sequ
10a60 65 6e 63 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64  ences].in the [d
10a70 61 74 61 74 79 70 65 20 7c 20 44 61 74 61 74 79  atatype | Dataty
10a80 70 65 20 49 6e 20 53 51 4c 69 74 65 33 5d 20 64  pe In SQLite3] d
10a90 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69  ocument for addi
10aa0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
10ab0 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  on..</p>..<tcl>h
10ac0 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65  d_puts ".<p>^The
10ad0 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20   unary operator 
10ae0 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20  [Operator +] is 
10af0 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61  a no-op.  ^It ca
10b00 6e 20 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20  n be applied.to 
10b10 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73  strings, numbers
10b20 2c 20 62 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20  , blobs or NULL 
10b30 61 6e 64 20 69 74 20 61 6c 77 61 79 73 20 72 65  and it always re
10b40 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 0a 77  turns a result.w
10b50 69 74 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ith the same val
10b60 75 65 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e  ue as the operan
10b70 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c  d.</p>"</tcl>..<
10b80 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72  p>Note that ther
10b90 65 20 61 72 65 20 74 77 6f 20 76 61 72 69 61 74  e are two variat
10ba0 69 6f 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61  ions of the equa
10bb0 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c  ls and not equal
10bc0 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20 5e 45  s.operators.  ^E
10bd0 71 75 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74  quals can be eit
10be0 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75  her..<tcl>.hd_pu
10bf0 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d  ts "[Operator =]
10c00 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d   or [Operator ==
10c10 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61  ]..^The non-equa
10c20 6c 73 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20  ls operator can 
10c30 62 65 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61  be either.[Opera
10c40 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72  tor !=] or [Oper
10c50 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d  ator {&lt;&gt;}]
10c60 2e 0a 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72  ..^The [Operator
10c70 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73   ||] operator is
10c80 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22   \"concatenate\"
10c90 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65   - it joins toge
10ca0 74 68 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72  ther.the two str
10cb0 69 6e 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72  ings of its oper
10cc0 61 6e 64 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61  ands..^The opera
10cd0 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d  tor [Operator %]
10ce0 20 6f 75 74 70 75 74 73 20 74 68 65 20 76 61 6c   outputs the val
10cf0 75 65 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a  ue of its left .
10d00 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69  operand modulo i
10d10 74 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  ts right operand
10d20 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72  .</p>..<p>^The r
10d30 65 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e  esult of any bin
10d40 61 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20  ary operator is 
10d50 65 69 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63  either a numeric
10d60 20 76 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c   value or .NULL,
10d70 20 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20   except for the 
10d80 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f  [Operator ||] co
10d90 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72  ncatenation oper
10da0 61 74 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79  ator which alway
10db0 73 20 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20  s .evaluates to 
10dc0 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
10dd0 20 74 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e   text value.</p>
10de0 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  "..hd_fragment {
10df0 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65  isisnot} {IS ope
10e00 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f  rator} {IS NOT o
10e10 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74  perator}..hd_put
10e20 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72  s "<p>^The [Oper
10e30 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70  ator IS] and [Op
10e40 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d  erator {IS NOT}]
10e50 20 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a   operators work.
10e60 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d  like [Operator =
10e70 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20  ] and [Operator 
10e80 21 3d 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20  !=] except when 
10e90 6f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74  one or both of t
10ea0 68 65 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he.operands are 
10eb0 4e 55 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63  NULL. ^In this c
10ec0 61 73 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65  ase, if both ope
10ed0 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20  rands are NULL, 
10ee0 74 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72  then the.IS oper
10ef0 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74  ator evaluates t
10f00 6f 20 31 20 28 74 72 75 65 29 20 61 6e 64 20 74  o 1 (true) and t
10f10 68 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74  he IS NOT operat
10f20 6f 72 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20  or evaluates.to 
10f30 30 20 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f  0 (false). ^If o
10f40 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
10f50 4c 4c 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72  LL and the other
10f60 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68   is not, then th
10f70 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76  e.IS operator ev
10f80 61 6c 75 61 74 65 73 20 74 6f 20 30 20 28 66 61  aluates to 0 (fa
10f90 6c 73 65 29 20 61 6e 64 20 74 68 65 20 49 53 20  lse) and the IS 
10fa0 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20  NOT operator is 
10fb0 31 20 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73  1 (true)..^It is
10fc0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f   not possible fo
10fd0 72 20 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f  r an IS or IS NO
10fe0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  T expression to 
10ff0 65 76 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c  evaluate to NULL
11000 2e 0a 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70  ..^Operators [Op
11010 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b  erator IS] and [
11020 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54  Operator {IS NOT
11030 7d 5d 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  }] have the same
11040 20 0a 70 72 65 63 65 64 65 6e 63 65 20 61 73 20   .precedence as 
11050 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a  [Operator =]."..
11060 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
11070 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72   litvalue {liter
11080 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a  al value}</tcl>.
11090 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75  <h3>Literal Valu
110a0 65 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e 41 20 6c  es</h3>.<p>.^A l
110b0 69 74 65 72 61 6c 20 76 61 6c 75 65 20 69 73 20  iteral value is 
110c0 61 20 63 6f 6e 73 74 61 6e 74 20 6f 66 20 73 6f  a constant of so
110d0 6d 65 20 6b 69 6e 64 2e 0a 5e 4c 69 74 65 72 61  me kind..^Litera
110e0 6c 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20  l values may be 
110f0 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61 74 69  integers, floati
11100 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73  ng point numbers
11110 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42 73  , strings,.BLOBs
11120 2c 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f 70 3e 0a  , or NULLs.</p>.
11130 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66  .<p>The syntax f
11140 6f 72 20 69 6e 74 65 67 65 72 20 61 6e 64 20 66  or integer and f
11150 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69  loating point li
11160 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69  terals (collecti
11170 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69  vely."numeric li
11180 74 65 72 61 6c 73 22 29 20 69 73 20 73 68 6f 77  terals") is show
11190 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n by the followi
111a0 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a  ng diagram:</p>.
111b0 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
111c0 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65  ram numeric-lite
111d0 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e  ral</tcl>..<p>.^
111e0 28 49 66 20 61 20 6e 75 6d 65 72 69 63 20 6c 69  (If a numeric li
111f0 74 65 72 61 6c 20 68 61 73 20 61 20 64 65 63 69  teral has a deci
11200 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20  mal point or an 
11210 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63  exponentiation.c
11220 6c 61 75 73 65 2c 20 74 68 65 6e 20 69 74 20 69  lause, then it i
11230 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
11240 6e 74 20 6c 69 74 65 72 61 6c 2e 20 20 4f 74 68  nt literal.  Oth
11250 65 72 77 69 73 65 20 69 73 20 69 74 20 69 73 20  erwise is it is 
11260 61 6e 20 0a 69 6e 74 65 67 65 72 20 6c 69 74 65  an .integer lite
11270 72 61 6c 2e 29 5e 20 20 5e 54 68 65 20 22 45 22  ral.)^  ^The "E"
11280 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
11290 62 65 67 69 6e 73 20 74 68 65 20 65 78 70 6f 6e  begins the expon
112a0 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65  entiation.clause
112b0 20 6f 66 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   of a floating p
112c0 6f 69 6e 74 20 6c 69 74 65 72 61 6c 20 63 61 6e  oint literal can
112d0 20 62 65 20 65 69 74 68 65 72 20 75 70 70 65 72   be either upper
112e0 20 6f 72 20 6c 6f 77 65 72 20 63 61 73 65 2e 0a   or lower case..
112f0 5e 28 54 68 65 20 22 2e 22 20 63 68 61 72 61 63  ^(The "." charac
11300 74 65 72 20 69 73 20 61 6c 77 61 79 73 20 75 73  ter is always us
11310 65 64 20 0a 61 73 20 74 68 65 20 64 65 63 69 6d  ed .as the decim
11320 61 6c 20 70 6f 69 6e 74 20 65 76 65 6e 20 69 66  al point even if
11330 20 74 68 65 20 6c 6f 63 61 6c 65 20 73 65 74 74   the locale sett
11340 69 6e 67 20 73 70 65 63 69 66 69 65 73 20 22 2c  ing specifies ",
11350 22 20 66 6f 72 0a 74 68 69 73 20 72 6f 6c 65 20  " for.this role 
11360 2d 20 74 68 65 20 75 73 65 20 6f 66 20 22 2c 22  - the use of ","
11370 20 66 6f 72 20 74 68 65 20 64 65 63 69 6d 61 6c   for the decimal
11380 20 70 6f 69 6e 74 20 77 6f 75 6c 64 20 72 65 73   point would res
11390 75 6c 74 20 69 6e 0a 73 79 6e 74 61 63 74 69 63  ult in.syntactic
113a0 20 61 6d 62 69 67 75 69 74 79 2e 29 5e 3c 2f 70   ambiguity.)^</p
113b0 3e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72 69 6e 67  >..<p> ^A string
113c0 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f 72   constant is for
113d0 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67  med by enclosing
113e0 20 74 68 65 0a 73 74 72 69 6e 67 20 69 6e 20 73   the.string in s
113f0 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 28 27 29  ingle quotes (')
11400 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 71 75 6f  .  ^A single quo
11410 74 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 74  te within the st
11420 72 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f  ring can.be enco
11430 64 65 64 20 62 79 20 70 75 74 74 69 6e 67 20 74  ded by putting t
11440 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73  wo single quotes
11450 20 69 6e 20 61 20 72 6f 77 20 2d 20 61 73 20 69   in a row - as i
11460 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c  n Pascal..C-styl
11470 65 20 65 73 63 61 70 65 73 20 75 73 69 6e 67 20  e escapes using 
11480 74 68 65 20 62 61 63 6b 73 6c 61 73 68 20 63 68  the backslash ch
11490 61 72 61 63 74 65 72 20 61 72 65 20 6e 6f 74 20  aracter are not 
114a0 73 75 70 70 6f 72 74 65 64 20 62 65 63 61 75 73  supported becaus
114b0 65 0a 74 68 65 79 20 61 72 65 20 6e 6f 74 20 73  e.they are not s
114c0 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 5e 42 4c  tandard SQL..^BL
114d0 4f 42 20 6c 69 74 65 72 61 6c 73 20 61 72 65 20  OB literals are 
114e0 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 20  string literals 
114f0 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65 78 61 64  containing hexad
11500 65 63 69 6d 61 6c 20 64 61 74 61 20 61 6e 64 0a  ecimal data and.
11510 70 72 65 63 65 64 65 64 20 62 79 20 61 20 73 69  preceded by a si
11520 6e 67 6c 65 20 22 78 22 20 6f 72 20 22 58 22 20  ngle "x" or "X" 
11530 63 68 61 72 61 63 74 65 72 2e 20 20 5e 28 46 6f  character.  ^(Fo
11540 72 20 65 78 61 6d 70 6c 65 3a 3c 2f 70 3e 0a 0a  r example:</p>..
11550 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
11560 3e 0a 58 27 35 33 35 31 34 43 36 39 37 34 36 35  >.X'53514C697465
11570 27 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  '.</pre></blockq
11580 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 41 20  uote>)^..<p>.^A 
11590 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20 63 61  literal value ca
115a0 6e 20 61 6c 73 6f 20 62 65 20 74 68 65 20 74 6f  n also be the to
115b0 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e  ken "NULL"..</p>
115c0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
115d0 6e 74 20 76 61 72 70 61 72 61 6d 20 70 61 72 61  nt varparam para
115e0 6d 65 74 65 72 20 70 61 72 61 6d 65 74 65 72 73  meter parameters
115f0 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65   {bound paramete
11600 72 7d 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65  r} {bound parame
11610 74 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ters}</tcl>.<h3>
11620 50 61 72 61 6d 65 74 65 72 73 3c 2f 68 33 3e 0a  Parameters</h3>.
11630 3c 70 3e 0a 41 20 22 76 61 72 69 61 62 6c 65 22  <p>.A "variable"
11640 20 6f 72 20 22 70 61 72 61 6d 65 74 65 72 22 20   or "parameter" 
11650 74 6f 6b 65 6e 0a 73 70 65 63 69 66 69 65 73 20  token.specifies 
11660 61 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 69 6e  a placeholder in
11670 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
11680 66 6f 72 20 61 20 0a 76 61 6c 75 65 20 74 68 61  for a .value tha
11690 74 20 69 73 20 66 69 6c 6c 65 64 20 69 6e 20 61  t is filled in a
116a0 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20  t runtime using 
116b0 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e  the.[sqlite3_bin
116c0 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74  d_blob() | sqlit
116d0 65 33 5f 62 69 6e 64 28 29 5d 20 66 61 6d 69 6c  e3_bind()] famil
116e0 79 20 6f 66 20 43 2f 43 2b 2b 20 69 6e 74 65 72  y of C/C++ inter
116f0 66 61 63 65 73 2e 0a 50 61 72 61 6d 65 74 65 72  faces..Parameter
11700 73 20 63 61 6e 20 74 61 6b 65 20 73 65 76 65 72  s can take sever
11710 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a  al forms:.</p>..
11720 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
11730 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  ble>.<tr>.<td al
11740 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
11750 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62  gn="top"><b>?</b
11760 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e  ><i>NNN</i></td>
11770 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
11780 2f 74 64 3e 0a 3c 74 64 3e 5e 28 41 20 71 75 65  /td>.<td>^(A que
11790 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f  stion mark follo
117a0 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20  wed by a number 
117b0 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73  <i>NNN</i> holds
117c0 20 61 20 73 70 6f 74 20 66 6f 72 20 74 68 65 0a   a spot for the.
117d0 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65 74 65 72  NNN-th parameter
117e0 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62 65 20 62  .  NNN must be b
117f0 65 74 77 65 65 6e 20 31 20 61 6e 64 20 5b 53 51  etween 1 and [SQ
11800 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
11810 45 5f 4e 55 4d 42 45 52 5d 2e 29 5e 0a 3c 2f 74  E_NUMBER].)^.</t
11820 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
11830 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
11840 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
11850 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  ?</b></td><td wi
11860 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
11870 74 64 3e 5e 41 20 71 75 65 73 74 69 6f 6e 20 6d  td>^A question m
11880 61 72 6b 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ark that is not 
11890 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75  followed by a nu
118a0 6d 62 65 72 20 63 72 65 61 74 65 73 20 61 20 70  mber creates a p
118b0 61 72 61 6d 65 74 65 72 0a 77 69 74 68 20 61 20  arameter.with a 
118c0 6e 75 6d 62 65 72 20 6f 6e 65 20 67 72 65 61 74  number one great
118d0 65 72 20 74 68 61 6e 20 74 68 65 20 6c 61 72 67  er than the larg
118e0 65 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75  est parameter nu
118f0 6d 62 65 72 20 61 6c 72 65 61 64 79 20 61 73 73  mber already ass
11900 69 67 6e 65 64 2e 0a 5e 49 66 20 74 68 69 73 20  igned..^If this 
11910 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65  means the parame
11920 74 65 72 20 6e 75 6d 62 65 72 20 69 73 20 67 72  ter number is gr
11930 65 61 74 65 72 20 74 68 61 6e 0a 5b 53 51 4c 49  eater than.[SQLI
11940 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
11950 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 20 61  NUMBER], it is a
11960 6e 20 65 72 72 6f 72 2e 0a 3c 2f 74 64 3e 0a 3c  n error..</td>.<
11970 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
11980 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
11990 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62  gn="top"><b>:</b
119a0 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64  ><i>AAAA</i></td
119b0 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
119c0 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c  </td>.<td>^A col
119d0 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  on followed by a
119e0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  n identifier nam
119f0 65 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66  e holds a spot f
11a00 6f 72 20 61 20 0a 5b 73 71 6c 69 74 65 33 5f 62  or a .[sqlite3_b
11a10 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
11a20 6d 65 7c 6e 61 6d 65 64 20 70 61 72 61 6d 65 74  me|named paramet
11a30 65 72 5d 20 77 69 74 68 20 74 68 65 20 6e 61 6d  er] with the nam
11a40 65 20 3a 41 41 41 41 2e 20 20 0a 5e 28 4e 61 6d  e :AAAA.  .^(Nam
11a50 65 64 20 70 61 72 61 6d 65 74 65 72 73 20 61 72  ed parameters ar
11a60 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e  e also numbered.
11a70 20 54 68 65 20 6e 75 6d 62 65 72 20 61 73 73 69   The number assi
11a80 67 6e 65 64 20 69 73 20 6f 6e 65 20 67 72 65 61  gned is one grea
11a90 74 65 72 20 74 68 61 6e 0a 74 68 65 20 6c 61 72  ter than.the lar
11aa0 67 65 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e  gest parameter n
11ab0 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20 61 73  umber already as
11ac0 73 69 67 6e 65 64 2e 29 5e 20 5e 49 66 20 74 68  signed.)^ ^If th
11ad0 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72  is means the par
11ae0 61 6d 65 74 65 72 0a 77 6f 75 6c 64 20 62 65 20  ameter.would be 
11af0 61 73 73 69 67 6e 65 64 20 61 20 6e 75 6d 62 65  assigned a numbe
11b00 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 5b  r greater than [
11b10 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
11b20 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20  BLE_NUMBER], it 
11b30 69 73 0a 61 6e 20 65 72 72 6f 72 2e 20 54 6f 20  is.an error. To 
11b40 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c  avoid confusion,
11b50 20 69 74 20 69 73 20 62 65 73 74 20 74 6f 20 61   it is best to a
11b60 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65  void mixing name
11b70 64 20 61 6e 64 20 6e 75 6d 62 65 72 65 64 0a 70  d and numbered.p
11b80 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a  arameters.</td>.
11b90 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  </tr>.<tr>.<td a
11ba0 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
11bb0 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f  ign="top"><b>@</
11bc0 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74  b><i>AAAA</i></t
11bd0 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
11be0 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22  ></td>.<td>^An "
11bf0 61 74 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65  at" sign works e
11c00 78 61 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f  xactly like a co
11c10 6c 6f 6e 2c 20 65 78 63 65 70 74 20 74 68 61 74  lon, except that
11c20 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a 74 68 65   the name of.the
11c30 20 70 61 72 61 6d 65 74 65 72 20 63 72 65 61 74   parameter creat
11c40 65 64 20 69 73 20 40 41 41 41 41 2e 3c 2f 74 64  ed is @AAAA.</td
11c50 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
11c60 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
11c70 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24  align="top"><b>$
11c80 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c  </b><i>AAAA</i><
11c90 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
11ca0 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20  0"></td>.<td>^A 
11cb0 64 6f 6c 6c 61 72 2d 73 69 67 6e 20 66 6f 6c 6c  dollar-sign foll
11cc0 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74  owed by an ident
11cd0 69 66 69 65 72 20 6e 61 6d 65 20 61 6c 73 6f 20  ifier name also 
11ce0 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72  holds a spot for
11cf0 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74   a named.paramet
11d00 65 72 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65  er with the name
11d10 20 24 41 41 41 41 2e 20 20 5e 28 54 68 65 20 69   $AAAA.  ^(The i
11d20 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 69  dentifier name i
11d30 6e 20 74 68 69 73 20 63 61 73 65 20 63 61 6e 20  n this case can 
11d40 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f 72 20 6d  include.one or m
11d50 6f 72 65 20 6f 63 63 75 72 72 65 6e 63 65 73 20  ore occurrences 
11d60 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61 20 73 75  of "::" and a su
11d70 66 66 69 78 20 65 6e 63 6c 6f 73 65 64 20 69 6e  ffix enclosed in
11d80 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61 69 6e   "(...)" contain
11d90 69 6e 67 0a 61 6e 79 20 74 65 78 74 20 61 74 20  ing.any text at 
11da0 61 6c 6c 2e 29 5e 20 20 54 68 69 73 20 73 79 6e  all.)^  This syn
11db0 74 61 78 20 69 73 20 74 68 65 20 66 6f 72 6d 20  tax is the form 
11dc0 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20 6e 61  of a variable na
11dd0 6d 65 20 69 6e 20 74 68 65 0a 5b 68 74 74 70 3a  me in the.[http:
11de0 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 20 7c 20  //www.tcl.tk/ | 
11df0 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20  Tcl programming 
11e00 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65 20  language].  The 
11e10 70 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69 73  presence.of this
11e20 20 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73 20   syntax results 
11e30 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68  from the fact th
11e40 61 74 20 53 51 4c 69 74 65 20 69 73 20 72 65 61  at SQLite is rea
11e50 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74 65  lly a .[Tcl exte
11e60 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73 20  nsion] that has 
11e70 65 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68 65  escaped into the
11e80 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72   wild.</td>.</tr
11e90 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  >.</table>.</blo
11ea0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61  ckquote>..<p>^Pa
11eb0 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 61 72  rameters that ar
11ec0 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 76  e not assigned v
11ed0 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71 6c  alues using.[sql
11ee0 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29  ite3_bind_blob()
11ef0 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28   | sqlite3_bind(
11f00 29 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a 61  )] are treated.a
11f10 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e  s NULL.</p>..<p>
11f20 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 72  ^The maximum par
11f30 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73  ameter number is
11f40 20 73 65 74 20 61 74 20 63 6f 6d 70 69 6c 65 2d   set at compile-
11f50 74 69 6d 65 20 62 79 0a 74 68 65 20 5b 53 51 4c  time by.the [SQL
11f60 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
11f70 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72 6f 2e 20  _NUMBER] macro. 
11f80 20 5e 28 41 6e 20 69 6e 64 69 76 69 64 75 61 6c   ^(An individual
11f90 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
11fa0 63 74 69 6f 6e 73 5d 0a 44 20 63 61 6e 20 72 65  ctions].D can re
11fb0 64 75 63 65 20 69 74 73 20 6d 61 78 69 6d 75 6d  duce its maximum
11fc0 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
11fd0 72 20 62 65 6c 6f 77 20 74 68 65 20 63 6f 6d 70  r below the comp
11fe0 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d 75 6d  ile-time maximum
11ff0 0a 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69  .using the [sqli
12000 74 65 33 5f 6c 69 6d 69 74 5d 28 44 2c 20 5b 53  te3_limit](D, [S
12010 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49  QLITE_LIMIT_VARI
12020 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 2e 2e 2e  ABLE_NUMBER],...
12030 29 20 69 6e 74 65 72 66 61 63 65 2e 29 5e 0a 3c  ) interface.)^.<
12040 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
12050 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b 45 20  gment like LIKE 
12060 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c 68 33  ESCAPE</tcl>.<h3
12070 3e 54 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c  >The LIKE and GL
12080 4f 42 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33  OB operators</h3
12090 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f  >.<p>^The LIKE o
120a0 70 65 72 61 74 6f 72 20 64 6f 65 73 20 61 20 70  perator does a p
120b0 61 74 74 65 72 6e 20 6d 61 74 63 68 69 6e 67 20  attern matching 
120c0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54 68 65  comparison. ^The
120d0 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68 65 20   operand.to the 
120e0 72 69 67 68 74 20 6f 66 20 74 68 65 20 4c 49 4b  right of the LIK
120f0 45 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 74 61  E operator conta
12100 69 6e 73 20 74 68 65 20 70 61 74 74 65 72 6e 20  ins the pattern 
12110 61 6e 64 20 74 68 65 20 6c 65 66 74 20 68 61 6e  and the left han
12120 64 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61 69  d.operand contai
12130 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 74 6f  ns the string to
12140 20 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20 74   match against t
12150 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74 63  he pattern...<tc
12160 6c 3e 68 64 5f 70 75 74 73 20 22 5e 41 20 70 65  l>hd_puts "^A pe
12170 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c 22  rcent symbol (\"
12180 25 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45  %\") in the LIKE
12190 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73   pattern matches
121a0 20 61 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f 66   any.sequence of
121b0 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68   zero or more ch
121c0 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20  aracters in the 
121d0 73 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75 6e 64  string.  ^An und
121e0 65 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22 29 20  erscore.(\"_\") 
121f0 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
12200 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 20  ern matches any 
12210 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
12220 20 69 6e 20 74 68 65 0a 73 74 72 69 6e 67 2e 20   in the.string. 
12230 20 5e 28 41 6e 79 20 6f 74 68 65 72 20 63 68 61   ^(Any other cha
12240 72 61 63 74 65 72 20 6d 61 74 63 68 65 73 20 69  racter matches i
12250 74 73 65 6c 66 20 6f 72 20 69 74 73 20 6c 6f 77  tself or its low
12260 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a 65 71  er/upper case.eq
12270 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e 20 63  uivalent (i.e. c
12280 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20  ase-insensitive 
12290 6d 61 74 63 68 69 6e 67 29 2e 29 5e 20 20 28 41  matching).)^  (A
122a0 20 62 75 67 3a 20 5e 53 51 4c 69 74 65 20 6f 6e   bug: ^SQLite on
122b0 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75  ly.understands u
122c0 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20  pper/lower case 
122d0 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
122e0 74 65 72 73 20 62 79 20 64 65 66 61 75 6c 74 2e  ters by default.
122f0 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f 70 65 72    ^The.LIKE oper
12300 61 74 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e  ator is case sen
12310 73 69 74 69 76 65 20 62 79 20 64 65 66 61 75 6c  sitive by defaul
12320 74 20 66 6f 72 20 75 6e 69 63 6f 64 65 20 63 68  t for unicode ch
12330 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 72  aracters that ar
12340 65 0a 62 65 79 6f 6e 64 20 74 68 65 20 41 53 43  e.beyond the ASC
12350 49 49 20 72 61 6e 67 65 2e 20 20 46 6f 72 20 65  II range.  For e
12360 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20 65 78 70  xample,.^the exp
12370 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26 6e  ression <b>'a'&n
12380 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41  bsp;LIKE&nbsp;'A
12390 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20 62 75  '</b>.is TRUE bu
123a0 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e  t <b>'&aelig;'&n
123b0 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26  bsp;LIKE&nbsp;'&
123c0 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46  AElig;'</b> is F
123d0 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74 63 6c 3e  ALSE.)<p>"</tcl>
123e0 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
123f0 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
12400 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
12410 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  then the express
12420 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ion.following th
12430 65 20 45 53 43 41 50 45 20 6b 65 79 77 6f 72 64  e ESCAPE keyword
12440 20 6d 75 73 74 20 65 76 61 6c 75 61 74 65 20 74   must evaluate t
12450 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 69  o a string consi
12460 73 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67 6c  sting of.a singl
12470 65 20 63 68 61 72 61 63 74 65 72 2e 20 5e 54 68  e character. ^Th
12480 69 73 20 63 68 61 72 61 63 74 65 72 20 6d 61 79  is character may
12490 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20   be used in the 
124a0 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a 74 6f 20  LIKE pattern.to 
124b0 69 6e 63 6c 75 64 65 20 6c 69 74 65 72 61 6c 20  include literal 
124c0 70 65 72 63 65 6e 74 20 6f 72 20 75 6e 64 65 72  percent or under
124d0 73 63 6f 72 65 20 63 68 61 72 61 63 74 65 72 73  score characters
124e0 2e 20 5e 54 68 65 20 65 73 63 61 70 65 0a 63 68  . ^The escape.ch
124f0 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77 65 64  aracter followed
12500 20 62 79 20 61 20 70 65 72 63 65 6e 74 20 73 79   by a percent sy
12510 6d 62 6f 6c 20 28 25 29 2c 20 75 6e 64 65 72 73  mbol (%), unders
12520 63 6f 72 65 20 28 5f 29 2c 20 6f 72 20 61 20 73  core (_), or a s
12530 65 63 6f 6e 64 0a 69 6e 73 74 61 6e 63 65 20 6f  econd.instance o
12540 66 20 74 68 65 20 65 73 63 61 70 65 20 63 68 61  f the escape cha
12550 72 61 63 74 65 72 20 69 74 73 65 6c 66 20 6d 61  racter itself ma
12560 74 63 68 65 73 20 61 0a 6c 69 74 65 72 61 6c 20  tches a.literal 
12570 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20  percent symbol, 
12580 75 6e 64 65 72 73 63 6f 72 65 2c 20 6f 72 20 61  underscore, or a
12590 20 73 69 6e 67 6c 65 20 65 73 63 61 70 65 20 63   single escape c
125a0 68 61 72 61 63 74 65 72 2c 0a 72 65 73 70 65 63  haracter,.respec
125b0 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e 54 68 65  tively...<p>^The
125c0 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70 65 72   infix LIKE oper
125d0 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e  ator is implemen
125e0 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ted by calling t
125f0 68 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  he.application-d
12600 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74  efined SQL funct
12610 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c  ions [like(<i>Y<
12620 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f  /i>,<i>X</i>)] o
12630 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e  r.[like(<i>Y</i>
12640 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f  ,<i>X</i>,<i>Z</
12650 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  i>)]</a>.</p>..<
12660 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72  p>^The LIKE oper
12670 61 74 6f 72 20 63 61 6e 20 62 65 20 6d 61 64 65  ator can be made
12680 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20   case sensitive 
12690 75 73 69 6e 67 20 74 68 65 0a 5b 63 61 73 65 5f  using the.[case_
126a0 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65 20 70  sensitive_like p
126b0 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63  ragma].</p>..<tc
126c0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 67 6c  l>hd_fragment gl
126d0 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70  ob GLOB</tcl>.<p
126e0 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70 65 72 61  >^The GLOB opera
126f0 74 6f 72 20 69 73 20 73 69 6d 69 6c 61 72 20 74  tor is similar t
12700 6f 20 4c 49 4b 45 20 62 75 74 20 75 73 65 73 20  o LIKE but uses 
12710 74 68 65 20 55 6e 69 78 0a 66 69 6c 65 20 67 6c  the Unix.file gl
12720 6f 62 62 69 6e 67 20 73 79 6e 74 61 78 20 66 6f  obbing syntax fo
12730 72 20 69 74 73 20 77 69 6c 64 63 61 72 64 73 2e  r its wildcards.
12740 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42 20 69 73    ^Also, GLOB is
12750 20 63 61 73 65 0a 73 65 6e 73 69 74 69 76 65 2c   case.sensitive,
12760 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20 20 5e   unlike LIKE.  ^
12770 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20 4c 49  Both GLOB and LI
12780 4b 45 20 6d 61 79 20 62 65 20 70 72 65 63 65 64  KE may be preced
12790 65 64 20 62 79 0a 74 68 65 20 4e 4f 54 20 6b 65  ed by.the NOT ke
127a0 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74 20  yword to invert 
127b0 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68 65  the sense of the
127c0 20 74 65 73 74 2e 20 20 5e 54 68 65 20 69 6e 66   test.  ^The inf
127d0 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74 6f  ix GLOB .operato
127e0 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  r is implemented
127f0 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20   by calling the 
12800 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62 28 3c  function.[glob(<
12810 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
12820 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20 6d 6f  )] and can be mo
12830 64 69 66 69 65 64 20 62 79 20 6f 76 65 72 72 69  dified by overri
12840 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63 74 69  ding.that functi
12850 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  on.</p>..<tcl>hd
12860 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65 78 70  _fragment regexp
12870 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a 3c 70   REGEXP</tcl>.<p
12880 3e 5e 54 68 65 20 52 45 47 45 58 50 20 6f 70 65  >^The REGEXP ope
12890 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63 69  rator is a speci
128a0 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68  al syntax for th
128b0 65 20 72 65 67 65 78 70 28 29 0a 75 73 65 72 20  e regexp().user 
128c0 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e 6f 20 72  function.  ^No r
128d0 65 67 65 78 70 28 29 20 75 73 65 72 20 66 75 6e  egexp() user fun
128e0 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ction is defined
128f0 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64 20   by default.and 
12900 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52 45  so use of the RE
12910 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77 69  GEXP operator wi
12920 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73 75  ll normally resu
12930 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20 6d  lt in an.error m
12940 65 73 73 61 67 65 2e 20 20 5e 49 66 20 61 20 5b  essage.  ^If a [
12950 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
12960 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ned SQL function
12970 5d 20 6e 61 6d 65 64 20 22 72 65 67 65 78 70 22  ] named "regexp"
12980 0a 69 73 20 61 64 64 65 64 20 61 74 20 72 75 6e  .is added at run
12990 2d 74 69 6d 65 2c 20 74 68 61 74 20 66 75 6e 63  -time, that func
129a0 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 63 61 6c  tion will be cal
129b0 6c 65 64 20 69 6e 20 6f 72 64 65 72 0a 74 6f 20  led in order.to 
129c0 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 52 45  implement the RE
129d0 47 45 58 50 20 6f 70 65 72 61 74 6f 72 2e 3c 2f  GEXP operator.</
129e0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
129f0 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41 54 43 48  ment match MATCH
12a00 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 4d  </tcl>.<p>^The M
12a10 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20 69 73  ATCH operator is
12a20 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61   a special synta
12a30 78 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68 28  x for the match(
12a40 29 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  ).application-de
12a50 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 2e 20  fined function. 
12a60 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 6d 61   ^The default ma
12a70 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  tch() function i
12a80 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61  mplementation.ra
12a90 69 73 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f  ises an exceptio
12aa0 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20 72 65 61  n and is not rea
12ab0 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f 72 20 61  lly useful for a
12ac0 6e 79 74 68 69 6e 67 2e 0a 5e 42 75 74 20 65 78  nything..^But ex
12ad0 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65  tensions can ove
12ae0 72 72 69 64 65 20 74 68 65 20 6d 61 74 63 68 28  rride the match(
12af0 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ) function with 
12b00 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67  more.helpful log
12b10 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ic.</p>..<tcl>hd
12b20 5f 66 72 61 67 6d 65 6e 74 20 62 65 74 77 65 65  _fragment betwee
12b30 6e 20 42 45 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a  n BETWEEN</tcl>.
12b40 3c 68 33 3e 54 68 65 20 42 45 54 57 45 45 4e 20  <h3>The BETWEEN 
12b50 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70  operator</h3>.<p
12b60 3e 5e 28 54 68 65 20 42 45 54 57 45 45 4e 20 6f  >^(The BETWEEN o
12b70 70 65 72 61 74 6f 72 20 69 73 20 6c 6f 67 69 63  perator is logic
12b80 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e 74 20  ally equivalent 
12b90 74 6f 20 61 20 70 61 69 72 20 6f 66 20 63 6f 6d  to a pair of com
12ba0 70 61 72 69 73 6f 6e 73 2e 0a 22 3c 69 3e 78 3c  parisons.."<i>x<
12bb0 2f 69 3e 20 3c 62 3e 42 45 54 57 45 45 4e 3c 2f  /i> <b>BETWEEN</
12bc0 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41  b> <i>y</i> <b>A
12bd0 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c 2f 69 3e 22  ND</b> <i>z</i>"
12be0 20 69 73 20 0a 65 71 75 69 76 61 6c 65 6e 74 20   is .equivalent 
12bf0 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69 3e 3c 62 3e  to ."<i>x</i><b>
12c00 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f 69  &gt;=</b><i>y</i
12c10 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e  > <b>AND</b> <i>
12c20 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62  x</i><b>&lt;=</b
12c30 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65 78 63 65 70  ><i>z</i>" excep
12c40 74 0a 74 68 61 74 20 77 69 74 68 20 42 45 54 57  t.that with BETW
12c50 45 45 4e 2c 20 74 68 65 20 3c 69 3e 78 3c 2f 69  EEN, the <i>x</i
12c60 3e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  > expression is 
12c70 6f 6e 6c 79 20 65 76 61 6c 75 61 74 65 64 20 6f  only evaluated o
12c80 6e 63 65 2e 29 5e 0a 5e 54 68 65 20 70 72 65 63  nce.)^.^The prec
12c90 65 64 65 6e 63 65 20 6f 66 20 74 68 65 20 42 45  edence of the BE
12ca0 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69  TWEEN operator i
12cb0 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
12cc0 65 20 70 72 65 63 65 64 65 6e 63 65 0a 61 73 20  e precedence.as 
12cd0 6f 70 65 72 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c  operators <b>==<
12ce0 2f 62 3e 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62  /b> and <b>!=</b
12cf0 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62  > and <b>LIKE</b
12d00 3e 20 61 6e 64 20 67 72 6f 75 70 73 20 6c 65 66  > and groups lef
12d10 74 20 74 6f 20 72 69 67 68 74 2e 0a 0a 3c 74 63  t to right...<tc
12d20 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61  l>hd_fragment ca
12d30 73 65 20 7b 43 41 53 45 20 65 78 70 72 65 73 73  se {CASE express
12d40 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  ion}</tcl>.<h3>T
12d50 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
12d60 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41 20 43 41 53  on</h3>.<p>A CAS
12d70 45 20 65 78 70 72 65 73 73 69 6f 6e 20 73 65 72  E expression ser
12d80 76 65 73 20 61 20 72 6f 6c 65 20 73 69 6d 69 6c  ves a role simil
12d90 61 72 20 74 6f 20 49 46 2d 54 48 45 4e 2d 45 4c  ar to IF-THEN-EL
12da0 53 45 20 69 6e 20 6f 74 68 65 72 0a 70 72 6f 67  SE in other.prog
12db0 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65  ramming language
12dc0 73 2e 20 20 0a 0a 3c 70 3e 54 68 65 20 6f 70 74  s.  ..<p>The opt
12dd0 69 6f 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ional expression
12de0 20 74 68 61 74 20 6f 63 63 75 72 73 20 69 6e 20   that occurs in 
12df0 62 65 74 77 65 65 6e 20 74 68 65 20 43 41 53 45  between the CASE
12e00 20 6b 65 79 77 6f 72 64 20 61 6e 64 20 74 68 65   keyword and the
12e10 0a 66 69 72 73 74 20 57 48 45 4e 20 6b 65 79 77  .first WHEN keyw
12e20 6f 72 64 20 69 73 20 63 61 6c 6c 65 64 20 74 68  ord is called th
12e30 65 20 22 62 61 73 65 22 20 65 78 70 72 65 73 73  e "base" express
12e40 69 6f 6e 2e 20 5e 54 68 65 72 65 20 61 72 65 20  ion. ^There are 
12e50 74 77 6f 20 62 61 73 69 63 20 66 6f 72 6d 73 0a  two basic forms.
12e60 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
12e70 65 73 73 69 6f 6e 3a 20 74 68 6f 73 65 20 77 69  ession: those wi
12e80 74 68 20 61 20 62 61 73 65 20 65 78 70 72 65 73  th a base expres
12e90 73 69 6f 6e 20 61 6e 64 20 74 68 6f 73 65 20 77  sion and those w
12ea0 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e 5e 49 6e 20  ithout...<p>^In 
12eb0 61 20 43 41 53 45 20 77 69 74 68 6f 75 74 20 61  a CASE without a
12ec0 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
12ed0 2c 20 65 61 63 68 20 57 48 45 4e 20 65 78 70 72  , each WHEN expr
12ee0 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
12ef0 74 65 64 0a 61 6e 64 20 74 68 65 20 72 65 73 75  ted.and the resu
12f00 6c 74 20 74 72 65 61 74 65 64 20 61 73 20 61 20  lt treated as a 
12f10 62 6f 6f 6c 65 61 6e 2c 20 73 74 61 72 74 69 6e  boolean, startin
12f20 67 20 77 69 74 68 20 74 68 65 20 6c 65 66 74 6d  g with the leftm
12f30 6f 73 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 69  ost and continui
12f40 6e 67 0a 74 6f 20 74 68 65 20 72 69 67 68 74 2e  ng.to the right.
12f50 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
12f60 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
12f70 69 6f 6e 20 69 73 20 74 68 65 20 65 76 61 6c 75  ion is the evalu
12f80 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45  ation of the THE
12f90 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  N.expression tha
12fa0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
12fb0 20 74 68 65 20 66 69 72 73 74 20 57 48 45 4e 20   the first WHEN 
12fc0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
12fd0 65 76 61 6c 75 61 74 65 73 20 74 6f 0a 74 72 75  evaluates to.tru
12fe0 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20  e. ^Or, if none 
12ff0 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72  of the WHEN expr
13000 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
13010 20 74 6f 20 74 72 75 65 2c 20 74 68 65 20 72 65   to true, the re
13020 73 75 6c 74 20 6f 66 0a 65 76 61 6c 75 61 74 69  sult of.evaluati
13030 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72  ng the ELSE expr
13040 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20  ession, if any. 
13050 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
13060 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
13070 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and.none of the 
13080 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
13090 20 61 72 65 20 74 72 75 65 2c 20 74 68 65 6e 20   are true, then 
130a0 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75  the overall resu
130b0 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  lt is NULL...<p>
130c0 5e 41 20 4e 55 4c 4c 20 72 65 73 75 6c 74 20 69  ^A NULL result i
130d0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 75 6e 74  s considered unt
130e0 72 75 65 20 77 68 65 6e 20 65 76 61 6c 75 61 74  rue when evaluat
130f0 69 6e 67 20 57 48 45 4e 20 74 65 72 6d 73 2e 0a  ing WHEN terms..
13100 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45 20 77  .<p>^In a CASE w
13110 69 74 68 20 61 20 62 61 73 65 20 65 78 70 72 65  ith a base expre
13120 73 73 69 6f 6e 2c 20 74 68 65 20 62 61 73 65 20  ssion, the base 
13130 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
13140 61 6c 75 61 74 65 64 20 6a 75 73 74 0a 6f 6e 63  aluated just.onc
13150 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  e and the result
13160 20 69 73 20 63 6f 6d 70 61 72 65 64 20 61 67 61   is compared aga
13170 69 6e 73 74 20 74 68 65 20 65 76 61 6c 75 61 74  inst the evaluat
13180 69 6f 6e 20 6f 66 20 65 61 63 68 20 57 48 45 4e  ion of each WHEN
13190 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 66 72 6f   .expression fro
131a0 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  m left to right.
131b0 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
131c0 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
131d0 69 6f 6e 20 69 73 20 74 68 65 20 0a 65 76 61 6c  ion is the .eval
131e0 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48  uation of the TH
131f0 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  EN expression th
13200 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
13210 6f 20 74 68 65 20 66 69 72 73 74 20 57 48 45 4e  o the first WHEN
13220 0a 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20  .expression for 
13230 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70 61 72  which the compar
13240 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 5e 4f  ison is true. ^O
13250 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  r, if none of th
13260 65 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  e WHEN.expressio
13270 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61  ns evaluate to a
13280 20 76 61 6c 75 65 20 65 71 75 61 6c 20 74 6f 20   value equal to 
13290 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73  the base express
132a0 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 0a  ion, the result.
132b0 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
132c0 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f  e ELSE expressio
132d0 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74  n, if any. ^If t
132e0 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20  here is no ELSE 
132f0 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e  expression and.n
13300 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
13310 65 78 70 72 65 73 73 69 6f 6e 73 20 70 72 6f 64  expressions prod
13320 75 63 65 20 61 20 72 65 73 75 6c 74 20 65 71 75  uce a result equ
13330 61 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65  al to the base e
13340 78 70 72 65 73 73 69 6f 6e 2c 0a 74 68 65 20 6f  xpression,.the o
13350 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73  verall result is
13360 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 57 68 65 6e   NULL...<p>^When
13370 20 63 6f 6d 70 61 72 69 6e 67 20 61 20 62 61 73   comparing a bas
13380 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 67 61  e expression aga
13390 69 6e 73 74 20 61 20 57 48 45 4e 20 65 78 70 72  inst a WHEN expr
133a0 65 73 73 69 6f 6e 2c 20 74 68 65 20 73 61 6d 65  ession, the same
133b0 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  .collating seque
133c0 6e 63 65 2c 20 61 66 66 69 6e 69 74 79 2c 20 61  nce, affinity, a
133d0 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67  nd NULL-handling
133e0 20 72 75 6c 65 73 20 61 70 70 6c 79 20 61 73 20   rules apply as 
133f0 69 66 20 74 68 65 0a 62 61 73 65 20 65 78 70 72  if the.base expr
13400 65 73 73 69 6f 6e 20 61 6e 64 20 57 48 45 4e 20  ession and WHEN 
13410 65 78 70 72 65 73 73 69 6f 6e 20 61 72 65 20 72  expression are r
13420 65 73 70 65 63 74 69 76 65 6c 79 20 74 68 65 20  espectively the 
13430 6c 65 66 74 2d 20 61 6e 64 0a 72 69 67 68 74 2d  left- and.right-
13440 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66  hand operands of
13450 20 61 6e 20 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62   an <big><b>=</b
13460 3e 3c 2f 62 69 67 3e 20 6f 70 65 72 61 74 6f 72  ></big> operator
13470 2e 3c 2f 70 3e 20 5e 49 66 20 74 68 65 20 62 61  .</p> ^If the ba
13480 73 65 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 69  se .expression i
13490 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
134a0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
134b0 53 45 20 69 73 20 61 6c 77 61 79 73 20 74 68 65  SE is always the
134c0 20 72 65 73 75 6c 74 20 0a 6f 66 20 65 76 61 6c   result .of eval
134d0 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20  uating the ELSE 
134e0 65 78 70 72 65 73 73 69 6f 6e 20 69 66 20 69 74  expression if it
134f0 20 65 78 69 73 74 73 2c 20 6f 72 20 4e 55 4c 4c   exists, or NULL
13500 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 2e   if it does not.
13510 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66 6f 72 6d 73  ..<p>^Both forms
13520 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
13530 72 65 73 73 69 6f 6e 20 75 73 65 20 6c 61 7a 79  ression use lazy
13540 2c 20 6f 72 20 73 68 6f 72 74 2d 63 69 72 63 75  , or short-circu
13550 69 74 2c 20 0a 65 76 61 6c 75 61 74 69 6f 6e 2e  it, .evaluation.
13560 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 6e 6c 79 20  ..<p>^(The only 
13570 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
13580 65 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  en the following
13590 20 74 77 6f 20 43 41 53 45 20 65 78 70 72 65 73   two CASE expres
135a0 73 69 6f 6e 73 20 69 73 20 74 68 61 74 20 0a 74  sions is that .t
135b0 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72  he <i>x</i> expr
135c0 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
135d0 74 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 63 65  ted exactly once
135e0 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 65 78   in the first ex
135f0 61 6d 70 6c 65 20 62 75 74 20 0a 6d 69 67 68 74  ample but .might
13600 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 6d 75   be evaluated mu
13610 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 69 6e 20  ltiple times in 
13620 74 68 65 20 73 65 63 6f 6e 64 3a 0a 0a 3c 75 6c  the second:..<ul
13630 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43 41 53 45 20  ><pre>.<li>CASE 
13640 78 20 57 48 45 4e 20 77 31 20 54 48 45 4e 20 72  x WHEN w1 THEN r
13650 31 20 57 48 45 4e 20 77 32 20 54 48 45 4e 20 72  1 WHEN w2 THEN r
13660 32 20 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 6c  2 ELSE r3 END.<l
13670 69 3e 43 41 53 45 20 57 48 45 4e 20 78 3d 77 31  i>CASE WHEN x=w1
13680 20 54 48 45 4e 20 72 31 20 57 48 45 4e 20 78 3d   THEN r1 WHEN x=
13690 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45 20  w2 THEN r2 ELSE 
136a0 72 33 20 45 4e 44 0a 3c 2f 70 72 65 3e 3c 2f 75  r3 END.</pre></u
136b0 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66  l>)^...<tcl>hd_f
136c0 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 49  ragment in_op {I
136d0 4e 20 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54  N operator} {NOT
136e0 20 49 4e 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74   IN operator}</t
136f0 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 49 4e 20 61  cl>.<h3>The IN a
13700 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  nd NOT IN operat
13710 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65  ors</h3>.<p>^The
13720 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f   IN and NOT IN o
13730 70 65 72 61 74 6f 72 73 20 74 61 6b 65 20 61 20  perators take a 
13740 73 69 6e 67 6c 65 20 73 63 61 6c 61 72 20 6f 70  single scalar op
13750 65 72 61 6e 64 20 6f 6e 20 74 68 65 0a 6c 65 66  erand on the.lef
13760 74 20 61 6e 64 20 61 20 76 65 63 74 6f 72 20 6f  t and a vector o
13770 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 72 69  perand on the ri
13780 67 68 74 0a 66 6f 72 6d 65 64 20 62 79 20 61 6e  ght.formed by an
13790 20 65 78 70 6c 69 63 69 74 20 6c 69 73 74 20 6f   explicit list o
137a0 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 73  f zero or more s
137b0 63 61 6c 61 72 73 20 6f 72 20 62 79 20 61 20 0a  calars or by a .
137c0 73 69 6e 67 6c 65 20 73 75 62 71 75 65 72 79 2e  single subquery.
137d0 0a 5e 57 68 65 6e 20 74 68 65 20 72 69 67 68 74  .^When the right
137e0 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49   operand of an I
137f0 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72  N or NOT IN oper
13800 61 74 6f 72 20 69 73 20 61 20 73 75 62 71 75 65  ator is a subque
13810 72 79 2c 20 74 68 65 0a 73 75 62 71 75 65 72 79  ry, the.subquery
13820 20 6d 75 73 74 20 68 61 76 65 20 61 20 73 69 6e   must have a sin
13830 67 6c 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  gle result colum
13840 6e 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69 67  n..^When the rig
13850 68 74 20 6f 70 65 72 61 6e 64 20 69 73 20 61 6e  ht operand is an
13860 20 65 6d 70 74 79 20 73 65 74 2c 20 74 68 65 20   empty set, the 
13870 72 65 73 75 6c 74 20 6f 66 20 49 4e 20 69 73 20  result of IN is 
13880 66 61 6c 73 65 20 61 6e 64 20 74 68 65 0a 72 65  false and the.re
13890 73 75 6c 74 20 6f 66 20 4e 4f 54 20 49 4e 20 69  sult of NOT IN i
138a0 73 20 74 72 75 65 2c 20 72 65 67 61 72 64 6c 65  s true, regardle
138b0 73 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 6f  ss of the left o
138c0 70 65 72 61 6e 64 20 61 6e 64 20 65 76 65 6e 20  perand and even 
138d0 69 66 20 74 68 65 0a 6c 65 66 74 20 6f 70 65 72  if the.left oper
138e0 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 5e 28 54  and is NULL..^(T
138f0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20  he result of an 
13900 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65  IN or NOT IN ope
13910 72 61 74 6f 72 20 69 73 20 64 65 74 65 72 6d 69  rator is determi
13920 6e 65 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f  ned by the follo
13930 77 69 6e 67 0a 6d 61 74 72 69 78 3a 0a 0a 3c 63  wing.matrix:..<c
13940 65 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f  enter>.<table bo
13950 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 3c 74 68  rder=1>.<tr>.<th
13960 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 3c 62  >Left operand <b
13970 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69  r>is NULL.<th>Ri
13980 67 68 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e  ght operand <br>
13990 63 6f 6e 74 61 69 6e 73 20 4e 55 4c 4c 0a 3c 74  contains NULL.<t
139a0 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20  h>Right operand 
139b0 3c 62 72 3e 69 73 20 61 6e 20 65 6d 70 74 79 20  <br>is an empty 
139c0 73 65 74 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65  set.<th>Left ope
139d0 72 61 6e 64 20 66 6f 75 6e 64 20 3c 62 72 3e 77  rand found <br>w
139e0 69 74 68 69 6e 20 72 69 67 68 74 20 6f 70 65 72  ithin right oper
139f0 61 6e 64 0a 3c 74 68 3e 52 65 73 75 6c 74 20 6f  and.<th>Result o
13a00 66 20 3c 62 72 3e 49 4e 20 6f 70 65 72 61 74 6f  f <br>IN operato
13a10 72 0a 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66 20  r.<th>Result of 
13a20 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f 70 65 72 61  <br>NOT IN opera
13a30 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tor.<tr>.<td ali
13a40 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
13a50 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13a60 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13a70 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
13a80 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
13a90 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13aa0 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c  er">false.<td al
13ab0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75  ign="center">tru
13ac0 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  e.<tr>.<td align
13ad0 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
13ae0 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
13af0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
13b00 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13b10 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<td align
13b20 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
13b30 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13b40 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d  false.<td align=
13b50 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74  "center">true.<t
13b60 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
13b70 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
13b80 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73  gn="center">does
13b90 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20   not matter.<td 
13ba0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13bb0 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13bc0 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69  ter">yes.<td ali
13bd0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65  gn="center">true
13be0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13bf0 65 72 22 3e 66 61 6c 73 65 0a 3c 74 72 3e 0a 3c  er">false.<tr>.<
13c00 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13c10 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13c20 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
13c30 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13c40 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13c50 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
13c60 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a  n="center">NULL.
13c70 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13c80 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e 0a 3c 74 64  r">NULL.<tr>.<td
13c90 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13ca0 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  yes.<td align="c
13cb0 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20  enter">does not 
13cc0 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e  matter.<td align
13cd0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
13ce0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13cf0 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
13d00 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13d10 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67  r">NULL.<td alig
13d20 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a  n="center">NULL.
13d30 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65  </table>.</cente
13d40 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  r>)^..<p>^Note t
13d50 68 61 74 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77  hat SQLite allow
13d60 73 20 74 68 65 20 70 61 72 65 6e 74 68 65 73 69  s the parenthesi
13d70 7a 65 64 20 6c 69 73 74 20 6f 66 20 73 63 61 6c  zed list of scal
13d80 61 72 20 76 61 6c 75 65 73 20 6f 6e 0a 74 68 65  ar values on.the
13d90 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65   right-hand side
13da0 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54   of an IN or NOT
13db0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 74 6f 20   IN operator to 
13dc0 62 65 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74  be an empty list
13dd0 20 62 75 74 0a 6d 6f 73 74 20 6f 74 68 65 72 20   but.most other 
13de0 53 51 4c 20 64 61 74 61 62 61 73 65 20 64 61 74  SQL database dat
13df0 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 61 6e  abase engines an
13e00 64 20 74 68 65 20 53 51 4c 39 32 20 73 74 61 6e  d the SQL92 stan
13e10 64 61 72 64 20 72 65 71 75 69 72 65 0a 74 68 65  dard require.the
13e20 20 6c 69 73 74 20 74 6f 20 63 6f 6e 74 61 69 6e   list to contain
13e30 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 65 6c   at least one el
13e40 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ement.</p>..<tcl
13e50 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f  >hd_fragment in_
13e60 6f 70 20 7b 45 58 49 53 54 53 20 6f 70 65 72 61  op {EXISTS opera
13e70 74 6f 72 7d 20 7b 4e 4f 54 20 45 58 49 53 54 53  tor} {NOT EXISTS
13e80 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e   operator}</tcl>
13e90 0a 3c 68 33 3e 54 68 65 20 45 58 49 53 54 53 20  .<h3>The EXISTS 
13ea0 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 0a 3c  operator</h3>..<
13eb0 70 3e 5e 54 68 65 20 45 58 49 53 54 53 20 6f 70  p>^The EXISTS op
13ec0 65 72 61 74 6f 72 20 61 6c 77 61 79 73 20 65 76  erator always ev
13ed0 61 6c 75 61 74 65 73 20 74 6f 20 6f 6e 65 20 6f  aluates to one o
13ee0 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  f the integer va
13ef0 6c 75 65 73 20 30 20 0a 61 6e 64 20 31 2e 20 5e  lues 0 .and 1. ^
13f00 49 66 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  If executing the
13f10 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
13f20 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  t specified as t
13f30 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 0a 6f  he right-hand .o
13f40 70 65 72 61 6e 64 20 6f 66 20 74 68 65 20 45 58  perand of the EX
13f50 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 77 6f  ISTS operator wo
13f60 75 6c 64 20 72 65 74 75 72 6e 20 6f 6e 65 20 6f  uld return one o
13f70 72 20 6d 6f 72 65 20 72 6f 77 73 2c 20 74 68 65  r more rows, the
13f80 6e 20 74 68 65 0a 45 58 49 53 54 53 20 6f 70 65  n the.EXISTS ope
13f90 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20  rator evaluates 
13fa0 74 6f 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74  to 1. ^If execut
13fb0 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 77  ing the SELECT w
13fc0 6f 75 6c 64 20 72 65 74 75 72 6e 0a 6e 6f 20 72  ould return.no r
13fd0 6f 77 73 20 61 74 20 61 6c 6c 2c 20 74 68 65 6e  ows at all, then
13fe0 20 74 68 65 20 45 58 49 53 54 53 20 6f 70 65 72   the EXISTS oper
13ff0 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74  ator evaluates t
14000 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 6e  o 0. ..<p>^The n
14010 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
14020 20 69 6e 20 65 61 63 68 20 72 6f 77 20 72 65 74   in each row ret
14030 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
14040 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 28 69  ECT statement.(i
14050 66 20 61 6e 79 29 20 61 6e 64 20 74 68 65 20 73  f any) and the s
14060 70 65 63 69 66 69 63 20 76 61 6c 75 65 73 20 72  pecific values r
14070 65 74 75 72 6e 65 64 20 68 61 76 65 20 6e 6f 20  eturned have no 
14080 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65  effect on the re
14090 73 75 6c 74 73 0a 6f 66 20 74 68 65 20 45 58 49  sults.of the EXI
140a0 53 54 53 20 6f 70 65 72 61 74 6f 72 2e 20 5e 49  STS operator. ^I
140b0 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 72 6f  n particular, ro
140c0 77 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 4e 55  ws containing NU
140d0 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 0a 6e 6f  LL values are.no
140e0 74 20 68 61 6e 64 6c 65 64 20 61 6e 79 20 64 69  t handled any di
140f0 66 66 65 72 65 6e 74 6c 79 20 66 72 6f 6d 20 72  fferently from r
14100 6f 77 73 20 77 69 74 68 6f 75 74 20 4e 55 4c 4c  ows without NULL
14110 20 76 61 6c 75 65 73 2e 0a 0a 3c 68 33 3e 53 63   values...<h3>Sc
14120 61 6c 61 72 20 53 75 62 71 75 65 72 69 65 73 3c  alar Subqueries<
14130 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c  /h3>..<p>^A [SEL
14140 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 65  ECT] statement e
14150 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e  nclosed in paren
14160 74 68 65 73 65 73 20 6d 61 79 20 61 70 70 65 61  theses may appea
14170 72 20 61 73 20 61 20 73 63 61 6c 61 72 0a 71 75  r as a scalar.qu
14180 61 6e 74 69 74 79 2e 20 5e 41 20 5b 53 45 4c 45  antity. ^A [SELE
14190 43 54 5d 20 75 73 65 64 20 61 73 20 61 20 73 63  CT] used as a sc
141a0 61 6c 61 72 20 71 75 61 6e 74 69 74 79 20 6d 75  alar quantity mu
141b0 73 74 20 72 65 74 75 72 6e 20 61 20 72 65 73 75  st return a resu
141c0 6c 74 20 73 65 74 0a 77 69 74 68 20 61 20 73 69  lt set.with a si
141d0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 5e 54 68  ngle column. ^Th
141e0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
141f0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
14200 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 6f  e value of the.o
14210 6e 6c 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  nly column in th
14220 65 20 66 69 72 73 74 20 72 6f 77 20 72 65 74 75  e first row retu
14230 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  rned by the SELE
14240 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49  CT statement. ^I
14250 66 20 74 68 65 20 53 45 4c 45 43 54 20 0a 79 69  f the SELECT .yi
14260 65 6c 64 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f  elds more than o
14270 6e 65 20 72 65 73 75 6c 74 20 72 6f 77 2c 20 61  ne result row, a
14280 6c 6c 20 72 6f 77 73 20 61 66 74 65 72 20 74 68  ll rows after th
14290 65 20 66 69 72 73 74 20 61 72 65 20 69 67 6e 6f  e first are igno
142a0 72 65 64 2e 20 5e 49 66 0a 74 68 65 20 53 45 4c  red. ^If.the SEL
142b0 45 43 54 20 79 69 65 6c 64 73 20 6e 6f 20 72 6f  ECT yields no ro
142c0 77 73 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ws, then the val
142d0 75 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  ue of the expres
142e0 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 2e 0a 5e 28  sion is NULL..^(
142f0 54 68 65 20 4c 49 4d 49 54 20 6f 66 20 61 20 73  The LIMIT of a s
14300 63 61 6c 61 72 20 73 75 62 71 75 65 72 79 20 69  calar subquery i
14310 73 20 61 6c 77 61 79 73 20 31 2e 0a 41 6e 79 20  s always 1..Any 
14320 6f 74 68 65 72 20 4c 49 4d 49 54 20 76 61 6c 75  other LIMIT valu
14330 65 20 67 69 76 65 6e 20 69 6e 20 74 68 65 20 53  e given in the S
14340 51 4c 20 74 65 78 74 20 69 73 20 69 67 6e 6f 72  QL text is ignor
14350 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 6c 6c 20 74  ed.)^..<p>^All t
14360 79 70 65 73 20 6f 66 20 5b 53 45 4c 45 43 54 5d  ypes of [SELECT]
14370 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c   statement, incl
14380 75 64 69 6e 67 20 61 67 67 72 65 67 61 74 65 20  uding aggregate 
14390 61 6e 64 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  and compound SEL
143a0 45 43 54 0a 71 75 65 72 69 65 73 20 28 71 75 65  ECT.queries (que
143b0 72 69 65 73 20 77 69 74 68 20 6b 65 79 77 6f 72  ries with keywor
143c0 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e 20 6f 72  ds like UNION or
143d0 20 45 58 43 45 50 54 29 20 61 72 65 20 61 6c 6c   EXCEPT) are all
143e0 6f 77 65 64 20 61 73 20 73 63 61 6c 61 72 0a 73  owed as scalar.s
143f0 75 62 71 75 65 72 69 65 73 2e 0a 0a 3c 68 33 3e  ubqueries...<h3>
14400 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 20 4e 61 6d  Table Column Nam
14410 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 63  es</h3>..<p>^A c
14420 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62  olumn name can b
14430 65 20 61 6e 79 20 6f 66 20 74 68 65 20 6e 61 6d  e any of the nam
14440 65 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68  es defined in th
14450 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
14460 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 6f 6e  .statement or on
14470 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
14480 6e 67 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74  ng special ident
14490 69 66 69 65 72 73 3a 20 22 3c 62 3e 52 4f 57 49  ifiers: "<b>ROWI
144a0 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f 49 44 3c  D</b>",."<b>OID<
144b0 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f  /b>", or "<b>_RO
144c0 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e 54 68 65 73  WID_</b>"..^Thes
144d0 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69  e special identi
144e0 66 69 65 72 73 20 61 6c 6c 20 64 65 73 63 72 69  fiers all descri
144f0 62 65 20 74 68 65 0a 75 6e 69 71 75 65 20 69 6e  be the.unique in
14500 74 65 67 65 72 20 6b 65 79 20 28 74 68 65 20 5b  teger key (the [
14510 72 6f 77 69 64 5d 29 20 61 73 73 6f 63 69 61 74  rowid]) associat
14520 65 64 20 77 69 74 68 20 65 76 65 72 79 20 0a 72  ed with every .r
14530 6f 77 20 6f 66 20 65 76 65 72 79 20 74 61 62 6c  ow of every tabl
14540 65 2e 0a 5e 54 68 65 20 73 70 65 63 69 61 6c 20  e..^The special 
14550 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79  identifiers only
14560 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 72 6f   refer to the ro
14570 77 20 6b 65 79 20 69 66 20 74 68 65 20 5b 43 52  w key if the [CR
14580 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
14590 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64  ement does not d
145a0 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c  efine a real col
145b0 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d  umn with the sam
145c0 65 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 72 6f 77  e name..^The row
145d0 69 64 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  id can be used a
145e0 6e 79 77 68 65 72 65 20 61 20 72 65 67 75 6c 61  nywhere a regula
145f0 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20  r.column can be 
14600 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  used.</p>..<p>^A
14610 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
14620 65 6e 74 20 75 73 65 64 20 61 73 20 65 69 74 68  ent used as eith
14630 65 72 20 61 20 73 63 61 6c 61 72 20 73 75 62 71  er a scalar subq
14640 75 65 72 79 20 6f 72 20 61 73 20 74 68 65 20 0a  uery or as the .
14650 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
14660 6e 64 20 6f 66 20 61 6e 20 49 4e 2c 20 4e 4f 54  nd of an IN, NOT
14670 20 49 4e 20 6f 72 20 45 58 49 53 54 53 20 65 78   IN or EXISTS ex
14680 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 63 6f 6e  pression may con
14690 74 61 69 6e 20 0a 72 65 66 65 72 65 6e 63 65 73  tain .references
146a0 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   to columns in t
146b0 68 65 20 6f 75 74 65 72 20 71 75 65 72 79 2e 20  he outer query. 
146c0 53 75 63 68 20 61 20 73 75 62 71 75 65 72 79 20  Such a subquery 
146d0 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 61 20 63 6f  is known as.a co
146e0 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72  rrelated subquer
146f0 79 2e 20 5e 41 20 63 6f 72 72 65 6c 61 74 65 64  y. ^A correlated
14700 20 73 75 62 71 75 65 72 79 20 69 73 20 72 65 65   subquery is ree
14710 76 61 6c 75 61 74 65 64 20 65 61 63 68 20 74 69  valuated each ti
14720 6d 65 0a 69 74 73 20 72 65 73 75 6c 74 20 69 73  me.its result is
14730 20 72 65 71 75 69 72 65 64 2e 20 5e 41 6e 20 75   required. ^An u
14740 6e 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71  ncorrelated subq
14750 75 65 72 79 20 69 73 20 65 76 61 6c 75 61 74 65  uery is evaluate
14760 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a 61 6e 64 20  d only once.and 
14770 74 68 65 20 72 65 73 75 6c 74 20 72 65 75 73 65  the result reuse
14780 64 20 61 73 20 6e 65 63 65 73 73 61 72 79 2e 0a  d as necessary..
14790 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
147a0 74 20 63 61 73 74 65 78 70 72 20 7b 43 41 53 54  t castexpr {CAST
147b0 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63   expression}</tc
147c0 6c 3e 0a 3c 68 33 3e 43 41 53 54 20 65 78 70 72  l>.<h3>CAST expr
147d0 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  essions</h3>..<p
147e0 3e 41 20 43 41 53 54 20 65 78 70 72 65 73 73 69  >A CAST expressi
147f0 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  on is used to co
14800 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75 65 20  nvert the value 
14810 6f 66 20 26 6c 74 3b 65 78 70 72 26 67 74 3b 20  of &lt;expr&gt; 
14820 74 6f 20 0a 61 20 64 69 66 66 65 72 65 6e 74 20  to .a different 
14830 5b 73 74 6f 72 61 67 65 20 63 6c 61 73 73 5d 20  [storage class] 
14840 69 6e 20 61 20 73 69 6d 69 6c 61 72 20 77 61 79  in a similar way
14850 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69   to the conversi
14860 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 0a 70 6c  on that takes.pl
14870 61 63 65 20 77 68 65 6e 20 61 20 5b 63 6f 6c 75  ace when a [colu
14880 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 69 73 20  mn affinity] is 
14890 61 70 70 6c 69 65 64 20 74 6f 20 61 20 76 61 6c  applied to a val
148a0 75 65 2e 20 5e 41 70 70 6c 69 63 61 74 69 6f 6e  ue. ^Application
148b0 20 6f 66 20 61 20 43 41 53 54 0a 65 78 70 72 65   of a CAST.expre
148c0 73 73 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65  ssion is differe
148d0 6e 74 20 74 6f 20 61 70 70 6c 69 63 61 74 69 6f  nt to applicatio
148e0 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 61 66  n of a column af
148f0 66 69 6e 69 74 79 2c 20 61 73 0a 77 69 74 68 20  finity, as.with 
14900 61 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  a CAST expressio
14910 6e 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  n the storage cl
14920 61 73 73 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  ass conversion i
14930 73 20 66 6f 72 63 65 64 20 65 76 65 6e 20 0a 69  s forced even .i
14940 66 20 69 74 20 69 73 20 6c 6f 73 73 79 20 61 6e  f it is lossy an
14950 64 20 69 72 72 72 65 76 65 72 73 69 62 6c 65 2e  d irrreversible.
14960 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76 61 6c  ..<p>^If the val
14970 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72 26 67  ue of &lt;expr&g
14980 74 3b 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  t; is NULL, then
14990 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
149a0 68 65 20 43 41 53 54 0a 65 78 70 72 65 73 73 69  he CAST.expressi
149b0 6f 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c 2e  on is also NULL.
149c0 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65   ^Otherwise, the
149d0 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20 6f   storage class o
149e0 66 20 74 68 65 20 72 65 73 75 6c 74 20 76 61 6c  f the result val
149f0 75 65 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ue.is determined
14a00 20 62 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65   by applying the
14a10 20 5b 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65   [rules for dete
14a20 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61  rmining column a
14a30 66 66 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20  ffinity] to.the 
14a40 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74  &lt;type-name&gt
14a50 3b 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  ; specified as p
14a60 61 72 74 20 6f 66 20 74 68 65 20 43 41 53 54 20  art of the CAST 
14a70 65 78 70 72 65 73 73 69 6f 6e 2e 0a 0a 3c 74 61  expression...<ta
14a80 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  ble border=1>.<t
14a90 72 3e 0a 20 20 3c 74 68 3e 20 41 66 66 69 6e 69  r>.  <th> Affini
14aa0 74 79 20 6f 66 20 26 6c 74 3b 74 79 70 65 2d 6e  ty of &lt;type-n
14ab0 61 6d 65 26 67 74 3b 0a 20 20 3c 74 68 3e 20 43  ame&gt;.  <th> C
14ac0 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f 63 65 73  onversion Proces
14ad0 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  sing.<tr>.  <td>
14ae0 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e 20 5e 43   NONE .  <td> ^C
14af0 61 73 74 69 6e 67 20 61 20 76 61 6c 75 65 20 74  asting a value t
14b00 6f 20 61 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d  o a &lt;type-nam
14b10 65 26 67 74 3b 20 77 69 74 68 20 6e 6f 20 61 66  e&gt; with no af
14b20 66 69 6e 69 74 79 20 63 61 75 73 65 73 20 74 68  finity causes th
14b30 65 20 76 61 6c 75 65 20 74 6f 0a 20 20 62 65 20  e value to.  be 
14b40 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
14b50 20 42 4c 4f 42 2e 20 20 5e 43 61 73 74 69 6e 67   BLOB.  ^Casting
14b60 20 74 6f 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69   to a BLOB consi
14b70 73 74 73 20 6f 66 20 66 69 72 73 74 20 63 61 73  sts of first cas
14b80 74 69 6e 67 0a 20 20 74 68 65 20 76 61 6c 75 65  ting.  the value
14b90 20 74 6f 20 54 45 58 54 20 69 6e 20 74 68 65 20   to TEXT in the 
14ba0 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 20 74 68  [encoding] of th
14bb0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
14bc0 63 74 69 6f 6e 2c 20 74 68 65 6e 0a 20 20 69 6e  ction, then.  in
14bd0 74 65 72 70 72 65 74 69 6e 67 20 74 68 65 20 72  terpreting the r
14be0 65 73 75 6c 74 69 6e 67 20 62 79 74 65 20 73 65  esulting byte se
14bf0 71 75 65 6e 63 65 20 61 73 20 61 20 42 4c 4f 42  quence as a BLOB
14c00 20 69 6e 73 74 65 61 64 20 6f 66 20 61 73 20 54   instead of as T
14c10 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  EXT...<tr>.  <td
14c20 3e 20 54 45 58 54 0a 20 20 3c 74 64 3e 20 5e 54  > TEXT.  <td> ^T
14c30 6f 20 63 61 73 74 20 61 20 42 4c 4f 42 20 76 61  o cast a BLOB va
14c40 6c 75 65 20 74 6f 20 54 45 58 54 2c 20 74 68 65  lue to TEXT, the
14c50 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
14c60 65 73 20 74 68 61 74 20 6d 61 6b 65 20 75 70 20  es that make up 
14c70 74 68 65 0a 20 20 42 4c 4f 42 20 69 73 20 69 6e  the.  BLOB is in
14c80 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78  terpreted as tex
14c90 74 20 65 6e 63 6f 64 65 64 20 75 73 69 6e 67 20  t encoded using 
14ca0 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  the database enc
14cb0 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20 20  oding..  <p>.   
14cc0 5e 43 61 73 74 69 6e 67 20 61 6e 20 49 4e 54 45  ^Casting an INTE
14cd0 47 45 52 20 6f 72 20 52 45 41 4c 20 76 61 6c 75  GER or REAL valu
14ce0 65 20 69 6e 74 6f 20 54 45 58 54 20 72 65 6e 64  e into TEXT rend
14cf0 65 72 73 20 74 68 65 20 76 61 6c 75 65 20 61 73  ers the value as
14d00 20 69 66 20 76 69 61 20 0a 20 20 20 20 5b 73 71   if via .    [sq
14d10 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29  lite3_snprintf()
14d20 5d 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  ] except that th
14d30 65 20 72 65 73 75 6c 74 69 6e 67 20 54 45 58 54  e resulting TEXT
14d40 20 75 73 65 73 20 74 68 65 20 5b 65 6e 63 6f 64   uses the [encod
14d50 69 6e 67 5d 20 6f 66 0a 20 20 20 20 74 68 65 20  ing] of.    the 
14d60 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
14d70 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  ion...<tr>.  <td
14d80 3e 20 52 45 41 4c 0a 20 20 3c 74 64 3e 20 5e 57  > REAL.  <td> ^W
14d90 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c  hen casting a BL
14da0 4f 42 20 76 61 6c 75 65 20 74 6f 20 61 20 52 45  OB value to a RE
14db0 41 4c 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73  AL, the value is
14dc0 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64   first converted
14dd0 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54   to.        TEXT
14de0 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65  ..       <p>^Whe
14df0 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45 58 54  n casting a TEXT
14e00 20 76 61 6c 75 65 20 74 6f 20 52 45 41 4c 2c 20   value to REAL, 
14e10 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73  the longest poss
14e20 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20  ible prefix of. 
14e30 20 20 20 20 20 20 20 74 68 65 20 76 61 6c 75 65         the value
14e40 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
14e50 65 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65  erpreted as a re
14e60 61 6c 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74  al number is ext
14e70 72 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20  racted from.    
14e80 20 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c      the TEXT val
14e90 75 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  ue and the remai
14ea0 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41  nder ignored. ^A
14eb0 6e 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65  ny leading space
14ec0 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
14ed0 20 54 45 58 54 20 76 61 6c 75 65 20 61 72 65 20   TEXT value are 
14ee0 69 67 6e 6f 72 65 64 20 77 68 65 6e 20 63 6f 6e  ignored when con
14ef0 76 65 72 67 69 6e 67 20 66 72 6f 6d 20 54 45 58  verging from TEX
14f00 54 20 74 6f 20 52 45 41 4c 2e 20 5e 28 49 66 20  T to REAL. ^(If 
14f10 74 68 65 72 65 20 69 73 0a 20 20 20 20 20 20 20  there is.       
14f20 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20   no prefix that 
14f30 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
14f40 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d  ed as a real num
14f50 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ber, the result 
14f60 6f 66 20 74 68 65 0a 20 20 20 20 20 20 20 20 63  of the.        c
14f70 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 30  onversion is 0.0
14f80 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  .)^..<tr>.  <td>
14f90 20 49 4e 54 45 47 45 52 0a 20 20 3c 74 64 3e 20   INTEGER.  <td> 
14fa0 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20  ^When casting a 
14fb0 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 49 4e  BLOB value to IN
14fc0 54 45 47 45 52 2c 20 74 68 65 20 76 61 6c 75 65  TEGER, the value
14fd0 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72   is first conver
14fe0 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54  ted to.        T
14ff0 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e  EXT..       <p>^
15000 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54  When casting a T
15010 45 58 54 20 76 61 6c 75 65 20 74 6f 20 49 4e 54  EXT value to INT
15020 45 47 45 52 2c 20 74 68 65 20 6c 6f 6e 67 65 73  EGER, the longes
15030 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69  t possible prefi
15040 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65  x of.        the
15050 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20   value that can 
15060 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
15070 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  s an integer num
15080 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65 64  ber is extracted
15090 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68   from.        th
150a0 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64  e TEXT value and
150b0 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69   the remainder i
150c0 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61  gnored. ^Any lea
150d0 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74  ding spaces in t
150e0 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54 20  he.        TEXT 
150f0 76 61 6c 75 65 20 77 68 65 6e 20 63 6f 6e 76 65  value when conve
15100 72 74 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20  rting from TEXT 
15110 74 6f 20 49 4e 54 45 47 45 52 20 61 72 65 20 69  to INTEGER are i
15120 67 6e 6f 72 65 64 2e 20 5e 49 66 20 74 68 65 72  gnored. ^If ther
15130 65 0a 20 20 20 20 20 20 20 20 69 73 20 6e 6f 20  e.        is no 
15140 70 72 65 66 69 78 20 74 68 61 74 20 63 61 6e 20  prefix that can 
15150 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
15160 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  s an integer num
15170 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74 0a  ber, the result.
15180 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
15190 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 0a  onversion is 0..
151a0 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20 63 61 73  .      <p>^A cas
151b0 74 20 6f 66 20 61 20 52 45 41 4c 20 76 61 6c 75  t of a REAL valu
151c0 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54 45 47 45  e into an INTEGE
151d0 52 20 77 69 6c 6c 20 74 72 75 6e 63 61 74 65 20  R will truncate 
151e0 74 68 65 20 66 72 61 63 74 69 6f 6e 61 6c 0a 20  the fractional. 
151f0 20 20 20 20 20 70 61 72 74 20 6f 66 20 74 68 65       part of the
15200 20 52 45 41 4c 2e 20 20 5e 49 66 20 61 20 52 45   REAL.  ^If a RE
15210 41 4c 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20  AL is too large 
15220 74 6f 20 62 65 20 72 65 70 72 65 73 65 6e 74 65  to be represente
15230 64 20 61 73 20 61 6e 20 0a 20 20 20 20 20 20 49  d as an .      I
15240 4e 54 45 47 45 52 20 74 68 65 6e 20 74 68 65 20  NTEGER then the 
15250 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 61  result of the ca
15260 73 74 20 69 73 20 74 68 65 20 6c 61 72 67 65 73  st is the larges
15270 74 20 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67  t negative integ
15280 65 72 3a 20 0a 20 20 20 20 20 20 2d 39 32 32 33  er: .      -9223
15290 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e  372036854775808.
152a0 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 4e 55  ..<tr>.  <td> NU
152b0 4d 45 52 49 43 0a 20 20 3c 74 64 3e 20 5e 43 61  MERIC.  <td> ^Ca
152c0 73 74 69 6e 67 20 61 20 54 45 58 54 20 6f 72 20  sting a TEXT or 
152d0 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20  BLOB value into 
152e0 4e 55 4d 45 52 49 43 20 66 69 72 73 74 20 64 6f  NUMERIC first do
152f0 65 73 20 61 20 66 6f 72 63 65 64 0a 20 20 20 63  es a forced.   c
15300 6f 6e 76 65 72 73 69 6f 6e 20 69 6e 74 6f 20 52  onversion into R
15310 45 41 4c 20 62 75 74 20 74 68 65 6e 20 66 75 72  EAL but then fur
15320 74 68 65 72 20 63 6f 6e 76 65 72 74 73 20 74 68  ther converts th
15330 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 49 4e  e result into IN
15340 54 45 47 45 52 20 69 66 0a 20 20 20 61 6e 64 20  TEGER if.   and 
15350 6f 6e 6c 79 20 69 66 20 74 68 65 20 63 6f 6e 76  only if the conv
15360 65 72 73 69 6f 6e 20 66 72 6f 6d 20 52 45 41 4c  ersion from REAL
15370 20 74 6f 20 49 4e 54 45 47 45 52 20 69 73 20 6c   to INTEGER is l
15380 6f 73 73 6c 65 73 73 20 61 6e 64 20 72 65 76 65  ossless and reve
15390 72 73 69 62 6c 65 2e 0a 20 20 20 54 68 69 73 20  rsible..   This 
153a0 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 6f 6e 74  is the only cont
153b0 65 78 74 20 69 6e 20 53 51 4c 69 74 65 20 77 68  ext in SQLite wh
153c0 65 72 65 20 74 68 65 20 4e 55 4d 45 52 49 43 20  ere the NUMERIC 
153d0 61 6e 64 20 49 4e 54 45 47 45 52 20 5b 61 66 66  and INTEGER [aff
153e0 69 6e 69 74 69 65 73 5d 0a 20 20 20 62 65 68 61  inities].   beha
153f0 76 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 0a  ve differently..
15400 20 20 20 3c 70 3e 20 5e 43 61 73 74 69 6e 67 20     <p> ^Casting 
15410 61 20 52 45 41 4c 20 6f 72 20 49 4e 54 45 47 45  a REAL or INTEGE
15420 52 20 76 61 6c 75 65 20 74 6f 20 4e 55 4d 45 52  R value to NUMER
15430 49 43 20 69 73 20 61 20 6e 6f 2d 6f 70 2c 20 65  IC is a no-op, e
15440 76 65 6e 20 69 66 20 61 20 72 65 61 6c 0a 20 20  ven if a real.  
15450 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 62 65 20   value could be 
15460 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
15470 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
15480 65 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a 3c 2f 74 61  er...</tr>..</ta
15490 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  ble>..<p>^Note t
154a0 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 20 66  hat the result f
154b0 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20  rom casting any 
154c0 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 20 69  non-BLOB value i
154d0 6e 74 6f 20 61 20 0a 42 4c 4f 42 20 61 6e 64 20  nto a .BLOB and 
154e0 74 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  the result from 
154f0 63 61 73 74 69 6e 67 20 61 6e 79 20 42 4c 4f 42  casting any BLOB
15500 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 6f   value into a no
15510 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 0a 6d 61 79  n-BLOB value.may
15520 20 62 65 20 64 69 66 66 65 72 65 6e 74 20 64 65   be different de
15530 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
15540 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
15550 5b 65 6e 63 6f 64 69 6e 67 5d 20 69 73 20 55 54  [encoding] is UT
15560 46 2d 38 2c 0a 55 54 46 2d 31 36 62 65 2c 20 6f  F-8,.UTF-16be, o
15570 72 20 55 54 46 2d 31 36 6c 65 2e 0a 0a 0a 3c 74  r UTF-16le....<t
15580 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
15590 6f 6f 6c 65 61 6e 65 78 70 72 20 7b 62 6f 6f 6c  ooleanexpr {bool
155a0 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c  ean expression}<
155b0 2f 74 63 6c 3e 0a 3c 68 33 3e 42 6f 6f 6c 65 61  /tcl>.<h3>Boolea
155c0 6e 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68  n Expressions</h
155d0 33 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20 6c  3>..<p>The SQL l
155e0 61 6e 67 75 61 67 65 20 66 65 61 74 75 72 65 73  anguage features
155f0 20 73 65 76 65 72 61 6c 20 63 6f 6e 74 65 78 74   several context
15600 73 20 77 68 65 72 65 20 61 6e 20 65 78 70 72 65  s where an expre
15610 73 73 69 6f 6e 20 69 73 20 0a 65 76 61 6c 75 61  ssion is .evalua
15620 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 73 75  ted and the resu
15630 6c 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  lt converted to 
15640 61 20 62 6f 6f 6c 65 61 6e 20 28 74 72 75 65 20  a boolean (true 
15650 6f 72 20 66 61 6c 73 65 29 20 76 61 6c 75 65 2e  or false) value.
15660 20 54 68 65 73 65 0a 63 6f 6e 74 65 78 74 73 20   These.contexts 
15670 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a 20 20 20  are:..  <ul>.   
15680 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 52 45 20   <li> the WHERE 
15690 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
156a0 43 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  CT, UPDATE or DE
156b0 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 2c 0a  LETE statement,.
156c0 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 4f 4e 20      <li> the ON 
156d0 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  or USING clause 
156e0 6f 66 20 61 20 6a 6f 69 6e 20 69 6e 20 61 20 53  of a join in a S
156f0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
15700 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 48 41  .    <li> the HA
15710 56 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  VING clause of a
15720 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
15730 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20  t,.    <li> the 
15740 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  WHEN clause of a
15750 6e 20 53 51 4c 20 74 72 69 67 67 65 72 2c 20 61  n SQL trigger, a
15760 6e 64 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20  nd.    <li> the 
15770 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 72 20 63  WHEN clause or c
15780 6c 61 75 73 65 73 20 6f 66 20 73 6f 6d 65 20 43  lauses of some C
15790 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73 2e  ASE expressions.
157a0 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54  .  </ul>..<p>^(T
157b0 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 72 65  o convert the re
157c0 73 75 6c 74 73 20 6f 66 20 61 6e 20 53 51 4c 20  sults of an SQL 
157d0 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 61 20  expression to a 
157e0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2c 20 53  boolean value, S
157f0 51 4c 69 74 65 0a 66 69 72 73 74 20 63 61 73 74  QLite.first cast
15800 73 20 74 68 65 20 72 65 73 75 6c 74 20 74 6f 20  s the result to 
15810 61 20 4e 55 4d 45 52 49 43 20 76 61 6c 75 65 20  a NUMERIC value 
15820 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
15830 61 73 20 61 20 0a 5b 43 41 53 54 20 65 78 70 72  as a .[CAST expr
15840 65 73 73 69 6f 6e 5d 2e 20 41 20 4e 55 4c 4c 20  ession]. A NULL 
15850 6f 72 20 7a 65 72 6f 20 76 61 6c 75 65 20 28 69  or zero value (i
15860 6e 74 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f  nteger value 0 o
15870 72 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30  r real value 0.0
15880 29 20 69 73 0a 63 6f 6e 73 69 64 65 72 65 64 20  ) is.considered 
15890 74 6f 20 62 65 20 66 61 6c 73 65 2e 20 41 6c 6c  to be false. All
158a0 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61 72   other values ar
158b0 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  e considered tru
158c0 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46 6f 72 20 65  e.)^..<p>^(For e
158d0 78 61 6d 70 6c 65 2c 20 74 68 65 20 76 61 6c 75  xample, the valu
158e0 65 73 20 4e 55 4c 4c 2c 20 30 2e 30 2c 20 30 2c  es NULL, 0.0, 0,
158f0 20 27 65 6e 67 6c 69 73 68 27 20 61 6e 64 20 27   'english' and '
15900 30 27 20 61 72 65 20 61 6c 6c 20 63 6f 6e 73 69  0' are all consi
15910 64 65 72 65 64 0a 74 6f 20 62 65 20 66 61 6c 73  dered.to be fals
15920 65 2e 29 5e 20 5e 28 56 61 6c 75 65 73 20 31 2c  e.)^ ^(Values 1,
15930 20 31 2e 30 2c 20 30 2e 31 2c 20 2d 30 2e 31 20   1.0, 0.1, -0.1 
15940 61 6e 64 20 27 31 65 6e 67 6c 69 73 68 27 20 61  and '1english' a
15950 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  re considered to
15960 20 0a 62 65 20 74 72 75 65 2e 29 5e 0a 0a 3c 68   .be true.)^..<h
15970 33 3e 46 75 6e 63 74 69 6f 6e 73 3c 2f 68 33 3e  3>Functions</h3>
15980 0a 3c 70 3e 5e 42 6f 74 68 20 5b 63 6f 72 65 66  .<p>^Both [coref
15990 75 6e 63 7c 73 69 6d 70 6c 65 5d 20 61 6e 64 20  unc|simple] and 
159a0 5b 61 67 67 66 75 6e 63 7c 61 67 67 72 65 67 61  [aggfunc|aggrega
159b0 74 65 5d 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  te] functions ar
159c0 65 20 73 75 70 70 6f 72 74 65 64 2e 0a 28 46 6f  e supported..(Fo
159d0 72 20 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 70  r presentation p
159e0 75 72 70 6f 73 65 73 2c 20 73 69 6d 70 6c 65 20  urposes, simple 
159f0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 66 75  functions are fu
15a00 72 74 68 65 72 20 73 75 62 64 69 76 69 64 65 64  rther subdivided
15a10 20 69 6e 74 6f 0a 5b 63 6f 72 65 66 75 6e 63 20   into.[corefunc 
15a20 7c 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73  | core functions
15a30 5d 20 61 6e 64 20 5b 64 61 74 65 66 75 6e 63 20  ] and [datefunc 
15a40 7c 20 64 61 74 65 2d 74 69 6d 65 20 66 75 6e 63  | date-time func
15a50 74 69 6f 6e 73 5d 2e 29 0a 5e 41 20 73 69 6d 70  tions].).^A simp
15a60 6c 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20  le function can 
15a70 62 65 20 75 73 65 64 20 69 6e 20 61 6e 79 20 65  be used in any e
15a80 78 70 72 65 73 73 69 6f 6e 2e 20 20 5e 53 69 6d  xpression.  ^Sim
15a90 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 72 65  ple functions re
15aa0 74 75 72 6e 0a 61 20 72 65 73 75 6c 74 20 69 6d  turn.a result im
15ab0 6d 65 64 69 61 74 65 6c 79 20 62 61 73 65 64 20  mediately based 
15ac0 6f 6e 20 74 68 65 69 72 20 69 6e 70 75 74 73 2e  on their inputs.
15ad0 20 20 5e 41 67 67 72 65 67 61 74 65 20 66 75 6e    ^Aggregate fun
15ae0 63 74 69 6f 6e 73 0a 6d 61 79 20 6f 6e 6c 79 20  ctions.may only 
15af0 62 65 20 75 73 65 64 20 69 6e 20 61 20 53 45 4c  be used in a SEL
15b00 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
15b10 5e 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74  ^Aggregate funct
15b20 69 6f 6e 73 20 63 6f 6d 70 75 74 65 0a 74 68 65  ions compute.the
15b30 69 72 20 72 65 73 75 6c 74 20 61 63 72 6f 73 73  ir result across
15b40 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68 65   all rows of the
15b50 20 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70 3e   result set.</p>
15b60 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
15b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15bb0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
15bc0 43 6f 72 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20  Core Functions} 
15bd0 63 6f 72 65 66 75 6e 63 20 7b 2a 63 6f 72 65 66  corefunc {*coref
15be0 75 6e 63 7d 0a 70 72 6f 63 20 66 75 6e 63 64 65  unc}.proc funcde
15bf0 66 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72  f {syntax keywor
15c00 64 73 20 64 65 73 63 7d 20 7b 0a 20 20 68 64 5f  ds desc} {.  hd_
15c10 70 75 74 73 20 7b 3c 74 72 3e 7d 0a 20 20 72 65  puts {<tr>}.  re
15c20 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b 7d 20  gsub -all {\s+} 
15c30 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73 79  [string trim $sy
15c40 6e 74 61 78 5d 20 7b 3c 62 72 20 2f 3e 7d 20 73  ntax] {<br />} s
15c50 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d  yntax.  regsub -
15c60 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c  all {\(([^*)]+)\
15c70 29 7d 20 24 73 79 6e 74 61 78 20 7b 28 3c 69 3e  )} $syntax {(<i>
15c80 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74 61 78 0a  \1</i>)} syntax.
15c90 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 2c    regsub -all {,
15ca0 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c  } $syntax {</i>,
15cb0 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65  <i>} syntax.  re
15cc0 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e  gsub -all {<i>\.
15cd0 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74 61  \.\.</i>} $synta
15ce0 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a 20  x {...} syntax. 
15cf0 20 68 64 5f 70 75 74 73 20 22 3c 74 64 20 76 61   hd_puts "<td va
15d00 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69  lign=\"top\" ali
15d10 67 6e 3d 5c 22 72 69 67 68 74 5c 22 20 77 69 64  gn=\"right\" wid
15d20 74 68 3d 5c 22 31 32 30 5c 22 3e 22 0a 20 20 69  th=\"120\">".  i
15d30 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79  f {[llength $key
15d40 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20  words]==0} {.   
15d50 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b   regexp {[a-z_]+
15d60 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20  } $syntax name. 
15d70 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24     hd_fragment $
15d80 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b 6e  name *$name "${n
15d90 61 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e 63 74  ame}() SQL funct
15da0 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  ion".  } else {.
15db0 20 20 20 20 73 65 74 20 66 72 61 67 6e 61 6d 65      set fragname
15dc0 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f 72   [lindex $keywor
15dd0 64 73 20 30 5d 0a 20 20 20 20 72 65 67 73 75 62  ds 0].    regsub
15de0 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24   -all {[^a-z]} $
15df0 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61 67  fragname {} frag
15e00 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67  name.    hd_frag
15e10 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a 20  ment $fragname. 
15e20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f     eval hd_keywo
15e30 72 64 73 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  rds [string map 
15e40 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72  {\n { }} $keywor
15e50 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74  ds].  }.  hd_put
15e60 73 20 22 24 73 79 6e 74 61 78 3c 2f 74 64 3e 22  s "$syntax</td>"
15e70 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 64 20  .  hd_puts {<td 
15e80 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 7d 0a 20  valign="top">}. 
15e90 20 68 64 5f 72 65 73 6f 6c 76 65 20 24 64 65 73   hd_resolve $des
15ea0 63 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 2f 74  c.  hd_puts {</t
15eb0 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f 74 63 6c  d></tr>}.}.</tcl
15ec0 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 66  >..<p>The core f
15ed0 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62  unctions shown b
15ee0 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62  elow are availab
15ef0 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 0a  le by default. .
15f00 5b 64 61 74 65 66 75 6e 63 20 7c 20 44 61 74 65  [datefunc | Date
15f10 20 26 61 6d 70 3b 20 54 69 6d 65 20 66 75 6e 63   &amp; Time func
15f20 74 69 6f 6e 73 5d 20 61 6e 64 0a 5b 61 67 67 66  tions] and.[aggf
15f30 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20  unc | aggregate 
15f40 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20 64  functions] are d
15f50 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72 61  ocumented separa
15f60 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69 63  tely.  An.applic
15f70 61 74 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e 65  ation may define
15f80 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e 63   additional.func
15f90 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e  tions written in
15fa0 20 43 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20   C and added to 
15fb0 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 67  the database eng
15fc0 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73  ine using.the [s
15fd0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
15fe0 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c 2f  nction()] API.</
15ff0 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
16000 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
16010 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65  10>.<tcl>.funcde
16020 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d 20 7b 0a  f {abs(X)} {} {.
16030 20 20 5e 54 68 65 20 61 62 73 28 58 29 20 66 75    ^The abs(X) fu
16040 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
16050 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75  he absolute valu
16060 65 20 6f 66 20 74 68 65 20 6e 75 6d 65 72 69 63  e of the numeric
16070 0a 20 20 61 72 67 75 6d 65 6e 74 20 58 2e 20 20  .  argument X.  
16080 5e 41 62 73 28 58 29 20 72 65 74 75 72 6e 73 20  ^Abs(X) returns 
16090 4e 55 4c 4c 20 69 66 20 58 20 69 73 20 4e 55 4c  NULL if X is NUL
160a0 4c 2e 20 0a 20 20 5e 28 41 62 73 28 58 29 20 72  L. .  ^(Abs(X) r
160b0 65 74 75 72 6e 20 30 2e 30 20 69 66 20 58 20 69  eturn 0.0 if X i
160c0 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
160d0 6f 62 0a 20 20 74 68 61 74 20 63 61 6e 6e 6f 74  ob.  that cannot
160e0 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f   be converted to
160f0 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
16100 2e 29 5e 20 20 5e 49 66 20 58 20 69 73 20 74 68  .)^  ^If X is th
16110 65 20 0a 20 20 69 6e 74 65 67 65 72 20 2d 39 32  e .  integer -92
16120 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
16130 37 20 74 68 65 6e 20 61 62 73 28 58 29 20 74 68  7 then abs(X) th
16140 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20  rows an integer 
16150 6f 76 65 72 66 6c 6f 77 0a 20 20 65 72 72 6f 72  overflow.  error
16160 20 73 69 6e 63 65 20 74 68 65 72 65 20 69 73 20   since there is 
16170 6e 6f 20 65 71 75 69 76 61 6c 65 6e 74 20 70 6f  no equivalent po
16180 73 69 74 69 76 65 20 36 34 2d 62 69 74 20 74 77  sitive 64-bit tw
16190 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 76 61 6c  o complement val
161a0 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ue..}..funcdef {
161b0 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a  changes()} {} {.
161c0 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28 29    ^The changes()
161d0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
161e0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
161f0 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68  database rows th
16200 61 74 20 77 65 72 65 20 63 68 61 6e 67 65 64 0a  at were changed.
16210 20 20 6f 72 20 69 6e 73 65 72 74 65 64 20 6f 72    or inserted or
16220 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
16230 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 20 63 6f  most recently co
16240 6d 70 6c 65 74 65 64 20 49 4e 53 45 52 54 2c 20  mpleted INSERT, 
16250 44 45 4c 45 54 45 2c 0a 20 20 6f 72 20 55 50 44  DELETE,.  or UPD
16260 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2c 20 65  ATE statement, e
16270 78 63 6c 75 73 69 76 65 20 6f 66 20 73 74 61 74  xclusive of stat
16280 65 6d 65 6e 74 73 20 69 6e 20 6c 6f 77 65 72 2d  ements in lower-
16290 6c 65 76 65 6c 20 74 72 69 67 67 65 72 73 2e 0a  level triggers..
162a0 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28 29    ^The changes()
162b0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
162c0 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
162d0 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  d the [sqlite3_c
162e0 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b  hanges()].  C/C+
162f0 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 68  + function and h
16300 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65  ence follows the
16310 20 73 61 6d 65 20 72 75 6c 65 73 20 66 6f 72 20   same rules for 
16320 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e 67 65 73  counting changes
16330 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68  ..}..funcdef {ch
16340 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29  ar(X1,X2,...,XN)
16350 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68  } {} {.  ^The ch
16360 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29  ar(X1,X2,...,XN)
16370 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
16380 73 20 61 20 73 74 72 69 6e 67 20 63 6f 6d 70 6f  s a string compo
16390 73 65 64 20 6f 66 20 63 68 61 72 61 63 74 65 72  sed of character
163a0 73 20 68 61 76 69 6e 67 20 74 68 65 0a 20 20 20  s having the.   
163b0 75 6e 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69  unicode code poi
163c0 6e 74 20 76 61 6c 75 65 73 20 6f 66 20 69 6e 74  nt values of int
163d0 65 67 65 72 73 20 58 31 20 74 68 72 6f 75 67 68  egers X1 through
163e0 20 58 4e 2c 20 72 65 73 70 65 63 74 69 76 65 6c   XN, respectivel
163f0 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63  y..}..funcdef {c
16400 6f 61 6c 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29  oalesce(X,Y,...)
16410 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f  } {} {.  ^The co
16420 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74 69 6f  alesce() functio
16430 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79  n returns a copy
16440 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f   of its first no
16450 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c  n-NULL argument,
16460 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 61 6c   or.  NULL if al
16470 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  l arguments are 
16480 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73 63 65  NULL.  ^Coalesce
16490 28 29 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65  () must be at le
164a0 61 73 74 20 0a 20 20 32 20 61 72 67 75 6d 65 6e  ast .  2 argumen
164b0 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ts..}..funcdef {
164c0 67 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  glob(X,Y)} {} {.
164d0 20 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c 59 29    ^The glob(X,Y)
164e0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75   function is equ
164f0 69 76 61 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20  ivalent to the. 
16500 20 65 78 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e   expression "<b>
16510 59 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20  Y GLOB X</b>".. 
16520 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58   Note that the X
16530 20 61 6e 64 20 59 20 61 72 67 75 6d 65 6e 74 73   and Y arguments
16540 20 61 72 65 20 72 65 76 65 72 73 65 64 20 69 6e   are reversed in
16550 20 74 68 65 20 67 6c 6f 62 28 29 20 66 75 6e 63   the glob() func
16560 74 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76 65 20  tion.  relative 
16570 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 47 4c  to the infix [GL
16580 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20  OB] operator..  
16590 5e 49 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ^If the [sqlite3
165a0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
165b0 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 69 73  ()] interface is
165c0 20 75 73 65 64 20 74 6f 0a 20 20 6f 76 65 72 72   used to.  overr
165d0 69 64 65 20 74 68 65 20 67 6c 6f 62 28 58 2c 59  ide the glob(X,Y
165e0 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ) function with 
165f0 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69  an alternative i
16600 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68  mplementation th
16610 65 6e 0a 20 20 74 68 65 20 5b 47 4c 4f 42 5d 20  en.  the [GLOB] 
16620 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 69 6e  operator will in
16630 76 6f 6b 65 20 74 68 65 20 61 6c 74 65 72 6e 61  voke the alterna
16640 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tive implementat
16650 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ion..}..funcdef 
16660 7b 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d  {ifnull(X,Y)} {}
16670 20 7b 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c   {.  ^The ifnull
16680 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
16690 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 74  rns a copy of it
166a0 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c  s first non-NULL
166b0 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20   argument, or.  
166c0 4e 55 4c 4c 20 69 66 20 62 6f 74 68 20 61 72 67  NULL if both arg
166d0 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e  uments are NULL.
166e0 20 20 5e 49 66 6e 75 6c 6c 28 29 20 6d 75 73 74    ^Ifnull() must
166f0 20 68 61 76 65 20 65 78 61 63 74 6c 79 20 32 20   have exactly 2 
16700 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20 5e 54 68  arguments..  ^Th
16710 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  e ifnull() funct
16720 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
16730 74 20 74 6f 20 5b 63 6f 61 6c 65 73 63 65 28 29  t to [coalesce()
16740 5d 20 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d  ] with two argum
16750 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ents..}..funcdef
16760 20 7b 69 6e 73 74 72 28 58 2c 59 29 7d 20 7b 7d   {instr(X,Y)} {}
16770 20 7b 0a 20 20 5e 54 68 65 20 69 6e 73 74 72 28   {.  ^The instr(
16780 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 66 69  X,Y) function fi
16790 6e 64 73 20 74 68 65 20 66 69 72 73 74 20 6f 63  nds the first oc
167a0 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69  currence of stri
167b0 6e 67 20 59 20 77 69 74 68 69 6e 20 0a 20 20 73  ng Y within .  s
167c0 74 72 69 6e 67 20 58 20 61 6e 64 20 72 65 74 75  tring X and retu
167d0 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
167e0 66 20 70 72 69 6f 72 20 63 68 61 72 61 63 74 65  f prior characte
167f0 72 73 20 70 6c 75 73 20 31 2c 20 6f 72 20 30 20  rs plus 1, or 0 
16800 69 66 0a 20 20 59 20 69 73 20 6e 6f 77 68 65 72  if.  Y is nowher
16810 65 20 66 6f 75 6e 64 20 77 69 74 68 69 6e 20 58  e found within X
16820 2e 0a 20 20 5e 4f 72 2c 20 69 66 20 58 20 61 6e  ..  ^Or, if X an
16830 64 20 59 20 61 72 65 20 62 6f 74 68 20 42 4c 4f  d Y are both BLO
16840 42 73 2c 20 74 68 65 6e 20 69 6e 73 74 72 28 58  Bs, then instr(X
16850 2c 59 29 20 72 65 74 75 72 6e 73 20 6f 6e 65 0a  ,Y) returns one.
16860 20 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20    more than the 
16870 6e 75 6d 62 65 72 20 62 79 74 65 73 20 70 72 69  number bytes pri
16880 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  or to the first 
16890 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 59 2c  occurrence of Y,
168a0 20 6f 72 20 30 20 69 66 0a 20 20 59 20 64 6f 65   or 0 if.  Y doe
168b0 73 20 6e 6f 74 20 6f 63 63 75 72 20 61 6e 79 77  s not occur anyw
168c0 68 65 72 65 20 77 69 74 68 69 6e 20 58 2e 0a 20  here within X.. 
168d0 20 5e 49 66 20 62 6f 74 68 20 61 72 67 75 6d 65   ^If both argume
168e0 6e 74 73 20 58 20 61 6e 64 20 59 20 74 6f 20 69  nts X and Y to i
168f0 6e 73 74 72 28 58 2c 59 29 20 61 72 65 20 6e 6f  nstr(X,Y) are no
16900 6e 2d 4e 55 4c 4c 20 61 6e 64 20 61 72 65 20 6e  n-NULL and are n
16910 6f 74 20 42 4c 4f 42 73 0a 20 20 74 68 65 6e 20  ot BLOBs.  then 
16920 62 6f 74 68 20 61 72 65 20 69 6e 74 65 72 70 72  both are interpr
16930 65 74 65 64 20 61 73 20 73 74 72 69 6e 67 73 2e  eted as strings.
16940 0a 20 20 5e 49 66 20 65 69 74 68 65 72 20 58 20  .  ^If either X 
16950 6f 72 20 59 20 61 72 65 20 4e 55 4c 4c 20 69 6e  or Y are NULL in
16960 20 69 6e 73 74 72 28 58 2c 59 29 20 74 68 65 6e   instr(X,Y) then
16970 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
16980 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ULL..}..funcdef 
16990 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  {hex(X)} {} {.  
169a0 5e 54 68 65 20 68 65 78 28 29 20 66 75 6e 63 74  ^The hex() funct
169b0 69 6f 6e 20 69 6e 74 65 72 70 72 65 74 73 20 69  ion interprets i
169c0 74 73 20 61 72 67 75 6d 65 6e 74 20 61 73 20 61  ts argument as a
169d0 20 42 4c 4f 42 20 61 6e 64 20 72 65 74 75 72 6e   BLOB and return
169e0 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68 69  s.  a string whi
169f0 63 68 20 69 73 20 74 68 65 20 75 70 70 65 72 2d  ch is the upper-
16a00 63 61 73 65 20 68 65 78 61 64 65 63 69 6d 61 6c  case hexadecimal
16a10 20 72 65 6e 64 65 72 69 6e 67 20 6f 66 20 74 68   rendering of th
16a20 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 20 20 74  e content of.  t
16a30 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e  hat blob..}..fun
16a40 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72  cdef {last_inser
16a50 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a  t_rowid()} {} {.
16a60 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65    ^The last_inse
16a70 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74  rt_rowid() funct
16a80 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
16a90 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74 68 65  [ROWID].  of the
16aa0 20 6c 61 73 74 20 72 6f 77 20 69 6e 73 65 72 74   last row insert
16ab0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
16ac0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68  se connection wh
16ad0 69 63 68 20 69 6e 76 6f 6b 65 64 20 74 68 65 0a  ich invoked the.
16ae0 20 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54    function..  ^T
16af0 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  he last_insert_r
16b00 6f 77 69 64 28 29 20 53 51 4c 20 66 75 6e 63 74  owid() SQL funct
16b10 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72  ion is a wrapper
16b20 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73   around the.  [s
16b30 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
16b40 72 74 5f 72 6f 77 69 64 28 29 5d 20 43 2f 43 2b  rt_rowid()] C/C+
16b50 2b 20 69 6e 74 65 72 66 61 63 65 20 66 75 6e 63  + interface func
16b60 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  tion..}..funcdef
16b70 20 7b 6c 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20   {length(X)} {} 
16b80 7b 0a 20 20 5e 46 6f 72 20 61 20 73 74 72 69 6e  {.  ^For a strin
16b90 67 20 76 61 6c 75 65 20 58 2c 20 74 68 65 20 6c  g value X, the l
16ba0 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f  ength(X) functio
16bb0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
16bc0 6d 62 65 72 20 6f 66 20 0a 20 20 63 68 61 72 61  mber of .  chara
16bd0 63 74 65 72 73 20 28 6e 6f 74 20 62 79 74 65 73  cters (not bytes
16be0 29 20 69 6e 20 58 20 70 72 69 6f 72 20 74 6f 20  ) in X prior to 
16bf0 74 68 65 20 66 69 72 73 74 20 4e 55 4c 20 63 68  the first NUL ch
16c00 61 72 61 63 74 65 72 2e 0a 20 20 53 69 6e 63 65  aracter..  Since
16c10 20 53 51 4c 69 74 65 20 73 74 72 69 6e 67 73 20   SQLite strings 
16c20 64 6f 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20  do not normally 
16c30 63 6f 6e 74 61 69 6e 20 4e 55 4c 20 63 68 61 72  contain NUL char
16c40 61 63 74 65 72 73 2c 20 74 68 65 20 6c 65 6e 67  acters, the leng
16c50 74 68 28 58 29 0a 20 20 66 75 6e 63 74 69 6f 6e  th(X).  function
16c60 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 72 65   will usually re
16c70 74 75 72 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e  turn the total n
16c80 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
16c90 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e  ers in the strin
16ca0 67 20 58 2e 0a 20 20 5e 46 6f 72 20 61 20 62 6c  g X..  ^For a bl
16cb0 6f 62 20 76 61 6c 75 65 20 58 2c 20 6c 65 6e 67  ob value X, leng
16cc0 74 68 28 58 29 20 72 65 74 75 72 6e 73 20 74 68  th(X) returns th
16cd0 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
16ce0 73 20 69 6e 20 74 68 65 20 62 6c 6f 62 2e 0a 20  s in the blob.. 
16cf0 20 5e 49 66 20 58 20 69 73 20 4e 55 4c 4c 20 74   ^If X is NULL t
16d00 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 69 73  hen length(X) is
16d10 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66 20 58 20 69   NULL..  ^If X i
16d20 73 20 6e 75 6d 65 72 69 63 20 74 68 65 6e 20 6c  s numeric then l
16d30 65 6e 67 74 68 28 58 29 20 72 65 74 75 72 6e 73  ength(X) returns
16d40 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 61   the length of a
16d50 20 73 74 72 69 6e 67 0a 20 20 72 65 70 72 65 73   string.  repres
16d60 65 6e 74 61 74 69 6f 6e 20 6f 66 20 58 2e 0a 7d  entation of X..}
16d70 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 28  ..funcdef {like(
16d80 58 2c 59 29 20 6c 69 6b 65 28 58 2c 59 2c 5a 29  X,Y) like(X,Y,Z)
16d90 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69  } {} {.  ^The li
16da0 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  ke() function is
16db0 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
16dc0 6e 74 20 74 68 65 0a 20 20 22 3c 62 3e 59 20 4c  nt the.  "<b>Y L
16dd0 49 4b 45 20 58 20 26 23 39 31 3b 45 53 43 41 50  IKE X &#91;ESCAP
16de0 45 20 5a 26 23 39 33 3b 3c 2f 62 3e 22 20 65 78  E Z&#93;</b>" ex
16df0 70 72 65 73 73 69 6f 6e 2e 20 0a 20 20 5e 49 66  pression. .  ^If
16e00 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53   the optional ES
16e10 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70  CAPE clause is p
16e20 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
16e30 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69  .  like() functi
16e40 6f 6e 20 69 73 20 69 6e 76 6f 6b 65 64 20 77 69  on is invoked wi
16e50 74 68 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e  th three argumen
16e60 74 73 2e 20 20 5e 4f 74 68 65 72 77 69 73 65 2c  ts.  ^Otherwise,
16e70 20 69 74 20 69 73 0a 20 20 69 6e 76 6f 6b 65 64   it is.  invoked
16e80 20 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65   with two argume
16e90 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f 74 65 20 74  nts only. Note t
16ea0 68 61 74 20 74 68 65 20 58 20 61 6e 64 20 59 20  hat the X and Y 
16eb0 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 0a 20  parameters are. 
16ec0 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68 65   reversed in the
16ed0 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e   like() function
16ee0 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65   relative to the
16ef0 20 69 6e 66 69 78 20 5b 4c 49 4b 45 5d 20 6f 70   infix [LIKE] op
16f00 65 72 61 74 6f 72 2e 0a 20 20 5e 54 68 65 20 5b  erator..  ^The [
16f10 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
16f20 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72  unction()] inter
16f30 66 61 63 65 20 63 61 6e 20 62 65 20 75 73 65 64  face can be used
16f40 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74 68 65   to override the
16f50 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69  .  like() functi
16f60 6f 6e 20 61 6e 64 20 74 68 65 72 65 62 79 20 63  on and thereby c
16f70 68 61 6e 67 65 20 74 68 65 20 6f 70 65 72 61 74  hange the operat
16f80 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 5b 4c 49  ion of the.  [LI
16f90 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 20 20 57  KE] operator.  W
16fa0 68 65 6e 20 6f 76 65 72 72 69 64 69 6e 67 20 74  hen overriding t
16fb0 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69  he like() functi
16fc0 6f 6e 2c 20 69 74 20 6d 61 79 20 62 65 20 69 6d  on, it may be im
16fd0 70 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f 76 65  portant.  to ove
16fe0 72 72 69 64 65 20 62 6f 74 68 20 74 68 65 20 74  rride both the t
16ff0 77 6f 20 61 6e 64 20 74 68 72 65 65 20 61 72 67  wo and three arg
17000 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f  ument versions o
17010 66 20 74 68 65 20 6c 69 6b 65 28 29 20 0a 20 20  f the like() .  
17020 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77  function. Otherw
17030 69 73 65 2c 20 64 69 66 66 65 72 65 6e 74 20 63  ise, different c
17040 6f 64 65 20 6d 61 79 20 62 65 20 63 61 6c 6c 65  ode may be calle
17050 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
17060 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72  he.  [LIKE] oper
17070 61 74 6f 72 20 64 65 70 65 6e 64 69 6e 67 20 6f  ator depending o
17080 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  n whether or not
17090 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61 75 73   an ESCAPE claus
170a0 65 20 77 61 73 20 0a 20 20 73 70 65 63 69 66 69  e was .  specifi
170b0 65 64 2e 0a 7d 0a 0a 0a 66 75 6e 63 64 65 66 20  ed..}...funcdef 
170c0 7b 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29  {likelihood(X,Y)
170d0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69  } {} {.  ^The li
170e0 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66 75  kelihood(X,Y) fu
170f0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
17100 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e  rgument X unchan
17110 67 65 64 2e 0a 20 20 5e 54 68 65 20 76 61 6c 75  ged..  ^The valu
17120 65 20 59 20 69 6e 20 6c 69 6b 65 6c 69 68 6f 6f  e Y in likelihoo
17130 64 28 58 2c 59 29 20 6d 75 73 74 20 62 65 20 61  d(X,Y) must be a
17140 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
17150 63 6f 6e 73 74 61 6e 74 0a 20 20 62 65 74 77 65  constant.  betwe
17160 65 6e 20 30 2e 30 20 61 6e 64 20 31 2e 30 2c 20  en 0.0 and 1.0, 
17170 69 6e 63 6c 75 73 69 76 65 2e 0a 20 20 5e 54 68  inclusive..  ^Th
17180 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 29 20  e likelihood(X) 
17190 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  function is a no
171a0 2d 6f 70 20 74 68 61 74 20 74 68 65 20 63 6f 64  -op that the cod
171b0 65 20 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70  e generator.  op
171c0 74 69 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20  timizes away so 
171d0 74 68 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73  that it consumes
171e0 20 6e 6f 20 43 50 55 20 63 79 63 6c 65 73 20 61   no CPU cycles a
171f0 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 20 20 5e 54  t run-time..  ^T
17200 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68  he purpose of th
17210 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59  e likelihood(X,Y
17220 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f  ) function is to
17230 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a   provide a hint.
17240 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70    to the query p
17250 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20  lanner that the 
17260 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20  argument X is a 
17270 62 6f 6f 6c 65 61 6e 20 74 68 61 74 20 69 73 0a  boolean that is.
17280 20 20 74 72 75 65 20 77 69 74 68 20 61 20 70 72    true with a pr
17290 6f 62 61 62 69 6c 69 74 79 20 6f 66 20 61 70 70  obability of app
172a0 72 6f 78 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20  roximately Y..  
172b0 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ^The likelihood(
172c0 58 2c 20 30 2e 30 36 32 35 29 20 66 75 6e 63 74  X, 0.0625) funct
172d0 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
172e0 74 20 74 6f 20 5b 75 6e 6c 69 6b 65 6c 79 5d 28  t to [unlikely](
172f0 58 29 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  X)..}..funcdef {
17300 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58  load_extension(X
17310 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  ) load_extension
17320 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
17330 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  he load_extensio
17340 6e 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  n(X,Y) function 
17350 6c 6f 61 64 73 20 5b 53 51 4c 69 74 65 20 65 78  loads [SQLite ex
17360 74 65 6e 73 69 6f 6e 73 5d 20 6f 75 74 20 6f 66  tensions] out of
17370 20 74 68 65 20 73 68 61 72 65 64 0a 20 20 6c 69   the shared.  li
17380 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 64  brary file named
17390 20 58 20 75 73 69 6e 67 20 74 68 65 20 65 6e 74   X using the ent
173a0 72 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e 54 68  ry point Y.  ^Th
173b0 65 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f 61 64  e result of load
173c0 5f 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20 20 69  _extension().  i
173d0 73 20 61 6c 77 61 79 73 20 61 20 4e 55 4c 4c 2e  s always a NULL.
173e0 20 20 5e 49 66 20 59 20 69 73 20 6f 6d 69 74 74    ^If Y is omitt
173f0 65 64 20 74 68 65 6e 20 74 68 65 20 64 65 66 61  ed then the defa
17400 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e 74 20  ult entry point 
17410 6e 61 6d 65 20 69 73 20 75 73 65 64 2e 0a 20 20  name is used..  
17420 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  ^The load_extens
17430 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ion() function r
17440 61 69 73 65 73 20 61 6e 20 65 78 63 65 70 74 69  aises an excepti
17450 6f 6e 20 69 66 20 74 68 65 20 65 78 74 65 6e 73  on if the extens
17460 69 6f 6e 20 66 61 69 6c 73 20 74 6f 0a 20 20 6c  ion fails to.  l
17470 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a  oad or initializ
17480 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20  e correctly...  
17490 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74  <p>^The load_ext
174a0 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f  ension() functio
174b0 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74  n will fail if t
174c0 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 74 74  he extension att
174d0 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69  empts to .  modi
174e0 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61 6e 20  fy or delete an 
174f0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20  SQL function or 
17500 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
17510 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78 74 65  ce.  ^The.  exte
17520 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65  nsion can add ne
17530 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63  w functions or c
17540 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
17550 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20  es, but cannot. 
17560 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74   modify or delet
17570 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74  e existing funct
17580 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e  ions or collatin
17590 67 20 73 65 71 75 65 6e 63 65 73 20 62 65 63 61  g sequences beca
175a0 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75 6e 63  use.  those func
175b0 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c  tions and/or col
175c0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
175d0 20 6d 69 67 68 74 20 62 65 20 75 73 65 64 20 65   might be used e
175e0 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20 74 68  lsewhere.  in th
175f0 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e  e currently runn
17600 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ing SQL statemen
17610 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65  t.  To load an e
17620 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20  xtension that.  
17630 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c 65 74  changes or delet
17640 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  es functions or 
17650 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
17660 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20 20 5b  ces, use the.  [
17670 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
17680 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67  ension()] C-lang
17690 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 0a 20  uage API.</p>.. 
176a0 20 3c 70 3e 46 6f 72 20 73 65 63 75 72 69 74 79   <p>For security
176b0 20 72 65 61 73 6f 6e 73 2c 20 65 78 74 65 6e 73   reasons, extens
176c0 69 6f 6e 20 6c 6f 61 64 65 64 20 69 73 20 74 75  ion loaded is tu
176d0 72 6e 65 64 20 6f 66 66 20 62 79 20 64 65 66 61  rned off by defa
176e0 75 6c 74 20 61 6e 64 20 6d 75 73 74 0a 20 20 62  ult and must.  b
176f0 65 20 65 6e 61 62 6c 65 64 20 62 79 20 61 20 70  e enabled by a p
17700 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 5b 73 71  rior call to [sq
17710 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61  lite3_enable_loa
17720 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 2e 3c  d_extension()].<
17730 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  /p>.}..funcdef {
17740 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20  lower(X)} {} {. 
17750 20 5e 54 68 65 20 6c 6f 77 65 72 28 58 29 20 66   ^The lower(X) f
17760 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
17770 61 20 63 6f 70 79 20 6f 66 20 73 74 72 69 6e 67  a copy of string
17780 20 58 20 77 69 74 68 20 61 6c 6c 20 41 53 43 49   X with all ASCI
17790 49 20 63 68 61 72 61 63 74 65 72 73 0a 20 20 63  I characters.  c
177a0 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f 77 65  onverted to lowe
177b0 72 20 63 61 73 65 2e 20 20 5e 54 68 65 20 64 65  r case.  ^The de
177c0 66 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c  fault built-in l
177d0 6f 77 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 20  ower() function 
177e0 77 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53 43 49  works.  for ASCI
177f0 49 20 63 68 61 72 61 63 74 65 72 73 20 6f 6e 6c  I characters onl
17800 79 2e 20 20 54 6f 20 64 6f 20 63 61 73 65 20 63  y.  To do case c
17810 6f 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f  onversions on no
17820 6e 2d 41 53 43 49 49 0a 20 20 63 68 61 72 61 63  n-ASCII.  charac
17830 74 65 72 73 2c 20 6c 6f 61 64 20 74 68 65 20 49  ters, load the I
17840 43 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a  CU extension..}.
17850 0a 66 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28  .funcdef {ltrim(
17860 58 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b  X) ltrim(X,Y)} {
17870 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d  } {.  ^The ltrim
17880 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
17890 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
178a0 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69  formed by removi
178b0 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20  ng any and all. 
178c0 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
178d0 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f   appear in Y fro
178e0 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20  m the left side 
178f0 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20  of X..  ^If the 
17900 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  Y argument is om
17910 69 74 74 65 64 2c 20 6c 74 72 69 6d 28 58 29 20  itted, ltrim(X) 
17920 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66  removes spaces f
17930 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64  rom the left sid
17940 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e  e.  of X..}..fun
17950 63 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e  cdef {max(X,Y,..
17960 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e  .)} {*maxCoreFun
17970 63 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20 53 51  c *max {max() SQ
17980 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  L function}} {. 
17990 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75   ^The multi-argu
179a0 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74  ment max() funct
179b0 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
179c0 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68  argument with th
179d0 65 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c  e .  maximum val
179e0 75 65 2c 20 6f 72 20 72 65 74 75 72 6e 20 4e 55  ue, or return NU
179f0 4c 4c 20 69 66 20 61 6e 79 20 61 72 67 75 6d 65  LL if any argume
17a00 6e 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e  nt is NULL. .  ^
17a10 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65  The multi-argume
17a20 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f  nt max() functio
17a30 6e 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61  n searches its a
17a40 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65  rguments from le
17a50 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f  ft to right.  fo
17a60 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68  r an argument th
17a70 61 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c  at defines a col
17a80 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
17a90 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f  and uses that co
17aa0 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69  llating.  functi
17ab0 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e  on for all strin
17ac0 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20  g comparisons.  
17ad0 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  ^If none of the 
17ae0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78  arguments to max
17af0 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f  ().  define a co
17b00 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
17b10 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52  , then the BINAR
17b20 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  Y collating func
17b30 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20  tion is used..  
17b40 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78  Note that <b>max
17b50 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70  ()</b> is a simp
17b60 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e  le function when
17b70 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d  .  it has 2 or m
17b80 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75  ore arguments bu
17b90 74 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e  t operates as an
17ba0 0a 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c  .  [minAggFunc |
17bb0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
17bc0 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e  ion] if given on
17bd0 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ly a single argu
17be0 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ment..}..funcdef
17bf0 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20   {min(X,Y,...)} 
17c00 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d  {*minCoreFunc *m
17c10 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75  in {min() SQL fu
17c20 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
17c30 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
17c40 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20   min() function 
17c50 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
17c60 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20 20  ment with the.  
17c70 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20  minimum value.. 
17c80 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75   ^The multi-argu
17c90 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74  ment min() funct
17ca0 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73  ion searches its
17cb0 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
17cc0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20  left to right.  
17cd0 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20  for an argument 
17ce0 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63  that defines a c
17cf0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
17d00 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
17d10 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63  collating.  func
17d20 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
17d30 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  ing comparisons.
17d40 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68    ^If none of th
17d50 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d  e arguments to m
17d60 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20  in().  define a 
17d70 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
17d80 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e  on, then the BIN
17d90 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ARY collating fu
17da0 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  nction is used..
17db0 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d    Note that <b>m
17dc0 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69  in()</b> is a si
17dd0 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68  mple function wh
17de0 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72  en.  it has 2 or
17df0 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20   more arguments 
17e00 62 75 74 20 6f 70 65 72 61 74 65 73 20 61 73 20  but operates as 
17e10 61 6e 20 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e  an .  [maxAggFun
17e20 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75  c | aggregate fu
17e30 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e  nction] if given
17e40 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65  .  only a single
17e50 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75   argument..}..fu
17e60 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c  ncdef {nullif(X,
17e70 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
17e80 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63  nullif(X,Y) func
17e90 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73  tion returns its
17ea0 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
17eb0 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  if the arguments
17ec0 20 61 72 65 0a 20 20 64 69 66 66 65 72 65 6e 74   are.  different
17ed0 20 61 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68 65   and NULL if the
17ee0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
17ef0 68 65 20 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e  he same.  ^The n
17f00 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74  ullif(X,Y) funct
17f10 69 6f 6e 0a 20 20 73 65 61 72 63 68 65 73 20 69  ion.  searches i
17f20 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  ts arguments fro
17f30 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20  m left to right 
17f40 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20  for an argument 
17f50 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 0a 20  that defines a. 
17f60 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
17f70 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61  ion and uses tha
17f80 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  t collating func
17f90 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
17fa0 69 6e 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e  ing.  comparison
17fb0 73 2e 20 20 5e 49 66 20 6e 65 69 74 68 65 72 20  s.  ^If neither 
17fc0 61 72 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c  argument to null
17fd0 69 66 28 29 20 64 65 66 69 6e 65 73 20 61 20 63  if() defines a c
17fe0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
17ff0 6e 0a 20 20 74 68 65 6e 20 74 68 65 20 42 49 4e  n.  then the BIN
18000 41 52 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a  ARY is used..}..
18010 66 75 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58  funcdef {quote(X
18020 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71  )} {} {.  ^The q
18030 75 6f 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e  uote(X) function
18040 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 65 78   returns the tex
18050 74 20 6f 66 20 61 6e 20 53 51 4c 20 6c 69 74 65  t of an SQL lite
18060 72 61 6c 20 77 68 69 63 68 0a 20 20 69 73 20 74  ral which.  is t
18070 68 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20  he value of its 
18080 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61 62 6c  argument suitabl
18090 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20  e for inclusion 
180a0 69 6e 74 6f 20 61 6e 20 53 51 4c 20 73 74 61 74  into an SQL stat
180b0 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67  ement..  ^String
180c0 73 20 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64  s are surrounded
180d0 20 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65   by single-quote
180e0 73 20 77 69 74 68 20 65 73 63 61 70 65 73 20 6f  s with escapes o
180f0 6e 20 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65  n interior quote
18100 73 0a 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20  s.  as needed.  
18110 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64  ^BLOBs are encod
18120 65 64 20 61 73 20 68 65 78 61 64 65 63 69 6d 61  ed as hexadecima
18130 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53  l literals..  ^S
18140 74 72 69 6e 67 73 20 77 69 74 68 20 65 6d 62 65  trings with embe
18150 64 64 65 64 20 4e 55 4c 20 63 68 61 72 61 63 74  dded NUL charact
18160 65 72 73 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  ers cannot be re
18170 70 72 65 73 65 6e 74 65 64 20 61 73 20 73 74 72  presented as str
18180 69 6e 67 0a 20 20 6c 69 74 65 72 61 6c 73 20 69  ing.  literals i
18190 6e 20 53 51 4c 20 61 6e 64 20 68 65 6e 63 65 20  n SQL and hence 
181a0 74 68 65 20 72 65 74 75 72 6e 65 64 20 73 74 72  the returned str
181b0 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 74  ing literal is t
181c0 72 75 6e 63 61 74 65 64 20 70 72 69 6f 72 0a 20  runcated prior. 
181d0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55   to the first NU
181e0 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  L..}..funcdef {r
181f0 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20  andom()} {} {.  
18200 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29 20 66 75  ^The random() fu
18210 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
18220 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69   pseudo-random i
18230 6e 74 65 67 65 72 0a 20 20 62 65 74 77 65 65 6e  nteger.  between
18240 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
18250 37 35 38 30 38 20 61 6e 64 20 2b 39 32 32 33 33  75808 and +92233
18260 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2e 0a  72036854775807..
18270 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64  }..funcdef {rand
18280 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a  omblob(N)} {} {.
18290 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f    ^The randomblo
182a0 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  b(N) function re
182b0 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62  turn an N-byte b
182c0 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70  lob containing p
182d0 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62  seudo-random.  b
182e0 79 74 65 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c  ytes. ^If N is l
182f0 65 73 73 20 74 68 61 6e 20 31 20 74 68 65 6e 20  ess than 1 then 
18300 61 20 31 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20  a 1-byte random 
18310 62 6c 6f 62 20 69 73 20 72 65 74 75 72 6e 65 64  blob is returned
18320 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61  ...  <p>Hint:  a
18330 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20  pplications can 
18340 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c  generate globall
18350 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74 69 66  y unique identif
18360 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74 68 69  iers.  using thi
18370 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74  s function toget
18380 68 65 72 20 77 69 74 68 20 5b 68 65 78 28 29 5d  her with [hex()]
18390 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72   and/or.  [lower
183a0 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f  ()] like this:</
183b0 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74  p>..  <blockquot
183c0 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d 62  e>.  hex(randomb
183d0 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72  lob(16))<br></br
183e0 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28 72 61  >.  lower(hex(ra
183f0 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20  ndomblob(16))). 
18400 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d   </blockquote>.}
18410 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70 6c 61  ..funcdef {repla
18420 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a  ce(X,Y,Z)} {} {.
18430 20 20 5e 54 68 65 20 72 65 70 6c 61 63 65 28 58    ^The replace(X
18440 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72  ,Y,Z) function r
18450 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
18460 66 6f 72 6d 65 64 20 62 79 20 73 75 62 73 74 69  formed by substi
18470 74 75 74 69 6e 67 0a 20 20 73 74 72 69 6e 67 20  tuting.  string 
18480 5a 20 66 6f 72 20 65 76 65 72 79 20 6f 63 63 75  Z for every occu
18490 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67  rrence of string
184a0 20 59 20 69 6e 20 73 74 72 69 6e 67 20 58 2e 20   Y in string X. 
184b0 20 5e 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20   ^The [BINARY]. 
184c0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
184d0 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  nce is used for 
184e0 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
184f0 66 20 59 20 69 73 20 61 6e 20 65 6d 70 74 79 0a  f Y is an empty.
18500 20 20 73 74 72 69 6e 67 20 74 68 65 6e 20 72 65    string then re
18510 74 75 72 6e 20 58 20 75 6e 63 68 61 6e 67 65 64  turn X unchanged
18520 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20  .  ^If Z is not 
18530 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61 20 73 74  initially.  a st
18540 72 69 6e 67 2c 20 69 74 20 69 73 20 63 61 73 74  ring, it is cast
18550 20 74 6f 20 61 20 55 54 46 2d 38 20 73 74 72 69   to a UTF-8 stri
18560 6e 67 20 70 72 69 6f 72 20 74 6f 20 70 72 6f 63  ng prior to proc
18570 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64  essing..}..funcd
18580 65 66 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75  ef {round(X) rou
18590 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  nd(X,Y)} {} {.  
185a0 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c 59 29 20  ^The round(X,Y) 
185b0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
185c0 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
185d0 74 0a 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e  t.  value X roun
185e0 64 65 64 20 74 6f 20 59 20 64 69 67 69 74 73 20  ded to Y digits 
185f0 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20  to the right of 
18600 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
18610 74 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  t..  ^If the Y a
18620 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
18630 65 64 2c 20 69 74 20 69 73 20 61 73 73 75 6d 65  ed, it is assume
18640 64 20 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75  d to be 0..}..fu
18650 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58 29 20  ncdef {rtrim(X) 
18660 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  rtrim(X,Y)} {} {
18670 0a 20 20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c  .  ^The rtrim(X,
18680 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
18690 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
186a0 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
186b0 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
186c0 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
186d0 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
186e0 68 65 20 72 69 67 68 74 20 73 69 64 65 20 6f 66  he right side of
186f0 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20   X..  ^If the Y 
18700 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
18710 74 65 64 2c 20 72 74 72 69 6d 28 58 29 20 72 65  ted, rtrim(X) re
18720 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f  moves spaces fro
18730 6d 20 74 68 65 20 72 69 67 68 74 0a 20 20 73 69  m the right.  si
18740 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  de of X..}..func
18750 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d  def {soundex(X)}
18760 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75   {} {.  ^The sou
18770 6e 64 65 78 28 58 29 20 66 75 6e 63 74 69 6f 6e  ndex(X) function
18780 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
18790 67 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f  g that is the so
187a0 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a  undex encoding .
187b0 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20    of the string 
187c0 58 2e 0a 20 20 5e 54 68 65 20 73 74 72 69 6e 67  X..  ^The string
187d0 20 22 3f 30 30 30 22 20 69 73 20 72 65 74 75 72   "?000" is retur
187e0 6e 65 64 20 69 66 20 74 68 65 20 61 72 67 75 6d  ned if the argum
187f0 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63  ent is NULL or c
18800 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43  ontains.  no ASC
18810 49 49 20 61 6c 70 68 61 62 65 74 69 63 20 63 68  II alphabetic ch
18820 61 72 61 63 74 65 72 73 2e 0a 20 20 5e 28 54 68  aracters..  ^(Th
18830 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
18840 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69  mitted from SQLi
18850 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20  te by default.. 
18860 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69   It is only avai
18870 6c 61 62 6c 65 20 69 66 20 74 68 65 20 5b 53 51  lable if the [SQ
18880 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f  LITE_SOUNDEX] co
18890 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
188a0 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68 65 6e  n.  is used when
188b0 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74   SQLite is built
188c0 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
188d0 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
188e0 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20  tion_get(N)} {} 
188f0 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
18900 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
18910 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  t() SQL function
18920 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
18930 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69  ound the.  [sqli
18940 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
18950 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66  n_get()] C/C++ f
18960 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73  unction..  ^This
18970 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
18980 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c   the N-th compil
18990 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73  e-time option us
189a0 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69  ed to build SQLi
189b0 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20  te.  or NULL if 
189c0 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67  N is out of rang
189d0 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65  e.  See also the
189e0 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e   [compile_option
189f0 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75  s pragma]..}..fu
18a00 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f  ncdef {sqlite_co
18a10 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
18a20 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
18a30 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f   sqlite_compileo
18a40 70 74 69 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c  ption_used() SQL
18a50 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
18a60 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
18a70 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  e.  [sqlite3_com
18a80 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
18a90 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f  )] C/C++ functio
18aa0 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65 20 61  n..  ^When the a
18ab0 72 67 75 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c  rgument X to sql
18ac0 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
18ad0 6e 5f 75 73 65 64 28 58 29 20 69 73 20 61 20 73  n_used(X) is a s
18ae0 74 72 69 6e 67 20 77 68 69 63 68 0a 20 20 69 73  tring which.  is
18af0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63   the name of a c
18b00 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
18b10 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65  on, this routine
18b20 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 28 31   returns true (1
18b30 29 20 6f 72 0a 20 20 66 61 6c 73 65 20 28 30 29  ) or.  false (0)
18b40 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
18b50 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61  ether or not tha
18b60 74 20 6f 70 74 69 6f 6e 20 77 61 73 20 75 73 65  t option was use
18b70 64 20 64 75 72 69 6e 67 20 74 68 65 0a 20 20 62  d during the.  b
18b80 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  uild..}..funcdef
18b90 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f   {sqlite_source_
18ba0 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  id()} {} {.  ^Th
18bb0 65 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  e sqlite_source_
18bc0 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  id() function re
18bd0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
18be0 68 61 74 20 69 64 65 6e 74 69 66 69 65 73 20 74  hat identifies t
18bf0 68 65 0a 20 20 73 70 65 63 69 66 69 63 20 76 65  he.  specific ve
18c00 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75  rsion of the sou
18c10 72 63 65 20 63 6f 64 65 20 74 68 61 74 20 77 61  rce code that wa
18c20 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  s used to build 
18c30 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62  the SQLite.  lib
18c40 72 61 72 79 2e 20 20 5e 54 68 65 20 73 74 72 69  rary.  ^The stri
18c50 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ng returned by s
18c60 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
18c70 29 20 62 65 67 69 6e 73 20 77 69 74 68 0a 20 20  ) begins with.  
18c80 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
18c90 65 20 74 68 61 74 20 74 68 65 20 73 6f 75 72 63  e that the sourc
18ca0 65 20 63 6f 64 65 20 77 61 73 20 63 68 65 63 6b  e code was check
18cb0 65 64 20 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c  ed in and is fol
18cc0 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20 53 48 41  lows by.  an SHA
18cd0 31 20 68 61 73 68 20 74 68 61 74 20 75 6e 69 71  1 hash that uniq
18ce0 75 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20  uely identifies 
18cf0 74 68 65 20 73 6f 75 72 63 65 20 74 72 65 65 2e  the source tree.
18d00 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e    ^This function
18d10 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61   is.  an SQL wra
18d20 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
18d30 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  [sqlite3_sourcei
18d40 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65  d()] C interface
18d50 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
18d60 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20  lite_version()} 
18d70 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
18d80 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e  te_version() fun
18d90 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
18da0 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67  e version string
18db0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a   for the SQLite.
18dc0 20 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 69    library that i
18dd0 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69  s running.  ^Thi
18de0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e  s function is an
18df0 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61   SQL.  wrapper a
18e00 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
18e10 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d  e3_libversion()]
18e20 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a   C-interface..}.
18e30 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72  .funcdef {substr
18e40 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58  (X,Y,Z) substr(X
18e50 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
18e60 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66   substr(X,Y,Z) f
18e70 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
18e80 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69  a substring of i
18e90 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 74 68  nput string X th
18ea0 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68  at begins.  with
18eb0 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63   the Y-th charac
18ec0 74 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73  ter and which is
18ed0 20 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f   Z characters lo
18ee0 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f  ng..  ^If Z is o
18ef0 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75 62 73  mitted then subs
18f00 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20  tr(X,Y) returns 
18f10 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 74  all characters t
18f20 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20  hrough the end. 
18f30 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
18f40 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
18f50 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65  the Y-th..  ^The
18f60 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61   left-most chara
18f70 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d  cter of X is num
18f80 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73  ber 1.  ^If Y is
18f90 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e   negative.  then
18fa0 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61   the first chara
18fb0 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73  cter of the subs
18fc0 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62  tring is found b
18fd0 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20  y counting from 
18fe0 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74 68  the.  right rath
18ff0 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  er than the left
19000 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61  .  ^If Z is nega
19010 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20  tive then.  the 
19020 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65 72  abs(Z) character
19030 73 20 70 72 65 63 65 64 69 6e 67 20 74 68 65 20  s preceding the 
19040 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61  Y-th character a
19050 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e  re returned..  ^
19060 49 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67  If X is a string
19070 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73   then characters
19080 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
19090 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a  o actual UTF-8 .
190a0 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e    characters.  ^
190b0 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74  If X is a BLOB t
190c0 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20  hen the indices 
190d0 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a  refer to bytes..
190e0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61  }..funcdef {tota
190f0 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20  l_changes()} {} 
19100 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63  {.  ^The total_c
19110 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
19120 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
19130 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e  mber of row chan
19140 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20  ges.  caused by 
19150 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
19160 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65  r DELETE.  state
19170 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20  ments since the 
19180 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
19190 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20   connection was 
191a0 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20  opened..  ^This 
191b0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
191c0 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
191d0 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
191e0 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
191f0 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
19200 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58  .funcdef {trim(X
19210 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20  ) trim(X,Y)} {} 
19220 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c  {.  ^The trim(X,
19230 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
19240 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
19250 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
19260 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
19270 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
19280 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62  pear in Y from b
19290 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20  oth ends of X.. 
192a0 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
192b0 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
192c0 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
192d0 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68  spaces from both
192e0 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66   ends of X..}..f
192f0 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58  uncdef {typeof(X
19300 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74  )} {} {.  ^The t
19310 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f  ypeof(X) functio
19320 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
19330 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ng that indicate
19340 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d  s the [datatype]
19350 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73   of.  the expres
19360 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20  sion X: "null", 
19370 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c  "integer", "real
19380 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62  ", "text", or "b
19390 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lob"..}..funcdef
193a0 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b   {unlikely(X)} {
193b0 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b  } {.  ^The unlik
193c0 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
193d0 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
193e0 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64  ment X unchanged
193f0 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c  ..  ^The unlikel
19400 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
19410 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68   a no-op that th
19420 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
19430 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61  .  optimizes awa
19440 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e  y so that it con
19450 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63  sumes no CPU cyc
19460 6c 65 73 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e  les at run-time.
19470 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20  .  ^The purpose 
19480 6f 66 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28  of the unlikely(
19490 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74  X) function is t
194a0 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74  o provide a hint
194b0 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20  .  to the query 
194c0 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65  planner that the
194d0 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61   argument X is a
194e0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20   boolean value. 
194f0 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
19500 20 6e 6f 74 20 74 72 75 65 2e 20 5e 54 68 65 20   not true. ^The 
19510 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63  unlikely(X) func
19520 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65  tion is equivale
19530 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68  nt.  to [likelih
19540 6f 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e  ood](X, 0.0625).
19550 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 69  .}..funcdef {uni
19560 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  code(X)} {} {.  
19570 5e 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29 20  ^The unicode(X) 
19580 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19590 20 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e 69   the numeric uni
195a0 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20  code code point 
195b0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
195c0 0a 20 20 74 68 65 20 66 69 72 73 74 20 63 68 61  .  the first cha
195d0 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 74  racter of the st
195e0 72 69 6e 67 20 58 2e 20 20 5e 49 66 20 74 68 65  ring X.  ^If the
195f0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69   argument to uni
19600 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61  code(X) is not a
19610 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74   string.  then t
19620 68 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64  he result is und
19630 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64  efined..}..funcd
19640 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d  ef {upper(X)} {}
19650 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28   {.  ^The upper(
19660 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
19670 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e  rns a copy of in
19680 70 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20  put string X in 
19690 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77  which all .  low
196a0 65 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68  er-case ASCII ch
196b0 61 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e  aracters are con
196c0 76 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20  verted to their 
196d0 75 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76  upper-case equiv
196e0 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  alent..}..funcde
196f0 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20  f {zeroblob(N)} 
19700 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f  {} {.  ^The zero
19710 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e  blob(N) function
19720 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20   returns a BLOB 
19730 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20  consisting of N 
19740 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20  bytes of 0x00.. 
19750 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20   SQLite manages 
19760 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20  these zeroblobs 
19770 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79  very efficiently
19780 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e  .  Zeroblobs can
19790 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65   be used to.  re
197a0 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20  serve space for 
197b0 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c  a BLOB that is l
197c0 61 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69  ater written usi
197d0 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62  ng .  [sqlite3_b
197e0 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63  lob_open() | inc
197f0 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f  remental BLOB I/
19800 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20  O]..  ^This SQL 
19810 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c  function is impl
19820 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68  emented using th
19830 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  e [sqlite3_resul
19840 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20  t_zeroblob()].  
19850 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65  routine from the
19860 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
19870 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62  ..}.</tcl>.</tab
19880 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  le>..<tcl>.#####
19890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
198a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
198b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
198c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
198d0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
198e0 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65  n {Date And Time
198f0 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65   Functions} date
19900 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d  func {*datefunc}
19910 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61  .hd_keywords {da
19920 74 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  te() SQL functio
19930 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66  n} {time() SQL f
19940 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77  unction}.hd_keyw
19950 6f 72 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29  ords {datetime()
19960 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b   SQL function} {
19970 6a 75 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20  julianday() SQL 
19980 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79  function}.hd_key
19990 77 6f 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28  words {strftime(
199a0 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a  ) SQL function}.
199b0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69  </tcl>..<p>.SQLi
199c0 74 65 20 73 75 70 70 6f 72 74 73 20 66 69 76 65  te supports five
199d0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
199e0 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c  unctions as foll
199f0 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c  ows:.</p>..<p>.<
19a00 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61  ol>.<li> ^(<b>da
19a10 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  te(</b><i>timest
19a20 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
19a30 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
19a40 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
19a50 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65  >.<li> ^(<b>time
19a60 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
19a70 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
19a80 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
19a90 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
19aa0 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69  <li> ^(<b>dateti
19ab0 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  me(</b><i>timest
19ac0 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
19ad0 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
19ae0 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
19af0 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69  >.<li> ^(<b>juli
19b00 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d  anday(</b><i>tim
19b10 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
19b20 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
19b30 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
19b40 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73  /li>.<li> ^(<b>s
19b50 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66  trftime(</b><i>f
19b60 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e  ormat, timestrin
19b70 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
19b80 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
19b90 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
19ba0 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66  /ol>..<p>.^All f
19bb0 69 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ive date and tim
19bc0 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65  e functions take
19bd0 20 61 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61   a time string a
19be0 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a  s an argument. .
19bf0 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67  ^The time string
19c00 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
19c10 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64  zero or more mod
19c20 69 66 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74  ifiers. .^The st
19c30 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  rftime() functio
19c40 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66  n also takes a f
19c50 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20  ormat string as 
19c60 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65  its first argume
19c70 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68  nt..</p>..<p>.Th
19c80 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
19c90 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20  functions use a 
19ca0 73 75 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a  subset of.[http:
19cb0 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
19cc0 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31  rg/wiki/ISO_8601
19cd0 20 7c 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74   | IS0-8601] dat
19ce0 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61  e and time.forma
19cf0 74 73 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20  ts..^The date() 
19d00 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19d10 20 74 68 65 20 64 61 74 65 20 69 6e 20 74 68 69   the date in thi
19d20 73 20 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d  s format: YYYY-M
19d30 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65  M-DD. .^The time
19d40 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
19d50 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61 73 20  rns the time as 
19d60 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20  HH:MM:SS. .^The 
19d70 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74  datetime() funct
19d80 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59  ion returns "YYY
19d90 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
19da0 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e  ". .^(The julian
19db0 64 61 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  day() function r
19dc0 65 74 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74  eturns the .[htt
19dd0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
19de0 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e  .org/wiki/Julian
19df0 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61  _day | Julian da
19e00 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20  y] - the.number 
19e10 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f  of days since no
19e20 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20  on in Greenwich 
19e30 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20  on November 24, 
19e40 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74  4714 B.C. .([htt
19e50 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
19e60 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70  .org/wiki/Prolep
19e70 74 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61  tic_Gregorian_ca
19e80 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74  lendar | Prolept
19e90 69 63 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c  ic Gregorian cal
19ea0 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20  endar]).)^.^The 
19eb0 73 74 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69  strftime() routi
19ec0 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  ne returns the d
19ed0 61 74 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63  ate formatted ac
19ee0 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20  cording to .the 
19ef0 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70  format string sp
19f00 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 66  ecified as the f
19f10 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e  irst argument..^
19f20 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  The format strin
19f30 67 20 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d  g supports the m
19f40 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74  ost common subst
19f50 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69  itutions found i
19f60 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f  n the .[http://o
19f70 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c  pengroup.org/onl
19f80 69 6e 65 70 75 62 73 2f 30 30 37 39 30 38 37 39  inepubs/00790879
19f90 39 2f 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68  9/xsh/strftime.h
19fa0 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29  tml | strftime()
19fb0 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20   function].from 
19fc0 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
19fd0 69 62 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20  ibrary plus two 
19fe0 6e 65 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e  new substitution
19ff0 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28  s, %f and %J..^(
1a000 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73  The following is
1a010 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74   a complete list
1a020 20 6f 66 20 76 61 6c 69 64 20 73 74 72 66 74 69   of valid strfti
1a030 6d 65 28 29 20 73 75 62 73 74 69 74 75 74 69 6f  me() substitutio
1a040 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ns:.</p>..<block
1a050 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f  quote>.<table bo
1a060 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64  rder="0" cellpad
1a070 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61  ding="0" cellspa
1a080 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74  cing="0">.<tr><t
1a090 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22  d><td width="10"
1a0a0 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  ><td></tr>..<tr>
1a0b0 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e  <td> %d <td><td>
1a0c0 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30   day of month: 0
1a0d0 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74  0.<tr><td> %f <t
1a0e0 64 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61  d><td> fractiona
1a0f0 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53  l seconds: SS.SS
1a100 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74  S.<tr><td> %H <t
1a110 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d  d><td> hour: 00-
1a120 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20  24 .<tr><td> %j 
1a130 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20  <td><td> day of 
1a140 79 65 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74  year: 001-366.<t
1a150 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74  r><td> %J <td><t
1a160 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75  d> Julian day nu
1a170 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d  mber.<tr><td> %m
1a180 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a   <td><td> month:
1a190 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20   01-12.<tr><td> 
1a1a0 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75  %M <td><td> minu
1a1b0 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74  te: 00-59.<tr><t
1a1c0 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73  d> %s <td><td> s
1a1d0 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37  econds since 197
1a1e0 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e  0-01-01.<tr><td>
1a1f0 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63   %S <td><td> sec
1a200 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e  onds: 00-59.<tr>
1a210 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e  <td> %w <td><td>
1a220 20 64 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36   day of week 0-6
1a230 20 77 69 74 68 20 53 75 6e 64 61 79 3d 3d 30 0a   with Sunday==0.
1a240 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e  <tr><td> %W <td>
1a250 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61  <td> week of yea
1a260 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64  r: 00-53.<tr><td
1a270 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65  > %Y <td><td> ye
1a280 61 72 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74  ar: 0000-9999.<t
1a290 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74  r><td> %% <td><t
1a2a0 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  d> %.</table>.</
1a2b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
1a2c0 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74  p>.^(Notice that
1a2d0 20 61 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20   all other date 
1a2e0 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1a2f0 6e 73 20 63 61 6e 20 62 65 20 65 78 70 72 65 73  ns can be expres
1a300 73 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20  sed.in terms of 
1a310 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e  strftime():.</p>
1a320 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ..<blockquote>.<
1a330 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22  table border="0"
1a340 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22   cellpadding="0"
1a350 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22   cellspacing="0"
1a360 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e  >.<tr><td><b>Fun
1a370 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64  ction</b><td wid
1a380 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45  th="30"><td><b>E
1a390 71 75 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69  quivalent strfti
1a3a0 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64  me()</b>.<tr><td
1a3b0 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20  >   date(...)   
1a3c0 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72     <td><td>  str
1a3d0 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27  ftime('%Y-%m-%d'
1a3e0 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
1a3f0 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20    time(...)     
1a400 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
1a410 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20  ime('%H:%M:%S', 
1a420 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
1a430 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c  datetime(...)  <
1a440 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
1a450 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25  e('%Y-%m-%d %H:%
1a460 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e  M:%S', ...).<tr>
1a470 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79  <td>   julianday
1a480 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20  (...) <td><td>  
1a490 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e  strftime('%J', .
1a4a0 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  ..).</table>.</b
1a4b0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
1a4c0 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f  >.The only reaso
1a4d0 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67  ns for providing
1a4e0 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72   functions other
1a4f0 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29   than strftime()
1a500 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65   is.for convenie
1a510 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69  nce and for effi
1a520 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68  ciency..</p>..<h
1a530 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f  3>Time Strings</
1a540 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65  h3>..<p>^(A time
1a550 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69   string can be i
1a560 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c  n any of the fol
1a570 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c  lowing formats:<
1a580 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c  /p>..<ol>.<li> <
1a590 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e  i>YYYY-MM-DD</i>
1a5a0 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1a5b0 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c  -DD HH:MM</i>.<l
1a5c0 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1a5d0 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c   HH:MM:SS</i>.<l
1a5e0 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1a5f0 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69   HH:MM:SS.SSS</i
1a600 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
1a610 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e  M-DD</i><b>T</b>
1a620 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
1a630 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1a640 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
1a650 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  :MM:SS</i>.<li> 
1a660 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
1a670 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
1a680 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
1a690 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  > <i>HH:MM</i>.<
1a6a0 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c  li> <i>HH:MM:SS<
1a6b0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d  /i>.<li> <i>HH:M
1a6c0 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
1a6d0 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69  > <b>now</b>.<li
1a6e0 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c  > <i>DDDDDDDDDD<
1a6f0 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e  /i>.</ol>)^..<p>
1a700 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74  .^In formats 5 t
1a710 68 72 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54  hrough 7, the "T
1a720 22 20 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63  " is a literal c
1a730 68 61 72 61 63 74 65 72 20 73 65 70 61 72 61 74  haracter separat
1a740 69 6e 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e  ing .the date an
1a750 64 20 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72  d the time, as r
1a760 65 71 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74  equired by .[htt
1a770 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f  p://www.w3c.org/
1a780 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65  TR/NOTE-datetime
1a790 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e   | ISO-8601]. .^
1a7a0 46 6f 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67  Formats 8 throug
1a7b0 68 20 31 30 20 74 68 61 74 20 73 70 65 63 69 66  h 10 that specif
1a7c0 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73  y only a time as
1a7d0 73 75 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a  sume a date of .
1a7e0 32 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d  2000-01-01. Form
1a7f0 61 74 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e  at 11, the strin
1a800 67 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76  g 'now', is conv
1a810 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a  erted into the .
1a820 63 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64  current date and
1a830 20 74 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65   time as obtaine
1a840 64 20 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72  d from the xCurr
1a850 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f  entTime method.o
1a860 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76  f the [sqlite3_v
1a870 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73  fs] object in us
1a880 65 2e 0a 5e 54 68 65 20 27 6e 6f 77 27 20 61 72  e..^The 'now' ar
1a890 67 75 6d 65 6e 74 20 74 6f 20 64 61 74 65 20 61  gument to date a
1a8a0 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
1a8b0 73 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73  s always returns
1a8c0 20 65 78 61 63 74 6c 79 20 74 68 65 0a 73 61 6d   exactly the.sam
1a8d0 65 20 76 61 6c 75 65 20 66 6f 72 20 6d 75 6c 74  e value for mult
1a8e0 69 70 6c 65 20 69 6e 76 6f 63 61 74 69 6f 6e 73  iple invocations
1a8f0 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
1a900 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29   [sqlite3_step()
1a910 5d 20 63 61 6c 6c 2e 0a 5e 5b 68 74 74 70 3a 2f  ] call..^[http:/
1a920 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1a930 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69 6e 61 74  g/wiki/Coordinat
1a940 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f 54 69 6d  ed_Universal_Tim
1a950 65 20 7c 20 55 6e 69 76 65 72 73 61 6c 20 43 6f  e | Universal Co
1a960 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28  ordinated Time (
1a970 55 54 43 29 5d 20 69 73 20 75 73 65 64 2e 20 0a  UTC)] is used. .
1a980 5e 46 6f 72 6d 61 74 20 31 32 20 69 73 20 74 68  ^Format 12 is th
1a990 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  e .[http://en.wi
1a9a0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1a9b0 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75  /Julian_day | Ju
1a9c0 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 5d  lian day number]
1a9d0 0a 65 78 70 72 65 73 73 65 64 20 61 73 20 61 20  .expressed as a 
1a9e0 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
1a9f0 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  alue..</p>..<p>.
1aa00 5e 28 49 6e 20 66 6f 72 6d 61 74 73 20 34 2c 20  ^(In formats 4, 
1aa10 37 2c 20 61 6e 64 20 31 30 2c 20 74 68 65 20 66  7, and 10, the f
1aa20 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64  ractional second
1aa30 73 20 76 61 6c 75 65 20 53 53 2e 53 53 53 20 63  s value SS.SSS c
1aa40 61 6e 20 68 61 76 65 0a 6f 6e 65 20 6f 72 20 6d  an have.one or m
1aa50 6f 72 65 20 64 69 67 69 74 73 20 66 6f 6c 6c 6f  ore digits follo
1aa60 77 69 6e 67 20 74 68 65 20 64 65 63 69 6d 61 6c  wing the decimal
1aa70 20 70 6f 69 6e 74 2e 20 20 45 78 61 63 74 6c 79   point.  Exactly
1aa80 20 74 68 72 65 65 20 64 69 67 69 74 73 20 61 72   three digits ar
1aa90 65 0a 73 68 6f 77 6e 20 69 6e 20 74 68 65 20 65  e.shown in the e
1aaa0 78 61 6d 70 6c 65 73 20 62 65 63 61 75 73 65 20  xamples because 
1aab0 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 74  only the first t
1aac0 68 72 65 65 20 64 69 67 69 74 73 20 61 72 65 20  hree digits are 
1aad0 73 69 67 6e 69 66 69 63 61 6e 74 0a 74 6f 20 74  significant.to t
1aae0 68 65 20 72 65 73 75 6c 74 2c 20 62 75 74 20 74  he result, but t
1aaf0 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20  he input string 
1ab00 63 61 6e 20 68 61 76 65 20 66 65 77 65 72 20 6f  can have fewer o
1ab10 72 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 72 65  r more than thre
1ab20 65 20 64 69 67 69 74 73 0a 61 6e 64 20 74 68 65  e digits.and the
1ab30 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74   date/time funct
1ab40 69 6f 6e 73 20 77 69 6c 6c 20 73 74 69 6c 6c 20  ions will still 
1ab50 6f 70 65 72 61 74 65 20 63 6f 72 72 65 63 74 6c  operate correctl
1ab60 79 2e 29 5e 0a 53 69 6d 69 6c 61 72 6c 79 2c 20  y.)^.Similarly, 
1ab70 66 6f 72 6d 61 74 20 31 32 20 69 73 20 73 68 6f  format 12 is sho
1ab80 77 6e 20 77 69 74 68 20 31 30 20 73 69 67 6e 69  wn with 10 signi
1ab90 66 69 63 61 6e 74 20 64 69 67 69 74 73 2c 20 62  ficant digits, b
1aba0 75 74 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65  ut the date/time
1abb0 0a 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20  .functions will 
1abc0 72 65 61 6c 6c 79 20 61 63 63 65 70 74 20 61 73  really accept as
1abd0 20 6d 61 6e 79 20 6f 72 20 61 73 20 66 65 77 20   many or as few 
1abe0 64 69 67 69 74 73 20 61 73 20 61 72 65 20 6e 65  digits as are ne
1abf0 63 65 73 73 61 72 79 20 74 6f 0a 72 65 70 72 65  cessary to.repre
1ac00 73 65 6e 74 20 74 68 65 20 4a 75 6c 69 61 6e 20  sent the Julian 
1ac10 64 61 79 20 6e 75 6d 62 65 72 2e 0a 3c 2f 70 3e  day number..</p>
1ac20 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69 65 72 73 3c  ..<h3>Modifiers<
1ac30 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74 69  /h3>..<p>^The ti
1ac40 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65  me string can be
1ac50 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72   followed by zer
1ac60 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69  o or more modifi
1ac70 65 72 73 20 74 68 61 74 20 0a 61 6c 74 65 72 20  ers that .alter 
1ac80 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65  date and/or time
1ac90 2e 20 5e 45 61 63 68 20 6d 6f 64 69 66 69 65 72  . ^Each modifier
1aca0 0a 69 73 20 61 20 74 72 61 6e 73 66 6f 72 6d 61  .is a transforma
1acb0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 61 70 70  tion that is app
1acc0 6c 69 65 64 20 74 6f 20 74 68 65 20 74 69 6d 65  lied to the time
1acd0 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 6c 65   value to its le
1ace0 66 74 2e 0a 5e 4d 6f 64 69 66 69 65 72 73 20 61  ft..^Modifiers a
1acf0 72 65 20 61 70 70 6c 69 65 64 20 66 72 6f 6d 20  re applied from 
1ad00 6c 65 66 74 20 74 6f 20 72 69 67 68 74 3b 20 6f  left to right; o
1ad10 72 64 65 72 20 69 73 20 69 6d 70 6f 72 74 61 6e  rder is importan
1ad20 74 2e 0a 5e 28 54 68 65 20 61 76 61 69 6c 61 62  t..^(The availab
1ad30 6c 65 20 6d 6f 64 69 66 69 65 72 73 20 61 72 65  le modifiers are
1ad40 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e   as follows.</p>
1ad50 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20  ..<ol>.<li> NNN 
1ad60 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f  days.<li> NNN ho
1ad70 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e  urs.<li> NNN min
1ad80 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e  utes.<li> NNN.NN
1ad90 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20  NN seconds.<li> 
1ada0 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20  NNN months.<li> 
1adb0 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20 73  NNN years.<li> s
1adc0 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c  tart of month.<l
1add0 69 3e 20 73 74 61 72 74 20 6f 66 20 79 65 61 72  i> start of year
1ade0 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 64  .<li> start of d
1adf0 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79 20  ay.<li> weekday 
1ae00 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63 68  N.<li> unixepoch
1ae10 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a  .<li> localtime.
1ae20 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29  <li> utc .</ol>)
1ae30 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 72 73 74  ^..<p>^The first
1ae40 20 73 69 78 20 6d 6f 64 69 66 69 65 72 73 20 28   six modifiers (
1ae50 31 20 74 68 72 6f 75 67 68 20 36 29 20 0a 73 69  1 through 6) .si
1ae60 6d 70 6c 79 20 61 64 64 20 74 68 65 20 73 70 65  mply add the spe
1ae70 63 69 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66  cified amount of
1ae80 20 74 69 6d 65 20 74 6f 20 74 68 65 20 64 61 74   time to the dat
1ae90 65 20 61 6e 64 20 74 69 6d 65 20 0a 73 70 65 63  e and time .spec
1aea0 69 66 69 65 64 20 62 79 20 74 68 65 20 70 72 65  ified by the pre
1aeb0 63 65 64 69 6e 67 20 74 69 6d 65 73 74 72 69 6e  ceding timestrin
1aec0 67 20 61 6e 64 20 6d 6f 64 69 66 69 65 72 73 2e  g and modifiers.
1aed0 0a 5e 4e 6f 74 65 20 74 68 61 74 20 22 26 70 6c  .^Note that "&pl
1aee0 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22  usmn;NNN months"
1aef0 20 77 6f 72 6b 73 20 62 79 20 72 65 6e 64 65 72   works by render
1af00 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
1af10 20 64 61 74 65 20 69 6e 74 6f 0a 74 68 65 20 59   date into.the Y
1af20 59 59 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74  YYY-MM-DD format
1af30 2c 20 61 64 64 69 6e 67 20 74 68 65 20 26 70 6c  , adding the &pl
1af40 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20  usmn;NNN to the 
1af50 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20  MM month value, 
1af60 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67  then.normalizing
1af70 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 5e 54   the result.  ^T
1af80 68 75 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65  hus, for example
1af90 2c 20 74 68 65 20 64 61 74 61 20 32 30 30 31 2d  , the data 2001-
1afa0 30 33 2d 33 31 20 6d 6f 64 69 66 69 65 64 0a 62  03-31 modified.b
1afb0 79 20 27 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69  y '+1 month' ini
1afc0 74 69 61 6c 6c 79 20 79 69 65 6c 64 73 20 32 30  tially yields 20
1afd0 30 31 2d 30 34 2d 33 31 2c 20 62 75 74 20 41 70  01-04-31, but Ap
1afe0 72 69 6c 20 6f 6e 6c 79 20 68 61 73 20 33 30 20  ril only has 30 
1aff0 64 61 79 73 0a 73 6f 20 74 68 65 20 64 61 74 65  days.so the date
1b000 20 69 73 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74   is normalized t
1b010 6f 20 32 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e  o 2001-05-01.  ^
1b020 41 20 73 69 6d 69 6c 61 72 20 65 66 66 65 63 74  A similar effect
1b030 20 6f 63 63 75 72 73 20 77 68 65 6e 0a 74 68 65   occurs when.the
1b040 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69   original date i
1b050 73 20 46 65 62 72 75 61 72 79 20 32 39 20 6f 66  s February 29 of
1b060 20 61 20 6c 65 61 70 79 65 61 72 20 61 6e 64 20   a leapyear and 
1b070 74 68 65 20 6d 6f 64 69 66 69 65 72 20 69 73 0a  the modifier is.
1b080 26 70 6c 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20  &plusmn;N years 
1b090 77 68 65 72 65 20 4e 20 69 73 20 6e 6f 74 20 61  where N is not a
1b0a0 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75   multiple of fou
1b0b0 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
1b0c0 22 73 74 61 72 74 20 6f 66 22 20 6d 6f 64 69 66  "start of" modif
1b0d0 69 65 72 73 20 28 37 20 74 68 72 6f 75 67 68 20  iers (7 through 
1b0e0 39 29 20 73 68 69 66 74 20 74 68 65 20 64 61 74  9) shift the dat
1b0f0 65 20 62 61 63 6b 77 61 72 64 73 20 0a 74 6f 20  e backwards .to 
1b100 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
1b110 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e   the current mon
1b120 74 68 2c 20 79 65 61 72 20 6f 72 20 64 61 79 2e  th, year or day.
1b130 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 77  </p>..<p>^The "w
1b140 65 65 6b 64 61 79 22 20 6d 6f 64 69 66 69 65 72  eekday" modifier
1b150 20 61 64 76 61 6e 63 65 73 20 74 68 65 20 64 61   advances the da
1b160 74 65 20 66 6f 72 77 61 72 64 20 74 6f 20 74 68  te forward to th
1b170 65 20 6e 65 78 74 20 64 61 74 65 20 0a 77 68 65  e next date .whe
1b180 72 65 20 74 68 65 20 77 65 65 6b 64 61 79 20 6e  re the weekday n
1b190 75 6d 62 65 72 20 69 73 20 4e 2e 20 53 75 6e 64  umber is N. Sund
1b1a0 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20  ay is 0, Monday 
1b1b0 69 73 20 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72  is 1, and so for
1b1c0 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  th.</p>..<p>^The
1b1d0 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
1b1e0 69 66 69 65 72 20 28 31 31 29 20 6f 6e 6c 79 20  ifier (11) only 
1b1f0 77 6f 72 6b 73 20 69 66 20 69 74 20 69 6d 6d 65  works if it imme
1b200 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20  diately follows 
1b210 0a 61 20 74 69 6d 65 73 74 72 69 6e 67 20 69 6e  .a timestring in
1b220 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20   the DDDDDDDDDD 
1b230 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d  format. .^This m
1b240 6f 64 69 66 69 65 72 20 63 61 75 73 65 73 20 74  odifier causes t
1b250 68 65 20 44 44 44 44 44 44 44 44 44 44 20 74 6f  he DDDDDDDDDD to
1b260 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
1b270 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e  not .as a Julian
1b280 20 64 61 79 20 6e 75 6d 62 65 72 20 61 73 20 69   day number as i
1b290 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64  t normally would
1b2a0 20 62 65 2c 20 62 75 74 20 61 73 0a 5b 68 74 74   be, but as.[htt
1b2b0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1b2c0 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74  .org/wiki/Unix_t
1b2d0 69 6d 65 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d  ime | Unix Time]
1b2e0 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f   - the .number o
1b2f0 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  f seconds since 
1b300 31 39 37 30 2e 20 20 49 66 20 74 68 65 20 22 75  1970.  If the "u
1b310 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1b320 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c  er does not.foll
1b330 6f 77 20 61 20 74 69 6d 65 73 74 72 69 6e 67 20  ow a timestring 
1b340 6f 66 20 74 68 65 20 66 6f 72 6d 20 44 44 44 44  of the form DDDD
1b350 44 44 44 44 44 44 20 77 68 69 63 68 20 65 78 70  DDDDDD which exp
1b360 72 65 73 73 65 73 20 74 68 65 20 6e 75 6d 62 65  resses the numbe
1b370 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r.of seconds sin
1b380 63 65 20 31 39 37 30 20 6f 72 20 69 66 20 6f 74  ce 1970 or if ot
1b390 68 65 72 20 6d 6f 64 69 66 69 65 72 73 0a 73 65  her modifiers.se
1b3a0 70 61 72 61 74 65 20 74 68 65 20 22 75 6e 69 78  parate the "unix
1b3b0 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
1b3c0 66 72 6f 6d 20 70 72 69 6f 72 20 44 44 44 44 44  from prior DDDDD
1b3d0 44 44 44 44 44 20 74 68 65 6e 20 74 68 65 0a 62  DDDDD then the.b
1b3e0 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
1b3f0 69 6e 65 64 2e 0a 44 75 65 20 74 6f 20 70 72 65  ined..Due to pre
1b400 63 69 73 69 6f 6e 20 6c 69 6d 69 74 61 74 69 6f  cision limitatio
1b410 6e 73 20 69 6d 70 6f 73 65 64 20 62 79 20 74 68  ns imposed by th
1b420 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
1b430 73 20 75 73 65 0a 6f 66 20 36 34 2d 62 69 74 20  s use.of 64-bit 
1b440 69 6e 74 65 67 65 72 73 2c 20 74 68 65 20 22 75  integers, the "u
1b450 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1b460 65 72 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  er only works fo
1b470 72 0a 64 61 74 65 73 20 62 65 74 77 65 65 6e 20  r.dates between 
1b480 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30  0000-01-01 00:00
1b490 3a 30 30 20 61 6e 64 20 35 33 35 32 2d 31 31 2d  :00 and 5352-11-
1b4a0 30 31 20 31 30 3a 35 32 3a 34 37 20 28 75 6e 69  01 10:52:47 (uni
1b4b0 78 20 74 69 6d 65 73 0a 6f 66 20 2d 36 32 31 36  x times.of -6216
1b4c0 37 32 31 39 32 30 30 20 74 68 72 6f 75 67 68 20  7219200 through 
1b4d0 31 30 36 37 35 31 39 39 31 36 37 29 2e 3c 2f 70  10675199167).</p
1b4e0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f 63 61  >..<p>^The "loca
1b4f0 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72 20  ltime" modifier 
1b500 28 31 32 29 20 61 73 73 75 6d 65 73 20 74 68 65  (12) assumes the
1b510 20 74 69 6d 65 20 73 74 72 69 6e 67 20 74 6f 20   time string to 
1b520 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e 0a 55  its left is in.U
1b530 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e  niversal Coordin
1b540 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 20  ated Time (UTC) 
1b550 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 65 20  and adjusts the 
1b560 74 69 6d 65 0a 73 74 72 69 6e 67 20 73 6f 20 74  time.string so t
1b570 68 61 74 20 69 74 20 64 69 73 70 6c 61 79 73 20  hat it displays 
1b580 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49 66 20 22  localtime.  If "
1b590 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f  localtime".follo
1b5a0 77 73 20 61 20 74 69 6d 65 20 74 68 61 74 20 69  ws a time that i
1b5b0 73 20 6e 6f 74 20 55 54 43 2c 20 74 68 65 6e 20  s not UTC, then 
1b5c0 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
1b5d0 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28 54 68 65  undefined..^(The
1b5e0 20 22 75 74 63 22 20 69 73 20 74 68 65 20 6f 70   "utc" is the op
1b5f0 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f 63 61 6c  posite of "local
1b600 74 69 6d 65 22 2e 20 20 22 75 74 63 22 20 61 73  time".  "utc" as
1b610 73 75 6d 65 73 20 74 68 61 74 20 74 68 65 20 73  sumes that the s
1b620 74 72 69 6e 67 0a 74 6f 20 69 74 73 20 6c 65 66  tring.to its lef
1b630 74 20 69 73 20 69 6e 20 74 68 65 20 6c 6f 63 61  t is in the loca
1b640 6c 20 74 69 6d 65 7a 6f 6e 65 20 61 6e 64 20 61  l timezone and a
1b650 64 6a 75 73 74 73 20 74 68 61 74 20 73 74 72 69  djusts that stri
1b660 6e 67 20 74 6f 20 62 65 20 69 6e 20 55 54 43 2e  ng to be in UTC.
1b670 29 5e 0a 49 66 20 74 68 65 20 70 72 69 6f 72 20  )^.If the prior 
1b680 73 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e  string is not in
1b690 20 6c 6f 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e   localtime, then
1b6a0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 22   the result of "
1b6b0 75 74 63 22 20 69 73 0a 75 6e 64 65 66 69 6e 65  utc" is.undefine
1b6c0 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d  d.</p>..<h3>Exam
1b6d0 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e  ples</h3>..^(<p>
1b6e0 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72 72  Compute the curr
1b6f0 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62  ent date.<p>..<b
1b700 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54  lockquote>SELECT
1b710 20 64 61 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62   date('now');</b
1b720 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1b730 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6c  <p>Compute the l
1b740 61 73 74 20 64 61 79 20 6f 66 20 74 68 65 20 63  ast day of the c
1b750 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70  urrent month.</p
1b760 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53  >..<blockquote>S
1b770 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27  ELECT date('now'
1b780 2c 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68  ,'start of month
1b790 27 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31  ','+1 month','-1
1b7a0 20 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71   day');.</blockq
1b7b0 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
1b7c0 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61  mpute the date a
1b7d0 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20  nd time given a 
1b7e0 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31  unix timestamp 1
1b7f0 30 39 32 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a  092941466.</p>..
1b800 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20  <blockquote>.   
1b810 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65   SELECT datetime
1b820 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e  (1092941466, 'un
1b830 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f  ixepoch');.</blo
1b840 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1b850 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74  >Compute the dat
1b860 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e  e and time given
1b870 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d   a unix timestam
1b880 70 20 31 30 39 32 39 34 31 34 36 36 2c 20 61 6e  p 1092941466, an
1b890 64 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f  d .compensate fo
1b8a0 72 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d  r your local tim
1b8b0 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ezone.</p>..<blo
1b8c0 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
1b8d0 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39  T datetime(10929
1b8e0 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63  41466, 'unixepoc
1b8f0 68 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29  h', 'localtime')
1b900 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1b910 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1b920 74 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69 78  the current unix
1b930 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a   timestamp.</p>.
1b940 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1b950 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28  SELECT strftime(
1b960 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62  '%s','now');.</b
1b970 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1b980 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e  <p>Compute the n
1b990 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69  umber of days si
1b9a0 6e 63 65 20 74 68 65 20 73 69 67 6e 69 6e 67 20  nce the signing 
1b9b0 6f 66 20 74 68 65 20 55 53 20 44 65 63 6c 61 72  of the US Declar
1b9c0 61 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e  ation.of Indepen
1b9d0 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  dence.</p>..<blo
1b9e0 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
1b9f0 54 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77  T julianday('now
1ba00 27 29 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27  ') - julianday('
1ba10 31 37 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f  1776-07-04');.</
1ba20 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1ba30 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1ba40 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64  number of second
1ba50 73 20 73 69 6e 63 65 20 61 20 70 61 72 74 69 63  s since a partic
1ba60 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32  ular moment in 2
1ba70 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  004:</p>..<block
1ba80 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
1ba90 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e  strftime('%s','n
1baa0 6f 77 27 29 20 2d 20 73 74 72 66 74 69 6d 65 28  ow') - strftime(
1bab0 27 25 73 27 2c 27 32 30 30 34 2d 30 31 2d 30 31  '%s','2004-01-01
1bac0 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62   02:34:56');.</b
1bad0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1bae0 3c 70 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65 20  <p>.Compute the 
1baf0 64 61 74 65 20 6f 66 20 74 68 65 20 66 69 72 73  date of the firs
1bb00 74 20 54 75 65 73 64 61 79 20 69 6e 20 4f 63 74  t Tuesday in Oct
1bb10 6f 62 65 72 0a 66 6f 72 20 74 68 65 20 63 75 72  ober.for the cur
1bb20 72 65 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a  rent year..</p>.
1bb30 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1bb40 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77  SELECT date('now
1bb50 27 2c 27 73 74 61 72 74 20 6f 66 20 79 65 61 72  ','start of year
1bb60 27 2c 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77  ','+9 months','w
1bb70 65 65 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c  eekday 2');.</bl
1bb80 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1bb90 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 74 69  p>Compute the ti
1bba0 6d 65 20 73 69 6e 63 65 20 74 68 65 20 75 6e 69  me since the uni
1bbb0 78 20 65 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e  x epoch in secon
1bbc0 64 73 20 0a 28 6c 69 6b 65 20 73 74 72 66 74 69  ds .(like strfti
1bbd0 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 65  me('%s','now') e
1bbe0 78 63 65 70 74 20 69 6e 63 6c 75 64 65 73 20 66  xcept includes f
1bbf0 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a  ractional part):
1bc00 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1bc10 65 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a 75 6c  e>.  SELECT (jul
1bc20 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20  ianday('now') - 
1bc30 32 34 34 30 35 38 37 2e 35 29 2a 38 36 34 30 30  2440587.5)*86400
1bc40 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  .0;.</blockquote
1bc50 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73  >)^..<h3>Caveats
1bc60 20 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a   And Bugs</h3>..
1bc70 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74 61 74 69  <p>The computati
1bc80 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65  on of local time
1bc90 20 64 65 70 65 6e 64 73 20 68 65 61 76 69 6c 79   depends heavily
1bca0 20 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f 66   on the whim .of
1bcb0 20 70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e 64   politicians and
1bcc0 20 69 73 20 74 68 75 73 20 64 69 66 66 69 63 75   is thus difficu
1bcd0 6c 74 20 74 6f 20 67 65 74 20 63 6f 72 72 65 63  lt to get correc
1bce0 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c  t for .all local
1bcf0 65 73 2e 20 5e 49 6e 20 74 68 69 73 20 69 6d 70  es. ^In this imp
1bd00 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65  lementation, the
1bd10 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72   standard C libr
1bd20 61 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f  ary .function lo
1bd30 63 61 6c 74 69 6d 65 5f 72 28 29 20 69 73 20 75  caltime_r() is u
1bd40 73 65 64 20 74 6f 20 61 73 73 69 73 74 20 69 6e  sed to assist in
1bd50 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e   the calculation
1bd60 20 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e   of .local time.
1bd70 20 20 5e 28 54 68 65 20 0a 6c 6f 63 61 6c 74 69    ^(The .localti
1bd80 6d 65 5f 72 28 29 20 43 20 66 75 6e 63 74 69 6f  me_r() C functio
1bd90 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20  n normally only 
1bda0 77 6f 72 6b 73 20 66 6f 72 20 79 65 61 72 73 0a  works for years.
1bdb0 62 65 74 77 65 65 6e 20 31 39 37 30 20 61 6e 64  between 1970 and
1bdc0 20 32 30 33 37 2e 20 46 6f 72 20 64 61 74 65 73   2037. For dates
1bdd0 20 6f 75 74 73 69 64 65 20 74 68 69 73 20 72 61   outside this ra
1bde0 6e 67 65 2c 20 53 51 4c 69 74 65 20 0a 61 74 74  nge, SQLite .att
1bdf0 65 6d 70 74 73 20 74 6f 20 6d 61 70 20 74 68 65  empts to map the
1be00 20 79 65 61 72 20 69 6e 74 6f 20 61 6e 20 65 71   year into an eq
1be10 75 69 76 61 6c 65 6e 74 20 79 65 61 72 20 77 69  uivalent year wi
1be20 74 68 69 6e 20 0a 74 68 69 73 20 72 61 6e 67 65  thin .this range
1be30 2c 20 64 6f 20 74 68 65 20 63 61 6c 63 75 6c 61  , do the calcula
1be40 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74  tion, then map t
1be50 68 65 20 79 65 61 72 20 62 61 63 6b 2e 29 5e 3c  he year back.)^<
1be60 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73 65  /p>...<p>^(These
1be70 20 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79 20   functions only 
1be80 77 6f 72 6b 20 66 6f 72 20 64 61 74 65 73 20 62  work for dates b
1be90 65 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30  etween 0000-01-0
1bea0 31 20 30 30 3a 30 30 3a 30 30 0a 61 6e 64 20 39  1 00:00:00.and 9
1beb0 39 39 39 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a  999-12-31 23:59:
1bec0 35 39 20 28 6a 75 6c 69 64 61 6e 20 64 61 79 20  59 (julidan day 
1bed0 6e 75 6d 62 65 72 73 20 31 37 32 31 30 35 39 2e  numbers 1721059.
1bee0 35 20 74 68 72 6f 75 67 68 20 35 33 37 33 34 38  5 through 537348
1bef0 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64 61 74 65  4.5).)^.For date
1bf00 73 20 6f 75 74 73 69 64 65 20 74 68 61 74 20 72  s outside that r
1bf10 61 6e 67 65 2c 20 74 68 65 20 72 65 73 75 6c 74  ange, the result
1bf20 73 20 6f 66 20 74 68 65 73 65 0a 66 75 6e 63 74  s of these.funct
1bf30 69 6f 6e 73 20 61 72 65 20 75 6e 64 65 66 69 6e  ions are undefin
1bf40 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d  ed.</p>..<p>Non-
1bf50 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c  Vista Windows pl
1bf60 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70  atforms only sup
1bf70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20 6f 66 20  port one set of 
1bf80 44 53 54 20 72 75 6c 65 73 2e 20 0a 56 69 73 74  DST rules. .Vist
1bf90 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 73 20  a only supports 
1bfa0 74 77 6f 2e 20 54 68 65 72 65 66 6f 72 65 2c 20  two. Therefore, 
1bfb0 6f 6e 20 74 68 65 73 65 20 70 6c 61 74 66 6f 72  on these platfor
1bfc0 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63 61 6c 20  ms, .historical 
1bfd0 44 53 54 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73  DST calculations
1bfe0 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65   will be incorre
1bff0 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65  ct. .For example
1c000 2c 20 69 6e 20 74 68 65 20 55 53 2c 20 69 6e 20  , in the US, in 
1c010 32 30 30 37 20 74 68 65 20 44 53 54 20 72 75 6c  2007 the DST rul
1c020 65 73 20 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e  es changed. .Non
1c030 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70  -Vista Windows p
1c040 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c 79 20 74  latforms apply t
1c050 68 65 20 6e 65 77 20 32 30 30 37 20 44 53 54 20  he new 2007 DST 
1c060 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72  rules .to all pr
1c070 65 76 69 6f 75 73 20 79 65 61 72 73 20 61 73 20  evious years as 
1c080 77 65 6c 6c 2e 20 56 69 73 74 61 20 64 6f 65 73  well. Vista does
1c090 20 73 6f 6d 65 77 68 61 74 20 62 65 74 74 65 72   somewhat better
1c0a0 0a 67 65 74 74 69 6e 67 20 72 65 73 75 6c 74 73  .getting results
1c0b0 20 63 6f 72 72 65 63 74 20 62 61 63 6b 20 74 6f   correct back to
1c0c0 20 31 39 38 36 2c 20 77 68 65 6e 20 74 68 65 20   1986, when the 
1c0d0 72 75 6c 65 73 20 77 65 72 65 20 61 6c 73 6f 20  rules were also 
1c0e0 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  changed.</p>..<p
1c0f0 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f  >All internal co
1c100 6d 70 75 74 61 74 69 6f 6e 73 20 61 73 73 75 6d  mputations assum
1c110 65 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65  e the .[http://e
1c120 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1c130 77 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63  wiki/Gregorian_c
1c140 61 6c 65 6e 64 61 72 20 7c 20 47 72 65 67 6f 72  alendar | Gregor
1c150 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 0a 73 79  ian calendar].sy
1c160 73 74 65 6d 2e 20 20 49 74 20 69 73 20 61 6c 73  stem.  It is als
1c170 6f 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 65  o assumed that e
1c180 76 65 72 79 0a 64 61 79 20 69 73 20 65 78 61 63  very.day is exac
1c190 74 6c 79 20 38 36 34 30 30 20 73 65 63 6f 6e 64  tly 86400 second
1c1a0 73 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f  s in duration.</
1c1b0 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
1c1c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c1d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c1e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c1f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c200 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1c210 20 7b 41 67 67 72 65 67 61 74 65 20 46 75 6e 63   {Aggregate Func
1c220 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b  tions} aggfunc {
1c230 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e  *aggfunc}.</tcl>
1c240 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67  ..<p>.The aggreg
1c250 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68  ate functions sh
1c260 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76  own below are av
1c270 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
1c280 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  lt.  Additional.
1c290 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1c2a0 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43  ons written in C
1c2b0 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 75 73   may be added us
1c2c0 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74 65  ing the .[sqlite
1c2d0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
1c2e0 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70  n()]</a>.API.</p
1c2f0 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20 61  >..<p>.^In any a
1c300 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1c310 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61 20 73  n that takes a s
1c320 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20  ingle argument, 
1c330 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63 61  that argument.ca
1c340 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  n be preceded by
1c350 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53   the keyword DIS
1c360 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63 68  TINCT.  ^In such
1c370 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61 74   cases, duplicat
1c380 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 66  e.elements are f
1c390 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20 62  iltered before b
1c3a0 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74 6f  eing passed into
1c3b0 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66   the aggregate f
1c3c0 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78  unction..^For ex
1c3d0 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74  ample, the funct
1c3e0 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74 69  ion "count(disti
1c3f0 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65 74  nct X)" will ret
1c400 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  urn the number.o
1c410 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65  f distinct value
1c420 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e  s of column X in
1c430 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f 74  stead of the tot
1c440 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  al number of non
1c450 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20  -null.values in 
1c460 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a  column X..</p>..
1c470 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
1c480 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a  cellpadding=10>.
1c490 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61  <tcl>.funcdef {a
1c4a0 76 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61 76  vg(X)} {*avg {av
1c4b0 67 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  g() aggregate fu
1c4c0 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
1c4d0 65 20 61 76 67 28 29 20 66 75 6e 63 74 69 6f 6e  e avg() function
1c4e0 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  .  returns the a
1c4f0 76 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66 20  verage value of 
1c500 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e  all non-NULL <i>
1c510 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a 20  X</i> within a. 
1c520 20 67 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e 67   group.  ^String
1c530 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65 73   and BLOB values
1c540 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f   that do not loo
1c550 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20 61  k like numbers a
1c560 72 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65 64  re.  interpreted
1c570 20 61 73 20 30 2e 0a 20 20 5e 54 68 65 20 72 65   as 0..  ^The re
1c580 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73  sult of avg() is
1c590 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
1c5a0 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 61  ng point value a
1c5b0 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20 74  s long as.  at t
1c5c0 68 65 72 65 20 69 73 20 61 74 20 6c 65 61 73 74  here is at least
1c5d0 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e   one non-NULL in
1c5e0 70 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a  put even if all.
1c5f0 20 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74    inputs are int
1c600 65 67 65 72 73 2e 20 20 5e 54 68 65 20 72 65 73  egers.  ^The res
1c610 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20  ult of avg() is 
1c620 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79  NULL if and only
1c630 20 69 66 0a 20 20 74 68 65 72 65 20 61 72 65 20   if.  there are 
1c640 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  no non-NULL inpu
1c650 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66  ts.  .}..funcdef
1c660 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74   {count(X) count
1c670 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f  (*)} {*count {co
1c680 75 6e 74 28 29 20 61 67 67 72 65 67 61 74 65 20  unt() aggregate 
1c690 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
1c6a0 54 68 65 20 63 6f 75 6e 74 28 58 29 20 66 75 6e  The count(X) fun
1c6b0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20  ction returns.  
1c6c0 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e  a count of the n
1c6d0 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a 20  umber of times. 
1c6e0 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69   that <i>X</i> i
1c6f0 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20  s not NULL in a 
1c700 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f 75  group.  ^The cou
1c710 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a 20  nt(*) function. 
1c720 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65   (with no argume
1c730 6e 74 73 29 20 72 65 74 75 72 6e 73 20 74 68 65  nts) returns the
1c740 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
1c750 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f   rows in the gro
1c760 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  up..}..funcdef {
1c770 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29 20  group_concat(X) 
1c780 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59  group_concat(X,Y
1c790 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63 6f  )} {.  *group_co
1c7a0 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e 63  ncat {group_conc
1c7b0 61 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66  at() aggregate f
1c7c0 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e  unction}.} {.  ^
1c7d0 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  The group_concat
1c7e0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1c7f0 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77  rns.  a string w
1c800 68 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e 63  hich is the conc
1c810 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61  atenation of.  a
1c820 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  ll non-NULL valu
1c830 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20  es of <i>X</i>. 
1c840 20 5e 49 66 20 70 61 72 61 6d 65 74 65 72 20 3c   ^If parameter <
1c850 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73 65  i>Y</i> is prese
1c860 6e 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73 20  nt then.  it is 
1c870 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
1c880 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20  rator.  between 
1c890 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e  instances of <i>
1c8a0 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61  X</i>.  ^A comma
1c8b0 20 28 22 2c 22 29 20 69 73 20 75 73 65 64 20 61   (",") is used a
1c8c0 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a  s the separator.
1c8d0 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73    if <i>Y</i> is
1c8e0 20 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20 6f   omitted.  The o
1c8f0 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e 63  rder of the conc
1c900 61 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74  atenated element
1c910 73 20 69 73 0a 20 20 61 72 62 69 74 72 61 72 79  s is.  arbitrary
1c920 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61  ..}..funcdef {ma
1c930 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46 75  x(X)} {*maxAggFu
1c940 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61 78  nc *agg_max {max
1c950 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1c960 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
1c970 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
1c980 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75   function.  retu
1c990 72 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  rns the maximum 
1c9a0 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c  value of all val
1c9b0 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
1c9c0 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d 75 6d  ..  ^The maximum
1c9d0 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 76 61   value is the va
1c9e0 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62  lue that would b
1c9f0 65 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74 20  e returned last 
1ca00 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42 59  in an.  ORDER BY
1ca10 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f 6c   on the same col
1ca20 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61 74 65  umn.  ^Aggregate
1ca30 20 6d 61 78 28 29 20 72 65 74 75 72 6e 73 20 4e   max() returns N
1ca40 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f 6e  ULL .  if and on
1ca50 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ly if there are 
1ca60 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  no non-NULL valu
1ca70 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
1ca80 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e  .}..funcdef {min
1ca90 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75 6e  (X)} {*minAggFun
1caa0 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28  c *agg_min {min(
1cab0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1cac0 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
1cad0 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20  min() aggregate 
1cae0 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72  function.  retur
1caf0 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e  ns the minimum n
1cb00 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66  on-NULL value of
1cb10 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74   all values in t
1cb20 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65  he group..  ^The
1cb30 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69   minimum value i
1cb40 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d  s the first non-
1cb50 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68 61 74 20  NULL value that 
1cb60 77 6f 75 6c 64 20 61 70 70 65 61 72 0a 20 20 69  would appear.  i
1cb70 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f 66  n an ORDER BY of
1cb80 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e   the column..  ^
1cb90 41 67 67 72 65 67 61 74 65 20 6d 69 6e 28 29 20  Aggregate min() 
1cba0 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20  returns NULL if 
1cbb0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72  and only if ther
1cbc0 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
1cbd0 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68  L.  values in th
1cbe0 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63  e group..}..func
1cbf0 64 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74 61  def {sum(X) tota
1cc00 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46 75  l(X)} {.  *sumFu
1cc10 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a 20  nc *sum *total. 
1cc20 20 7b 73 75 6d 28 29 20 61 67 67 72 65 67 61 74   {sum() aggregat
1cc30 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74  e function}.  {t
1cc40 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65  otal() aggregate
1cc50 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20   function}.} {. 
1cc60 20 5e 54 68 65 20 73 75 6d 28 29 20 61 6e 64 20   ^The sum() and 
1cc70 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74  total() aggregat
1cc80 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72 65  e functions.  re
1cc90 74 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c 20  turn sum of all 
1cca0 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20  non-NULL values 
1ccb0 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
1ccc0 5e 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f  ^If there are no
1ccd0 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20   non-NULL input 
1cce0 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29 20  rows then sum() 
1ccf0 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62  returns.  NULL b
1cd00 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75 72  ut total() retur
1cd10 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69  ns 0.0..  NULL i
1cd20 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61  s not normally a
1cd30 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20   helpful result 
1cd40 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e  for the sum of n
1cd50 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68 65  o rows.  but the
1cd60 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65   SQL standard re
1cd70 71 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f  quires it and mo
1cd80 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20 64  st other.  SQL d
1cd90 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20  atabase engines 
1cda0 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20  implement sum() 
1cdb0 74 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69  that way so SQLi
1cdc0 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68  te does it in th
1cdd0 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e 20  e.  same way in 
1cde0 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d 70  order to be comp
1cdf0 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f  atible.   The no
1ce00 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61 6c  n-standard total
1ce10 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73  () function.  is
1ce20 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20 63   provided as a c
1ce30 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74 6f  onvenient way to
1ce40 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68 69   work around thi
1ce50 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d  s design problem
1ce60 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61  .  in the SQL la
1ce70 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c  nguage.</p>..  <
1ce80 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  p>^The result of
1ce90 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61   total() is alwa
1cea0 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ys a floating po
1ceb0 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68  int value..  ^Th
1cec0 65 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28  e result of sum(
1ced0 29 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  ) is an integer 
1cee0 76 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e  value if all non
1cef0 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65  -NULL inputs are
1cf00 20 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49 66   integers..  ^If
1cf10 20 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75   any input to su
1cf20 6d 28 29 20 69 73 20 6e 65 69 74 68 65 72 20 61  m() is neither a
1cf30 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e  n integer or a N
1cf40 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29  ULL.  then sum()
1cf50 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74   returns a float
1cf60 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a  ing point value.
1cf70 20 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65    which might be
1cf80 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f   an approximatio
1cf90 6e 20 74 6f 20 74 68 65 20 74 72 75 65 20 73 75  n to the true su
1cfa0 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75  m.</p>..  <p>^Su
1cfb0 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20 61  m() will throw a
1cfc0 6e 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72 66  n "integer overf
1cfd0 6c 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20 69  low" exception i
1cfe0 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61  f all inputs.  a
1cff0 72 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20 4e  re integers or N
1d000 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74  ULL.  and an int
1d010 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63  eger overflow oc
1d020 63 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69 6e  curs at any poin
1d030 74 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6d  t during the com
1d040 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74  putation..  ^Tot
1d050 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f 77  al() never throw
1d060 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65  s an integer ove
1d070 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a  rflow..}.</tcl>.
1d080 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a  </table>..<tcl>.
1d090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d0a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d0b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d0c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d0d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
1d0e0 65 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e  ection INSERT in
1d0f0 73 65 72 74 20 7b 49 4e 53 45 52 54 20 2a 49 4e  sert {INSERT *IN
1d100 53 45 52 54 73 7d 0a 0a 42 75 62 62 6c 65 44 69  SERTs}..BubbleDi
1d110 61 67 72 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d  agram insert-stm
1d120 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  t 1.</tcl>..<p>T
1d130 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
1d140 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74 68 72  ent comes in thr
1d150 65 65 20 62 61 73 69 63 20 66 6f 72 6d 73 2e 20  ee basic forms. 
1d160 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 54   .<ul>.<li><p>^T
1d170 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 28 77  he first form (w
1d180 69 74 68 20 74 68 65 20 22 56 41 4c 55 45 53 22  ith the "VALUES"
1d190 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61 74 65   keyword) create
1d1a0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 6e 65  s one or more.ne
1d1b0 77 20 72 6f 77 73 20 69 6e 0a 61 6e 20 65 78 69  w rows in.an exi
1d1c0 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 5e 49 66  sting table. ^If
1d1d0 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20   no column-list 
1d1e0 69 73 20 73 70 65 63 69 66 69 65 64 20 74 68 65  is specified the
1d1f0 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  n the number.of 
1d200 76 61 6c 75 65 73 20 69 6e 73 65 72 74 65 64 20  values inserted 
1d210 69 6e 74 6f 20 65 61 63 68 20 72 6f 77 0a 6d 75  into each row.mu
1d220 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
1d230 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1d240 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1d250 61 62 6c 65 2e 20 5e 49 6e 20 74 68 69 73 20 63  able. ^In this c
1d260 61 73 65 0a 74 68 65 20 72 65 73 75 6c 74 20 6f  ase.the result o
1d270 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
1d280 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65   left-most expre
1d290 73 73 69 6f 6e 20 69 6e 20 65 61 63 68 20 74 65  ssion in each te
1d2a0 72 6d 20 6f 66 0a 74 68 65 20 56 41 4c 55 45 53  rm of.the VALUES
1d2b0 20 6c 69 73 74 20 69 73 20 69 6e 73 65 72 74 65   list is inserte
1d2c0 64 20 69 6e 74 6f 20 74 68 65 20 6c 65 66 74 2d  d into the left-
1d2d0 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  most column of t
1d2e0 68 65 20 65 61 63 68 20 6e 65 77 20 72 6f 77 2c  he each new row,
1d2f0 0a 61 6e 64 20 66 6f 72 74 68 20 66 6f 72 20 65  .and forth for e
1d300 61 63 68 20 73 75 62 73 65 71 75 65 6e 74 20 65  ach subsequent e
1d310 78 70 72 65 73 73 69 6f 6e 2e 20 5e 49 66 20 61  xpression. ^If a
1d320 0a 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20  .column-list is 
1d330 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
1d340 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61  the number of va
1d350 6c 75 65 73 20 69 6e 20 65 61 63 68 20 74 65 72  lues in each ter
1d360 6d 20 6f 66 20 74 68 65 0a 56 41 4c 55 45 20 6c  m of the.VALUE l
1d370 69 73 74 20 6d 75 73 74 20 6d 61 74 63 68 20 74  ist must match t
1d380 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65  he number of.spe
1d390 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20  cified columns. 
1d3a0 5e 45 61 63 68 20 6f 66 20 74 68 65 20 6e 61 6d  ^Each of the nam
1d3b0 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  ed columns of th
1d3c0 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70  e new row is pop
1d3d0 75 6c 61 74 65 64 0a 77 69 74 68 20 74 68 65 20  ulated.with the 
1d3e0 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75  results of evalu
1d3f0 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  ating the corres
1d400 70 6f 6e 64 69 6e 67 20 56 41 4c 55 45 53 20 65  ponding VALUES e
1d410 78 70 72 65 73 73 69 6f 6e 2e 20 5e 54 61 62 6c  xpression. ^Tabl
1d420 65 0a 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 64  e.columns that d
1d430 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20  o not appear in 
1d440 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20  the column list 
1d450 61 72 65 20 70 6f 70 75 6c 61 74 65 64 20 77 69  are populated wi
1d460 74 68 20 74 68 65 20 64 65 66 61 75 6c 74 0a 63  th the default.c
1d470 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 28 73 70 65  olumn value (spe
1d480 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
1d490 66 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  f the CREATE TAB
1d4a0 4c 45 20 73 74 61 74 65 6d 65 6e 74 29 2c 20 6f  LE statement), o
1d4b0 72 20 77 69 74 68 20 4e 55 4c 4c 20 69 66 0a 6e  r with NULL if.n
1d4c0 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  o default value 
1d4d0 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c  is specified...<
1d4e0 6c 69 3e 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64  li><p>The second
1d4f0 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53   form of the INS
1d500 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  ERT statement co
1d510 6e 74 61 69 6e 73 20 61 20 53 45 4c 45 43 54 20  ntains a SELECT 
1d520 73 74 61 74 65 6d 65 6e 74 0a 69 6e 73 74 65 61  statement.instea
1d530 64 20 6f 66 20 61 20 56 41 4c 55 45 53 20 63 6c  d of a VALUES cl
1d540 61 75 73 65 2e 20 5e 41 20 6e 65 77 20 65 6e 74  ause. ^A new ent
1d550 72 79 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  ry is inserted i
1d560 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 66 6f  nto the table fo
1d570 72 20 65 61 63 68 0a 72 6f 77 20 6f 66 20 64 61  r each.row of da
1d580 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  ta returned by e
1d590 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c  xecuting the SEL
1d5a0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
1d5b0 49 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  If a column-list
1d5c0 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
1d5d0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1d5e0 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
1d5f0 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  lt of the SELECT
1d600 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
1d610 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e.as the number 
1d620 6f 66 20 69 74 65 6d 73 20 69 6e 20 74 68 65 20  of items in the 
1d630 63 6f 6c 75 6d 6e 2d 6c 69 73 74 2e 20 5e 4f 74  column-list. ^Ot
1d640 68 65 72 77 69 73 65 2c 20 69 66 20 6e 6f 20 63  herwise, if no c
1d650 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70  olumn-list is.sp
1d660 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d  ecified, the num
1d670 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1d680 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
1d690 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20  the SELECT must 
1d6a0 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74  be the same.as t
1d6b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1d6c0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
1d6d0 65 2e 20 5e 41 6e 79 20 53 45 4c 45 43 54 20 73  e. ^Any SELECT s
1d6e0 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64  tatement, includ
1d6f0 69 6e 67 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  ing.compound SEL
1d700 45 43 54 73 20 61 6e 64 20 53 45 4c 45 43 54 20  ECTs and SELECT 
1d710 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
1d720 4f 52 44 45 52 20 42 59 20 61 6e 64 2f 6f 72 20  ORDER BY and/or 
1d730 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 2c 20 0a  LIMIT clauses, .
1d740 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 61  may be used in a
1d750 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
1d760 6e 74 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 2e  nt of this form.
1d770 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 74 68 69  ..<li><p>The thi
1d780 72 64 20 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e  rd form of an IN
1d790 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69  SERT statement i
1d7a0 73 20 77 69 74 68 20 44 45 46 41 55 4c 54 20 56  s with DEFAULT V
1d7b0 41 4c 55 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53  ALUES..^(The INS
1d7c0 45 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20  ERT ... DEFAULT 
1d7d0 56 41 4c 55 45 53 20 73 74 61 74 65 6d 65 6e 74  VALUES statement
1d7e0 20 69 6e 73 65 72 74 73 20 61 20 73 69 6e 67 6c   inserts a singl
1d7f0 65 20 6e 65 77 20 72 6f 77 20 69 6e 74 6f 20 74  e new row into t
1d800 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29  he.named table.)
1d810 5e 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ^ ^Each column o
1d820 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73  f the new row is
1d830 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20   populated with 
1d840 69 74 73 20 64 65 66 61 75 6c 74 20 76 61 6c 75  its default valu
1d850 65 2c 0a 6f 72 20 77 69 74 68 20 61 20 4e 55 4c  e,.or with a NUL
1d860 4c 20 69 66 20 6e 6f 20 64 65 66 61 75 6c 74 20  L if no default 
1d870 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69  value is specifi
1d880 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
1d890 65 20 63 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69 74  e column.definit
1d8a0 69 6f 6e 20 69 6e 20 74 68 65 20 43 52 45 41 54  ion in the CREAT
1d8b0 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
1d8c0 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54  t...</ul>..<p>^T
1d8d0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
1d8e0 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
1d8f0 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61  ws the specifica
1d900 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72  tion of an alter
1d910 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e  native.constrain
1d920 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
1d930 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
1d940 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
1d950 69 73 20 6f 6e 65 20 49 4e 53 45 52 54 20 63 6f  is one INSERT co
1d960 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73  mmand..See the s
1d970 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f  ection titled.[O
1d980 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20  N CONFLICT] for 
1d990 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1d9a0 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70  mation..For comp
1d9b0 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d  atibility with M
1d9c0 79 53 51 4c 2c 20 5e 74 68 65 20 70 61 72 73 65  ySQL, ^the parse
1d9d0 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65  r allows the use
1d9e0 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b   of the.single k
1d9f0 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d 22  eyword <a href="
1da00 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d  lang_replace.htm
1da10 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61  l">REPLACE</a> a
1da20 73 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20  s an .alias for 
1da30 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41  "INSERT OR REPLA
1da40 43 45 22 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f  CE"...<p>^(The o
1da50 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 64 61 74 61  ptional "<i>data
1da60 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  base-name</i><b>
1da70 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78 20 6f 6e  .</b>" prefix on
1da80 20 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61   the <i>table-na
1da90 6d 65 3c 2f 69 3e 0a 69 73 20 73 75 70 70 6f 72  me</i>.is suppor
1daa0 74 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20  t for top-level 
1dab0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
1dac0 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68 65 20  s only.)^  ^The 
1dad0 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20  table name must 
1dae0 62 65 0a 75 6e 71 75 61 6c 69 66 69 65 64 20 66  be.unqualified f
1daf0 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  or INSERT statem
1db00 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72 20  ents that occur 
1db10 77 69 74 68 69 6e 20 5b 43 52 45 41 54 45 20 54  within [CREATE T
1db20 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
1db30 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c 20  ts..^Similarly, 
1db40 74 68 65 20 22 44 45 46 41 55 4c 54 20 56 41 4c  the "DEFAULT VAL
1db50 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65  UES" form of the
1db60 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
1db70 74 20 69 73 20 73 75 70 70 6f 72 74 65 64 20 66  t is supported f
1db80 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53  or.top-level INS
1db90 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ERT statements o
1dba0 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f 72 20  nly and not for 
1dbb0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
1dbc0 73 20 77 69 74 68 69 6e 0a 74 72 69 67 67 65 72  s within.trigger
1dbd0 73 2e 0a 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  s..<p>..<tcl>.##
1dbe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dbf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dc00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dc10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dc20 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1dc30 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43  tion {ON CONFLIC
1dc40 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69  T clause} confli
1dc50 63 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c  ct {{conflict cl
1dc60 61 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49  ause} {ON CONFLI
1dc70 43 54 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  CT}}..BubbleDiag
1dc80 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  ram conflict-cla
1dc90 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  use.</tcl>..<p>T
1dca0 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  he ON CONFLICT c
1dcb0 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61 20 73  lause is not a s
1dcc0 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f 6d 6d  eparate SQL comm
1dcd0 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a 6e 6f  and.  It is a.no
1dce0 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61 75 73  n-standard claus
1dcf0 65 20 74 68 61 74 20 63 61 6e 20 61 70 70 65 61  e that can appea
1dd00 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72 20  r in many other 
1dd10 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49 74  SQL commands..It
1dd20 20 69 73 20 67 69 76 65 6e 20 69 74 73 20 6f 77   is given its ow
1dd30 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74 68 69  n section in thi
1dd40 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63 61 75  s document becau
1dd50 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70 61 72  se it is not.par
1dd60 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51  t of standard SQ
1dd70 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20  L and therefore 
1dd80 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66 61 6d  might not be fam
1dd90 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  iliar.</p>..<p>^
1dda0 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20 74  The syntax for t
1ddb0 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  he ON CONFLICT c
1ddc0 6c 61 75 73 65 20 69 73 20 61 73 20 73 68 6f 77  lause is as show
1ddd0 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68 65 20  n above for.the 
1dde0 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d  CREATE TABLE com
1ddf0 6d 61 6e 64 2e 20 20 5e 46 6f 72 20 74 68 65 20  mand.  ^For the 
1de00 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44 41 54  INSERT and.UPDAT
1de10 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65 20  E commands, the 
1de20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f 4e  keywords "ON CON
1de30 46 4c 49 43 54 22 20 61 72 65 20 72 65 70 6c 61  FLICT" are repla
1de40 63 65 64 20 62 79 20 22 4f 52 22 20 73 6f 20 74  ced by "OR" so t
1de50 68 61 74 0a 74 68 65 20 73 79 6e 74 61 78 20 72  hat.the syntax r
1de60 65 61 64 73 20 6d 6f 72 65 20 6e 61 74 75 72 61  eads more natura
1de70 6c 6c 79 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  lly.  For exampl
1de80 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22 49  e, instead of."I
1de90 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49 43  NSERT ON CONFLIC
1dea0 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61 76  T IGNORE" we hav
1deb0 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e  e "INSERT OR IGN
1dec0 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f 72  ORE"..The keywor
1ded0 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74 68  ds change but th
1dee0 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65  e meaning of the
1def0 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20 73   clause is the s
1df00 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e 3c  ame.either way.<
1df10 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  /p>..<p>The ON C
1df20 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 61  ONFLICT clause a
1df30 70 70 6c 69 65 73 20 74 6f 20 55 4e 49 51 55 45  pplies to UNIQUE
1df40 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 0a 63 6f   and NOT NULL.co
1df50 6e 73 74 72 61 69 6e 74 73 20 28 61 6e 64 20 74  nstraints (and t
1df60 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  o PRIMARY KEY co
1df70 6e 73 74 72 61 69 6e 74 73 20 77 68 69 63 68 20  nstraints which 
1df80 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
1df90 20 0a 6f 66 20 74 68 69 73 20 73 65 63 74 69 6f   .of this sectio
1dfa0 6e 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 74  n are the same t
1dfb0 68 69 6e 67 20 61 73 20 55 4e 49 51 55 45 20 63  hing as UNIQUE c
1dfc0 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 54 68 65  onstraints)..The
1dfd0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
1dfe0 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74 0a  orithm does not.
1dff0 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49 47  apply to [FOREIG
1e000 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
1e010 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66 69  s]..There are fi
1e020 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ve conflict reso
1e030 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
1e040 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42 41   choices:.ROLLBA
1e050 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c 2c  CK, ABORT, FAIL,
1e060 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50   IGNORE, and REP
1e070 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61 75  LACE..^The defau
1e080 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
1e090 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
1e0a0 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73   is ABORT.  This
1e0b0 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d 65  .is what they me
1e0c0 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64  an:</p>..<dl>.<d
1e0d0 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62  t><b>ROLLBACK</b
1e0e0 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
1e0f0 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
1e100 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
1e110 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
1e120 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65 73  the ROLLBACK.res
1e130 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1e140 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72  m aborts the cur
1e150 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65  rent SQL stateme
1e160 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49 54  nt with.an SQLIT
1e170 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72  E_CONSTRAINT err
1e180 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61 63  or and rolls bac
1e190 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
1e1a0 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e  ansaction..^If n
1e1b0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
1e1c0 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20 74  .active (other t
1e1d0 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20  han the implied 
1e1e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74  transaction that
1e1f0 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65   is created on e
1e200 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68  very.command) th
1e210 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
1e220 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
1e230 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73  ithm works the s
1e240 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52 54  ame as the.ABORT
1e250 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c   algorithm.</p><
1e260 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f  /dd>..<dt><b>ABO
1e270 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RT</b></dt>.<dd>
1e280 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
1e290 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
1e2a0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1e2b0 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a 72  urs, the ABORT.r
1e2c0 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
1e2d0 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63  thm aborts the c
1e2e0 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
1e2f0 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51 4c  ment.with an SQL
1e300 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65  ITE_CONSTRAINT e
1e310 72 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20 6f  rror and backs o
1e320 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d  ut any changes.m
1e330 61 64 65 20 62 79 20 74 68 65 20 63 75 72 72 65  ade by the curre
1e340 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
1e350 3b 20 62 75 74 20 63 68 61 6e 67 65 73 20 63 61  ; but changes ca
1e360 75 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53 51  used.by prior SQ
1e370 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  L statements wit
1e380 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61  hin the same tra
1e390 6e 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72 65  nsaction are pre
1e3a0 73 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a 74  served and the.t
1e3b0 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
1e3c0 6e 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73 20  ns active..This 
1e3d0 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  is the default b
1e3e0 65 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65 20  ehavior and the 
1e3f0 62 65 68 61 76 69 6f 72 20 73 70 65 63 69 66 69  behavior specifi
1e400 65 64 20 62 79 20 74 68 65 20 53 51 4c 0a 73 74  ed by the SQL.st
1e410 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e  andard.</p></dd>
1e420 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62  ..<dt><b>FAIL</b
1e430 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
1e440 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
1e450 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
1e460 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
1e470 74 68 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74  the FAIL.resolut
1e480 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62  ion algorithm ab
1e490 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
1e4a0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77   SQL statement w
1e4b0 69 74 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f  ith an.SQLITE_CO
1e4c0 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 2e 20  NSTRAINT error. 
1e4d0 20 5e 42 75 74 20 74 68 65 20 46 41 49 4c 20 72   ^But the FAIL r
1e4e0 65 73 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e  esolution does n
1e4f0 6f 74 0a 62 61 63 6b 20 6f 75 74 20 70 72 69 6f  ot.back out prio
1e500 72 20 63 68 61 6e 67 65 73 20 6f 66 20 74 68 65  r changes of the
1e510 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74   SQL statement t
1e520 68 61 74 20 66 61 69 6c 65 64 20 6e 6f 72 20 64  hat failed nor d
1e530 6f 65 73 0a 69 74 20 65 6e 64 20 74 68 65 20 74  oes.it end the t
1e540 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72  ransaction..^For
1e550 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20   example, if an 
1e560 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74  UPDATE.statement
1e570 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63   encountered a c
1e580 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
1e590 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68  ion on the 100th
1e5a0 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74   row that.it att
1e5b0 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c  empts to update,
1e5c0 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
1e5d0 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61  99 row changes a
1e5e0 72 65 20 70 72 65 73 65 72 76 65 64 0a 62 75 74  re preserved.but
1e5f0 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73   changes to rows
1e600 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20   100 and beyond 
1e610 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e  never occur.</p>
1e620 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47  </dd>..<dt><b>IG
1e630 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  NORE</b></dt>.<d
1e640 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61  d><p> ^When an a
1e650 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72  pplicable constr
1e660 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
1e670 63 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f  ccurs, .the IGNO
1e680 52 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  RE resolution al
1e690 67 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74 68  gorithm skips th
1e6a0 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63  e one row that c
1e6b0 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73  ontains.the cons
1e6c0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1e6d0 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 70   and continues p
1e6e0 72 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65 71  rocessing subseq
1e6f0 75 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68 65  uent rows.of the
1e700 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61   SQL statement a
1e710 73 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e  s if nothing wen
1e720 74 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72  t wrong..Other r
1e730 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61  ows before and a
1e740 66 74 65 72 20 74 68 65 20 72 6f 77 20 74 68 61  fter the row tha
1e750 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20  t.contained the 
1e760 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1e770 74 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74 65  tion are inserte
1e780 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72  d or updated.nor
1e790 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72  mally. ^No error
1e7a0 20 69 73 20 72 65 74 75 72 6e 65 64 20 77 68 65   is returned whe
1e7b0 6e 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e  n the IGNORE con
1e7c0 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
1e7d0 0a 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73  .algorithm is us
1e7e0 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ed.</p></dd>..<d
1e7f0 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e  t><b>REPLACE</b>
1e800 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57  </dt>.<dd><p> ^W
1e810 68 65 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  hen a UNIQUE con
1e820 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
1e830 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45  n occurs, the RE
1e840 50 4c 41 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a  PLACE algorithm.
1e850 64 65 6c 65 74 65 73 20 70 72 65 2d 65 78 69 73  deletes pre-exis
1e860 74 69 6e 67 20 72 6f 77 73 20 74 68 61 74 20 61  ting rows that a
1e870 72 65 20 63 61 75 73 69 6e 67 20 74 68 65 20 63  re causing the c
1e880 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
1e890 69 6f 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73  ion.prior to ins
1e8a0 65 72 74 69 6e 67 20 6f 72 20 75 70 64 61 74 69  erting or updati
1e8b0 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  ng the current r
1e8c0 6f 77 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61  ow and the comma
1e8d0 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78  nd continues .ex
1e8e0 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79  ecuting normally
1e8f0 2e 0a 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c  ..^If a NOT NULL
1e900 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1e910 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
1e920 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69  e REPLACE confli
1e930 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 72 65  ct.resolution re
1e940 70 6c 61 63 65 73 20 74 68 65 20 4e 55 4c 4c 20  places the NULL 
1e950 76 61 6c 75 65 20 77 69 74 68 0a 74 68 65 20 64  value with.the d
1e960 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
1e970 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72   that column, or
1e980 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68   if the column h
1e990 61 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61  as no default.va
1e9a0 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20 41 42  lue, then the AB
1e9b0 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
1e9c0 20 75 73 65 64 2e 0a 5e 49 66 20 61 20 43 48 45   used..^If a CHE
1e9d0 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  CK constraint vi
1e9e0 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
1e9f0 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66  the REPLACE conf
1ea00 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
1ea10 61 6c 67 6f 72 69 74 68 6d 20 61 6c 77 61 79 73  algorithm always
1ea20 20 77 6f 72 6b 73 20 6c 69 6b 65 20 41 42 4f 52   works like ABOR
1ea30 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  T.</p>..<p>^When
1ea40 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e   the REPLACE con
1ea50 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
1ea60 20 73 74 72 61 74 65 67 79 20 64 65 6c 65 74 65   strategy delete
1ea70 73 20 72 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  s rows in order 
1ea80 74 6f 0a 73 61 74 69 73 66 79 20 61 20 63 6f 6e  to.satisfy a con
1ea90 73 74 72 61 69 6e 74 2c 20 5b 43 52 45 41 54 45  straint, [CREATE
1eaa0 20 54 52 49 47 47 45 52 20 7c 20 64 65 6c 65 74   TRIGGER | delet
1eab0 65 20 74 72 69 67 67 65 72 73 5d 20 66 69 72 65  e triggers] fire
1eac0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a   if and only if.
1ead0 5b 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67  [recursive_trigg
1eae0 65 72 73 20 70 72 61 67 6d 61 20 7c 20 72 65 63  ers pragma | rec
1eaf0 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 5d  ursive triggers]
1eb00 20 61 72 65 20 65 6e 61 62 6c 65 64 2e 3c 2f 70   are enabled.</p
1eb10 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 73 71 6c 69  >..<p>^The [sqli
1eb20 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 20  te3_update_hook 
1eb30 7c 20 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20 69  | update hook] i
1eb40 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 64 20 66 6f  s not invoked fo
1eb50 72 20 72 6f 77 73 20 74 68 61 74 0a 61 72 65 20  r rows that.are 
1eb60 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20 52  deleted by the R
1eb70 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20  EPLACE conflict 
1eb80 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74  resolution strat
1eb90 65 67 79 2e 20 20 5e 4e 6f 72 20 64 6f 65 73 0a  egy.  ^Nor does.
1eba0 52 45 50 4c 41 43 45 20 69 6e 63 72 65 6d 65 6e  REPLACE incremen
1ebb0 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  t the [sqlite3_c
1ebc0 68 61 6e 67 65 73 20 7c 20 63 68 61 6e 67 65 20  hanges | change 
1ebd0 63 6f 75 6e 74 65 72 5d 2e 0a 54 68 65 20 65 78  counter]..The ex
1ebe0 63 65 70 74 69 6f 6e 61 6c 20 62 65 68 61 76 69  ceptional behavi
1ebf0 6f 72 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74  ors defined in t
1ec00 68 69 73 20 70 61 72 61 67 72 61 70 68 20 6d 69  his paragraph mi
1ec10 67 68 74 20 63 68 61 6e 67 65 20 0a 69 6e 20 61  ght change .in a
1ec20 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e   future release.
1ec30 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e  </p>.</dl>..<p>^
1ec40 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70  The algorithm sp
1ec50 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 4f  ecified in the O
1ec60 52 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20 49  R clause of an I
1ec70 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 0a  NSERT or UPDATE.
1ec80 6f 76 65 72 72 69 64 65 73 20 61 6e 79 20 61 6c  overrides any al
1ec90 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65  gorithm specifie
1eca0 64 20 69 6e 20 61 20 43 52 45 41 54 45 20 54 41  d in a CREATE TA
1ecb0 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f  BLE..^If no algo
1ecc0 72 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69  rithm is specifi
1ecd0 65 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68 65  ed anywhere, the
1ece0 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d   ABORT algorithm
1ecf0 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c   is used.</p>..<
1ed00 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
1ed10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ed20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ed30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ed40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ed50 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 49 4e  ###.Section REIN
1ed60 44 45 58 20 72 65 69 6e 64 65 78 20 52 45 49 4e  DEX reindex REIN
1ed70 44 45 58 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  DEX..BubbleDiagr
1ed80 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d 74 20  am reindex-stmt 
1ed90 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  1.</tcl>..<p>^Th
1eda0 65 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  e REINDEX comman
1edb0 64 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c  d is used to del
1edc0 65 74 65 20 61 6e 64 20 72 65 63 72 65 61 74 65  ete and recreate
1edd0 20 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63   indices from sc
1ede0 72 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75  ratch..This is u
1edf0 73 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64  seful when the d
1ee00 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63  efinition of a c
1ee10 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
1ee20 65 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c  e has changed..<
1ee30 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
1ee40 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20  REINDEX keyword 
1ee50 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20  is not followed 
1ee60 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73  by a collation-s
1ee70 65 71 75 65 6e 63 65 20 6f 72 20 64 61 74 61 62  equence or datab
1ee80 61 73 65 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e  ase .object iden
1ee90 74 69 66 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c  tifier, then all
1eea0 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20   indices in all 
1eeb0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1eec0 65 73 20 61 72 65 20 72 65 62 75 69 6c 74 2e 0a  es are rebuilt..
1eed0 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e  .<p>^If the REIN
1eee0 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 66  DEX keyword is f
1eef0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c  ollowed by a col
1ef00 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20  lation-sequence 
1ef10 6e 61 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69  name, then.all i
1ef20 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74  ndices in all at
1ef30 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1ef40 20 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 61   that use the na
1ef50 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  med collation se
1ef60 71 75 65 6e 63 65 73 0a 61 72 65 20 72 65 63 72  quences.are recr
1ef70 65 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c  eated. ..<p>^Or,
1ef80 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
1ef90 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1efa0 20 52 45 49 4e 44 45 58 20 69 64 65 6e 74 69 66   REINDEX identif
1efb0 69 65 73 20 61 20 73 70 65 63 69 66 69 63 20 0a  ies a specific .
1efc0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2c 20  database table, 
1efd0 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73  then all indices
1efe0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1eff0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
1f000 61 72 65 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49  are rebuilt. .^I
1f010 66 20 69 74 20 69 64 65 6e 74 69 66 69 65 73 20  f it identifies 
1f020 61 20 73 70 65 63 69 66 69 63 20 64 61 74 61 62  a specific datab
1f030 61 73 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  ase index, then 
1f040 6a 75 73 74 20 74 68 61 74 20 69 6e 64 65 78 20  just that index 
1f050 69 73 20 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c  is recreated...<
1f060 70 3e 5e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61  p>^If no <i>data
1f070 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73  base-name</i> is
1f080 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74   specified and t
1f090 68 65 72 65 20 65 78 69 73 74 73 20 62 6f 74 68  here exists both
1f0a0 20 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65   a table or.inde
1f0b0 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f  x and a collatio
1f0c0 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  n sequence of th
1f0d0 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65  e specified name
1f0e0 2c 20 53 51 4c 69 74 65 20 69 6e 74 65 72 70 72  , SQLite interpr
1f0f0 65 74 73 0a 74 68 69 73 20 61 73 20 61 20 72 65  ets.this as a re
1f100 71 75 65 73 74 20 74 6f 20 72 65 62 75 69 6c 64  quest to rebuild
1f110 20 74 68 65 20 69 6e 64 69 63 65 73 20 74 68 61   the indices tha
1f120 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20  t use the named 
1f130 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1f140 63 65 2e 0a 54 68 69 73 20 61 6d 62 69 67 75 69  ce..This ambigui
1f150 74 79 20 69 6e 20 74 68 65 20 73 79 6e 74 61 78  ty in the syntax
1f160 20 6d 61 79 20 62 65 20 61 76 6f 69 64 65 64 20   may be avoided 
1f170 62 79 20 61 6c 77 61 79 73 20 73 70 65 63 69 66  by always specif
1f180 79 69 6e 67 20 61 0a 3c 69 3e 64 61 74 61 62 61  ying a.<i>databa
1f190 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e  se-name</i> when
1f1a0 20 72 65 69 6e 64 65 78 69 6e 67 20 61 20 73 70   reindexing a sp
1f1b0 65 63 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20  ecific table or 
1f1c0 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  index...<tcl>.##
1f1d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f1e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f1f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f210 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1f220 63 74 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65  ction REPLACE re
1f230 70 6c 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c  place REPLACE..<
1f240 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  /tcl>..<p>^The R
1f250 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69  EPLACE command i
1f260 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
1f270 68 65 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  he "[ON CONFLICT
1f280 20 7c 20 49 4e 53 45 52 54 20 4f 52 20 52 45 50   | INSERT OR REP
1f290 4c 41 43 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f  LACE]".variant o
1f2a0 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 63  f the [INSERT] c
1f2b0 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61  ommand.  .This a
1f2c0 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64 65 64  lias is provided
1f2d0 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69   for compatibili
1f2e0 74 79 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  ty other SQL dat
1f2f0 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20  abase engines.  
1f300 53 65 65 20 74 68 65 20 0a 5b 49 4e 53 45 52 54  See the .[INSERT
1f310 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65  ] command docume
1f320 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69  ntation for addi
1f330 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
1f340 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e  on.</p>  ..<tcl>
1f350 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1f360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f3a0 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54 20  .Section SELECT 
1f3b0 73 65 6c 65 63 74 20 7b 53 45 4c 45 43 54 20 71  select {SELECT q
1f3c0 75 65 72 79 7d 0a 0a 42 75 62 62 6c 65 44 69 61  uery}..BubbleDia
1f3d0 67 72 61 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74  gram select-stmt
1f3e0 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d   1.BubbleDiagram
1f3f0 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 42 75 62   select-core.Bub
1f400 62 6c 65 44 69 61 67 72 61 6d 20 72 65 73 75 6c  bleDiagram resul
1f410 74 2d 63 6f 6c 75 6d 6e 0a 42 75 62 62 6c 65 44  t-column.BubbleD
1f420 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 73 6f 75 72  iagram join-sour
1f430 63 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  ce.BubbleDiagram
1f440 20 73 69 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 42   single-source.B
1f450 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69  ubbleDiagram joi
1f460 6e 2d 6f 70 0a 42 75 62 62 6c 65 44 69 61 67 72  n-op.BubbleDiagr
1f470 61 6d 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69  am join-constrai
1f480 6e 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  nt.BubbleDiagram
1f490 20 6f 72 64 65 72 69 6e 67 2d 74 65 72 6d 0a 42   ordering-term.B
1f4a0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d  ubbleDiagram com
1f4b0 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72 0a 3c  pound-operator.<
1f4c0 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53  /tcl>...<p>The S
1f4d0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1f4e0 69 73 20 75 73 65 64 20 74 6f 20 71 75 65 72 79  is used to query
1f4f0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
1f500 54 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 61 20  The.result of a 
1f510 53 45 4c 45 43 54 20 69 73 20 7a 65 72 6f 20 6f  SELECT is zero o
1f520 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 64  r more rows of d
1f530 61 74 61 20 77 68 65 72 65 20 65 61 63 68 20 72  ata where each r
1f540 6f 77 0a 68 61 73 20 61 20 66 69 78 65 64 20 6e  ow.has a fixed n
1f550 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1f560 2e 20 20 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45  .  ..<p>The SELE
1f570 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
1f580 74 68 65 20 6d 6f 73 74 20 63 6f 6d 70 6c 69 63  the most complic
1f590 61 74 65 64 20 63 6f 6d 6d 61 6e 64 20 69 6e 20  ated command in 
1f5a0 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
1f5b0 2e 0a 54 6f 20 6d 61 6b 65 20 74 68 65 20 64 65  ..To make the de
1f5c0 73 63 72 69 70 74 69 6f 6e 20 65 61 73 69 65 72  scription easier
1f5d0 20 74 6f 20 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65   to follow, some
1f5e0 20 6f 66 20 74 68 65 20 70 61 73 73 61 67 65 73   of the passages
1f5f0 20 62 65 6c 6f 77 20 64 65 73 63 72 69 62 65 0a   below describe.
1f600 74 68 65 20 77 61 79 20 74 68 65 20 64 61 74 61  the way the data
1f610 20 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 53   returned by a S
1f620 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1f630 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73  is determined as
1f640 20 61 20 73 65 72 69 65 73 20 6f 66 0a 73 74 65   a series of.ste
1f650 70 73 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74  ps. It is import
1f660 61 6e 74 20 74 6f 20 6b 65 65 70 20 69 6e 20 6d  ant to keep in m
1f670 69 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 73  ind that this is
1f680 20 70 75 72 65 6c 79 20 69 6c 6c 75 73 74 72 61   purely illustra
1f690 74 69 76 65 20 2d 0a 69 6e 20 70 72 61 63 74 69  tive -.in practi
1f6a0 63 65 20 6e 65 69 74 68 65 72 20 53 51 4c 69 74  ce neither SQLit
1f6b0 65 20 6e 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  e nor any other 
1f6c0 53 51 4c 20 65 6e 67 69 6e 65 20 69 73 20 72 65  SQL engine is re
1f6d0 71 75 69 72 65 64 20 74 6f 20 66 6f 6c 6c 6f 77  quired to follow
1f6e0 20 0a 74 68 69 73 20 6f 72 20 61 6e 79 20 6f 74   .this or any ot
1f6f0 68 65 72 20 73 70 65 63 69 66 69 63 20 70 72 6f  her specific pro
1f700 63 65 73 73 2e 0a 0a 3c 68 33 3e 53 69 6d 70 6c  cess...<h3>Simpl
1f710 65 20 53 65 6c 65 63 74 20 50 72 6f 63 65 73 73  e Select Process
1f720 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ing</h3>..<p>The
1f730 20 73 79 6e 74 61 78 20 66 6f 72 20 61 20 73 69   syntax for a si
1f740 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
1f750 65 6d 65 6e 74 20 69 73 20 64 65 70 69 63 74 65  ement is depicte
1f760 64 20 69 6e 20 74 68 65 20 0a 5b 73 65 6c 65 63  d in the .[selec
1f770 74 2d 63 6f 72 65 20 73 79 6e 74 61 78 20 64 69  t-core syntax di
1f780 61 67 72 61 6d 5d 2e 20 47 65 6e 65 72 61 74 69  agram]. Generati
1f790 6e 67 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ng the results o
1f7a0 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  f a simple SELEC
1f7b0 54 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  T.statement is p
1f7c0 72 65 73 65 6e 74 65 64 20 61 73 20 61 20 66 6f  resented as a fo
1f7d0 75 72 20 73 74 65 70 20 70 72 6f 63 65 73 73 20  ur step process 
1f7e0 69 6e 20 74 68 65 20 64 65 73 63 72 69 70 74 69  in the descripti
1f7f0 6f 6e 20 62 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a  on below:..<ol>.
1f800 20 20 3c 6c 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20    <li> <p>[FROM 
1f810 63 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69  clause] processi
1f820 6e 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61  ng: The input da
1f830 74 61 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c  ta for the simpl
1f840 65 20 53 45 4c 45 43 54 20 69 73 0a 20 20 20 20  e SELECT is.    
1f850 20 20 20 64 65 74 65 72 6d 69 6e 65 64 2e 20 54     determined. T
1f860 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73  he input data is
1f870 20 65 69 74 68 65 72 20 69 6d 70 6c 69 63 69 74   either implicit
1f880 6c 79 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  ly a single row 
1f890 77 69 74 68 20 30 0a 20 20 20 20 20 20 20 63 6f  with 0.       co
1f8a0 6c 75 6d 6e 73 20 28 69 66 20 74 68 65 72 65 20  lumns (if there 
1f8b0 69 73 20 6e 6f 20 46 52 4f 4d 20 63 6c 61 75 73  is no FROM claus
1f8c0 65 29 20 6f 72 20 69 73 20 64 65 74 65 72 6d 69  e) or is determi
1f8d0 6e 65 64 20 62 79 20 61 6e 61 6c 79 7a 69 6e 67  ned by analyzing
1f8e0 20 74 68 65 0a 20 20 20 20 20 20 20 5b 6a 6f 69   the.       [joi
1f8f0 6e 2d 73 6f 75 72 63 65 20 73 79 6e 74 61 78 20  n-source syntax 
1f900 64 69 61 67 72 61 6d 7c 6a 6f 69 6e 2d 73 6f 75  diagram|join-sou
1f910 72 63 65 5d 20 73 70 65 63 69 66 69 63 61 74 69  rce] specificati
1f920 6f 6e 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  on that follows 
1f930 0a 20 20 20 20 20 20 20 61 6e 20 65 78 70 6c 69  .       an expli
1f940 63 69 74 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e  cit FROM clause.
1f950 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 57 48 45 52  .  <li> <p>[WHER
1f960 45 20 63 6c 61 75 73 65 5d 20 70 72 6f 63 65 73  E clause] proces
1f970 73 69 6e 67 3a 20 54 68 65 20 69 6e 70 75 74 20  sing: The input 
1f980 64 61 74 61 20 69 73 20 66 69 6c 74 65 72 65 64  data is filtered
1f990 20 75 73 69 6e 67 20 74 68 65 20 57 48 45 52 45   using the WHERE
1f9a0 0a 20 20 20 20 20 20 20 63 6c 61 75 73 65 20 65  .       clause e
1f9b0 78 70 72 65 73 73 69 6f 6e 2e 20 20 0a 20 20 3c  xpression.  .  <
1f9c0 6c 69 3e 20 3c 70 3e 5b 47 52 4f 55 50 20 42 59  li> <p>[GROUP BY
1f9d0 7c 47 52 4f 55 50 20 42 59 2c 20 48 41 56 49 4e  |GROUP BY, HAVIN
1f9e0 47 20 61 6e 64 20 72 65 73 75 6c 74 2d 63 6f 6c  G and result-col
1f9f0 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 20  umn expression] 
1fa00 70 72 6f 63 65 73 73 69 6e 67 3a 20 0a 20 20 20  processing: .   
1fa10 20 20 20 20 54 68 65 20 73 65 74 20 6f 66 20 72      The set of r
1fa20 65 73 75 6c 74 20 72 6f 77 73 20 69 73 20 63 6f  esult rows is co
1fa30 6d 70 75 74 65 64 20 62 79 20 61 67 67 72 65 67  mputed by aggreg
1fa40 61 74 69 6e 67 20 74 68 65 20 64 61 74 61 20 61  ating the data a
1fa50 63 63 6f 72 64 69 6e 67 20 74 6f 0a 20 20 20 20  ccording to.    
1fa60 20 20 20 61 6e 79 20 47 52 4f 55 50 20 42 59 20     any GROUP BY 
1fa70 63 6c 61 75 73 65 20 61 6e 64 20 63 61 6c 63 75  clause and calcu
1fa80 6c 61 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c  lating the resul
1fa90 74 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e  t-set expression
1faa0 73 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20  s for the.      
1fab0 20 72 6f 77 73 20 6f 66 20 74 68 65 20 66 69 6c   rows of the fil
1fac0 74 65 72 65 64 20 69 6e 70 75 74 20 64 61 74 61  tered input data
1fad0 73 65 74 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70  set.  .  <li> <p
1fae0 3e 5b 44 49 53 54 49 4e 43 54 7c 44 49 53 54 49  >[DISTINCT|DISTI
1faf0 4e 43 54 2f 41 4c 4c 20 6b 65 79 77 6f 72 64 5d  NCT/ALL keyword]
1fb00 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 49 66 20   processing: If 
1fb10 74 68 65 20 71 75 65 72 79 20 69 73 20 61 20 22  the query is a "
1fb20 53 45 4c 45 43 54 0a 20 20 20 20 20 20 20 44 49  SELECT.       DI
1fb30 53 54 49 4e 43 54 22 20 71 75 65 72 79 2c 20 64  STINCT" query, d
1fb40 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72  uplicate rows ar
1fb50 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  e removed from t
1fb60 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74  he set of result
1fb70 20 72 6f 77 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   rows..</ol>..<p
1fb80 3e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 74  >There are two t
1fb90 79 70 65 73 20 6f 66 20 73 69 6d 70 6c 65 20 53  ypes of simple S
1fba0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1fbb0 2d 20 61 67 67 72 65 67 61 74 65 20 61 6e 64 20  - aggregate and 
1fbc0 0a 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71  .non-aggregate q
1fbd0 75 65 72 69 65 73 2e 20 5e 41 20 73 69 6d 70 6c  ueries. ^A simpl
1fbe0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1fbf0 6e 74 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  nt is an aggrega
1fc00 74 65 20 71 75 65 72 79 20 69 66 0a 69 74 20 63  te query if.it c
1fc10 6f 6e 74 61 69 6e 73 20 65 69 74 68 65 72 20 61  ontains either a
1fc20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
1fc30 20 6f 72 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   or one or more 
1fc40 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1fc50 6f 6e 73 0a 69 6e 20 74 68 65 20 72 65 73 75 6c  ons.in the resul
1fc60 74 2d 73 65 74 2e 20 5e 4f 74 68 65 72 77 69 73  t-set. ^Otherwis
1fc70 65 2c 20 69 66 20 61 20 73 69 6d 70 6c 65 20 53  e, if a simple S
1fc80 45 4c 45 43 54 20 63 6f 6e 74 61 69 6e 73 20 6e  ELECT contains n
1fc90 6f 20 61 67 67 72 65 67 61 74 65 0a 66 75 6e 63  o aggregate.func
1fca0 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50  tions or a GROUP
1fcb0 20 42 59 20 63 6c 61 75 73 65 2c 20 69 74 20 69   BY clause, it i
1fcc0 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74  s a non-aggregat
1fcd0 65 20 71 75 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e  e query...<p><b>
1fce0 31 2e 20 44 65 74 65 72 6d 69 6e 61 74 69 6f 6e  1. Determination
1fcf0 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 20 28   of input data (
1fd00 46 52 4f 4d 20 63 6c 61 75 73 65 20 70 72 6f 63  FROM clause proc
1fd10 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63  essing).</b>.<tc
1fd20 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 66 72  l>hd_fragment fr
1fd30 6f 6d 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c  omclause</tcl>.<
1fd40 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
1fd50 7b 46 52 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f 74  {FROM clause}</t
1fd60 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 70 75  cl>..<p>The inpu
1fd70 74 20 64 61 74 61 20 75 73 65 64 20 62 79 20 61  t data used by a
1fd80 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 71   simple SELECT q
1fd90 75 65 72 79 20 69 73 20 61 20 73 65 74 20 6f 66  uery is a set of
1fda0 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a   <i>N</i> rows .
1fdb0 65 61 63 68 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f  each <i>M</i> co
1fdc0 6c 75 6d 6e 73 20 77 69 64 65 2e 0a 0a 3c 70 3e  lumns wide...<p>
1fdd0 5e 28 49 66 20 74 68 65 20 46 52 4f 4d 20 63 6c  ^(If the FROM cl
1fde0 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20  ause is omitted 
1fdf0 66 72 6f 6d 20 61 20 73 69 6d 70 6c 65 20 53 45  from a simple SE
1fe00 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20  LECT statement, 
1fe10 74 68 65 6e 20 74 68 65 20 0a 69 6e 70 75 74 20  then the .input 
1fe20 64 61 74 61 20 69 73 20 69 6d 70 6c 69 63 69 74  data is implicit
1fe30 6c 79 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  ly a single row 
1fe40 7a 65 72 6f 20 63 6f 6c 75 6d 6e 73 20 77 69 64  zero columns wid
1fe50 65 29 5e 20 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f  e)^ (i.e. <i>N</
1fe60 69 3e 3d 31 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69  i>=1 and.<i>M</i
1fe70 3e 3d 30 29 2e 0a 0a 3c 70 3e 49 66 20 61 20 46  >=0)...<p>If a F
1fe80 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 73 70  ROM clause is sp
1fe90 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 61 74  ecified, the dat
1fea0 61 20 6f 6e 20 77 68 69 63 68 20 61 20 73 69 6d  a on which a sim
1feb0 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72 79  ple SELECT query
1fec0 0a 6f 70 65 72 61 74 65 73 20 63 6f 6d 65 73 20  .operates comes 
1fed0 66 72 6f 6d 20 74 68 65 20 6f 6e 65 20 6f 72 20  from the one or 
1fee0 6d 6f 72 65 20 74 61 62 6c 65 73 20 6f 72 20 73  more tables or s
1fef0 75 62 71 75 65 72 69 65 73 20 28 53 45 4c 45 43  ubqueries (SELEC
1ff00 54 20 73 74 61 74 65 6d 65 6e 74 73 0a 69 6e 20  T statements.in 
1ff10 70 61 72 65 6e 74 68 65 73 69 73 29 20 73 70 65  parenthesis) spe
1ff20 63 69 66 69 65 64 20 66 6f 6c 6c 6f 77 69 6e 67  cified following
1ff30 20 74 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72   the FROM keywor
1ff40 64 2e 20 5e 41 20 73 75 62 2d 73 65 6c 65 63 74  d. ^A sub-select
1ff50 20 73 70 65 63 69 66 69 65 64 0a 69 6e 20 74 68   specified.in th
1ff60 65 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f  e join-source fo
1ff70 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d  llowing the FROM
1ff80 20 63 6c 61 75 73 65 20 69 6e 20 61 20 73 69 6d   clause in a sim
1ff90 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
1ffa0 6d 65 6e 74 20 69 73 0a 68 61 6e 64 6c 65 64 20  ment is.handled 
1ffb0 61 73 20 69 66 20 69 74 20 77 61 73 20 61 20 74  as if it was a t
1ffc0 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
1ffd0 74 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65  the data returne
1ffe0 64 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74  d by executing t
1fff0 68 65 0a 73 75 62 2d 73 65 6c 65 63 74 20 73 74  he.sub-select st
20000 61 74 65 6d 65 6e 74 2e 20 5e 45 61 63 68 20 63  atement. ^Each c
20010 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 73 75 62  olumn of the sub
20020 2d 73 65 6c 65 63 74 20 64 61 74 61 73 65 74 20  -select dataset 
20030 69 6e 68 65 72 69 74 73 20 74 68 65 0a 5b 63 6f  inherits the.[co
20040 6c 6c 61 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f  llation|collatio
20050 6e 20 73 65 71 75 65 6e 63 65 5d 20 61 6e 64 20  n sequence] and 
20060 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68  [affinity] of th
20070 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
20080 65 78 70 72 65 73 73 69 6f 6e 0a 69 6e 20 74 68  expression.in th
20090 65 20 73 75 62 2d 73 65 6c 65 63 74 20 73 74 61  e sub-select sta
200a0 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20  tement...<p>^If 
200b0 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 61 20  there is only a 
200c0 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20  single table in 
200d0 74 68 65 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 20  the join-source 
200e0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52  following the FR
200f0 4f 4d 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  OM.clause, then 
20100 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 75  the input data u
20110 73 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  sed by the SELEC
20120 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74  T statement is t
20130 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  he contents of t
20140 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20  he.named table. 
20150 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72  ^If there is mor
20160 65 20 74 68 61 6e 20 6f 6e 65 20 74 61 62 6c 65  e than one table
20170 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
20180 72 74 20 6f 66 20 74 68 65 0a 6a 6f 69 6e 2d 73  rt of the.join-s
20190 6f 75 72 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  ource following 
201a0 74 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64  the FROM keyword
201b0 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65  , then the conte
201c0 6e 74 73 20 6f 66 20 65 61 63 68 20 6e 61 6d 65  nts of each name
201d0 64 20 74 61 62 6c 65 0a 61 72 65 20 6a 6f 69 6e  d table.are join
201e0 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65  ed into a single
201f0 20 64 61 74 61 73 65 74 20 66 6f 72 20 74 68 65   dataset for the
20200 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
20210 74 61 74 65 6d 65 6e 74 20 74 6f 20 6f 70 65 72  tatement to oper
20220 61 74 65 20 6f 6e 2e 0a 45 78 61 63 74 6c 79 20  ate on..Exactly 
20230 68 6f 77 20 74 68 65 20 64 61 74 61 20 69 73 20  how the data is 
20240 63 6f 6d 62 69 6e 65 64 20 64 65 70 65 6e 64 73  combined depends
20250 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 63   on the specific
20260 20 5b 6a 6f 69 6e 2d 6f 70 5d 20 61 6e 64 0a 5b   [join-op] and.[
20270 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 5d  join-constraint]
20280 20 75 73 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74   used to connect
20290 20 74 68 65 20 74 61 62 6c 65 73 20 6f 72 20 73   the tables or s
202a0 75 62 71 75 65 72 69 65 73 20 74 6f 67 65 74 68  ubqueries togeth
202b0 65 72 2e 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e  er...<p>All join
202c0 73 20 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20  s in SQLite are 
202d0 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 61 72  based on the car
202e0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f  tesian product o
202f0 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 0a 72  f the left and.r
20300 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65  ight-hand datase
20310 74 73 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 73  ts. ^The columns
20320 20 6f 66 20 74 68 65 20 63 61 72 74 65 73 69 61   of the cartesia
20330 6e 20 70 72 6f 64 75 63 74 20 64 61 74 61 73 65  n product datase
20340 74 20 61 72 65 2c 20 69 6e 20 0a 6f 72 64 65 72  t are, in .order
20350 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e  , all the column
20360 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 68 61  s of the left-ha
20370 6e 64 20 64 61 74 61 73 65 74 20 66 6f 6c 6c 6f  nd dataset follo
20380 77 65 64 20 62 79 20 61 6c 6c 20 74 68 65 20 63  wed by all the c
20390 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20 72 69  olumns.of the ri
203a0 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  ght-hand dataset
203b0 2e 20 5e 54 68 65 72 65 20 69 73 20 61 20 72 6f  . ^There is a ro
203c0 77 20 69 6e 20 74 68 65 20 63 61 72 74 65 73 69  w in the cartesi
203d0 61 6e 20 70 72 6f 64 75 63 74 20 64 61 74 61 73  an product datas
203e0 65 74 0a 66 6f 72 6d 65 64 20 62 79 20 63 6f 6d  et.formed by com
203f0 62 69 6e 69 6e 67 20 65 61 63 68 20 75 6e 69 71  bining each uniq
20400 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f  ue combination o
20410 66 20 61 20 72 6f 77 20 66 72 6f 6d 20 74 68 65  f a row from the
20420 20 6c 65 66 74 2d 68 61 6e 64 20 0a 61 6e 64 20   left-hand .and 
20430 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73  right-hand datas
20440 65 74 73 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20  ets. ^(In other 
20450 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 6c 65  words, if the le
20460 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ft-hand dataset 
20470 63 6f 6e 73 69 73 74 73 20 6f 66 0a 3c 69 3e 4e  consists of.<i>N
20480 6c 68 73 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20  lhs</i> rows of 
20490 3c 69 3e 4d 6c 68 73 3c 2f 69 3e 20 63 6f 6c 75  <i>Mlhs</i> colu
204a0 6d 6e 73 2c 20 61 6e 64 20 74 68 65 20 72 69 67  mns, and the rig
204b0 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ht-hand dataset 
204c0 6f 66 0a 3c 69 3e 4e 72 68 73 3c 2f 69 3e 20 72  of.<i>Nrhs</i> r
204d0 6f 77 73 20 6f 66 20 3c 69 3e 4d 72 68 73 3c 2f  ows of <i>Mrhs</
204e0 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e  i> columns, then
204f0 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
20500 72 6f 64 75 63 74 20 69 73 20 61 0a 64 61 74 61  roduct is a.data
20510 73 65 74 20 6f 66 20 3c 69 3e 4e 6c 68 73 2e 4e  set of <i>Nlhs.N
20520 72 68 73 3c 2f 69 3e 20 72 6f 77 73 2c 20 65 61  rhs</i> rows, ea
20530 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 3c 69  ch containing <i
20540 3e 4d 6c 68 73 2b 4d 72 68 73 3c 2f 69 3e 20 63  >Mlhs+Mrhs</i> c
20550 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49  olumns.)^..<p>^I
20560 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 20 69 73  f the join-op is
20570 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22   "CROSS JOIN", "
20580 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f  INNER JOIN", "JO
20590 49 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28  IN" or a comma.(
205a0 22 2c 22 29 20 61 6e 64 20 74 68 65 72 65 20 69  ",") and there i
205b0 73 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47  s no ON or USING
205c0 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
205d0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
205e0 6a 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74  join is.simply t
205f0 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
20600 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74  duct of the left
20610 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20   and right-hand 
20620 64 61 74 61 73 65 74 73 2e 20 0a 49 66 20 6a 6f  datasets. .If jo
20630 69 6e 2d 6f 70 20 64 6f 65 73 20 68 61 76 65 20  in-op does have 
20640 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75  ON or USING clau
20650 73 65 73 2c 20 74 68 6f 73 65 20 61 72 65 20 68  ses, those are h
20660 61 6e 64 6c 65 64 20 61 63 63 6f 72 64 69 6e 67  andled according
20670 20 74 6f 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to.the followin
20680 67 20 62 75 6c 6c 65 74 20 70 6f 69 6e 74 73 3a  g bullet points:
20690 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70  ..<ul>.  <li> <p
206a0 3e 5e 28 49 66 20 74 68 65 72 65 20 69 73 20 61  >^(If there is a
206b0 6e 20 4f 4e 20 63 6c 61 75 73 65 20 73 70 65 63  n ON clause spec
206c0 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20  ified, then the 
206d0 4f 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ON expression is
206e0 0a 20 20 20 20 20 20 20 65 76 61 6c 75 61 74 65  .       evaluate
206f0 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
20700 66 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  f the cartesian 
20710 70 72 6f 64 75 63 74 20 61 73 20 61 20 0a 20 20  product as a .  
20720 20 20 20 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78       [boolean ex
20730 70 72 65 73 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72  pression]. All r
20740 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
20750 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
20760 6c 75 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20  luates to .     
20770 20 20 66 61 6c 73 65 20 61 72 65 20 65 78 63 6c    false are excl
20780 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  uded from the da
20790 74 61 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e  taset.)^..  <li>
207a0 20 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73   <p>^If there is
207b0 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20   a USING clause 
207c0 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
207d0 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 63 6f  t of the join-co
207e0 6e 73 74 72 61 69 6e 74 2c 0a 20 20 20 20 20 20  nstraint,.      
207f0 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68   then each of th
20800 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 73  e column names s
20810 70 65 63 69 66 69 65 64 20 6d 75 73 74 20 65 78  pecified must ex
20820 69 73 74 20 69 6e 20 74 68 65 20 64 61 74 61 73  ist in the datas
20830 65 74 73 20 74 6f 20 0a 20 20 20 20 20 20 20 62  ets to .       b
20840 6f 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64  oth the left and
20850 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 6a 6f   right of the jo
20860 69 6e 2d 6f 70 2e 20 5e 28 46 6f 72 20 65 61 63  in-op. ^(For eac
20870 68 20 70 61 69 72 20 6f 66 20 6e 61 6d 65 73 61  h pair of namesa
20880 6b 65 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e  ke.       column
20890 73 2c 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  s, the expressio
208a0 6e 20 22 6c 68 73 2e 58 20 3d 20 72 68 73 2e 58  n "lhs.X = rhs.X
208b0 22 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66  " is evaluated f
208c0 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 20  or each row of. 
208d0 20 20 20 20 20 20 74 68 65 20 63 61 72 74 65 73        the cartes
208e0 69 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61  ian product as a
208f0 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
20900 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20  sion]. All rows 
20910 66 6f 72 20 77 68 69 63 68 20 6f 6e 65 0a 20 20  for which one.  
20920 20 20 20 20 20 6f 72 20 6d 6f 72 65 20 6f 66 20       or more of 
20930 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
20940 65 76 61 6c 75 61 74 65 73 20 74 6f 20 66 61 6c  evaluates to fal
20950 73 65 20 61 72 65 20 65 78 63 6c 75 64 65 64 20  se are excluded 
20960 66 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 20  from the.       
20970 72 65 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e 57  result set.)^ ^W
20980 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76 61  hen comparing va
20990 6c 75 65 73 20 61 73 20 61 20 72 65 73 75 6c 74  lues as a result
209a0 20 6f 66 20 61 20 55 53 49 4e 47 20 63 6c 61 75   of a USING clau
209b0 73 65 2c 20 74 68 65 0a 20 20 20 20 20 20 20 6e  se, the.       n
209c0 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20  ormal rules for 
209d0 68 61 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69 74  handling affinit
209e0 69 65 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ies, collation s
209f0 65 71 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c  equences and NUL
20a00 4c 0a 20 20 20 20 20 20 20 76 61 6c 75 65 73 20  L.       values 
20a10 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61  in comparisons a
20a20 70 70 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75 6d  pply. ^The colum
20a30 6e 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73  n from the datas
20a40 65 74 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20  et on the.      
20a50 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20   left-hand side 
20a60 6f 66 20 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72  of the join oper
20a70 61 74 6f 72 20 69 73 20 63 6f 6e 73 69 64 65 72  ator is consider
20a80 65 64 20 74 6f 20 62 65 20 6f 6e 20 74 68 65 20  ed to be on the 
20a90 6c 65 66 74 2d 68 61 6e 64 0a 20 20 20 20 20 20  left-hand.      
20aa0 20 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d   side of the com
20ab0 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
20ac0 20 28 3d 29 20 66 6f 72 20 74 68 65 20 70 75 72   (=) for the pur
20ad0 70 6f 73 65 73 20 6f 66 20 63 6f 6c 6c 61 74 69  poses of collati
20ae0 6f 6e 20 0a 20 20 20 20 20 20 20 73 65 71 75 65  on .       seque
20af0 6e 63 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79  nce and affinity
20b00 20 70 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20   precedence...  
20b10 20 20 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63       <p>^For eac
20b20 68 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e  h pair of column
20b30 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
20b40 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20  a USING clause, 
20b50 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  the column.     
20b60 20 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74    from the right
20b70 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 69 73  -hand dataset is
20b80 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
20b90 65 20 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74  e joined dataset
20ba0 2e 20 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20  . ^This .       
20bb0 69 73 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66  is the only diff
20bc0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61  erence between a
20bd0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e   USING clause an
20be0 64 20 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74  d its equivalent
20bf0 20 4f 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74   ON.       const
20c00 72 61 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c  raint...  <li> <
20c10 70 3e 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52  p>^(If the NATUR
20c20 41 4c 20 6b 65 79 77 6f 72 64 20 69 73 20 61 64  AL keyword is ad
20c30 64 65 64 20 74 6f 20 61 6e 79 20 6f 66 20 74 68  ded to any of th
20c40 65 20 6a 6f 69 6e 2d 6f 70 73 2c 20 74 68 65 6e  e join-ops, then
20c50 20 61 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c 69   an.       impli
20c60 63 69 74 20 55 53 49 4e 47 20 63 6c 61 75 73 65  cit USING clause
20c70 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
20c80 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74   join-constraint
20c90 73 2e 20 54 68 65 20 69 6d 70 6c 69 63 69 74 0a  s. The implicit.
20ca0 20 20 20 20 20 20 20 55 53 49 4e 47 20 63 6c 61         USING cla
20cb0 75 73 65 20 63 6f 6e 74 61 69 6e 73 20 65 61 63  use contains eac
20cc0 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  h of the column 
20cd0 6e 61 6d 65 73 20 74 68 61 74 20 61 70 70 65 61  names that appea
20ce0 72 20 69 6e 20 62 6f 74 68 0a 20 20 20 20 20 20  r in both.      
20cf0 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
20d00 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 64  ght-hand input d
20d10 61 74 61 73 65 74 73 2e 29 5e 20 5e 49 66 20 74  atasets.)^ ^If t
20d20 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
20d30 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 69 6e  t-hand.       in
20d40 70 75 74 20 64 61 74 61 73 65 74 73 20 66 65 61  put datasets fea
20d50 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63  ture no common c
20d60 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68 65  olumn names, the
20d70 6e 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65  n the NATURAL ke
20d80 79 77 6f 72 64 0a 20 20 20 20 20 20 20 68 61 73  yword.       has
20d90 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68   no effect on th
20da0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
20db0 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47 20   join. ^A USING 
20dc0 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61 79  or ON clause may
20dd0 0a 20 20 20 20 20 20 20 6e 6f 74 20 62 65 20 61  .       not be a
20de0 64 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20 74  dded to a join t
20df0 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
20e00 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72  e NATURAL keywor
20e10 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28  d...  <li> <p>^(
20e20 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 20 69  If the join-op i
20e30 73 20 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22 20  s a "LEFT JOIN" 
20e40 6f 72 20 22 4c 45 46 54 20 4f 55 54 45 52 20 4a  or "LEFT OUTER J
20e50 4f 49 4e 22 2c 20 74 68 65 6e 20 61 66 74 65 72  OIN", then after
20e60 0a 20 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f  .       the ON o
20e70 72 20 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e  r USING filterin
20e80 67 20 63 6c 61 75 73 65 73 20 68 61 76 65 20 62  g clauses have b
20e90 65 65 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20  een applied, an 
20ea0 65 78 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20  extra row is .  
20eb0 20 20 20 20 20 61 64 64 65 64 20 74 6f 20 74 68       added to th
20ec0 65 20 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63  e output for eac
20ed0 68 20 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69  h row in the ori
20ee0 67 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20  ginal left-hand 
20ef0 69 6e 70 75 74 20 0a 20 20 20 20 20 20 20 64 61  input .       da
20f00 74 61 73 65 74 20 74 68 61 74 20 63 6f 72 72 65  taset that corre
20f10 73 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77  sponds to no row
20f20 73 20 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20  s at all in the 
20f30 63 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20  composite.      
20f40 20 64 61 74 61 73 65 74 20 28 69 66 20 61 6e 79   dataset (if any
20f50 29 2e 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20  ).)^ ^The added 
20f60 72 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c  rows contain NUL
20f70 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  L values in the 
20f80 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74  columns.       t
20f90 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c  hat would normal
20fa0 6c 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65  ly contain value
20fb0 73 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  s copied from th
20fc0 65 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70  e right-hand inp
20fd0 75 74 0a 20 20 20 20 20 20 20 64 61 74 61 73 65  ut.       datase
20fe0 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  t.  .</ul>..<p>^
20ff0 28 57 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20  (When more than 
21000 74 77 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a  two tables are j
21010 6f 69 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61  oined together a
21020 73 20 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d  s part of a FROM
21030 20 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69   clause,.the joi
21040 6e 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65  n operations are
21050 20 70 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72   processed in or
21060 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  der from left to
21070 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72   right. In other
21080 20 0a 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f   .words, the FRO
21090 4d 20 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e  M clause (A join
210a0 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d  -op-1 B join-op-
210b0 32 20 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64  2 C) is computed
210c0 20 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70   as .((A join-op
210d0 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20  -1 B) join-op-2 
210e0 43 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  C).)^..<tcl>hd_f
210f0 72 61 67 6d 65 6e 74 20 63 72 6f 73 73 6a 6f 69  ragment crossjoi
21100 6e 20 7b 74 72 65 61 74 73 20 74 68 65 20 43 52  n {treats the CR
21110 4f 53 53 20 4a 4f 49 4e 20 6f 70 65 72 61 74 6f  OSS JOIN operato
21120 72 20 73 70 65 63 69 61 6c 6c 79 7d 3c 2f 74 63  r specially}</tc
21130 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f  l>.<p><b>Side no
21140 74 65 3a 20 53 70 65 63 69 61 6c 20 68 61 6e 64  te: Special hand
21150 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f  ling of CROSS JO
21160 49 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65 20 69  IN.</b>.^There i
21170 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20  s no difference 
21180 62 65 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e  between the "INN
21190 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
211a0 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70   and "," join.op
211b0 65 72 61 74 6f 72 73 2e 20 54 68 65 79 20 61 72  erators. They ar
211c0 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 74  e completely int
211d0 65 72 63 68 61 6e 67 61 62 6c 65 20 69 6e 20 53  erchangable in S
211e0 51 4c 69 74 65 2e 0a 5e 28 54 68 65 20 22 43 52  QLite..^(The "CR
211f0 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f  OSS JOIN" join o
21200 70 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65 73  perator produces
21210 20 74 68 65 20 73 61 6d 65 20 72 65 73 75 6c 74   the same result
21220 20 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20   as the ."INNER 
21230 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e  JOIN", "JOIN" an
21240 64 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29  d "," operators)
21250 5e 2c 20 62 75 74 20 69 73 20 0a 3c 61 20 68 72  ^, but is .<a hr
21260 65 66 3d 6f 70 74 6f 76 65 72 76 69 65 77 2e 68  ef=optoverview.h
21270 74 6d 6c 23 63 72 6f 73 73 6a 6f 69 6e 3e 68 61  tml#crossjoin>ha
21280 6e 64 6c 65 64 20 64 69 66 66 65 72 65 6e 74 6c  ndled differentl
21290 79 20 62 79 20 74 68 65 20 71 75 65 72 79 0a 6f  y by the query.o
212a0 70 74 69 6d 69 7a 65 72 3c 2f 61 3e 20 69 6e 20  ptimizer</a> in 
212b0 74 68 61 74 20 69 74 20 70 72 65 76 65 6e 74 73  that it prevents
212c0 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
212d0 69 7a 65 72 20 66 72 6f 6d 20 72 65 6f 72 64 65  izer from reorde
212e0 72 69 6e 67 0a 74 68 65 20 74 61 62 6c 65 73 20  ring.the tables 
212f0 69 6e 20 74 68 65 20 6a 6f 69 6e 2e 20 20 41 6e  in the join.  An
21300 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 70 72 6f   application pro
21310 67 72 61 6d 6d 65 72 20 63 61 6e 20 75 73 65 20  grammer can use 
21320 74 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20 0a  the CROSS JOIN .
21330 6f 70 65 72 61 74 6f 72 20 74 6f 20 64 69 72 65  operator to dire
21340 63 74 6c 79 20 69 6e 66 6c 75 65 6e 73 65 20 74  ctly influense t
21350 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 74 68 61  he algorithm tha
21360 74 20 69 73 20 63 68 6f 73 65 6e 20 74 6f 20 69  t is chosen to i
21370 6d 70 6c 65 6d 65 6e 74 0a 74 68 65 20 53 45 4c  mplement.the SEL
21380 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
21390 41 76 6f 69 64 20 75 73 69 6e 67 20 43 52 4f 53  Avoid using CROS
213a0 53 20 4a 4f 49 4e 20 65 78 63 65 70 74 20 69 6e  S JOIN except in
213b0 20 73 70 65 63 69 66 69 63 20 73 69 74 75 61 74   specific situat
213c0 69 6f 6e 73 20 0a 77 68 65 72 65 20 6d 61 6e 75  ions .where manu
213d0 61 6c 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68  al control of th
213e0 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
213f0 72 20 69 73 20 64 65 73 69 72 65 64 2e 20 20 41  r is desired.  A
21400 76 6f 69 64 20 75 73 69 6e 67 0a 43 52 4f 53 53  void using.CROSS
21410 20 4a 4f 49 4e 20 65 61 72 6c 79 20 69 6e 20 74   JOIN early in t
21420 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f  he development o
21430 66 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  f an application
21440 20 61 73 20 64 6f 69 6e 67 20 73 6f 20 69 73 0a   as doing so is.
21450 61 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a  a <a href="http:
21460 2f 2f 63 32 2e 63 6f 6d 2f 63 67 69 2f 77 69 6b  //c2.com/cgi/wik
21470 69 3f 50 72 65 6d 61 74 75 72 65 4f 70 74 69 6d  i?PrematureOptim
21480 69 7a 61 74 69 6f 6e 22 3e 70 72 65 6d 61 74 75  ization">prematu
21490 72 65 0a 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c  re.optimization<
214a0 2f 61 3e 2e 20 20 54 68 65 20 73 70 65 63 69 61  /a>.  The specia
214b0 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52  l handling of CR
214c0 4f 53 53 20 4a 4f 49 4e 20 69 73 20 61 6e 20 53  OSS JOIN is an S
214d0 51 4c 69 74 65 2d 73 70 65 63 69 66 69 63 0a 66  QLite-specific.f
214e0 65 61 74 75 72 65 20 61 6e 64 20 69 73 20 6e 6f  eature and is no
214f0 74 20 61 20 70 61 72 74 20 6f 66 20 73 74 61 6e  t a part of stan
21500 64 61 72 64 20 53 51 4c 2e 0a 20 20 20 20 20 20  dard SQL..      
21510 20 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d   ..<tcl>hd_fragm
21520 65 6e 74 20 77 68 65 72 65 63 6c 61 75 73 65 3c  ent whereclause<
21530 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65  /tcl>.<tcl>hd_ke
21540 79 77 6f 72 64 73 20 7b 57 48 45 52 45 20 63 6c  ywords {WHERE cl
21550 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c  ause}</tcl>.<p><
21560 62 3e 32 2e 20 57 48 45 52 45 20 63 6c 61 75 73  b>2. WHERE claus
21570 65 20 66 69 6c 74 65 72 69 6e 67 2e 3c 2f 62 3e  e filtering.</b>
21580 0a 0a 3c 70 3e 5e 28 49 66 20 61 20 57 48 45 52  ..<p>^(If a WHER
21590 45 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  E clause is spec
215a0 69 66 69 65 64 2c 20 74 68 65 20 57 48 45 52 45  ified, the WHERE
215b0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
215c0 76 61 6c 75 61 74 65 64 20 66 6f 72 20 0a 65 61  valuated for .ea
215d0 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 69 6e  ch row in the in
215e0 70 75 74 20 64 61 74 61 20 61 73 20 61 20 5b 62  put data as a [b
215f0 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
21600 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20 66 6f 72  n]. All rows for
21610 20 77 68 69 63 68 20 74 68 65 0a 57 48 45 52 45   which the.WHERE
21620 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
21630 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
21640 66 61 6c 73 65 20 61 72 65 20 65 78 63 6c 75 64  false are exclud
21650 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
21660 73 65 74 20 62 65 66 6f 72 65 0a 63 6f 6e 74 69  set before.conti
21670 6e 75 69 6e 67 2e 29 5e 0a 0a 3c 70 3e 3c 62 3e  nuing.)^..<p><b>
21680 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66  3. Generation of
21690 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
216a0 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63  lt rows.</b>.<tc
216b0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65  l>hd_fragment re
216c0 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74  sultset</tcl>.<t
216d0 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
216e0 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
216f0 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42  ssions} {GROUP B
21700 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63  Y}</tcl>..<p>Onc
21710 65 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  e the input data
21720 20 66 72 6f 6d 20 74 68 65 20 46 52 4f 4d 20 63   from the FROM c
21730 6c 61 75 73 65 20 68 61 73 20 62 65 65 6e 20 66  lause has been f
21740 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 0a 57  iltered by the.W
21750 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72  HERE clause expr
21760 65 73 73 69 6f 6e 20 28 69 66 20 61 6e 79 29 2c  ession (if any),
21770 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
21780 6c 74 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20  lt rows for the 
21790 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 61  simple .SELECT a
217a0 72 65 20 63 61 6c 63 75 6c 61 74 65 64 2e 20 45  re calculated. E
217b0 78 61 63 74 6c 79 20 68 6f 77 20 74 68 69 73 20  xactly how this 
217c0 69 73 20 64 6f 6e 65 20 64 65 70 65 6e 64 73 20  is done depends 
217d0 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 73  on whether the s
217e0 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 69 73  imple .SELECT is
217f0 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 6f 72   an aggregate or
21800 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
21810 75 65 72 79 2c 20 61 6e 64 20 77 68 65 74 68 65  uery, and whethe
21820 72 20 6f 72 20 6e 6f 74 20 61 20 47 52 4f 55 50  r or not a GROUP
21830 0a 42 59 20 63 6c 61 75 73 65 20 77 61 73 20 73  .BY clause was s
21840 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 20 54  pecified...<p> T
21850 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65  he list of expre
21860 73 73 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 74  ssions between t
21870 68 65 20 53 45 4c 45 43 54 20 61 6e 64 20 46 52  he SELECT and FR
21880 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69 73 20 6b  OM keywords is k
21890 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72 65 73 75  nown as.the resu
218a0 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
218b0 73 74 2e 20 20 5e 49 66 20 61 20 72 65 73 75 6c  st.  ^If a resul
218c0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
218d0 74 68 65 20 73 70 65 63 69 61 6c 20 65 78 70 72  the special expr
218e0 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68 65 6e 20  ession."*" then 
218f0 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  all columns in t
21900 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 72  he input data ar
21910 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f  e substituted fo
21920 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65  r that one expre
21930 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74 68 65 20  ssion..^(If the 
21940 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
21950 65 20 61 6c 69 61 73 20 6f 66 20 61 20 74 61 62  e alias of a tab
21960 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
21970 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
21980 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22 2e  e.followed by ".
21990 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75  *" then all colu
219a0 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d  mns from the nam
219b0 65 64 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ed table or subq
219c0 75 65 72 79 20 61 72 65 0a 73 75 62 73 74 69 74  uery are.substit
219d0 75 74 65 64 20 66 6f 72 20 74 68 65 20 73 69 6e  uted for the sin
219e0 67 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 29  gle expression.)
219f0 5e 20 5e 28 49 74 20 69 73 20 61 6e 20 65 72 72  ^ ^(It is an err
21a00 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20  or to use a "*" 
21a10 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20 65 78 70  or."alias.*" exp
21a20 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e 79 20 63  ression in any c
21a30 6f 6e 74 65 78 74 20 6f 74 68 65 72 20 74 68 61  ontext other tha
21a40 6e 20 74 68 61 6e 20 61 20 72 65 73 75 6c 74 20  n than a result 
21a50 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e  expression list.
21a60 29 5e 0a 5e 28 49 74 20 69 73 20 61 6c 73 6f 20  )^.^(It is also 
21a70 61 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20  an error to use 
21a80 61 20 22 2a 22 20 6f 72 20 22 61 6c 69 61 73 2e  a "*" or "alias.
21a90 2a 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  *" expression in
21aa0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
21ab0 0a 71 75 65 72 79 20 74 68 61 74 20 64 6f 65 73  .query that does
21ac0 20 6e 6f 74 20 68 61 76 65 20 61 20 46 52 4f 4d   not have a FROM
21ad0 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 70 3e 20   clause.)^..<p> 
21ae0 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  ^(The number of 
21af0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
21b00 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ows returned by 
21b10 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
21b20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 65 71 75  statement.is equ
21b30 61 6c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  al to the number
21b40 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
21b50 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
21b60 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 61 66  pression list af
21b70 74 65 72 0a 73 75 62 73 74 69 74 75 74 69 6f 6e  ter.substitution
21b80 20 6f 66 20 2a 20 61 6e 64 20 61 6c 69 61 73 2e   of * and alias.
21b90 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 29 5e  * expressions.)^
21ba0 20 45 61 63 68 20 72 65 73 75 6c 74 20 72 6f 77   Each result row
21bb0 20 69 73 20 63 61 6c 63 75 6c 61 74 65 64 20 62   is calculated b
21bc0 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y.evaluating the
21bd0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
21be0 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65  the result expre
21bf0 73 73 69 6f 6e 20 6c 69 73 74 20 77 69 74 68 20  ssion list with 
21c00 72 65 73 70 65 63 74 20 74 6f 20 61 0a 73 69 6e  respect to a.sin
21c10 67 6c 65 20 72 6f 77 20 6f 66 20 69 6e 70 75 74  gle row of input
21c20 20 64 61 74 61 20 6f 72 2c 20 66 6f 72 20 61 67   data or, for ag
21c30 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2c  gregate queries,
21c40 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f   with respect to
21c50 20 61 20 67 72 6f 75 70 0a 6f 66 20 72 6f 77 73   a group.of rows
21c60 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  ...<ul>.  <li><p
21c70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20  >^If the SELECT 
21c80 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e  statement is <b>
21c90 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
21ca0 71 75 65 72 79 3c 2f 62 3e 2c 20 74 68 65 6e 20  query</b>, then 
21cb0 0a 20 20 20 20 65 61 63 68 20 65 78 70 72 65 73  .    each expres
21cc0 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
21cd0 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
21ce0 73 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  st is evaluated 
21cf0 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 0a  for each row in.
21d00 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74 20      the dataset 
21d10 66 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 20  filtered by the 
21d20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 0a 0a 20  WHERE clause... 
21d30 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
21d40 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
21d50 20 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67   is <b>an aggreg
21d60 61 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75  ate query withou
21d70 74 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59  t a GROUP.    BY
21d80 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68 65  </b> clause, the
21d90 6e 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  n each aggregate
21da0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
21db0 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73  he result-set is
21dc0 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20   .    evaluated 
21dd0 6f 6e 63 65 20 61 63 72 6f 73 73 20 74 68 65 20  once across the 
21de0 65 6e 74 69 72 65 20 64 61 74 61 73 65 74 2e 20  entire dataset. 
21df0 5e 45 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67  ^Each non-aggreg
21e00 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 20  ate expression. 
21e10 20 20 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74     in the result
21e20 2d 73 65 74 20 69 73 20 65 76 61 6c 75 61 74 65  -set is evaluate
21e30 64 20 6f 6e 63 65 20 66 6f 72 20 61 6e 20 61 72  d once for an ar
21e40 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
21e50 65 64 20 72 6f 77 20 6f 66 0a 20 20 20 20 74 68  ed row of.    th
21e60 65 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 20  e dataset. ^The 
21e70 73 61 6d 65 20 61 72 62 69 74 72 61 72 69 6c 79  same arbitrarily
21e80 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 69 73   selected row is
21e90 20 75 73 65 64 20 66 6f 72 20 65 61 63 68 0a 20   used for each. 
21ea0 20 20 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65     non-aggregate
21eb0 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 4f 72   expression. ^Or
21ec0 2c 20 69 66 20 74 68 65 20 64 61 74 61 73 65 74  , if the dataset
21ed0 20 63 6f 6e 74 61 69 6e 73 20 7a 65 72 6f 20 72   contains zero r
21ee0 6f 77 73 2c 20 74 68 65 6e 20 0a 20 20 20 20 65  ows, then .    e
21ef0 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74  ach non-aggregat
21f00 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
21f10 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73  evaluated agains
21f20 74 20 61 20 72 6f 77 20 63 6f 6e 73 69 73 74 69  t a row consisti
21f30 6e 67 0a 20 20 20 20 65 6e 74 69 72 65 6c 79 20  ng.    entirely 
21f40 6f 66 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a  of NULL values..
21f50 0a 20 20 20 3c 70 3e 5e 54 68 65 20 73 69 6e 67  .   <p>^The sing
21f60 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
21f70 2d 73 65 74 20 64 61 74 61 20 63 72 65 61 74 65  -set data create
21f80 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  d by evaluating 
21f90 74 68 65 20 61 67 67 72 65 67 61 74 65 0a 20 20  the aggregate.  
21fa0 20 20 61 6e 64 20 6e 6f 6e 2d 61 67 67 72 65 67    and non-aggreg
21fb0 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ate expressions 
21fc0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
21fd0 74 20 66 6f 72 6d 73 20 74 68 65 20 72 65 73 75  t forms the resu
21fe0 6c 74 20 6f 66 20 61 6e 0a 20 20 20 20 61 67 67  lt of an.    agg
21ff0 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
22000 68 6f 75 74 20 61 20 47 52 4f 55 50 20 42 59 20  hout a GROUP BY 
22010 63 6c 61 75 73 65 2e 20 5e 41 6e 20 61 67 67 72  clause. ^An aggr
22020 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68  egate query with
22030 6f 75 74 20 61 0a 20 20 20 20 47 52 4f 55 50 20  out a.    GROUP 
22040 42 59 20 63 6c 61 75 73 65 20 61 6c 77 61 79 73  BY clause always
22050 20 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c 79   returns exactly
22060 20 6f 6e 65 20 72 6f 77 20 6f 66 20 64 61 74 61   one row of data
22070 2c 20 65 76 65 6e 20 69 66 20 74 68 65 72 65 20  , even if there 
22080 61 72 65 0a 20 20 20 20 7a 65 72 6f 20 72 6f 77  are.    zero row
22090 73 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 2e  s of input data.
220a0 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28 49 66 20  ..  <li><p>^(If 
220b0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
220c0 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67  ment is <b>an ag
220d0 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69  gregate query wi
220e0 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42  th a GROUP.    B
220f0 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68  Y</b> clause, th
22100 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 65  en each of the e
22110 78 70 72 65 73 73 69 6f 6e 73 20 73 70 65 63 69  xpressions speci
22120 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
22130 74 68 65 0a 20 20 20 20 47 52 4f 55 50 20 42 59  the.    GROUP BY
22140 20 63 6c 61 75 73 65 20 69 73 20 65 76 61 6c 75   clause is evalu
22150 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
22160 77 20 6f 66 20 74 68 65 20 64 61 74 61 73 65 74  w of the dataset
22170 2e 20 45 61 63 68 20 72 6f 77 0a 20 20 20 20 69  . Each row.    i
22180 73 20 74 68 65 6e 20 61 73 73 69 67 6e 65 64 20  s then assigned 
22190 74 6f 20 61 20 22 67 72 6f 75 70 22 20 62 61 73  to a "group" bas
221a0 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ed on the result
221b0 73 3b 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  s; rows for whic
221c0 68 0a 20 20 20 20 74 68 65 20 72 65 73 75 6c 74  h.    the result
221d0 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  s of evaluating 
221e0 74 68 65 20 47 52 4f 55 50 20 42 59 20 65 78 70  the GROUP BY exp
221f0 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74 68 65  ressions are the
22200 20 73 61 6d 65 20 61 72 65 0a 20 20 20 20 61 73   same are.    as
22210 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 73 61  signed to the sa
22220 6d 65 20 67 72 6f 75 70 2e 29 5e 20 5e 46 6f 72  me group.)^ ^For
22230 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
22240 20 67 72 6f 75 70 69 6e 67 20 72 6f 77 73 2c 20   grouping rows, 
22250 4e 55 4c 4c 20 0a 20 20 20 20 76 61 6c 75 65 73  NULL .    values
22260 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
22270 65 71 75 61 6c 2e 20 5e 54 68 65 20 75 73 75 61  equal. ^The usua
22280 6c 20 72 75 6c 65 73 20 66 6f 72 20 5b 63 6f 6c  l rules for [col
22290 6c 61 74 69 6f 6e 7c 73 65 6c 65 63 74 69 6e 67  lation|selecting
222a0 20 61 0a 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e   a.    collation
222b0 20 73 65 71 75 65 6e 63 65 5d 20 77 69 74 68 20   sequence] with 
222c0 77 68 69 63 68 20 74 6f 20 63 6f 6d 70 61 72 65  which to compare
222d0 20 74 65 78 74 20 76 61 6c 75 65 73 20 61 70 70   text values app
222e0 6c 79 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69  ly when evaluati
222f0 6e 67 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  ng.    expressio
22300 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59  ns in a GROUP BY
22310 20 63 6c 61 75 73 65 2e 20 20 5e 54 68 65 20 65   clause.  ^The e
22320 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
22330 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
22340 65 0a 20 20 20 20 64 6f 20 3c 65 6d 3e 6e 6f 74  e.    do <em>not
22350 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65  </em> have to be
22360 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
22370 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
22380 72 65 73 75 6c 74 2e 20 5e 54 68 65 0a 20 20 20  result. ^The.   
22390 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
223a0 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
223b0 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 67 67  e may not be agg
223c0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
223d0 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e 28 49 66  ns...    <p>^(If
223e0 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65   a HAVING clause
223f0 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 69   is specified, i
22400 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  t is evaluated o
22410 6e 63 65 20 66 6f 72 20 65 61 63 68 20 67 72 6f  nce for each gro
22420 75 70 20 0a 20 20 20 20 6f 66 20 72 6f 77 73 20  up .    of rows 
22430 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
22440 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68  pression]. If th
22450 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c  e result of eval
22460 75 61 74 69 6e 67 20 74 68 65 0a 20 20 20 20 48  uating the.    H
22470 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  AVING clause is 
22480 66 61 6c 73 65 2c 20 74 68 65 20 67 72 6f 75 70  false, the group
22490 20 69 73 20 64 69 73 63 61 72 64 65 64 2e 29 5e   is discarded.)^
224a0 20 5e 49 66 20 74 68 65 20 48 41 56 49 4e 47 20   ^If the HAVING 
224b0 63 6c 61 75 73 65 20 69 73 0a 20 20 20 20 61 6e  clause is.    an
224c0 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
224d0 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
224e0 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20 61 6c  luated across al
224f0 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72  l rows in the gr
22500 6f 75 70 2e 20 5e 49 66 0a 20 20 20 20 61 20 48  oup. ^If.    a H
22510 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  AVING clause is 
22520 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
22530 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69  expression, it i
22540 73 20 65 76 61 6c 75 61 74 65 64 20 77 69 74 68  s evaluated with
22550 20 72 65 73 70 65 63 74 0a 20 20 20 20 74 6f 20   respect.    to 
22560 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73  an arbitrarily s
22570 65 6c 65 63 74 65 64 20 72 6f 77 20 66 72 6f 6d  elected row from
22580 20 74 68 65 20 67 72 6f 75 70 2e 20 20 5e 54 68   the group.  ^Th
22590 65 20 48 41 56 49 4e 47 20 65 78 70 72 65 73 73  e HAVING express
225a0 69 6f 6e 20 6d 61 79 0a 20 20 20 20 72 65 66 65  ion may.    refe
225b0 72 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65  r to values, eve
225c0 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
225d0 74 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65 20  tions, that are 
225e0 6e 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75 6c  not in the resul
225f0 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c 70 3e 5e  t.</p>..    <p>^
22600 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
22610 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
22620 74 20 69 73 20 74 68 65 6e 20 65 76 61 6c 75 61  t is then evalua
22630 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63  ted once for eac
22640 68 0a 20 20 20 20 67 72 6f 75 70 20 6f 66 20 72  h.    group of r
22650 6f 77 73 2e 20 5e 49 66 20 74 68 65 20 65 78 70  ows. ^If the exp
22660 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 67  ression is an ag
22670 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
22680 6f 6e 2c 20 69 74 20 69 73 20 0a 20 20 20 20 65  on, it is .    e
22690 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20  valuated across 
226a0 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20  all rows in the 
226b0 67 72 6f 75 70 2e 20 5e 4f 74 68 65 72 77 69 73  group. ^Otherwis
226c0 65 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  e, it is evaluat
226d0 65 64 20 61 67 61 69 6e 73 74 0a 20 20 20 20 61  ed against.    a
226e0 20 73 69 6e 67 6c 65 20 61 72 62 69 74 72 61 72   single arbitrar
226f0 69 6c 79 20 63 68 6f 73 65 6e 20 72 6f 77 20 66  ily chosen row f
22700 72 6f 6d 20 77 69 74 68 69 6e 20 74 68 65 20 67  rom within the g
22710 72 6f 75 70 2e 20 5e 49 66 20 74 68 65 72 65 20  roup. ^If there 
22720 69 73 20 6d 6f 72 65 0a 20 20 20 20 74 68 61 6e  is more.    than
22730 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72 65 67 61   one non-aggrega
22740 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  te expression in
22750 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2c   the result-set,
22760 20 74 68 65 6e 20 61 6c 6c 20 73 75 63 68 0a 20   then all such. 
22770 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61     expressions a
22780 72 65 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  re evaluated for
22790 20 74 68 65 20 73 61 6d 65 20 72 6f 77 2e 0a 0a   the same row...
227a0 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 67 72 6f      <p>^Each gro
227b0 75 70 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  up of input data
227c0 73 65 74 20 72 6f 77 73 20 63 6f 6e 74 72 69 62  set rows contrib
227d0 75 74 65 73 20 61 20 73 69 6e 67 6c 65 20 72 6f  utes a single ro
227e0 77 20 74 6f 20 74 68 65 20 0a 20 20 20 20 73 65  w to the .    se
227f0 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
22800 2e 20 5e 53 75 62 6a 65 63 74 20 74 6f 20 66 69  . ^Subject to fi
22810 6c 74 65 72 69 6e 67 20 61 73 73 6f 63 69 61 74  ltering associat
22820 65 64 20 77 69 74 68 20 74 68 65 20 44 49 53 54  ed with the DIST
22830 49 4e 43 54 0a 20 20 20 20 6b 65 79 77 6f 72 64  INCT.    keyword
22840 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  , the number of 
22850 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79  rows returned by
22860 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75   an aggregate qu
22870 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50  ery with a GROUP
22880 0a 20 20 20 20 42 59 20 63 6c 61 75 73 65 20 69  .    BY clause i
22890 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
228a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 67 72 6f 75  e number of grou
228b0 70 73 20 6f 66 20 72 6f 77 73 20 70 72 6f 64 75  ps of rows produ
228c0 63 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67 0a  ced by applying.
228d0 20 20 20 20 74 68 65 20 47 52 4f 55 50 20 42 59      the GROUP BY
228e0 20 61 6e 64 20 48 41 56 49 4e 47 20 63 6c 61 75   and HAVING clau
228f0 73 65 73 20 74 6f 20 74 68 65 20 66 69 6c 74 65  ses to the filte
22900 72 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65  red input datase
22910 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 3c 62 3e  t..</ul>..<p><b>
22920 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66 20 64 75  4. Removal of du
22930 70 6c 69 63 61 74 65 20 72 6f 77 73 20 28 44 49  plicate rows (DI
22940 53 54 49 4e 43 54 20 70 72 6f 63 65 73 73 69 6e  STINCT processin
22950 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f  g).</b>.<tcl>hd_
22960 66 72 61 67 6d 65 6e 74 20 64 69 73 74 69 6e 63  fragment distinc
22970 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  t</tcl>.<tcl>hd_
22980 6b 65 79 77 6f 72 64 73 20 7b 44 49 53 54 49 4e  keywords {DISTIN
22990 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f  CT}</tcl>..<p>^O
229a0 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c 20 6f 72  ne of the ALL or
229b0 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
229c0 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 74 68  ds may follow th
229d0 65 20 53 45 4c 45 43 54 20 6b 65 79 77 6f 72 64  e SELECT keyword
229e0 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45   in a .simple SE
229f0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
22a00 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53  ^If the simple S
22a10 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45 43  ELECT is a SELEC
22a20 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a  T ALL, then the.
22a30 65 6e 74 69 72 65 20 73 65 74 20 6f 66 20 72 65  entire set of re
22a40 73 75 6c 74 20 72 6f 77 73 20 61 72 65 20 72 65  sult rows are re
22a50 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
22a60 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69 74 68 65  LECT. ^If neithe
22a70 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54 49 4e 43  r ALL or.DISTINC
22a80 54 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20 74  T are present, t
22a90 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
22aa0 20 69 73 20 61 73 20 69 66 20 41 4c 4c 20 77 65   is as if ALL we
22ab0 72 65 20 73 70 65 63 69 66 69 65 64 2e 20 0a 5e  re specified. .^
22ac0 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45  If the simple SE
22ad0 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45 43 54  LECT is a SELECT
22ae0 20 44 49 53 54 49 4e 43 54 2c 20 74 68 65 6e 20   DISTINCT, then 
22af0 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61  duplicate rows a
22b00 72 65 20 72 65 6d 6f 76 65 64 0a 66 72 6f 6d 20  re removed.from 
22b10 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  the set of resul
22b20 74 20 72 6f 77 73 20 62 65 66 6f 72 65 20 69 74  t rows before it
22b30 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 46   is returned. ^F
22b40 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
22b50 6f 66 0a 64 65 74 65 63 74 69 6e 67 20 64 75 70  of.detecting dup
22b60 6c 69 63 61 74 65 20 72 6f 77 73 2c 20 74 77 6f  licate rows, two
22b70 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
22b80 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
22b90 65 20 65 71 75 61 6c 2e 20 5e 54 68 65 0a 6e 6f  e equal. ^The.no
22ba0 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 73  rmal rules for s
22bb0 65 6c 65 63 74 69 6e 67 20 61 20 63 6f 6c 6c 61  electing a colla
22bc0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 6f  tion sequence to
22bd0 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61   compare text va
22be0 6c 75 65 73 20 77 69 74 68 0a 61 70 70 6c 79 2e  lues with.apply.
22bf0 0a 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20 53  ..<h3>Compound S
22c00 65 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74 73  elect Statements
22c10 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
22c20 74 20 63 6f 6d 70 6f 75 6e 64 3c 2f 74 63 6c 3e  t compound</tcl>
22c30 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64  .<tcl>hd_keyword
22c40 73 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  s {compound sele
22c50 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 71 75  ct} {compound qu
22c60 65 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 2f 68 33 3e  ery}</tcl>.</h3>
22c70 0a 0a 3c 70 3e 54 77 6f 20 6f 72 20 6d 6f 72 65  ..<p>Two or more
22c80 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
22c90 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 20 62 65  tatements may be
22ca0 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f 67 65 74   connected toget
22cb0 68 65 72 20 74 6f 20 66 6f 72 6d 0a 61 20 63 6f  her to form.a co
22cc0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 75 73  mpound SELECT us
22cd0 69 6e 67 20 74 68 65 20 55 4e 49 4f 4e 2c 20 55  ing the UNION, U
22ce0 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52 53  NION ALL, INTERS
22cf0 45 43 54 20 6f 72 20 45 58 43 45 50 54 20 6f 70  ECT or EXCEPT op
22d00 65 72 61 74 6f 72 2e 0a 5e 49 6e 20 61 20 63 6f  erator..^In a co
22d10 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 61  mpound SELECT, a
22d20 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74 75 65  ll the constitue
22d30 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73 74 20  nt SELECTs must 
22d40 72 65 74 75 72 6e 20 74 68 65 20 73 61 6d 65 20  return the same 
22d50 0a 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c  .number of resul
22d60 74 20 63 6f 6c 75 6d 6e 73 2e 20 5e 41 73 20 74  t columns. ^As t
22d70 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66  he components of
22d80 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a compound SELE
22d90 43 54 20 6d 75 73 74 0a 62 65 20 73 69 6d 70 6c  CT must.be simpl
22da0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
22db0 6e 74 73 2c 20 74 68 65 79 20 6d 61 79 20 6e 6f  nts, they may no
22dc0 74 20 63 6f 6e 74 61 69 6e 20 4f 52 44 45 52 20  t contain ORDER 
22dd0 42 59 20 6f 72 20 4c 49 4d 49 54 20 63 6c 61 75  BY or LIMIT clau
22de0 73 65 73 2e 0a 5e 4f 52 44 45 52 20 42 59 20 61  ses..^ORDER BY a
22df0 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
22e00 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72 20   may only occur 
22e10 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
22e20 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e  e entire compoun
22e30 64 0a 53 45 4c 45 43 54 2e 20 20 0a 0a 3c 70 3e  d.SELECT.  ..<p>
22e40 5e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  ^A compound SELE
22e50 43 54 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  CT created using
22e60 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61   UNION ALL opera
22e70 74 6f 72 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  tor returns all 
22e80 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68  the rows.from th
22e90 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  e SELECT to the 
22ea0 6c 65 66 74 20 6f 66 20 74 68 65 20 55 4e 49 4f  left of the UNIO
22eb0 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20  N ALL operator, 
22ec0 61 6e 64 20 61 6c 6c 20 74 68 65 20 72 6f 77 73  and all the rows
22ed0 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54  .from the SELECT
22ee0 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66   to the right of
22ef0 20 69 74 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20   it. ^The UNION 
22f00 6f 70 65 72 61 74 6f 72 20 77 6f 72 6b 73 20 74  operator works t
22f10 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a 55  he same way as.U
22f20 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74  NION ALL, except
22f30 20 74 68 61 74 20 64 75 70 6c 69 63 61 74 65 20   that duplicate 
22f40 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
22f50 20 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20   from the final 
22f60 72 65 73 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65  result set..^The
22f70 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61   INTERSECT opera
22f80 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65 20  tor returns the 
22f90 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20  intersection of 
22fa0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
22fb0 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68  he left and.righ
22fc0 74 20 53 45 4c 45 43 54 73 2e 20 20 5e 54 68 65  t SELECTs.  ^The
22fd0 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
22fe0 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 75 62   returns the sub
22ff0 73 65 74 20 6f 66 20 72 6f 77 73 20 72 65 74 75  set of rows retu
23000 72 6e 65 64 20 62 79 20 74 68 65 0a 6c 65 66 74  rned by the.left
23010 20 53 45 4c 45 43 54 20 74 68 61 74 20 61 72 65   SELECT that are
23020 20 6e 6f 74 20 61 6c 73 6f 20 72 65 74 75 72 6e   not also return
23030 65 64 20 62 79 20 74 68 65 20 72 69 67 68 74 2d  ed by the right-
23040 68 61 6e 64 20 53 45 4c 45 43 54 2e 20 5e 44 75  hand SELECT. ^Du
23050 70 6c 69 63 61 74 65 0a 72 6f 77 73 20 61 72 65  plicate.rows are
23060 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
23070 65 20 72 65 73 75 6c 74 73 20 6f 66 20 49 4e 54  e results of INT
23080 45 52 53 45 43 54 20 61 6e 64 20 45 58 43 45 50  ERSECT and EXCEP
23090 54 20 6f 70 65 72 61 74 6f 72 73 20 62 65 66 6f  T operators befo
230a0 72 65 20 74 68 65 0a 72 65 73 75 6c 74 20 73 65  re the.result se
230b0 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a  t is returned...
230c0 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70  <p>^For the purp
230d0 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e  oses of determin
230e0 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ing duplicate ro
230f0 77 73 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ws for the resul
23100 74 73 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53  ts of compound.S
23110 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 73 2c  ELECT operators,
23120 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
23130 20 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61   considered equa
23140 6c 20 74 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20  l to other NULL 
23150 76 61 6c 75 65 73 20 61 6e 64 0a 64 69 73 74 69  values and.disti
23160 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e  nct from all non
23170 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54  -NULL values. ^T
23180 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
23190 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f  uence used to co
231a0 6d 70 61 72 65 20 0a 74 77 6f 20 74 65 78 74 20  mpare .two text 
231b0 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d  values is determ
231c0 69 6e 65 64 20 61 73 20 69 66 20 74 68 65 20 63  ined as if the c
231d0 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
231e0 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
231f0 64 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  d.SELECT stateme
23200 6e 74 73 20 77 65 72 65 20 74 68 65 20 6c 65 66  nts were the lef
23210 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64  t and right-hand
23220 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65   operands of the
23230 20 65 71 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72   equals (=).oper
23240 61 74 6f 72 2c 20 65 78 63 65 70 74 20 74 68 61  ator, except tha
23250 74 20 67 72 65 61 74 65 72 20 70 72 65 63 65 64  t greater preced
23260 65 6e 63 65 20 69 73 20 6e 6f 74 20 61 73 73 69  ence is not assi
23270 67 6e 65 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74  gned to a collat
23280 69 6f 6e 20 0a 73 65 71 75 65 6e 63 65 20 73 70  ion .sequence sp
23290 65 63 69 66 69 65 64 20 77 69 74 68 20 74 68 65  ecified with the
232a0 20 70 6f 73 74 66 69 78 20 43 4f 4c 4c 41 54 45   postfix COLLATE
232b0 20 6f 70 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61   operator. ^No a
232c0 66 66 69 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72  ffinity.transfor
232d0 6d 61 74 69 6f 6e 73 20 61 72 65 20 61 70 70 6c  mations are appl
232e0 69 65 64 20 74 6f 20 61 6e 79 20 76 61 6c 75 65  ied to any value
232f0 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
23300 20 72 6f 77 73 20 61 73 20 70 61 72 74 20 6f 66   rows as part of
23310 20 61 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a.compound SELE
23320 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20  CT. ..<p>^(When 
23330 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 73 69  three or more si
23340 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 61 72 65  mple SELECTs are
23350 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20   connected into 
23360 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
23370 54 2c 0a 74 68 65 79 20 67 72 6f 75 70 20 66 72  T,.they group fr
23380 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
23390 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  . In other words
233a0 2c 20 69 66 20 22 41 22 2c 20 22 42 22 20 61 6e  , if "A", "B" an
233b0 64 20 22 43 22 20 61 72 65 20 61 6c 6c 0a 73 69  d "C" are all.si
233c0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
233d0 65 6d 65 6e 74 73 2c 20 28 41 20 6f 70 20 42 20  ements, (A op B 
233e0 6f 70 20 43 29 20 69 73 20 70 72 6f 63 65 73 73  op C) is process
233f0 65 64 20 61 73 20 28 28 41 20 6f 70 20 42 29 20  ed as ((A op B) 
23400 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a  op C).)^..</p>..
23410 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
23420 20 6f 72 64 65 72 62 79 20 7b 6f 72 64 65 72 20   orderby {order 
23430 62 79 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 52  by}</tcl>.<h3>OR
23440 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
23450 2f 4f 46 46 53 45 54 20 43 6c 61 75 73 65 73 3c  /OFFSET Clauses<
23460 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 53 45  /h3>..<p>If a SE
23470 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74  LECT statement t
23480 68 61 74 20 72 65 74 75 72 6e 73 20 6d 6f 72 65  hat returns more
23490 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 64 6f   than one row do
234a0 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e 0a 4f  es not have an.O
234b0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
234c0 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  the order in whi
234d0 63 68 20 74 68 65 20 72 6f 77 73 20 61 72 65 20  ch the rows are 
234e0 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65  returned is unde
234f0 66 69 6e 65 64 2e 0a 4f 72 2c 20 69 66 20 61 20  fined..Or, if a 
23500 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
23510 20 64 6f 65 73 20 68 61 76 65 20 61 6e 20 4f 52   does have an OR
23520 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
23530 68 65 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a  hen the list of.
23540 65 78 70 72 65 73 73 69 6f 6e 73 20 61 74 74 61  expressions atta
23550 63 68 65 64 20 74 6f 20 74 68 65 20 4f 52 44 45  ched to the ORDE
23560 52 20 42 59 20 64 65 74 65 72 6d 69 6e 65 20 74  R BY determine t
23570 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
23580 68 20 72 6f 77 73 0a 61 72 65 20 72 65 74 75 72  h rows.are retur
23590 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
235a0 20 5e 52 6f 77 73 20 61 72 65 20 66 69 72 73 74   ^Rows are first
235b0 20 73 6f 72 74 65 64 20 62 61 73 65 64 20 6f 6e   sorted based on
235c0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
235d0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 6c  evaluating the l
235e0 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73  eft-most express
235f0 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44 45 52  ion in the ORDER
23600 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e 20 74   BY list, then t
23610 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e 0a 62  ies are broken.b
23620 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
23630 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73   second left-mos
23640 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  t expression and
23650 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72 64 65   so on. The orde
23660 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f 20 72  r in which.two r
23670 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 61 6c  ows for which al
23680 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  l ORDER BY expre
23690 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20  ssions evaluate 
236a0 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65 73 20  to equal values 
236b0 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69 73 20  are.returned is 
236c0 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61 63 68  undefined. ^Each
236d0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
236e0 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74 69  sion may be opti
236f0 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a  onally followed.
23700 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65  by one of the ke
23710 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d 61 6c  ywords ASC (smal
23720 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65 20 72  ler values are r
23730 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 20 6f  eturned first) o
23740 72 20 44 45 53 43 20 28 6c 61 72 67 65 72 0a 76  r DESC (larger.v
23750 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72 6e  alues are return
23760 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66 20 6e  ed first). ^If n
23770 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
23780 53 43 20 61 72 65 20 73 70 65 63 69 66 69 65 64  SC are specified
23790 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72 74 65  , rows.are sorte
237a0 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 28  d in ascending (
237b0 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 66  smaller values f
237c0 69 72 73 74 29 20 6f 72 64 65 72 20 62 79 20 64  irst) order by d
237d0 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68  efault...<p>Each
237e0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
237f0 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73 73 65  sion is processe
23800 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  d as follows:</p
23810 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e  >..<ol>.<li><p>^
23820 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  If the ORDER BY 
23830 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
23840 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67 65 72  constant integer
23850 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78 70 72   K then the.expr
23860 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64  ession is consid
23870 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20 66 6f  ered an alias fo
23880 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75 6d  r the K-th colum
23890 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  n of the result 
238a0 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61 72 65  set.(columns are
238b0 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c   numbered from l
238c0 65 66 74 20 74 6f 20 72 69 67 68 74 20 73 74 61  eft to right sta
238d0 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e 0a 0a  rting with 1)...
238e0 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f  <li><p>^If the O
238f0 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
23900 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  on is an identif
23910 69 65 72 20 74 68 61 74 20 63 6f 72 72 65 73 70  ier that corresp
23920 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c 69 61  onds to.the alia
23930 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68 65 20  s of one of the 
23940 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 2c 20  output columns, 
23950 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  then the express
23960 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ion is considere
23970 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  d.an alias for t
23980 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69  hat column...<li
23990 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
239a0 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
239b0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
239c0 79 20 6f 74 68 65 72 20 65 78 70 72 65 73 73 69  y other expressi
239d0 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61 6c 75  on, it .is evalu
239e0 61 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 74  ated and the ret
239f0 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73 65 64  urned value used
23a00 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20 6f 75   to order the ou
23a10 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66 0a 74  tput rows. ^If.t
23a20 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
23a30 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c 65 20  ent is a simple 
23a40 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61 6e 20  SELECT, then an 
23a50 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63 6f 6e  ORDER BY may con
23a60 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74 72 61  tain any.arbitra
23a70 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  ry expressions. 
23a80 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65  ^However, if the
23a90 20 53 45 4c 45 43 54 20 69 73 20 61 20 63 6f 6d   SELECT is a com
23aa0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 74 68  pound SELECT, th
23ab0 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78 70 72  en.ORDER BY expr
23ac0 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65  essions that are
23ad0 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74 6f 20   not aliases to 
23ae0 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20 6d  output columns m
23af0 75 73 74 20 62 65 20 65 78 61 63 74 6c 79 0a 74  ust be exactly.t
23b00 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20 65 78  he same as an ex
23b10 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20 61 73  pression used as
23b20 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d   an output colum
23b30 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f  n..</ol>..<p>^Fo
23b40 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
23b50 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73 2c 20  f sorting rows, 
23b60 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
23b70 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  red in the same 
23b80 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f 6d 70  way.as for [comp
23b90 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73 69 6f  arison expressio
23ba0 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61 74 69  ns]. The collati
23bb0 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64  on sequence used
23bc0 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77 6f 20   to compare.two 
23bd0 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64  text values is d
23be0 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66 6f 6c  etermined as fol
23bf0 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c  lows:..<ol>.  <l
23c00 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44  i><p>^If the ORD
23c10 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
23c20 20 69 73 20 61 73 73 69 67 6e 65 64 20 61 20 63   is assigned a c
23c30 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
23c40 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 70 6f  e using.  the po
23c50 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45 20 6f  stfix [COLLATE o
23c60 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74  perator], then t
23c70 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  he specified col
23c80 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
23c90 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c 6c 69  is.  used..  <li
23ca0 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
23cb0 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
23cc0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
23cd0 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65 78 70   alias to an exp
23ce0 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74 20 68  ression.  that h
23cf0 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e 65 64  as been assigned
23d00 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
23d10 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68 65 20  uence using the 
23d20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f 4c 4c  postfix .  [COLL
23d30 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74  ATE operator], t
23d40 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  hen the collatio
23d50 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73 69 67  n sequence assig
23d60 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69 61 73  ned to the alias
23d70 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20  ed.  expression 
23d80 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c  is used..  <li><
23d90 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  p>^Otherwise, if
23da0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
23db0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f  pression is a co
23dc0 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69 61 73  lumn or an alias
23dd0 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65 73 73   of.  an express
23de0 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20 63 6f  ion that is a co
23df0 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20 64  lumn, then the d
23e00 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
23e10 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a 20 20   sequence for.  
23e20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  the column is us
23e30 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f  ed. .  <li><p>^O
23e40 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 5b 42  therwise, the [B
23e50 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e  INARY] collation
23e60 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65   sequence is use
23e70 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20  d..</ol>..<p>In 
23e80 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
23e90 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c 6c  T statement, all
23ea0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
23eb0 73 69 6f 6e 73 20 61 72 65 20 68 61 6e 64 6c 65  sions are handle
23ec0 64 0a 61 73 20 61 6c 69 61 73 65 73 20 66 6f 72  d.as aliases for
23ed0 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75   one of the resu
23ee0 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  lt columns of th
23ef0 65 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  e compound SELEC
23f00 54 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52  T..^(If an ORDER
23f10 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
23f20 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
23f30 20 61 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c   alias, then SQL
23f40 69 74 65 20 73 65 61 72 63 68 65 73 0a 74 68 65  ite searches.the
23f50 20 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43   left-most SELEC
23f60 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e  T in the compoun
23f70 64 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63  d for a result c
23f80 6f 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68  olumn that match
23f90 65 73 20 65 69 74 68 65 72 0a 74 68 65 20 73 65  es either.the se
23fa0 63 6f 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75  cond or third ru
23fb0 6c 65 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20  les above. If a 
23fc0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
23fd0 74 68 65 20 73 65 61 72 63 68 20 73 74 6f 70 73  the search stops
23fe0 20 61 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73   and.the express
23ff0 69 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61  ion is handled a
24000 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
24010 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
24020 20 74 68 61 74 20 69 74 20 68 61 73 20 62 65 65   that it has bee
24030 6e 0a 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73  n.matched agains
24040 74 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  t. Otherwise, th
24050 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f  e next SELECT to
24060 20 74 68 65 20 72 69 67 68 74 20 69 73 20 74 72   the right is tr
24070 69 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29  ied, and so on.)
24080 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e  ^.^If no matchin
24090 67 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e  g expression can
240a0 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   be found in the
240b0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
240c0 6f 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65  of any.constitue
240d0 6e 74 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73  nt SELECT, it is
240e0 20 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68   an error. ^Each
240f0 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44   term of the ORD
24100 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a  ER BY clause is.
24110 70 72 6f 63 65 73 73 65 64 20 73 65 70 61 72 61  processed separa
24120 74 65 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20  tely and may be 
24130 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 20  matched against 
24140 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66  result columns f
24150 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45  rom different.SE
24160 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
24170 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  in the compound.
24180 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d  </p>..<p>The LIM
24190 49 54 20 63 6c 61 75 73 65 20 69 73 20 75 73 65  IT clause is use
241a0 64 20 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70  d to place an up
241b0 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
241c0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a   number of rows.
241d0 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 53 45  returned by a SE
241e0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
241f0 5e 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72  ^Any scalar expr
24200 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73  ession may be us
24210 65 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54  ed in the .LIMIT
24220 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67   clause, so long
24230 20 61 73 20 69 74 20 65 76 61 6c 75 61 74 65 73   as it evaluates
24240 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   to an integer o
24250 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63  r a value that c
24260 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79  an be.losslessly
24270 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
24280 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68   integer. ^If th
24290 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
242a0 6c 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c  luates to a NULL
242b0 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f   .value or any o
242c0 74 68 65 72 20 76 61 6c 75 65 20 74 68 61 74 20  ther value that 
242d0 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
242e0 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
242f0 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e  o an integer, an
24300 0a 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e  .error is return
24310 65 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49  ed. ^If the LIMI
24320 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  T expression eva
24330 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61  luates to a nega
24340 74 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e  tive value,.then
24350 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70   there is no upp
24360 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20  er bound on the 
24370 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72  number of rows r
24380 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77  eturned. ^Otherw
24390 69 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20  ise, the.SELECT 
243a0 72 65 74 75 72 6e 73 20 74 68 65 20 66 69 72 73  returns the firs
243b0 74 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20  t N rows of its 
243c0 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c  result set only,
243d0 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20   where N is the 
243e0 76 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c  value.that the L
243f0 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20  IMIT expression 
24400 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f  evaluates to. ^O
24410 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54  r, if the SELECT
24420 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
24430 0a 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61  .return less tha
24440 6e 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74  n N rows without
24450 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
24460 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65   then the entire
24470 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72   result set is.r
24480 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54  eturned. ..<p>^T
24490 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74  he expression at
244a0 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70  tached to the op
244b0 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c  tional OFFSET cl
244c0 61 75 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f  ause that may fo
244d0 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61  llow a.LIMIT cla
244e0 75 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76  use must also ev
244f0 61 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74  aluate to an int
24500 65 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65  eger, or a value
24510 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73   that can be.los
24520 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
24530 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e  d to an integer.
24540 20 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73 69   ^If an expressi
24550 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  on has an OFFSET
24560 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68   clause,.then th
24570 65 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61  e first M rows a
24580 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
24590 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 72  the result set r
245a0 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
245b0 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20  ELECT.statement 
245c0 61 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72  and the next N r
245d0 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
245e0 2c 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20  , where M and N 
245f0 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
24600 68 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61  hat.the OFFSET a
24610 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
24620 20 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65   evaluate to, re
24630 73 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c  spectively. ^Or,
24640 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77   if the SELECT.w
24650 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73  ould return less
24660 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69   than M+N rows i
24670 66 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76  f it did not hav
24680 65 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  e a LIMIT clause
24690 2c 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74  , then the.first
246a0 20 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70   M rows are skip
246b0 70 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61  ped and the rema
246c0 69 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61  ining rows (if a
246d0 6e 79 29 20 61 72 65 20 72 65 74 75 72 6e 65 64  ny) are returned
246e0 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54  . ^If the.OFFSET
246f0 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65   clause evaluate
24700 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  s to a negative 
24710 76 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c  value, the resul
24720 74 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  ts are the same 
24730 61 73 20 69 66 20 69 74 0a 68 61 64 20 65 76 61  as if it.had eva
24740 6c 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a  luated to zero..
24750 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20  .<p>^Instead of 
24760 61 20 73 65 70 61 72 61 74 65 20 4f 46 46 53 45  a separate OFFSE
24770 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49  T clause, the LI
24780 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73  MIT clause may s
24790 70 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61  pecify two.scala
247a0 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65  r expressions se
247b0 70 61 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d  parated by a com
247c0 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  ma. ^In this cas
247d0 65 2c 20 74 68 65 20 66 69 72 73 74 20 65 78 70  e, the first exp
247e0 72 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20  ression.is used 
247f0 61 73 20 74 68 65 20 4f 46 46 53 45 54 20 65 78  as the OFFSET ex
24800 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
24810 20 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c   second as the L
24820 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  IMIT expression.
24830 0a 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72  .This is counter
24840 2d 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77  -intuitive, as w
24850 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46  hen using the OF
24860 46 53 45 54 20 63 6c 61 75 73 65 20 74 68 65 20  FSET clause the 
24870 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77  second of.the tw
24880 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73  o expressions is
24890 20 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20   the OFFSET and 
248a0 74 68 65 20 66 69 72 73 74 20 74 68 65 20 4c 49  the first the LI
248b0 4d 49 54 2e 20 54 68 69 73 20 69 73 20 69 6e 74  MIT. This is int
248c0 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61  entional.- it ma
248d0 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62  ximizes compatib
248e0 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72  ility with other
248f0 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 73 79   SQL database sy
24900 73 74 65 6d 73 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  stems...<tcl>.##
24910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24950 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
24960 74 69 6f 6e 20 55 50 44 41 54 45 20 75 70 64 61  tion UPDATE upda
24970 74 65 20 7b 55 50 44 41 54 45 20 2a 55 50 44 41  te {UPDATE *UPDA
24980 54 45 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  TEs}..BubbleDiag
24990 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 20  ram update-stmt 
249a0 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
249b0 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d  qualified-table-
249c0 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  name.</tcl>..<p>
249d0 5e 41 6e 20 55 50 44 41 54 45 20 73 74 61 74 65  ^An UPDATE state
249e0 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
249f0 6d 6f 64 69 66 79 20 61 20 73 75 62 73 65 74 20  modify a subset 
24a00 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  of the values st
24a10 6f 72 65 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72  ored in .zero or
24a20 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68   more rows of th
24a30 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
24a40 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
24a50 68 65 20 0a 3c 69 3e 71 75 61 6c 69 66 69 65 64  he .<i>qualified
24a60 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  -table-name</i> 
24a70 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
24a80 74 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  t of the UPDATE 
24a90 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e  statement...<p>^
24aa0 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  If the UPDATE st
24ab0 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
24ac0 20 68 61 76 65 20 61 20 57 48 45 52 45 20 63 6c   have a WHERE cl
24ad0 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69  ause, all rows i
24ae0 6e 20 74 68 65 0a 74 61 62 6c 65 20 61 72 65 20  n the.table are 
24af0 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68 65 20  modified by the 
24b00 55 50 44 41 54 45 2e 20 5e 4f 74 68 65 72 77 69  UPDATE. ^Otherwi
24b10 73 65 2c 20 74 68 65 20 55 50 44 41 54 45 20 61  se, the UPDATE a
24b20 66 66 65 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73  ffects only thos
24b30 65 0a 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  e.rows for which
24b40 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65   the result of e
24b50 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 57 48  valuating the WH
24b60 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65  ERE clause expre
24b70 73 73 69 6f 6e 20 61 73 20 61 20 0a 5b 62 6f 6f  ssion as a .[boo
24b80 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c  lean expression|
24b90 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
24ba0 6f 6e 20 69 73 20 74 72 75 65 5d 2e 20 5e 49 74  on is true]. ^It
24bb0 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   is not an error
24bc0 20 69 66 20 74 68 65 0a 57 48 45 52 45 20 63 6c   if the.WHERE cl
24bd0 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 65 76  ause does not ev
24be0 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65 20 66  aluate to true f
24bf0 6f 72 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68  or any row in th
24c00 65 20 74 61 62 6c 65 20 2d 20 74 68 69 73 20 6a  e table - this j
24c10 75 73 74 0a 6d 65 61 6e 73 20 74 68 61 74 20 74  ust.means that t
24c20 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
24c30 65 6e 74 20 61 66 66 65 63 74 73 20 7a 65 72 6f  ent affects zero
24c40 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d   rows...<p>The m
24c50 6f 64 69 66 69 63 61 74 69 6f 6e 73 20 6d 61 64  odifications mad
24c60 65 20 74 6f 20 65 61 63 68 20 72 6f 77 20 61 66  e to each row af
24c70 66 65 63 74 65 64 20 62 79 20 61 6e 20 55 50 44  fected by an UPD
24c80 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 72  ATE statement ar
24c90 65 0a 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  e.determined by 
24ca0 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69  the list of assi
24cb0 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e  gnments followin
24cc0 67 20 74 68 65 20 53 45 54 20 6b 65 79 77 6f 72  g the SET keywor
24cd0 64 2e 20 45 61 63 68 0a 61 73 73 69 67 6e 6d 65  d. Each.assignme
24ce0 6e 74 20 73 70 65 63 69 66 69 65 73 20 61 20 63  nt specifies a c
24cf0 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68  olumn name to th
24d00 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65 71  e left of the eq
24d10 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 0a  uals sign and a.
24d20 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
24d30 6e 20 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20  n to the right. 
24d40 5e 46 6f 72 20 65 61 63 68 20 61 66 66 65 63 74  ^For each affect
24d50 65 64 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65  ed row, the name
24d60 64 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65  d columns.are se
24d70 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20  t to the values 
24d80 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74  found by evaluat
24d90 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
24da0 6e 64 69 6e 67 20 73 63 61 6c 61 72 20 0a 65 78  nding scalar .ex
24db0 70 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61  pressions. ^If a
24dc0 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e   single column-n
24dd0 61 6d 65 20 61 70 70 65 61 72 73 20 6d 6f 72 65  ame appears more
24de0 20 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68   than once in th
24df0 65 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e  e list of.assign
24e00 6d 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  ment expressions
24e10 2c 20 61 6c 6c 20 62 75 74 20 74 68 65 20 72 69  , all but the ri
24e20 67 68 74 6d 6f 73 74 20 6f 63 63 75 72 72 65 6e  ghtmost occurren
24e30 63 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e  ce is ignored. ^
24e40 43 6f 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20  Columns.that do 
24e50 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  not appear in th
24e60 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e  e list of assign
24e70 6d 65 6e 74 73 20 61 72 65 20 6c 65 66 74 20 75  ments are left u
24e80 6e 6d 6f 64 69 66 69 65 64 2e 20 5e 54 68 65 20  nmodified. ^The 
24e90 73 63 61 6c 61 72 0a 65 78 70 72 65 73 73 69 6f  scalar.expressio
24ea0 6e 73 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20  ns may refer to 
24eb0 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 72  columns of the r
24ec0 6f 77 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  ow being updated
24ed0 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 20  . ^In this case 
24ee0 61 6c 6c 0a 73 63 61 6c 61 72 20 65 78 70 72 65  all.scalar expre
24ef0 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75  ssions are evalu
24f00 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20  ated before any 
24f10 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20  assignments are 
24f20 6d 61 64 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  made...<p>^The o
24f30 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74  ptional conflict
24f40 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74  -clause allows t
24f50 68 65 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e  he user to nomin
24f60 61 74 65 20 61 20 73 70 65 63 69 66 69 63 0a 63  ate a specific.c
24f70 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
24f80 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
24f90 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64  gorithm to use d
24fa0 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55  uring this one U
24fb0 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52  PDATE command..R
24fc0 65 66 65 72 20 74 6f 20 74 68 65 20 73 65 63 74  efer to the sect
24fd0 69 6f 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e  ion entitled [ON
24fe0 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61   CONFLICT] for a
24ff0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
25000 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74  ation...<h3>Rest
25010 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41  rictions on UPDA
25020 54 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69  TE Statements Wi
25030 74 68 69 6e 20 43 52 45 41 54 45 20 54 52 49 47  thin CREATE TRIG
25040 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  GER</h3>..<p>The
25050 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74   following addit
25060 69 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73  ional syntax res
25070 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  trictions apply 
25080 74 6f 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  to UPDATE statem
25090 65 6e 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20  ents that.occur 
250a0 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
250b0 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54 52 49  of a [CREATE TRI
250c0 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
250d0 20 20 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c    ..<ul>.  <li><
250e0 70 3e 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d  p>^The <i>table-
250f0 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66 69  name</i> specifi
25100 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
25110 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
25120 74 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 61  t within.      a
25130 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75   trigger body mu
25140 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65  st be unqualifie
25150 64 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f  d. ^(In other wo
25160 72 64 73 2c 20 74 68 65 0a 20 20 20 20 20 20 3c  rds, the.      <
25170 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
25180 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66  /i><b>.</b> pref
25190 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  ix on the table 
251a0 6e 61 6d 65 20 6f 66 20 74 68 65 20 55 50 44 41  name of the UPDA
251b0 54 45 20 69 73 0a 20 20 20 20 20 20 6e 6f 74 20  TE is.      not 
251c0 61 6c 6c 6f 77 65 64 20 77 69 74 68 69 6e 20 74  allowed within t
251d0 72 69 67 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65  riggers.)^ ^Unle
251e0 73 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  ss the table to 
251f0 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
25200 72 0a 20 20 20 20 20 20 69 73 20 61 74 74 61 63  r.      is attac
25210 68 65 64 20 69 73 20 69 6e 20 74 68 65 20 54 45  hed is in the TE
25220 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  MP database, the
25230 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64   table being upd
25240 61 74 65 64 20 62 79 20 74 68 65 0a 20 20 20 20  ated by the.    
25250 20 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61    trigger progra
25260 6d 20 6d 75 73 74 20 72 65 73 69 64 65 20 69 6e  m must reside in
25270 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
25280 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68  se as it. ^If th
25290 65 20 74 61 62 6c 65 0a 20 20 20 20 20 20 74 6f  e table.      to
252a0 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
252b0 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69  er is attached i
252c0 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
252d0 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65  tabase, then the
252e0 0a 20 20 20 20 20 20 75 6e 71 75 61 6c 69 66 69  .      unqualifi
252f0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
25300 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74  able being updat
25310 65 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69  ed is resolved i
25320 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a 20  n the same way. 
25330 20 20 20 20 20 61 73 20 69 74 20 69 73 20 66 6f       as it is fo
25340 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74  r a top-level st
25350 61 74 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72  atement (by sear
25360 63 68 69 6e 67 20 66 69 72 73 74 20 74 68 65 20  ching first the 
25370 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 0a 20  TEMP database,. 
25380 20 20 20 20 20 74 68 65 6e 20 74 68 65 20 6d 61       then the ma
25390 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  in database, the
253a0 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61  n any other data
253b0 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64  bases in the ord
253c0 65 72 20 74 68 65 79 20 77 65 72 65 0a 20 20 20  er they were.   
253d0 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 0a 20     attached)... 
253e0 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44   <li><p>^The IND
253f0 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20  EXED BY and NOT 
25400 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73 20  INDEXED clauses 
25410 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  are not allowed 
25420 6f 6e 20 55 50 44 41 54 45 0a 20 20 20 20 20 20  on UPDATE.      
25430 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
25440 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  n triggers.</p>.
25450 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c  .  <li><p>^The L
25460 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42  IMIT and ORDER B
25470 59 20 63 6c 61 75 73 65 73 20 66 6f 72 20 55 50  Y clauses for UP
25480 44 41 54 45 20 61 72 65 20 75 6e 73 75 70 70 6f  DATE are unsuppo
25490 72 74 65 64 20 77 69 74 68 69 6e 0a 20 20 20 20  rted within.    
254a0 20 20 74 72 69 67 67 65 72 73 2c 20 72 65 67 61    triggers, rega
254b0 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f  rdless of the co
254c0 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
254d0 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  s used to build 
254e0 53 51 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  SQLite..</ul>..<
254f0 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49  h3>Optional LIMI
25500 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 43  T and ORDER BY C
25510 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  lauses</h3>..<p>
25520 5e 28 49 66 20 53 51 4c 69 74 65 20 69 73 20 62  ^(If SQLite is b
25530 75 69 6c 74 20 77 69 74 68 20 74 68 65 20 5b 53  uilt with the [S
25540 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
25550 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
25560 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ].compile-time o
25570 70 74 69 6f 6e 20 74 68 65 6e 20 74 68 65 20 73  ption then the s
25580 79 6e 74 61 78 20 6f 66 20 74 68 65 20 55 50 44  yntax of the UPD
25590 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ATE statement is
255a0 20 65 78 74 65 6e 64 65 64 0a 77 69 74 68 20 6f   extended.with o
255b0 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59  ptional ORDER BY
255c0 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
255d0 65 73 29 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  es)^ as follows:
255e0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
255f0 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d  eDiagram update-
25600 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63  stmt-limited</tc
25610 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50  l>..<p>^If an UP
25620 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  DATE statement h
25630 61 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  as a LIMIT claus
25640 65 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  e, the maximum n
25650 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68  umber of rows th
25660 61 74 0a 77 69 6c 6c 20 62 65 20 75 70 64 61 74  at.will be updat
25670 65 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65  ed is found by e
25680 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63  valuating the ac
25690 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65  companying expre
256a0 73 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e  ssion and castin
256b0 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  g.it to an integ
256c0 65 72 20 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67  er value. ^A neg
256d0 61 74 69 76 65 20 76 61 6c 75 65 20 69 73 20 69  ative value is i
256e0 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22 6e  nterpreted as "n
256f0 6f 20 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49  o limit"...<p>^I
25700 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72  f the LIMIT expr
25710 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
25720 20 74 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65   to non-negative
25730 20 76 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20   value <i>N</i> 
25740 61 6e 64 20 74 68 65 0a 55 50 44 41 54 45 20 73  and the.UPDATE s
25750 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20  tatement has an 
25760 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
25770 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74   then all rows t
25780 68 61 74 20 77 6f 75 6c 64 20 62 65 20 75 70 64  hat would be upd
25790 61 74 65 64 20 69 6e 0a 74 68 65 20 61 62 73 65  ated in.the abse
257a0 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  nce of the LIMIT
257b0 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74   clause are sort
257c0 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ed according to 
257d0 74 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64  the ORDER BY and
257e0 20 74 68 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c   the.first <i>N<
257f0 2f 69 3e 20 75 70 64 61 74 65 64 2e 20 5e 28 49  /i> updated. ^(I
25800 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
25810 74 65 6d 65 6e 74 20 61 6c 73 6f 20 68 61 73 20  tement also has 
25820 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  an OFFSET clause
25830 2c 0a 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d  ,.then it is sim
25840 69 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64  ilarly evaluated
25850 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 20   and cast to an 
25860 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
25870 66 20 74 68 65 20 4f 46 46 53 45 54 0a 65 78 70  f the OFFSET.exp
25880 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
25890 73 20 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74  s to a non-negat
258a0 69 76 65 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f  ive value <i>M</
258b0 69 3e 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72  i>, then the fir
258c0 73 74 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73  st <i>M</i>.rows
258d0 20 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64   are skipped and
258e0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c   the following <
258f0 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64  i>N</i> rows upd
25900 61 74 65 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a  ated instead.)^.
25910 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41  .<p>^If the UPDA
25920 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
25930 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61   no ORDER BY cla
25940 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f  use, then all ro
25950 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65  ws that.would be
25960 20 75 70 64 61 74 65 64 20 69 6e 20 74 68 65 20   updated in the 
25970 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
25980 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
25990 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a  assembled in an.
259a0 61 72 62 69 74 72 61 72 79 20 6f 72 64 65 72 20  arbitrary order 
259b0 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20  before applying 
259c0 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  the LIMIT and OF
259d0 46 53 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20  FSET clauses to 
259e0 64 65 74 65 72 6d 69 6e 65 20 0a 77 68 69 63 68  determine .which
259f0 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 70   are actually up
25a00 64 61 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65  dated...<p>^(The
25a10 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
25a20 20 6f 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74   on an UPDATE st
25a30 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
25a40 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e  only to determin
25a50 65 20 77 68 69 63 68 0a 72 6f 77 73 20 66 61 6c  e which.rows fal
25a60 6c 20 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d  l within the LIM
25a70 49 54 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e  IT. The order in
25a80 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
25a90 6d 6f 64 69 66 69 65 64 20 69 73 20 61 72 62 69  modified is arbi
25aa0 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74  trary.and is not
25ab0 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74   influenced by t
25ac0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
25ad0 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  se.)^..<tcl>.###
25ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25af0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25b00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25b20 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
25b30 69 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75  ion VACUUM vacuu
25b40 6d 20 56 41 43 55 55 4d 0a 0a 42 75 62 62 6c 65  m VACUUM..Bubble
25b50 44 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d 73  Diagram vacuum-s
25b60 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
25b70 3e 0a 20 20 54 68 65 20 56 41 43 55 55 4d 20 63  >.  The VACUUM c
25b80 6f 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64 73 20  ommand rebuilds 
25b90 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
25ba0 61 73 65 2e 20 54 68 65 72 65 20 61 72 65 20 73  ase. There are s
25bb0 65 76 65 72 61 6c 20 0a 20 20 72 65 61 73 6f 6e  everal .  reason
25bc0 73 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  s an application
25bd0 20 6d 69 67 68 74 20 64 6f 20 74 68 69 73 3a 0a   might do this:.
25be0 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  .<ul>.  <li> <p>
25bf0 20 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74 65 20   ^Unless SQLite 
25c00 69 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22 61  is running in "a
25c10 75 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c 22  uto_vacuum=FULL"
25c20 20 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c 61   mode, when a la
25c30 72 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74 20  rge.     amount 
25c40 6f 66 20 64 61 74 61 20 69 73 20 64 65 6c 65 74  of data is delet
25c50 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
25c60 62 61 73 65 20 66 69 6c 65 20 69 74 20 6c 65 61  base file it lea
25c70 76 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79  ves behind empty
25c80 0a 20 20 20 20 20 73 70 61 63 65 2c 20 6f 72 20  .     space, or 
25c90 22 66 72 65 65 22 20 64 61 74 61 62 61 73 65 20  "free" database 
25ca0 70 61 67 65 73 2e 20 54 68 69 73 20 6d 65 61 6e  pages. This mean
25cb0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
25cc0 69 6c 65 20 6d 69 67 68 74 0a 20 20 20 20 20 62  ile might.     b
25cd0 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73 74  e larger than st
25ce0 72 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79  rictly necessary
25cf0 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55  . ^Running VACUU
25d00 4d 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65  M to rebuild the
25d10 20 0a 20 20 20 20 20 64 61 74 61 62 61 73 65 20   .     database 
25d20 72 65 63 6c 61 69 6d 73 20 74 68 69 73 20 73 70  reclaims this sp
25d30 61 63 65 20 61 6e 64 20 72 65 64 75 63 65 73 20  ace and reduces 
25d40 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
25d50 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 0a  database file...
25d60 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65 71    <li> <p> ^Freq
25d70 75 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75 70  uent inserts, up
25d80 64 61 74 65 73 2c 20 61 6e 64 20 64 65 6c 65 74  dates, and delet
25d90 65 73 20 63 61 6e 20 63 61 75 73 65 20 74 68 65  es can cause the
25da0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20   database file. 
25db0 20 20 20 20 74 6f 20 62 65 63 6f 6d 65 20 66 72      to become fr
25dc0 61 67 6d 65 6e 74 65 64 20 2d 20 77 68 65 72 65  agmented - where
25dd0 20 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67   data for a sing
25de0 6c 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  le table or inde
25df0 78 20 69 73 20 73 63 61 74 74 65 72 65 64 20 0a  x is scattered .
25e00 20 20 20 20 20 61 72 6f 75 6e 64 20 74 68 65 20       around the 
25e10 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e  database file. ^
25e20 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 65  Running VACUUM e
25e30 6e 73 75 72 65 73 20 74 68 61 74 20 65 61 63 68  nsures that each
25e40 20 74 61 62 6c 65 20 61 6e 64 0a 20 20 20 20 20   table and.     
25e50 69 6e 64 65 78 20 69 73 20 6c 61 72 67 65 6c 79  index is largely
25e60 20 73 74 6f 72 65 64 20 63 6f 6e 74 69 67 75 6f   stored contiguo
25e70 75 73 6c 79 20 77 69 74 68 69 6e 20 74 68 65 20  usly within the 
25e80 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e  database file. ^
25e90 49 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63 61 73  In some.     cas
25ea0 65 73 2c 20 56 41 43 55 55 4d 20 6d 61 79 20 61  es, VACUUM may a
25eb0 6c 73 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e  lso reduce the n
25ec0 75 6d 62 65 72 20 6f 66 20 70 61 72 74 69 61 6c  umber of partial
25ed0 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20  ly filled pages 
25ee0 69 6e 0a 20 20 20 20 20 74 68 65 20 64 61 74 61  in.     the data
25ef0 62 61 73 65 2c 20 72 65 64 75 63 69 6e 67 20 74  base, reducing t
25f00 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  he size of the d
25f10 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 75 72  atabase file fur
25f20 74 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  ther...  <li> <p
25f30 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65  > ^Normally, the
25f40 20 64 61 74 61 62 61 73 65 20 5b 70 61 67 65 5f   database [page_
25f50 73 69 7a 65 5d 20 61 6e 64 20 77 68 65 74 68 65  size] and whethe
25f60 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61 74  r or not the dat
25f70 61 62 61 73 65 0a 20 20 20 20 20 73 75 70 70 6f  abase.     suppo
25f80 72 74 73 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  rts [auto_vacuum
25f90 5d 20 6d 75 73 74 20 62 65 20 63 6f 6e 66 69 67  ] must be config
25fa0 75 72 65 64 20 62 65 66 6f 72 65 20 74 68 65 20  ured before the 
25fb0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
25fc0 0a 20 20 20 20 20 61 63 74 75 61 6c 6c 79 20 63  .     actually c
25fd0 72 65 61 74 65 64 2e 20 5e 48 6f 77 65 76 65 72  reated. ^However
25fe0 2c 20 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 77  , when not in [w
25ff0 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20  rite-ahead log] 
26000 6d 6f 64 65 2c 20 74 68 65 20 0a 20 20 20 20 20  mode, the .     
26010 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f  [page_size] and/
26020 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  or [auto_vacuum]
26030 20 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20 61   properties of a
26040 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  n existing datab
26050 61 73 65 20 6d 61 79 20 62 65 0a 20 20 20 20 20  ase may be.     
26060 63 68 61 6e 67 65 64 20 62 79 20 75 73 69 6e 67  changed by using
26070 20 74 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 20   the [page_size 
26080 70 72 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a 65  pragma|page_size
26090 5d 20 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20 20  ]  and/or .     
260a0 5b 61 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72 61  [auto_vacuum|pra
260b0 67 6d 61 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d  gma auto_vacuum]
260c0 20 70 72 61 67 6d 61 73 20 61 6e 64 20 74 68 65   pragmas and the
260d0 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41  n immediately VA
260e0 43 55 55 4d 69 6e 67 0a 20 20 20 20 20 74 68 65  CUUMing.     the
260f0 20 64 61 74 61 62 61 73 65 2e 20 5e 57 68 65 6e   database. ^When
26100 20 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64   in [write-ahead
26110 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c 79   log] mode, only
26120 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75   the [auto_vacuu
26130 6d 5d 0a 20 20 20 20 20 73 75 70 70 6f 72 74 20  m].     support 
26140 70 72 6f 70 65 72 74 79 20 63 61 6e 20 62 65 20  property can be 
26150 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 56 41  changed using VA
26160 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  CUUM..</ul>..<p>
26170 5e 28 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f  ^(VACUUM only wo
26180 72 6b 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20  rks on the main 
26190 64 61 74 61 62 61 73 65 2e 20 49 74 20 69 73 20  database. It is 
261a0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
261b0 56 41 43 55 55 4d 20 61 6e 0a 61 74 74 61 63 68  VACUUM an.attach
261c0 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ed database file
261d0 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43  .)^..<p>^The VAC
261e0 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b  UUM command work
261f0 73 20 62 79 20 63 6f 70 79 69 6e 67 20 74 68 65  s by copying the
26200 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
26210 20 64 61 74 61 62 61 73 65 20 69 6e 74 6f 0a 61   database into.a
26220 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
26230 61 73 65 20 66 69 6c 65 20 61 6e 64 20 74 68 65  ase file and the
26240 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68  n overwriting th
26250 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 74 68 20  e original with 
26260 74 68 65 20 0a 63 6f 6e 74 65 6e 74 73 20 6f 66  the .contents of
26270 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66   the temporary f
26280 69 6c 65 2e 20 5e 57 68 65 6e 20 6f 76 65 72 77  ile. ^When overw
26290 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69  riting the origi
262a0 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62 61 63 6b 0a  nal, a rollback.
262b0 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b 77 72 69 74  journal or [writ
262c0 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 57 41 4c  e-ahead log] WAL
262d0 20 66 69 6c 65 20 69 73 20 75 73 65 64 20 6a 75   file is used ju
262e0 73 74 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  st as it would b
262f0 65 20 66 6f 72 20 61 6e 79 0a 6f 74 68 65 72 20  e for any.other 
26300 64 61 74 61 62 61 73 65 20 74 72 61 6e 73 61 63  database transac
26310 74 69 6f 6e 2e 20 5e 54 68 69 73 20 6d 65 61 6e  tion. ^This mean
26320 73 20 74 68 61 74 20 77 68 65 6e 20 56 41 43 55  s that when VACU
26330 55 4d 69 6e 67 20 61 20 64 61 74 61 62 61 73 65  UMing a database
26340 2c 20 0a 61 73 20 6d 75 63 68 20 61 73 20 74 77  , .as much as tw
26350 69 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ice the size of 
26360 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
26370 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 72 65  abase file is re
26380 71 75 69 72 65 64 20 69 6e 20 66 72 65 65 0a 64  quired in free.d
26390 69 73 6b 20 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e  isk space...<p>^
263a0 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
263b0 6e 64 20 6d 61 79 20 63 68 61 6e 67 65 20 74 68  nd may change th
263c0 65 20 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49 44  e [ROWID | ROWID
263d0 73 5d 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  s] of entries in
263e0 20 61 6e 79 0a 74 61 62 6c 65 73 20 74 68 61 74   any.tables that
263f0 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 61 6e 20   do not have an 
26400 65 78 70 6c 69 63 69 74 20 5b 49 4e 54 45 47 45  explicit [INTEGE
26410 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a  R PRIMARY KEY]..
26420 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43 55  </p>..<p>^A VACU
26430 55 4d 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20  UM will fail if 
26440 74 68 65 72 65 20 69 73 20 61 6e 20 6f 70 65 6e  there is an open
26450 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 6f 72   transaction, or
26460 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 6e   if there are on
26470 65 20 6f 72 0a 6d 6f 72 65 20 61 63 74 69 76 65  e or.more active
26480 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
26490 77 68 65 6e 20 69 74 20 69 73 20 72 75 6e 2e 0a  when it is run..
264a0 0a 3c 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c 69  .<p>^(As of SQLi
264b0 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20  te version 3.1, 
264c0 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74  an alternative t
264d0 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41 43 55  o using the VACU
264e0 55 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65  UM command to.re
264f0 63 6c 61 69 6d 20 73 70 61 63 65 20 61 66 74 65  claim space afte
26500 72 20 64 61 74 61 20 68 61 73 20 62 65 65 6e 20  r data has been 
26510 64 65 6c 65 74 65 64 20 69 73 20 61 75 74 6f 2d  deleted is auto-
26520 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61  vacuum mode, ena
26530 62 6c 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b  bled using.the [
26540 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61  auto_vacuum] pra
26550 67 6d 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61 75  gma.)^ ^When [au
26560 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e  to_vacuum] is en
26570 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61  abled for a data
26580 62 61 73 65 0a 66 72 65 65 20 70 61 67 65 73 20  base.free pages 
26590 6d 61 79 20 62 65 20 72 65 63 6c 61 69 6d 65 64  may be reclaimed
265a0 20 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20   after deleting 
265b0 64 61 74 61 2c 20 63 61 75 73 69 6e 67 20 74 68  data, causing th
265c0 65 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b  e file to shrink
265d0 2c 0a 77 69 74 68 6f 75 74 20 72 65 62 75 69 6c  ,.without rebuil
265e0 64 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20  ding the entire 
265f0 64 61 74 61 62 61 73 65 20 75 73 69 6e 67 20 56  database using V
26600 41 43 55 55 4d 2e 20 20 48 6f 77 65 76 65 72 2c  ACUUM.  However,
26610 20 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61 63   using.[auto_vac
26620 75 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74 6f  uum] can lead to
26630 20 65 78 74 72 61 20 64 61 74 61 62 61 73 65 20   extra database 
26640 66 69 6c 65 20 66 72 61 67 6d 65 6e 74 61 74 69  file fragmentati
26650 6f 6e 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f 76  on.  And [auto_v
26660 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20  acuum].does not 
26670 63 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c  compact partiall
26680 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f  y filled pages o
26690 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  f the database a
266a0 73 20 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a  s VACUUM does...
266b0 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
266c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
266d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
266e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
266f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26700 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
26710 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d  ion {INDEXED BY}
26720 20 69 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44   indexedby {{IND
26730 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e  EXED BY} {NOT IN
26740 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a  DEXED}}..</tcl>.
26750 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
26760 42 59 20 70 68 72 61 73 65 20 66 6f 72 63 65 73  BY phrase forces
26770 20 74 68 65 20 5b 53 51 4c 69 74 65 20 71 75 65   the [SQLite que
26780 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74 6f 20 75  ry planner] to u
26790 73 65 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20  se a.particular 
267a0 6e 61 6d 65 64 20 69 6e 64 65 78 20 6f 6e 20 61  named index on a
267b0 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 53 45 4c 45   [DELETE], [SELE
267c0 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d  CT], or [UPDATE]
267d0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20   statement..The 
267e0 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
267f0 65 20 69 73 20 61 6e 20 65 78 74 65 6e 73 69 6f  e is an extensio
26800 6e 20 74 68 61 74 20 69 73 20 70 61 72 74 69 63  n that is partic
26810 75 6c 61 72 20 74 6f 20 53 51 4c 69 74 65 20 61  ular to SQLite a
26820 6e 64 0a 69 73 20 6e 6f 74 20 70 6f 72 74 61 62  nd.is not portab
26830 6c 65 20 74 6f 20 6f 74 68 65 72 20 53 51 4c 20  le to other SQL 
26840 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
26850 2e 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42 59  ..The INDEXED BY
26860 20 70 68 72 61 73 65 20 63 61 6e 20 62 65 20 73   phrase can be s
26870 65 65 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  een in the follo
26880 77 69 6e 67 20 73 79 6e 74 61 78 0a 64 69 61 67  wing syntax.diag
26890 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  rams:</p>..<tcl>
268a0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71  .BubbleDiagram q
268b0 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
268c0 61 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  ame.BubbleDiagra
268d0 6d 20 73 69 6e 67 6c 65 2d 73 6f 75 72 63 65 0a  m single-source.
268e0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
268f0 22 49 4e 44 45 58 45 44 20 42 59 20 69 6e 64 65  "INDEXED BY inde
26900 78 2d 6e 61 6d 65 22 20 70 68 72 61 73 65 20 73  x-name" phrase s
26910 70 65 63 69 66 69 65 73 20 74 68 61 74 20 74 68  pecifies that th
26920 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75  e named index.mu
26930 73 74 20 62 65 20 75 73 65 64 20 69 6e 20 6f 72  st be used in or
26940 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76  der to look up v
26950 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70 72 65  alues on the pre
26960 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49  ceding table..^I
26970 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f 65  f index-name doe
26980 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72 20 63  s not exist or c
26990 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 66 6f  annot be used fo
269a0 72 20 74 68 65 20 71 75 65 72 79 2c 20 74 68 65  r the query, the
269b0 6e 0a 74 68 65 20 70 72 65 70 61 72 61 74 69 6f  n.the preparatio
269c0 6e 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61  n of the SQL sta
269d0 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e 28  tement fails..^(
269e0 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58 45 44  The "NOT INDEXED
269f0 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  " clause specifi
26a00 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64 65 78  es that no index
26a10 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64 20 77   shall be used w
26a20 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20 74 68  hen.accessing th
26a30 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c  e preceding tabl
26a40 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70  e, including imp
26a50 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63 72 65  lied indices cre
26a60 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20 61 6e  ate by.UNIQUE an
26a70 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  d PRIMARY KEY co
26a80 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f 77 65  nstraints.  Howe
26a90 76 65 72 2c 20 74 68 65 20 49 4e 54 45 47 45 52  ver, the INTEGER
26aa0 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 63 61 6e   PRIMARY KEY.can
26ab0 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74   still be used t
26ac0 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65  o look up entrie
26ad0 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54  s even when "NOT
26ae0 20 49 4e 44 45 58 45 44 22 20 69 73 20 73 70 65   INDEXED" is spe
26af0 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c  cified.)^</p>..<
26b00 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62  p>Some SQL datab
26b10 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76  ase engines prov
26b20 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  ide non-standard
26b30 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73   "hint" mechanis
26b40 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20  ms which.can be 
26b50 75 73 65 64 20 74 6f 20 67 69 76 65 20 74 68 65  used to give the
26b60 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
26b70 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61   clues about wha
26b80 74 20 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f  t indices it sho
26b90 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61  uld.use for a pa
26ba0 72 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65  rticular stateme
26bb0 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42  nt.  The INDEX B
26bc0 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69  Y clause of SQLi
26bd0 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f  te is .<em>not</
26be0 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65  em> a hinting me
26bf0 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73  chanism and it s
26c00 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65  hould not be use
26c10 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20  d as such..^The 
26c20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
26c30 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20  e does not give 
26c40 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69  the optimizer hi
26c50 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63 68 20  nts about which 
26c60 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74  index.to use; it
26c70 20 67 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d   gives the optim
26c80 69 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d 65  izer a requireme
26c90 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65  nt of which inde
26ca0 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68  x to use..^If th
26cb0 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
26cc0 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75  r is unable to u
26cd0 73 65 20 74 68 65 20 69 6e 64 65 78 20 73 70 65  se the index spe
26ce0 63 69 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e  cified by the.IN
26cf0 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DEX BY clause, t
26d00 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 77 69  hen the query wi
26d10 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
26d20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  error.</p>..<p>T
26d30 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
26d40 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c  ause is <em>not<
26d50 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f  /em> intended fo
26d60 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a  r use in tuning.
26d70 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  the performance 
26d80 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68 65  of a query.  The
26d90 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49   intent of the I
26da0 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
26db0 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72   is.to raise a r
26dc0 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66  un-time error if
26dd0 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65   a schema change
26de0 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70 70 69  , such as droppi
26df0 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61  ng or.creating a
26e00 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20  n index, causes 
26e10 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66  the query plan f
26e20 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74  or a time-sensit
26e30 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61  ive query.to cha
26e40 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45  nge.  The INDEXE
26e50 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 64  D BY clause is d
26e60 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20  esigned to help 
26e70 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62  detect.undesirab
26e80 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68  le query plan ch
26e90 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65 67  anges during reg
26ea0 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e  ression testing.
26eb0 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20  .Developers are 
26ec0 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d  admonished to om
26ed0 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e  it all use of IN
26ee0 44 45 58 45 44 20 42 59 20 64 75 72 69 6e 67 0a  DEXED BY during.
26ef0 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 69  application desi
26f00 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  gn, implementati
26f10 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e 64  on, testing, and
26f20 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44   tuning.  If.IND
26f30 45 58 45 44 20 42 59 20 69 73 20 74 6f 20 62 65  EXED BY is to be
26f40 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69 74   used at all, it
26f50 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65 72   should be inser
26f60 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 0a  ted at the very.
26f70 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65 6c  end of the devel
26f80 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20 77  opment process w
26f90 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77  hen "locking dow
26fa0 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e  n" a design.</p>
26fb0 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c  ..<h3>See Also:<
26fc0 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  /h3>..<ol>.<li><
26fd0 70 3e 54 68 65 20 5b 71 75 65 72 79 20 70 6c 61  p>The [query pla
26fe0 6e 6e 65 72 20 63 68 65 63 6b 6c 69 73 74 5d 20  nner checklist] 
26ff0 64 65 73 63 72 69 62 65 73 20 73 74 65 70 73 20  describes steps 
27000 74 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  that application
27010 0a 64 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75  .developers shou
27020 6c 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20  ld following to 
27030 68 65 6c 70 20 72 65 73 6f 6c 76 65 20 71 75 65  help resolve que
27040 72 79 20 70 6c 61 6e 6e 65 72 20 70 72 6f 62 6c  ry planner probl
27050 65 6d 73 2e 0a 4e 6f 74 69 63 65 20 74 68 65 20  ems..Notice the 
27060 74 68 61 74 20 74 68 65 20 75 73 65 20 6f 66 20  that the use of 
27070 49 4e 44 45 58 45 44 20 42 59 20 69 73 20 61 20  INDEXED BY is a 
27080 6c 61 73 74 20 72 65 73 6f 72 74 2c 20 74 6f 20  last resort, to 
27090 62 65 20 75 73 65 64 20 6f 6e 6c 79 0a 77 68 65  be used only.whe
270a0 6e 20 61 6c 6c 20 6f 74 68 65 72 20 6d 65 61 73  n all other meas
270b0 75 72 65 73 20 66 61 69 6c 2e 3c 2f 70 3e 0a 0a  ures fail.</p>..
270c0 3c 6c 69 3e 3c 70 3e 5b 75 70 6c 75 73 63 6f 6e  <li><p>[upluscon
270d0 74 72 6f 6c 7c 54 68 65 20 75 6e 61 72 79 20 2b  trol|The unary +
270e0 20 6f 70 65 72 61 74 6f 72 5d 0a 63 61 6e 20 62   operator].can b
270f0 65 20 75 73 65 64 20 74 6f 20 64 69 73 71 75 61  e used to disqua
27100 6c 69 66 79 20 74 65 72 6d 73 20 69 6e 20 74 68  lify terms in th
27110 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
27120 72 6f 6d 20 75 73 65 20 62 79 20 69 6e 64 69 63  rom use by indic
27130 65 73 2e 0a 43 61 72 65 66 75 6c 20 75 73 65 20  es..Careful use 
27140 6f 66 20 75 6e 61 72 79 20 2b 20 63 61 6e 20 73  of unary + can s
27150 6f 6d 65 74 69 6d 65 73 20 68 65 6c 70 20 70 72  ometimes help pr
27160 65 76 65 6e 74 20 74 68 65 20 71 75 65 72 79 20  event the query 
27170 70 6c 61 6e 6e 65 72 20 66 72 6f 6d 0a 63 68 6f  planner from.cho
27180 6f 73 69 6e 67 20 61 20 70 6f 6f 72 20 69 6e 64  osing a poor ind
27190 65 78 20 77 69 74 68 6f 75 74 20 72 65 73 74 72  ex without restr
271a0 69 63 74 69 6e 67 20 69 74 20 74 6f 20 75 73 69  icting it to usi
271b0 6e 67 20 6f 6e 65 20 73 70 65 63 69 66 69 63 20  ng one specific 
271c0 69 6e 64 65 78 2e 0a 43 61 72 65 66 75 6c 20 70  index..Careful p
271d0 6c 61 63 65 6d 65 6e 74 20 6f 66 20 75 6e 61 72  lacement of unar
271e0 79 20 2b 20 6f 70 65 72 61 74 6f 72 73 20 69 73  y + operators is
271f0 20 61 20 62 65 74 74 65 72 20 6d 65 74 68 6f 64   a better method
27200 20 66 6f 72 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67   for controlling
27210 20 0a 77 68 69 63 68 20 69 6e 64 69 63 65 73 20   .which indices 
27220 61 72 65 20 75 73 65 64 20 61 20 71 75 65 72 79  are used a query
27230 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68  .</p>..<li><p>Th
27240 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  e [sqlite3_stmt_
27250 73 74 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20  status()] C/C++ 
27260 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65 74 68  interface togeth
27270 65 72 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c  er with the.[SQL
27280 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46  ITE_STMTSTATUS_F
27290 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e  ULLSCAN_STEP] an
272a0 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  d [SQLITE_STMTST
272b0 41 54 55 53 5f 53 4f 52 54 5d 20 76 65 72 62 73  ATUS_SORT] verbs
272c0 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
272d0 64 65 74 65 63 74 20 61 74 20 72 75 6e 2d 74 69  detect at run-ti
272e0 6d 65 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73  me when an SQL s
272f0 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a  tatement is not.
27300 6d 61 6b 69 6e 67 20 65 66 66 65 63 74 69 76 65  making effective
27310 20 75 73 65 20 6f 66 20 69 6e 64 69 63 65 73 2e   use of indices.
27320 20 20 4d 61 6e 79 20 61 70 70 6c 69 63 61 74 69    Many applicati
27330 6f 6e 73 20 6d 61 79 20 70 72 65 66 65 72 20 74  ons may prefer t
27340 6f 0a 75 73 65 20 74 68 65 20 5b 73 71 6c 69 74  o.use the [sqlit
27350 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29  e3_stmt_status()
27360 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 64  ] interface to d
27370 65 74 65 63 74 20 69 6e 64 65 78 20 6d 69 73 75  etect index misu
27380 73 65 0a 72 61 74 68 65 72 20 74 68 61 6e 20 74  se.rather than t
27390 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
273a0 72 61 73 65 20 64 65 73 63 72 69 62 65 64 20 68  rase described h
273b0 65 72 65 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a  ere.</p>.</ol>..
273c0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
273d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
273e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
273f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27410 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f 66 20  ###.# A list of 
27420 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61 73 74  keywords.  A ast
27430 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61 66 74  erisk occurs aft
27440 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20 69  er the keyword i
27450 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74 68 65  f it is on.# the
27460 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a   fallback list..
27470 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69  #.set keyword_li
27480 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41  st [lsort {.   A
27490 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20  BORT.   ACTION. 
274a0 20 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a 20    ADD.   AFTER. 
274b0 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20    ALL.   ALTER. 
274c0 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44    ANALYZE.   AND
274d0 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20 20  .   AS.   ASC.  
274e0 20 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f 49   ATTACH.   AUTOI
274f0 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f  NCREMENT.   BEFO
27500 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20 42  RE.   BEGIN.   B
27510 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20  ETWEEN.   BY.   
27520 43 41 53 43 41 44 45 0a 20 20 20 43 41 53 45 0a  CASCADE.   CASE.
27530 20 20 20 43 41 53 54 0a 20 20 20 43 48 45 43 4b     CAST.   CHECK
27540 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43  .   COLLATE.   C
27550 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a  OLUMN.   COMMIT.
27560 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43     CONFLICT.   C
27570 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45  ONSTRAINT.   CRE
27580 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20  ATE.   CROSS.   
27590 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20  CURRENT_DATE.   
275a0 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20  CURRENT_TIME.   
275b0 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
275c0 50 0a 20 20 20 44 41 54 41 42 41 53 45 0a 20 20  P.   DATABASE.  
275d0 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45   DEFAULT.   DEFE
275e0 52 52 45 44 0a 20 20 20 44 45 46 45 52 52 41 42  RRED.   DEFERRAB
275f0 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20  LE.   DELETE.   
27600 44 45 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20  DESC.   DETACH. 
27610 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52    DISTINCT.   DR
27620 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43  OP.   END.   EAC
27630 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43  H.   ELSE.   ESC
27640 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20  APE.   EXCEPT.  
27650 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58   EXCLUSIVE.   EX
27660 49 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a  ISTS.   EXPLAIN.
27670 20 20 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20     FAIL.   FOR. 
27680 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f    FOREIGN.   FRO
27690 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f  M.   FULL.   GLO
276a0 42 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41  B.   GROUP.   HA
276b0 56 49 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47  VING.   IF.   IG
276c0 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54  NORE.   IMMEDIAT
276d0 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58  E.   IN.   INDEX
276e0 0a 20 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49  .   INDEXED.   I
276f0 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45  NITIALLY.   INNE
27700 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49  R.   INSERT.   I
27710 4e 53 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53  NSTEAD.   INTERS
27720 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49  ECT.   INTO.   I
27730 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a  S.   ISNULL.   J
27740 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45  OIN.   KEY.   LE
27750 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49  FT.   LIKE.   LI
27760 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20  MIT.   MATCH.   
27770 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20  NATURAL.   NO.  
27780 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a   NOT.   NOTNULL.
27790 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20     NULL.   OF.  
277a0 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20   OFFSET.   ON.  
277b0 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20   OR.   ORDER.   
277c0 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20  OUTER.   PLAN.  
277d0 20 50 52 41 47 4d 41 0a 20 20 20 50 52 49 4d 41   PRAGMA.   PRIMA
277e0 52 59 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52  RY.   QUERY.   R
277f0 41 49 53 45 0a 20 20 20 52 45 46 45 52 45 4e 43  AISE.   REFERENC
27800 45 53 0a 20 20 20 52 45 47 45 58 50 0a 20 20 20  ES.   REGEXP.   
27810 52 45 49 4e 44 45 58 0a 20 20 20 52 45 4c 45 41  REINDEX.   RELEA
27820 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20 20  SE.   RENAME.   
27830 52 45 50 4c 41 43 45 0a 20 20 20 52 45 53 54 52  REPLACE.   RESTR
27840 49 43 54 0a 20 20 20 52 49 47 48 54 0a 20 20 20  ICT.   RIGHT.   
27850 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a  ROLLBACK.   ROW.
27860 20 20 20 53 41 56 45 50 4f 49 4e 54 0a 20 20 20     SAVEPOINT.   
27870 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20  SELECT.   SET.  
27880 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20   TABLE.   TEMP. 
27890 20 20 54 45 4d 50 4f 52 41 52 59 0a 20 20 20 54    TEMPORARY.   T
278a0 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41  HEN.   TO.   TRA
278b0 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47  NSACTION.   TRIG
278c0 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20  GER.   UNION.   
278d0 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54 45  UNIQUE.   UPDATE
278e0 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43  .   USING.   VAC
278f0 55 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20 20  UUM.   VALUES.  
27900 20 56 49 45 57 0a 20 20 20 56 49 52 54 55 41 4c   VIEW.   VIRTUAL
27910 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52  .   WHEN.   WHER
27920 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c  E.}]..hd_puts {<
27930 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73  DIV class="pdf_s
27940 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f  ection">}.Sectio
27950 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72  n {SQLite Keywor
27960 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a  ds} keywords {{*
27970 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51  SQL keyword} {SQ
27980 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f  L keywords}}.hd_
27990 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f  puts {</DIV>}.</
279a0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c  tcl>..<p>The SQL
279b0 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69 66   standard specif
279c0 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65  ies a huge numbe
279d0 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68  r of keywords wh
279e0 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75  ich may not.be u
279f0 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73  sed as the names
27a00 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69   of tables, indi
27a10 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61  ces, columns, da
27a20 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65  tabases, user-de
27a30 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c  fined.functions,
27a40 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72   collations, vir
27a50 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
27a60 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72  es, or any other
27a70 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54   named object..T
27a80 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f  he list of keywo
27a90 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74  rds is so long t
27aa0 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63  hat few people c
27ab0 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d  an remember them
27ac0 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53   all..For most S
27ad0 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61  QL code, your sa
27ae0 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e  fest bet is to n
27af0 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67  ever use any Eng
27b00 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f  lish language.wo
27b10 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f  rd as the name o
27b20 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  f a user-defined
27b30 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70   object.</p>..<p
27b40 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20  >If you want to 
27b50 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73  use a keyword as
27b60 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65   a name, you nee
27b70 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20  d to quote it.  
27b80 54 68 65 72 65 0a 61 72 65 20 66 6f 75 72 20 77  There.are four w
27b90 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b  ays of quoting k
27ba0 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74  eywords in SQLit
27bb0 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f  e:</p>..<p>.<blo
27bc0 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e  ckquote>.<table>
27bd0 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
27be0 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f  ="top"><b>'keywo
27bf0 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20  rd'</b></td><td 
27c00 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
27c10 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64  ..<td>^A keyword
27c20 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
27c30 73 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c 69  s is a string li
27c40 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  teral.</td></tr>
27c50 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
27c60 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77  n="top"><b>"keyw
27c70 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord"</b></td><td
27c80 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
27c90 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65  eyword in double
27ca0 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69 64  -quotes is an id
27cb0 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f  entifier.</td></
27cc0 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61  tr>..<tr>.<td va
27cd0 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23  lign="top"><b>&#
27ce0 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c  91;keyword&#93;<
27cf0 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
27d00 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
27d10 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71  d enclosed in sq
27d20 75 61 72 65 20 62 72 61 63 6b 65 74 73 20 69 73  uare brackets is
27d30 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65   .        an ide
27d40 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69  ntifier.  This i
27d50 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  s not standard S
27d60 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e  QL.  This quotin
27d70 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20  g mechanism.    
27d80 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d      is used by M
27d90 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c  S Access and SQL
27da0 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20 69   Server and is i
27db0 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74  ncluded in SQLit
27dc0 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f  e for.        co
27dd0 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64  mpatibility.</td
27de0 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
27df0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
27e00 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23 39  >&#96;keyword&#9
27e10 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  6;</b></td><td><
27e20 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
27e30 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e  word enclosed in
27e40 20 67 72 61 76 65 20 61 63 63 65 6e 74 73 20 28   grave accents (
27e50 41 53 43 49 49 20 63 6f 64 65 20 39 36 29 20 69  ASCII code 96) i
27e60 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64  s .        an id
27e70 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20  entifier.  This 
27e80 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  is not standard 
27e90 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69  SQL.  This quoti
27ea0 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20  ng mechanism.   
27eb0 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by 
27ec0 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e 63  MySQL and is inc
27ed0 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  luded in SQLite 
27ee0 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  for.        comp
27ef0 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c  atibility.</td><
27f00 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
27f10 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e  blockquote>.</p>
27f20 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69 65  ..<p>For resilie
27f30 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e  nce when confron
27f40 74 65 64 20 77 69 74 68 20 68 69 73 74 6f 72 69  ted with histori
27f50 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  cal SQL statemen
27f60 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20  ts, SQLite.will 
27f70 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20 74  sometimes bend t
27f80 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73  he quoting rules
27f90 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c   above:</p>..<ul
27fa0 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b  >.<li><p>^If a k
27fb0 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65  eyword in single
27fc0 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e  .quotes (ex: <b>
27fd0 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e  'key'</b> or <b>
27fe0 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75  'glob'</b>) is u
27ff0 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74  sed in a context
28000 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74 69   where.an identi
28010 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20  fier is allowed 
28020 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69  but where a stri
28030 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f  ng literal is no
28040 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a  t allowed, then.
28050 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64  the token is und
28060 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e  erstood to be an
28070 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73 74   identifier inst
28080 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ead of a string 
28090 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c  literal..</p></l
280a0 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61  i>..<li><p>^If a
280b0 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62   keyword in doub
280c0 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c  le.quotes (ex: <
280d0 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c  b>"key"</b> or <
280e0 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73  b>"glob"</b>) is
280f0 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65   used in a conte
28100 78 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e 6e  xt where.it cann
28110 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20 74  ot be resolved t
28120 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  o an identifier 
28130 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69  but where a stri
28140 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c  ng literal.is al
28150 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65 20  lowed, then the 
28160 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74  token is underst
28170 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72 69  ood to be a stri
28180 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74 65  ng literal inste
28190 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69 66  ad.of an identif
281a0 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f  ier.</p></li>.</
281b0 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d  ul>..<p>Programm
281c0 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e 65  ers are cautione
281d0 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68 65  d not to use the
281e0 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73 20   two exceptions 
281f0 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65  described in.the
28200 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65 74   previous bullet
28210 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a 65  s.  We emphasize
28220 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73 74   that they exist
28230 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c   only so that ol
28240 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64  d.and ill-formed
28250 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
28260 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63 74  will run correct
28270 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72 73  ly.  Future vers
28280 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d  ions of.SQLite m
28290 69 67 68 74 20 63 68 61 6e 67 65 20 74 6f 20 72  ight change to r
282a0 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73 74  aise errors inst
282b0 65 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e 67  ead of accepting
282c0 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a 73   the malformed.s
282d0 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72 65  tatements covere
282e0 64 20 62 79 20 74 68 65 20 65 78 63 65 70 74 69  d by the excepti
282f0 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a  ons above.</p>..
28300 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20  <p>.SQLite adds 
28310 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f  new keywords fro
28320 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77  m time to time w
28330 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e 20  hen it takes on 
28340 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f  new features..So
28350 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72   to prevent your
28360 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67   code from being
28370 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72   broken by futur
28380 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20  e enhancements, 
28390 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61  you should.norma
283a0 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69 64  lly quote any id
283b0 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73  entifier that is
283c0 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67   an English lang
283d0 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e 20  uage word, even 
283e0 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61  if.you do not ha
283f0 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ve to..</p>..<p>
28400 0a 54 68 65 20 6c 69 73 74 20 62 65 6c 6f 77 20  .The list below 
28410 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69 62  shows all possib
28420 6c 65 20 6b 65 79 77 6f 72 64 73 20 75 73 65 64  le keywords used
28430 20 62 79 20 61 6e 79 20 62 75 69 6c 64 20 6f 66   by any build of
28440 0a 53 51 4c 69 74 65 20 72 65 67 61 72 64 6c 65  .SQLite regardle
28450 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d 74  ss of [compile-t
28460 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a  ime options].  .
28470 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c 65 20  Most reasonable 
28480 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 75  configurations u
28490 73 65 20 6d 6f 73 74 20 6f 72 20 61 6c 6c 20 6f  se most or all o
284a0 66 20 74 68 65 73 65 20 6b 65 79 77 6f 72 64 73  f these keywords
284b0 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79 77 6f  ,.but some keywo
284c0 72 64 73 20 6d 61 79 20 62 65 20 6f 6d 69 74 74  rds may be omitt
284d0 65 64 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e 67  ed when SQL lang
284e0 75 61 67 65 20 66 65 61 74 75 72 65 73 20 61 72  uage features ar
284f0 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52 65  e.disabled..^(Re
28500 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
28510 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
28520 66 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79 20  figuration, any 
28530 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20  identifier that 
28540 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66 6f  is not on.the fo
28550 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64 5f  llowing <tcl>hd_
28560 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6b  puts [llength $k
28570 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74 63  eyword_list]</tc
28580 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74 20  l> element.list 
28590 69 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64  is not a keyword
285a0 20 74 6f 20 74 68 65 20 53 51 4c 20 70 61 72 73   to the SQL pars
285b0 65 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f  er in SQLite:.</
285c0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
285d0 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 31  .<table width="1
285e0 30 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c  00%"><tr>.<td al
285f0 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67  ign="left" valig
28600 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32  n="top" width="2
28610 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e  0%">.<tcl>.set n
28620 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f   [llength $keywo
28630 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f  rd_list].set nCo
28640 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78  l 5.set nRow [ex
28650 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29  pr {($n+$nCol-1)
28660 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30  /$nCol}].set i 0
28670 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24 6b  .foreach word $k
28680 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20  eyword_list {.  
28690 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b  if {$i==$nRow} {
286a0 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f  .    hd_puts "</
286b0 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22  td><td valign=\"
286c0 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65  top\" align=\"le
286d0 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25  ft\" width=\"20%
286e0 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31  \">".    set i 1
286f0 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
28700 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f  incr i.  }.  hd_
28710 70 75 74 73 20 22 24 77 6f 72 64 3c 62 72 3e 5c  puts "$word<br>\
28720 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64  n".}.</tcl>.</td
28730 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f  ></tr></table></
28740 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a        blockquote>)^.