Documentation Source Text

Hex Artifact Content
Login

Artifact 90fd02b647ebb51296d7df211a032c44764f38b1:


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 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  e..^[http://en.w
1a890 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
1a8a0 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e  i/Coordinated_Un
1a8b0 69 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55  iversal_Time | U
1a8c0 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e  niversal Coordin
1a8d0 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d  ated Time (UTC)]
1a8e0 20 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d   is used. .^Form
1a8f0 61 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68  at 12 is the .[h
1a900 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1a910 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69  ia.org/wiki/Juli
1a920 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20  an_day | Julian 
1a930 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72  day number].expr
1a940 65 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74  essed as a float
1a950 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
1a960 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e 20  .</p>..<p>.^(In 
1a970 66 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20 61 6e  formats 4, 7, an
1a980 64 20 31 30 2c 20 74 68 65 20 66 72 61 63 74 69  d 10, the fracti
1a990 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76 61 6c  onal seconds val
1a9a0 75 65 20 53 53 2e 53 53 53 20 63 61 6e 20 68 61  ue SS.SSS can ha
1a9b0 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 64  ve.one or more d
1a9c0 69 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  igits following 
1a9d0 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
1a9e0 74 2e 20 20 45 78 61 63 74 6c 79 20 74 68 72 65  t.  Exactly thre
1a9f0 65 20 64 69 67 69 74 73 20 61 72 65 0a 73 68 6f  e digits are.sho
1aa00 77 6e 20 69 6e 20 74 68 65 20 65 78 61 6d 70 6c  wn in the exampl
1aa10 65 73 20 62 65 63 61 75 73 65 20 6f 6e 6c 79 20  es because only 
1aa20 74 68 65 20 66 69 72 73 74 20 74 68 72 65 65 20  the first three 
1aa30 64 69 67 69 74 73 20 61 72 65 20 73 69 67 6e 69  digits are signi
1aa40 66 69 63 61 6e 74 0a 74 6f 20 74 68 65 20 72 65  ficant.to the re
1aa50 73 75 6c 74 2c 20 62 75 74 20 74 68 65 20 69 6e  sult, but the in
1aa60 70 75 74 20 73 74 72 69 6e 67 20 63 61 6e 20 68  put string can h
1aa70 61 76 65 20 66 65 77 65 72 20 6f 72 20 6d 6f 72  ave fewer or mor
1aa80 65 20 74 68 61 6e 20 74 68 72 65 65 20 64 69 67  e than three dig
1aa90 69 74 73 0a 61 6e 64 20 74 68 65 20 64 61 74 65  its.and the date
1aaa0 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20  /time functions 
1aab0 77 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65 72 61  will still opera
1aac0 74 65 20 63 6f 72 72 65 63 74 6c 79 2e 29 5e 0a  te correctly.)^.
1aad0 53 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72 6d 61  Similarly, forma
1aae0 74 20 31 32 20 69 73 20 73 68 6f 77 6e 20 77 69  t 12 is shown wi
1aaf0 74 68 20 31 30 20 73 69 67 6e 69 66 69 63 61 6e  th 10 significan
1ab00 74 20 64 69 67 69 74 73 2c 20 62 75 74 20 74 68  t digits, but th
1ab10 65 20 64 61 74 65 2f 74 69 6d 65 0a 66 75 6e 63  e date/time.func
1ab20 74 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61 6c 6c  tions will reall
1ab30 79 20 61 63 63 65 70 74 20 61 73 20 6d 61 6e 79  y accept as many
1ab40 20 6f 72 20 61 73 20 66 65 77 20 64 69 67 69 74   or as few digit
1ab50 73 20 61 73 20 61 72 65 20 6e 65 63 65 73 73 61  s as are necessa
1ab60 72 79 20 74 6f 0a 72 65 70 72 65 73 65 6e 74 20  ry to.represent 
1ab70 74 68 65 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e  the Julian day n
1ab80 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  umber..</p>..<h3
1ab90 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e 0a  >Modifiers</h3>.
1aba0 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73 74  .<p>^The time st
1abb0 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c 6c  ring can be foll
1abc0 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20  owed by zero or 
1abd0 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20 74  more modifiers t
1abe0 68 61 74 20 0a 61 6c 74 65 72 20 64 61 74 65 20  hat .alter date 
1abf0 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 45 61  and/or time. ^Ea
1ac00 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20 61  ch modifier.is a
1ac10 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20   transformation 
1ac20 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64 20  that is applied 
1ac30 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c 75  to the time valu
1ac40 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a 5e  e to its left..^
1ac50 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 70  Modifiers are ap
1ac60 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  plied from left 
1ac70 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72 20  to right; order 
1ac80 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28  is important..^(
1ac90 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f  The available mo
1aca0 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66  difiers are as f
1acb0 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows.</p>..<ol
1acc0 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a  >.<li> NNN days.
1acd0 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c  <li> NNN hours.<
1ace0 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a  li> NNN minutes.
1acf0 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65  <li> NNN.NNNN se
1ad00 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d  conds.<li> NNN m
1ad10 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79  onths.<li> NNN y
1ad20 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20  ears.<li> start 
1ad30 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74  of month.<li> st
1ad40 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e  art of year.<li>
1ad50 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c   start of day.<l
1ad60 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69  i> weekday N.<li
1ad70 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e  > unixepoch.<li>
1ad80 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20   localtime.<li> 
1ad90 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70  utc .</ol>)^..<p
1ada0 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69 78 20  >^The first six 
1adb0 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68 72  modifiers (1 thr
1adc0 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79 20  ough 6) .simply 
1add0 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69 65  add the specifie
1ade0 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  d amount of time
1adf0 20 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e 64   to the date and
1ae00 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65 64   time .specified
1ae10 20 62 79 20 74 68 65 20 70 72 65 63 65 64 69 6e   by the precedin
1ae20 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e 64  g timestring and
1ae30 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 4e 6f 74   modifiers..^Not
1ae40 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b  e that "&plusmn;
1ae50 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b  NNN months" work
1ae60 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67 20 74  s by rendering t
1ae70 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65  he original date
1ae80 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d   into.the YYYY-M
1ae90 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61 64 64  M-DD format, add
1aea0 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b  ing the &plusmn;
1aeb0 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f  NNN to the MM mo
1aec0 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a  nth value, then.
1aed0 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20  normalizing the 
1aee0 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c 20  result.  ^Thus, 
1aef0 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  for example, the
1af00 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d 33 31   data 2001-03-31
1af10 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27 2b 31   modified.by '+1
1af20 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c 6c   month' initiall
1af30 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d 30 34  y yields 2001-04
1af40 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c 20 6f  -31, but April o
1af50 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79 73 0a  nly has 30 days.
1af60 73 6f 20 74 68 65 20 64 61 74 65 20 69 73 20 6e  so the date is n
1af70 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30 30  ormalized to 200
1af80 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73 69 6d  1-05-01.  ^A sim
1af90 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63 75  ilar effect occu
1afa0 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69 67  rs when.the orig
1afb0 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65 62  inal date is Feb
1afc0 72 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c 65  ruary 29 of a le
1afd0 61 70 79 65 61 72 20 61 6e 64 20 74 68 65 20 6d  apyear and the m
1afe0 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75 73  odifier is.&plus
1aff0 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72 65  mn;N years where
1b000 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74   N is not a mult
1b010 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f 70  iple of four.</p
1b020 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61 72  >..<p>^The "star
1b030 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73 20  t of" modifiers 
1b040 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73 68  (7 through 9) sh
1b050 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61 63  ift the date bac
1b060 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20 62  kwards .to the b
1b070 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
1b080 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79  current month, y
1b090 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a  ear or day.</p>.
1b0a0 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b 64 61  .<p>^The "weekda
1b0b0 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76 61  y" modifier adva
1b0c0 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66 6f  nces the date fo
1b0d0 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65 78  rward to the nex
1b0e0 74 20 64 61 74 65 20 0a 77 68 65 72 65 20 74 68  t date .where th
1b0f0 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65 72  e weekday number
1b100 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69 73   is N. Sunday is
1b110 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c   0, Monday is 1,
1b120 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f   and so forth.</
1b130 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75 6e 69  p>..<p>^The "uni
1b140 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72  xepoch" modifier
1b150 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73   (11) only works
1b160 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74 65   if it immediate
1b170 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69  ly follows .a ti
1b180 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20  mestring in the 
1b190 44 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d 61  DDDDDDDDDD forma
1b1a0 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69 66 69  t. .^This modifi
1b1b0 65 72 20 63 61 75 73 65 73 20 74 68 65 20 44 44  er causes the DD
1b1c0 44 44 44 44 44 44 44 44 20 74 6f 20 62 65 20 69  DDDDDDDD to be i
1b1d0 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74 20 0a  nterpreted not .
1b1e0 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61 79 20  as a Julian day 
1b1f0 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e 6f 72  number as it nor
1b200 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20  mally would be, 
1b210 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f 2f 65  but as.[http://e
1b220 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1b230 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 20 7c  wiki/Unix_time |
1b240 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20 74 68   Unix Time] - th
1b250 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65 63  e .number of sec
1b260 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2e  onds since 1970.
1b270 20 20 49 66 20 74 68 65 20 22 75 6e 69 78 65 70    If the "unixep
1b280 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 64 6f  och" modifier do
1b290 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20  es not.follow a 
1b2a0 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20 74 68  timestring of th
1b2b0 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44 44 44  e form DDDDDDDDD
1b2c0 44 20 77 68 69 63 68 20 65 78 70 72 65 73 73 65  D which expresse
1b2d0 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  s the number.of 
1b2e0 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39  seconds since 19
1b2f0 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72 20 6d  70 or if other m
1b300 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72 61 74  odifiers.separat
1b310 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68  e the "unixepoch
1b320 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d 20  " modifier from 
1b330 70 72 69 6f 72 20 44 44 44 44 44 44 44 44 44 44  prior DDDDDDDDDD
1b340 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61 76 69   then the.behavi
1b350 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
1b360 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73 69 6f  .Due to precisio
1b370 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 69 6d  n limitations im
1b380 70 6f 73 65 64 20 62 79 20 74 68 65 20 69 6d 70  posed by the imp
1b390 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73 65  lementations use
1b3a0 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74 65 67  .of 64-bit integ
1b3b0 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78 65 70  ers, the "unixep
1b3c0 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f 6e  och" modifier on
1b3d0 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61 74  ly works for.dat
1b3e0 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
1b3f0 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20 61  01-01 00:00:00 a
1b400 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31 30  nd 5352-11-01 10
1b410 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69 6d  :52:47 (unix tim
1b420 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39 32  es.of -621672192
1b430 30 30 20 74 68 72 6f 75 67 68 20 31 30 36 37 35  00 through 10675
1b440 31 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c 70  199167).</p>..<p
1b450 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65  >^The "localtime
1b460 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20  " modifier (12) 
1b470 61 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d 65  assumes the time
1b480 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c   string to its l
1b490 65 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65 72  eft is in.Univer
1b4a0 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20  sal Coordinated 
1b4b0 54 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20 61  Time (UTC) and a
1b4c0 64 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65 0a  djusts the time.
1b4d0 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69  string so that i
1b4e0 74 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c  t displays local
1b4f0 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c  time.  If "local
1b500 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20  time".follows a 
1b510 74 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74  time that is not
1b520 20 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20 62   UTC, then the b
1b530 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
1b540 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74 63  ined..^(The "utc
1b550 22 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69 74  " is the opposit
1b560 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22  e of "localtime"
1b570 2e 20 20 22 75 74 63 22 20 61 73 73 75 6d 65 73  .  "utc" assumes
1b580 20 74 68 61 74 20 74 68 65 20 73 74 72 69 6e 67   that the string
1b590 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20  .to its left is 
1b5a0 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69 6d  in the local tim
1b5b0 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73 74  ezone and adjust
1b5c0 73 20 74 68 61 74 20 73 74 72 69 6e 67 20 74 6f  s that string to
1b5d0 20 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49 66   be in UTC.)^.If
1b5e0 20 74 68 65 20 70 72 69 6f 72 20 73 74 72 69 6e   the prior strin
1b5f0 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63 61  g is not in loca
1b600 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20  ltime, then the 
1b610 72 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22 20  result of "utc" 
1b620 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70  is.undefined.</p
1b630 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c  >..<h3>Examples<
1b640 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  /h3>..^(<p>Compu
1b650 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 64  te the current d
1b660 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ate.<p>..<blockq
1b670 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65  uote>SELECT date
1b680 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71  ('now');</blockq
1b690 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
1b6a0 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74 20 64  mpute the last d
1b6b0 61 79 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ay of the curren
1b6c0 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62  t month.</p>..<b
1b6d0 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54  lockquote>SELECT
1b6e0 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61   date('now','sta
1b6f0 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b 31  rt of month','+1
1b700 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79 27   month','-1 day'
1b710 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1b720 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1b730 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69   the date and ti
1b740 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20  me given a unix 
1b750 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34  timestamp 109294
1b760 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  1466.</p>..<bloc
1b770 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c 45  kquote>.    SELE
1b780 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32  CT datetime(1092
1b790 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f  941466, 'unixepo
1b7a0 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  ch');.</blockquo
1b7b0 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
1b7c0 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64  ute the date and
1b7d0 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e   time given a un
1b7e0 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39  ix timestamp 109
1b7f0 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63 6f  2941466, and .co
1b800 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f 75  mpensate for you
1b810 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65  r local timezone
1b820 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1b830 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74  te>.  SELECT dat
1b840 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36  etime(1092941466
1b850 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20 27  , 'unixepoch', '
1b860 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62  localtime');.</b
1b870 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1b880 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63  <p>Compute the c
1b890 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d 65  urrent unix time
1b8a0 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  stamp.</p>..<blo
1b8b0 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
1b8c0 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  T strftime('%s',
1b8d0 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  'now');.</blockq
1b8e0 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
1b8f0 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
1b900 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 74   of days since t
1b910 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20 74 68  he signing of th
1b920 65 20 55 53 20 44 65 63 6c 61 72 61 74 69 6f 6e  e US Declaration
1b930 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e 63 65  .of Independence
1b940 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1b950 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75 6c  te>.  SELECT jul
1b960 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20  ianday('now') - 
1b970 6a 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36 2d  julianday('1776-
1b980 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  07-04');.</block
1b990 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1b9a0 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65  ompute the numbe
1b9b0 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
1b9c0 63 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  ce a particular 
1b9d0 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c  moment in 2004:<
1b9e0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1b9f0 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74  >.  SELECT strft
1ba00 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20  ime('%s','now') 
1ba10 2d 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  - strftime('%s',
1ba20 27 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33  '2004-01-01 02:3
1ba30 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  4:56');.</blockq
1ba40 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a 43  uote>)^..^(<p>.C
1ba50 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20  ompute the date 
1ba60 6f 66 20 74 68 65 20 66 69 72 73 74 20 54 75 65  of the first Tue
1ba70 73 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72 0a  sday in October.
1ba80 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
1ba90 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  year..</p>..<blo
1baa0 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
1bab0 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74  T date('now','st
1bac0 61 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b 39  art of year','+9
1bad0 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64 61   months','weekda
1bae0 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  y 2');.</blockqu
1baf0 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1bb00 70 75 74 65 20 74 68 65 20 74 69 6d 65 20 73 69  pute the time si
1bb10 6e 63 65 20 74 68 65 20 75 6e 69 78 20 65 70 6f  nce the unix epo
1bb20 63 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a 28  ch in seconds .(
1bb30 6c 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27 25  like strftime('%
1bb40 73 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70 74  s','now') except
1bb50 20 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74 69   includes fracti
1bb60 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e 0a  onal part):</p>.
1bb70 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1bb80 53 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64 61  SELECT (julianda
1bb90 79 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30 35  y('now') - 24405
1bba0 38 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a 3c  87.5)*86400.0;.<
1bbb0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1bbc0 3c 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64 20  <h3>Caveats And 
1bbd0 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  Bugs</h3>..<p>Th
1bbe0 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66  e computation of
1bbf0 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70 65   local time depe
1bc00 6e 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20 74  nds heavily on t
1bc10 68 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69  he whim .of poli
1bc20 74 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20 74  ticians and is t
1bc30 68 75 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f  hus difficult to
1bc40 20 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f 72   get correct for
1bc50 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 5e   .all locales. ^
1bc60 49 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e  In this implemen
1bc70 74 61 74 69 6f 6e 2c 20 74 68 65 20 73 74 61 6e  tation, the stan
1bc80 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 0a  dard C library .
1bc90 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74 69  function localti
1bca0 6d 65 5f 72 28 29 20 69 73 20 75 73 65 64 20 74  me_r() is used t
1bcb0 6f 20 61 73 73 69 73 74 20 69 6e 20 74 68 65 20  o assist in the 
1bcc0 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20 0a  calculation of .
1bcd0 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28 54  local time.  ^(T
1bce0 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72 28  he .localtime_r(
1bcf0 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72  ) C function nor
1bd00 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b 73  mally only works
1bd10 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77 65   for years.betwe
1bd20 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33 37  en 1970 and 2037
1bd30 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73  . For dates outs
1bd40 69 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c 20  ide this range, 
1bd50 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74 73  SQLite .attempts
1bd60 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61 72   to map the year
1bd70 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61 6c   into an equival
1bd80 65 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e 20  ent year within 
1bd90 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f 20  .this range, do 
1bda0 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c  the calculation,
1bdb0 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79 65   then map the ye
1bdc0 61 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a  ar back.)^</p>..
1bdd0 0a 3c 70 3e 5e 28 54 68 65 73 65 20 66 75 6e 63  .<p>^(These func
1bde0 74 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  tions only work 
1bdf0 66 6f 72 20 64 61 74 65 73 20 62 65 74 77 65 65  for dates betwee
1be00 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a  n 0000-01-01 00:
1be10 30 30 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d 31  00:00.and 9999-1
1be20 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 20 28 6a  2-31 23:59:59 (j
1be30 75 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d 62 65  ulidan day numbe
1be40 72 73 20 31 37 32 31 30 35 39 2e 35 20 74 68 72  rs 1721059.5 thr
1be50 6f 75 67 68 20 35 33 37 33 34 38 34 2e 35 29 2e  ough 5373484.5).
1be60 29 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f 75 74  )^.For dates out
1be70 73 69 64 65 20 74 68 61 74 20 72 61 6e 67 65 2c  side that range,
1be80 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
1be90 74 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73 20  these.functions 
1bea0 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c 2f  are undefined.</
1beb0 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61  p>..<p>Non-Vista
1bec0 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72   Windows platfor
1bed0 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20  ms only support 
1bee0 6f 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20 72  one set of DST r
1bef0 75 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e 6c  ules. .Vista onl
1bf00 79 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e 20  y supports two. 
1bf10 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74 68  Therefore, on th
1bf20 65 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20 0a  ese platforms, .
1bf30 68 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20 63  historical DST c
1bf40 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c 6c  alculations will
1bf50 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 0a   be incorrect. .
1bf60 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 20  For example, in 
1bf70 74 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37 20  the US, in 2007 
1bf80 74 68 65 20 44 53 54 20 72 75 6c 65 73 20 63 68  the DST rules ch
1bf90 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74  anged. .Non-Vist
1bfa0 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f  a Windows platfo
1bfb0 72 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e 65  rms apply the ne
1bfc0 77 20 32 30 30 37 20 44 53 54 20 72 75 6c 65 73  w 2007 DST rules
1bfd0 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f 75   .to all previou
1bfe0 73 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c 2e  s years as well.
1bff0 20 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d 65   Vista does some
1c000 77 68 61 74 20 62 65 74 74 65 72 0a 67 65 74 74  what better.gett
1c010 69 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72 72  ing results corr
1c020 65 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38 36  ect back to 1986
1c030 2c 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65 73  , when the rules
1c040 20 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e 67   were also chang
1c050 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20  ed.</p>..<p>All 
1c060 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74 61  internal computa
1c070 74 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68 65  tions assume the
1c080 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b   .[http://en.wik
1c090 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
1c0a0 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64  Gregorian_calend
1c0b0 61 72 20 7c 20 47 72 65 67 6f 72 69 61 6e 20 63  ar | Gregorian c
1c0c0 61 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d 2e  alendar].system.
1c0d0 20 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73 73    It is also ass
1c0e0 75 6d 65 64 20 74 68 61 74 20 65 76 65 72 79 0a  umed that every.
1c0f0 64 61 79 20 69 73 20 65 78 61 63 74 6c 79 20 38  day is exactly 8
1c100 36 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e 20  6400 seconds in 
1c110 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  duration.</p>..<
1c120 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
1c130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c170 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67 67  ###.Section {Agg
1c180 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73  regate Functions
1c190 7d 20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67 66  } aggfunc {*aggf
1c1a0 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  unc}.</tcl>..<p>
1c1b0 0a 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66  .The aggregate f
1c1c0 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62  unctions shown b
1c1d0 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62  elow are availab
1c1e0 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  le by default.  
1c1f0 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65  Additional.aggre
1c200 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77  gate functions w
1c210 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79 20  ritten in C may 
1c220 62 65 20 61 64 64 65 64 20 75 73 69 6e 67 20 74  be added using t
1c230 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65  he .[sqlite3_cre
1c240 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c  ate_function()]<
1c250 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70  /a>.API.</p>..<p
1c260 3e 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72 65 67  >.^In any aggreg
1c270 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  ate function tha
1c280 74 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65  t takes a single
1c290 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20   argument, that 
1c2a0 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20  argument.can be 
1c2b0 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20  preceded by the 
1c2c0 6b 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54  keyword DISTINCT
1c2d0 2e 20 20 5e 49 6e 20 73 75 63 68 20 63 61 73 65  .  ^In such case
1c2e0 73 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65  s, duplicate.ele
1c2f0 6d 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72  ments are filter
1c300 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20  ed before being 
1c310 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20  passed into the 
1c320 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1c330 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65  on..^For example
1c340 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22  , the function "
1c350 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58  count(distinct X
1c360 29 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74  )" will return t
1c370 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73  he number.of dis
1c380 74 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20  tinct values of 
1c390 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64  column X instead
1c3a0 20 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   of the total nu
1c3b0 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c  mber of non-null
1c3c0 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d  .values in colum
1c3d0 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c  n X..</p>..<tabl
1c3e0 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
1c3f0 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e  adding=10>.<tcl>
1c400 0a 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58 29  .funcdef {avg(X)
1c410 7d 20 7b 2a 61 76 67 20 7b 61 76 67 28 29 20 61  } {*avg {avg() a
1c420 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1c430 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76 67  n}} {.  ^The avg
1c440 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  () function.  re
1c450 74 75 72 6e 73 20 74 68 65 20 61 76 65 72 61 67  turns the averag
1c460 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e  e value of all n
1c470 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e  on-NULL <i>X</i>
1c480 20 77 69 74 68 69 6e 20 61 0a 20 20 67 72 6f 75   within a.  grou
1c490 70 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e 64 20  p.  ^String and 
1c4a0 42 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74  BLOB values that
1c4b0 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b   do not look lik
1c4c0 65 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20 20  e numbers are.  
1c4d0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 30  interpreted as 0
1c4e0 2e 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20  ..  ^The result 
1c4f0 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c 77 61  of avg() is alwa
1c500 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ys a floating po
1c510 69 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e  int value as lon
1c520 67 20 61 73 0a 20 20 61 74 20 74 68 65 72 65 20  g as.  at there 
1c530 69 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20  is at least one 
1c540 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65  non-NULL input e
1c550 76 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70  ven if all.  inp
1c560 75 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73  uts are integers
1c570 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
1c580 66 20 61 76 67 28 29 20 69 73 20 4e 55 4c 4c 20  f avg() is NULL 
1c590 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20  if and only if. 
1c5a0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
1c5b0 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20  n-NULL inputs.  
1c5c0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75  .}..funcdef {cou
1c5d0 6e 74 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20  nt(X) count(*)} 
1c5e0 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28 29  {*count {count()
1c5f0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1c600 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 63  ion}} {.  ^The c
1c610 6f 75 6e 74 28 58 29 20 66 75 6e 63 74 69 6f 6e  ount(X) function
1c620 20 72 65 74 75 72 6e 73 0a 20 20 61 20 63 6f 75   returns.  a cou
1c630 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72  nt of the number
1c640 20 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74   of times.  that
1c650 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74   <i>X</i> is not
1c660 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70   NULL in a group
1c670 2e 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a 29  .  ^The count(*)
1c680 20 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69 74   function.  (wit
1c690 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29 20  h no arguments) 
1c6a0 72 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61  returns the tota
1c6b0 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  l number of rows
1c6c0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d   in the group..}
1c6d0 0a 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70  ..funcdef {group
1c6e0 5f 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70  _concat(X) group
1c6f0 5f 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 0a  _concat(X,Y)} {.
1c700 20 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74 20    *group_concat 
1c710 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20  {group_concat() 
1c720 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1c730 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 67  on}.} {.  ^The g
1c740 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 66 75  roup_concat() fu
1c750 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20  nction returns. 
1c760 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20   a string which 
1c770 69 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61  is the concatena
1c780 74 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f  tion of.  all no
1c790 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66  n-NULL values of
1c7a0 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66 20   <i>X</i>.  ^If 
1c7b0 70 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f  parameter <i>Y</
1c7c0 69 3e 20 69 73 20 70 72 65 73 65 6e 74 20 74 68  i> is present th
1c7d0 65 6e 0a 20 20 69 74 20 69 73 20 75 73 65 64 20  en.  it is used 
1c7e0 61 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72  as the separator
1c7f0 0a 20 20 62 65 74 77 65 65 6e 20 69 6e 73 74 61  .  between insta
1c800 6e 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e  nces of <i>X</i>
1c810 2e 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c 22  .  ^A comma (","
1c820 29 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  ) is used as the
1c830 20 73 65 70 61 72 61 74 6f 72 0a 20 20 69 66 20   separator.  if 
1c840 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74  <i>Y</i> is omit
1c850 74 65 64 2e 20 20 54 68 65 20 6f 72 64 65 72 20  ted.  The order 
1c860 6f 66 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61  of the concatena
1c870 74 65 64 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a  ted elements is.
1c880 20 20 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a    arbitrary..}..
1c890 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d  funcdef {max(X)}
1c8a0 20 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a 61   {*maxAggFunc *a
1c8b0 67 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61 67  gg_max {max() ag
1c8c0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1c8d0 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78 28  }} {.  ^The max(
1c8e0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1c8f0 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74  tion.  returns t
1c900 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
1c910 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69   of all values i
1c920 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e  n the group..  ^
1c930 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  The maximum valu
1c940 65 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74  e is the value t
1c950 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74  hat would be ret
1c960 75 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e  urned last in an
1c970 0a 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74  .  ORDER BY on t
1c980 68 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20  he same column. 
1c990 20 5e 41 67 67 72 65 67 61 74 65 20 6d 61 78 28   ^Aggregate max(
1c9a0 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a  ) returns NULL .
1c9b0 20 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66    if and only if
1c9c0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
1c9d0 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e  n-NULL values in
1c9e0 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66   the group..}..f
1c9f0 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20  uncdef {min(X)} 
1ca00 7b 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61 67  {*minAggFunc *ag
1ca10 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67  g_min {min() agg
1ca20 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
1ca30 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29  } {.  ^The min()
1ca40 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1ca50 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
1ca60 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55  e minimum non-NU
1ca70 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20  LL value of all 
1ca80 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
1ca90 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69  oup..  ^The mini
1caa0 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65  mum value is the
1cab0 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20   first non-NULL 
1cac0 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64  value that would
1cad0 20 61 70 70 65 61 72 0a 20 20 69 6e 20 61 6e 20   appear.  in an 
1cae0 4f 52 44 45 52 20 42 59 20 6f 66 20 74 68 65 20  ORDER BY of the 
1caf0 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72 65  column..  ^Aggre
1cb00 67 61 74 65 20 6d 69 6e 28 29 20 72 65 74 75 72  gate min() retur
1cb10 6e 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f  ns NULL if and o
1cb20 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65  nly if there are
1cb30 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20 76   no non-NULL.  v
1cb40 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
1cb50 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  up..}..funcdef {
1cb60 73 75 6d 28 58 29 20 74 6f 74 61 6c 28 58 29 7d  sum(X) total(X)}
1cb70 20 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a 73   {.  *sumFunc *s
1cb80 75 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75 6d  um *total.  {sum
1cb90 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1cba0 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c 28  ction}.  {total(
1cbb0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1cbc0 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65  tion}.} {.  ^The
1cbd0 20 73 75 6d 28 29 20 61 6e 64 20 74 6f 74 61 6c   sum() and total
1cbe0 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1cbf0 63 74 69 6f 6e 73 0a 20 20 72 65 74 75 72 6e 20  ctions.  return 
1cc00 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e  sum of all non-N
1cc10 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  ULL values in th
1cc20 65 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66 20 74  e group..  ^If t
1cc30 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
1cc40 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20  NULL input rows 
1cc50 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72  then sum() retur
1cc60 6e 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f  ns.  NULL but to
1cc70 74 61 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e  tal() returns 0.
1cc80 30 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74  0..  NULL is not
1cc90 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70   normally a help
1cca0 66 75 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74  ful result for t
1ccb0 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77  he sum of no row
1ccc0 73 0a 20 20 62 75 74 20 74 68 65 20 53 51 4c 20  s.  but the SQL 
1ccd0 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65  standard require
1cce0 73 20 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74  s it and most ot
1ccf0 68 65 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61  her.  SQL databa
1cd00 73 65 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65  se engines imple
1cd10 6d 65 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20  ment sum() that 
1cd20 77 61 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f  way so SQLite do
1cd30 65 73 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73  es it in the.  s
1cd40 61 6d 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72  ame way in order
1cd50 20 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c   to be compatibl
1cd60 65 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61  e.   The non-sta
1cd70 6e 64 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75  ndard total() fu
1cd80 6e 63 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76  nction.  is prov
1cd90 69 64 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e  ided as a conven
1cda0 69 65 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b  ient way to work
1cdb0 20 61 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73   around this des
1cdc0 69 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e  ign problem.  in
1cdd0 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   the SQL languag
1cde0 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54 68  e.</p>..  <p>^Th
1cdf0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61  e result of tota
1ce00 6c 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20  l() is always a 
1ce10 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
1ce20 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72 65 73  alue..  ^The res
1ce30 75 6c 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20  ult of sum() is 
1ce40 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
1ce50 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c   if all non-NULL
1ce60 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65   inputs are inte
1ce70 67 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e 79 20  gers..  ^If any 
1ce80 69 6e 70 75 74 20 74 6f 20 73 75 6d 28 29 20 69  input to sum() i
1ce90 73 20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e 74  s neither an int
1cea0 65 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20  eger or a NULL. 
1ceb0 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75   then sum() retu
1cec0 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  rns a floating p
1ced0 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20 77 68 69  oint value.  whi
1cee0 63 68 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61  ch might be an a
1cef0 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20  pproximation to 
1cf00 74 68 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70  the true sum.</p
1cf10 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29 20 77  >..  <p>^Sum() w
1cf20 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22 69 6e  ill throw an "in
1cf30 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 22 20  teger overflow" 
1cf40 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c  exception if all
1cf50 20 69 6e 70 75 74 73 0a 20 20 61 72 65 20 69 6e   inputs.  are in
1cf60 74 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20  tegers or NULL. 
1cf70 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20   and an integer 
1cf80 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20  overflow occurs 
1cf90 61 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72  at any point dur
1cfa0 69 6e 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74  ing the computat
1cfb0 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28 29 20  ion..  ^Total() 
1cfc0 6e 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20  never throws an 
1cfd0 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
1cfe0 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62  ..}.</tcl>.</tab
1cff0 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  le>..<tcl>.#####
1d000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d040 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1d050 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72 74 20  n INSERT insert 
1d060 7b 49 4e 53 45 52 54 20 2a 49 4e 53 45 52 54 73  {INSERT *INSERTs
1d070 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
1d080 20 69 6e 73 65 72 74 2d 73 74 6d 74 20 31 0a 3c   insert-stmt 1.<
1d090 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  /tcl>..<p>The IN
1d0a0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63  SERT statement c
1d0b0 6f 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62 61  omes in three ba
1d0c0 73 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c 75 6c  sic forms.  .<ul
1d0d0 3e 0a 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 66 69  >.<li><p>^The fi
1d0e0 72 73 74 20 66 6f 72 6d 20 28 77 69 74 68 20 74  rst form (with t
1d0f0 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77  he "VALUES" keyw
1d100 6f 72 64 29 20 63 72 65 61 74 65 73 20 6f 6e 65  ord) creates one
1d110 20 6f 72 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77   or more.new row
1d120 73 20 69 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67  s in.an existing
1d130 20 74 61 62 6c 65 2e 20 5e 49 66 20 6e 6f 20 63   table. ^If no c
1d140 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70  olumn-list is sp
1d150 65 63 69 66 69 65 64 20 74 68 65 6e 20 74 68 65  ecified then the
1d160 20 6e 75 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65   number.of value
1d170 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
1d180 65 61 63 68 20 72 6f 77 0a 6d 75 73 74 20 62 65  each row.must be
1d190 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
1d1a0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1d1b0 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
1d1c0 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 0a 74   ^In this case.t
1d1d0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61  he result of eva
1d1e0 6c 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74  luating the left
1d1f0 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e  -most expression
1d200 20 69 6e 20 65 61 63 68 20 74 65 72 6d 20 6f 66   in each term of
1d210 0a 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74  .the VALUES list
1d220 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74   is inserted int
1d230 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  o the left-most 
1d240 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 65 61  column of the ea
1d250 63 68 20 6e 65 77 20 72 6f 77 2c 0a 61 6e 64 20  ch new row,.and 
1d260 66 6f 72 74 68 20 66 6f 72 20 65 61 63 68 20 73  forth for each s
1d270 75 62 73 65 71 75 65 6e 74 20 65 78 70 72 65 73  ubsequent expres
1d280 73 69 6f 6e 2e 20 5e 49 66 20 61 0a 63 6f 6c 75  sion. ^If a.colu
1d290 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69  mn-list is speci
1d2a0 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e  fied, then the n
1d2b0 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
1d2c0 69 6e 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  in each term of 
1d2d0 74 68 65 0a 56 41 4c 55 45 20 6c 69 73 74 20 6d  the.VALUE list m
1d2e0 75 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75  ust match the nu
1d2f0 6d 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65  mber of.specifie
1d300 64 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68  d columns. ^Each
1d310 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 63 6f   of the named co
1d320 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65 77  lumns of the new
1d330 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65   row is populate
1d340 64 0a 77 69 74 68 20 74 68 65 20 72 65 73 75 6c  d.with the resul
1d350 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  ts of evaluating
1d360 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
1d370 6e 67 20 56 41 4c 55 45 53 20 65 78 70 72 65 73  ng VALUES expres
1d380 73 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c  sion. ^Table.col
1d390 75 6d 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  umns that do not
1d3a0 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 63   appear in the c
1d3b0 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 70  olumn list are p
1d3c0 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 74 68  opulated with th
1d3d0 65 20 64 65 66 61 75 6c 74 0a 63 6f 6c 75 6d 6e  e default.column
1d3e0 20 76 61 6c 75 65 20 28 73 70 65 63 69 66 69 65   value (specifie
1d3f0 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
1d400 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
1d410 61 74 65 6d 65 6e 74 29 2c 20 6f 72 20 77 69 74  atement), or wit
1d420 68 20 4e 55 4c 4c 20 69 66 0a 6e 6f 20 64 65 66  h NULL if.no def
1d430 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70  ault value is sp
1d440 65 63 69 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70  ecified...<li><p
1d450 3e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d  >The second form
1d460 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20 73   of the INSERT s
1d470 74 61 74 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e  tatement contain
1d480 73 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  s a SELECT state
1d490 6d 65 6e 74 0a 69 6e 73 74 65 61 64 20 6f 66 20  ment.instead of 
1d4a0 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 2e  a VALUES clause.
1d4b0 20 5e 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73   ^A new entry is
1d4c0 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
1d4d0 68 65 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63  he table for eac
1d4e0 68 0a 72 6f 77 20 6f 66 20 64 61 74 61 20 72 65  h.row of data re
1d4f0 74 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74  turned by execut
1d500 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 73  ing the SELECT s
1d510 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20  tatement. ^If a 
1d520 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73  column-list is.s
1d530 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75  pecified, the nu
1d540 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1d550 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  in the result of
1d560 20 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74   the SELECT must
1d570 20 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20   be the same.as 
1d580 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  the number of it
1d590 65 6d 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ems in the colum
1d5a0 6e 2d 6c 69 73 74 2e 20 5e 4f 74 68 65 72 77 69  n-list. ^Otherwi
1d5b0 73 65 2c 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e  se, if no column
1d5c0 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66 69  -list is.specifi
1d5d0 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ed, the number o
1d5e0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1d5f0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53   result of the S
1d600 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74 68  ELECT must be th
1d610 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75  e same.as the nu
1d620 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1d630 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 41  in the table. ^A
1d640 6e 79 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  ny SELECT statem
1d650 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 63  ent, including.c
1d660 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 20  ompound SELECTs 
1d670 61 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65  and SELECT state
1d680 6d 65 6e 74 73 20 77 69 74 68 20 4f 52 44 45 52  ments with ORDER
1d690 20 42 59 20 61 6e 64 2f 6f 72 20 4c 49 4d 49 54   BY and/or LIMIT
1d6a0 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20 62   clauses, .may b
1d6b0 65 20 75 73 65 64 20 69 6e 20 61 6e 20 49 4e 53  e used in an INS
1d6c0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66  ERT statement of
1d6d0 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69   this form...<li
1d6e0 3e 3c 70 3e 54 68 65 20 74 68 69 72 64 20 66 6f  ><p>The third fo
1d6f0 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rm of an INSERT 
1d700 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77 69 74  statement is wit
1d710 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  h DEFAULT VALUES
1d720 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54 20 2e  ..^(The INSERT .
1d730 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  .. DEFAULT VALUE
1d740 53 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 73 65  S statement inse
1d750 72 74 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77  rts a single new
1d760 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61   row into the.na
1d770 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61  med table.)^ ^Ea
1d780 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
1d790 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75   new row is popu
1d7a0 6c 61 74 65 64 20 77 69 74 68 20 69 74 73 20 64  lated with its d
1d7b0 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 0a 6f 72  efault value,.or
1d7c0 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 69 66 20   with a NULL if 
1d7d0 6e 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  no default value
1d7e0 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
1d7f0 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6c   part of the col
1d800 75 6d 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 20 69  umn.definition i
1d810 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  n the CREATE TAB
1d820 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  LE statement...<
1d830 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70  /ul>..<p>^The op
1d840 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d  tional conflict-
1d850 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68  clause allows th
1d860 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  e specification 
1d870 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  of an alternativ
1d880 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  e.constraint con
1d890 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
1d8a0 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
1d8b0 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e  e during this on
1d8c0 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64  e INSERT command
1d8d0 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f  ..See the sectio
1d8e0 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e  n titled.[ON CON
1d8f0 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
1d900 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
1d910 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  n..For compatibi
1d920 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c  lity with MySQL,
1d930 20 5e 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c   ^the parser all
1d940 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66 20 74  ows the use of t
1d950 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72  he.single keywor
1d960 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f  d <a href="lang_
1d970 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45  replace.html">RE
1d980 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20  PLACE</a> as an 
1d990 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45  .alias for "INSE
1d9a0 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a  RT OR REPLACE"..
1d9b0 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e  .<p>^(The option
1d9c0 61 6c 20 22 3c 69 3e 64 61 74 61 62 61 73 65 2d  al "<i>database-
1d9d0 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e  name</i><b>.</b>
1d9e0 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  " prefix on the 
1d9f0 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  <i>table-name</i
1da00 3e 0a 69 73 20 73 75 70 70 6f 72 74 20 66 6f 72  >.is support for
1da10 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52   top-level INSER
1da20 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c  T statements onl
1da30 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65  y.)^  ^The table
1da40 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e   name must be.un
1da50 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20 49 4e  qualified for IN
1da60 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20  SERT statements 
1da70 74 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69  that occur withi
1da80 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  n [CREATE TRIGGE
1da90 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e  R] statements..^
1daa0 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 22  Similarly, the "
1dab0 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20  DEFAULT VALUES" 
1dac0 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45  form of the INSE
1dad0 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  RT statement is 
1dae0 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f  supported for.to
1daf0 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
1db00 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61  tatements only a
1db10 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52  nd not for INSER
1db20 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  T statements wit
1db30 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70  hin.triggers..<p
1db40 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1db50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1db60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1db70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1db80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1db90 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1dba0 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61  {ON CONFLICT cla
1dbb0 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b  use} conflict {{
1dbc0 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d  conflict clause}
1dbd0 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a   {ON CONFLICT}}.
1dbe0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  .BubbleDiagram c
1dbf0 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c  onflict-clause.<
1dc00 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e  /tcl>..<p>The ON
1dc10 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1dc20 20 69 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61   is not a separa
1dc30 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20  te SQL command. 
1dc40 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61   It is a.non-sta
1dc50 6e 64 61 72 64 20 63 6c 61 75 73 65 20 74 68 61  ndard clause tha
1dc60 74 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20  t can appear in 
1dc70 6d 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63  many other SQL c
1dc80 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67  ommands..It is g
1dc90 69 76 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63  iven its own sec
1dca0 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63  tion in this doc
1dcb0 75 6d 65 6e 74 20 62 65 63 61 75 73 65 20 69 74  ument because it
1dcc0 20 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20   is not.part of 
1dcd0 73 74 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64  standard SQL and
1dce0 20 74 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74   therefore might
1dcf0 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72   not be familiar
1dd00 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73  .</p>..<p>^The s
1dd10 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e  yntax for the ON
1dd20 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1dd30 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f   is as shown abo
1dd40 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54  ve for.the CREAT
1dd50 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e  E TABLE command.
1dd60 20 20 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52    ^For the INSER
1dd70 54 20 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d  T and.UPDATE com
1dd80 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f  mands, the keywo
1dd90 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54  rds "ON CONFLICT
1dda0 22 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  " are replaced b
1ddb0 79 20 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74  y "OR" so that.t
1ddc0 68 65 20 73 79 6e 74 61 78 20 72 65 61 64 73 20  he syntax reads 
1ddd0 6d 6f 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20  more naturally. 
1dde0 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e   For example, in
1ddf0 73 74 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54  stead of."INSERT
1de00 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e   ON CONFLICT IGN
1de10 4f 52 45 22 20 77 65 20 68 61 76 65 20 22 49 4e  ORE" we have "IN
1de20 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e  SERT OR IGNORE".
1de30 0a 54 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68  .The keywords ch
1de40 61 6e 67 65 20 62 75 74 20 74 68 65 20 6d 65 61  ange but the mea
1de50 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75  ning of the clau
1de60 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65  se is the same.e
1de70 69 74 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a  ither way.</p>..
1de80 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  <p>The ON CONFLI
1de90 43 54 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65  CT clause applie
1dea0 73 20 74 6f 20 55 4e 49 51 55 45 20 61 6e 64 20  s to UNIQUE and 
1deb0 4e 4f 54 20 4e 55 4c 4c 0a 63 6f 6e 73 74 72 61  NOT NULL.constra
1dec0 69 6e 74 73 20 28 61 6e 64 20 74 6f 20 50 52 49  ints (and to PRI
1ded0 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
1dee0 69 6e 74 73 20 77 68 69 63 68 20 66 6f 72 20 74  ints which for t
1def0 68 65 20 70 75 72 70 6f 73 65 73 20 0a 6f 66 20  he purposes .of 
1df00 74 68 69 73 20 73 65 63 74 69 6f 6e 20 61 72 65  this section are
1df10 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20   the same thing 
1df20 61 73 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  as UNIQUE constr
1df30 61 69 6e 74 73 29 2e 0a 54 68 65 20 4f 4e 20 43  aints)..The ON C
1df40 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
1df50 6d 20 64 6f 65 73 20 6e 6f 74 0a 61 70 70 6c 79  m does not.apply
1df60 20 74 6f 20 5b 46 4f 52 45 49 47 4e 20 4b 45 59   to [FOREIGN KEY
1df70 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 0a 54   constraints]..T
1df80 68 65 72 65 20 61 72 65 20 66 69 76 65 20 63 6f  here are five co
1df90 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1dfa0 6e 20 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f 69  n algorithm choi
1dfb0 63 65 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20 41  ces:.ROLLBACK, A
1dfc0 42 4f 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e 4f  BORT, FAIL, IGNO
1dfd0 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45 2e  RE, and REPLACE.
1dfe0 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  .^The default co
1dff0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1e000 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41  n algorithm is A
1e010 42 4f 52 54 2e 20 20 54 68 69 73 0a 69 73 20 77  BORT.  This.is w
1e020 68 61 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f  hat they mean:</
1e030 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e  p>..<dl>.<dt><b>
1e040 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74  ROLLBACK</b></dt
1e050 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
1e060 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
1e070 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1e080 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52  on occurs, the R
1e090 4f 4c 4c 42 41 43 4b 0a 72 65 73 6f 6c 75 74 69  OLLBACK.resoluti
1e0a0 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f  on algorithm abo
1e0b0 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
1e0c0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69  SQL statement wi
1e0d0 74 68 0a 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e  th.an SQLITE_CON
1e0e0 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e  STRAINT error an
1e0f0 64 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 68 65  d rolls back the
1e100 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
1e110 74 69 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72 61  tion..^If no tra
1e120 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61 63 74 69  nsaction is.acti
1e130 76 65 20 28 6f 74 68 65 72 20 74 68 61 6e 20 74  ve (other than t
1e140 68 65 20 69 6d 70 6c 69 65 64 20 74 72 61 6e 73  he implied trans
1e150 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 63  action that is c
1e160 72 65 61 74 65 64 20 6f 6e 20 65 76 65 72 79 0a  reated on every.
1e170 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74 68  command) then th
1e180 65 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73 6f 6c  e ROLLBACK resol
1e190 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
1e1a0 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
1e1b0 73 20 74 68 65 0a 41 42 4f 52 54 20 61 6c 67 6f  s the.ABORT algo
1e1c0 72 69 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a  rithm.</p></dd>.
1e1d0 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62  .<dt><b>ABORT</b
1e1e0 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
1e1f0 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
1e200 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
1e210 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
1e220 74 68 65 20 41 42 4f 52 54 0a 72 65 73 6f 6c 75  the ABORT.resolu
1e230 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61  tion algorithm a
1e240 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  borts the curren
1e250 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  t SQL statement.
1e260 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 43  with an SQLITE_C
1e270 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20  ONSTRAINT error 
1e280 61 6e 64 20 62 61 63 6b 73 20 6f 75 74 20 61 6e  and backs out an
1e290 79 20 63 68 61 6e 67 65 73 0a 6d 61 64 65 20 62  y changes.made b
1e2a0 79 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  y the current SQ
1e2b0 4c 20 73 74 61 74 65 6d 65 6e 74 3b 20 62 75 74  L statement; but
1e2c0 20 63 68 61 6e 67 65 73 20 63 61 75 73 65 64 0a   changes caused.
1e2d0 62 79 20 70 72 69 6f 72 20 53 51 4c 20 73 74 61  by prior SQL sta
1e2e0 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
1e2f0 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74  he same transact
1e300 69 6f 6e 20 61 72 65 20 70 72 65 73 65 72 76 65  ion are preserve
1e310 64 20 61 6e 64 20 74 68 65 0a 74 72 61 6e 73 61  d and the.transa
1e320 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63  ction remains ac
1e330 74 69 76 65 2e 0a 54 68 69 73 20 69 73 20 74 68  tive..This is th
1e340 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69  e default behavi
1e350 6f 72 20 61 6e 64 20 74 68 65 20 62 65 68 61 76  or and the behav
1e360 69 6f 72 20 73 70 65 63 69 66 69 65 64 20 62 79  ior specified by
1e370 20 74 68 65 20 53 51 4c 0a 73 74 61 6e 64 61 72   the SQL.standar
1e380 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  d.</p></dd>..<dt
1e390 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74  ><b>FAIL</b></dt
1e3a0 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
1e3b0 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
1e3c0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1e3d0 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 46  on occurs, the F
1e3e0 41 49 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61  AIL.resolution a
1e3f0 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20  lgorithm aborts 
1e400 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20  the current SQL 
1e410 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 20 61  statement with a
1e420 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  n.SQLITE_CONSTRA
1e430 49 4e 54 20 65 72 72 6f 72 2e 20 20 5e 42 75 74  INT error.  ^But
1e440 20 74 68 65 20 46 41 49 4c 20 72 65 73 6f 6c 75   the FAIL resolu
1e450 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 62 61  tion does not.ba
1e460 63 6b 20 6f 75 74 20 70 72 69 6f 72 20 63 68 61  ck out prior cha
1e470 6e 67 65 73 20 6f 66 20 74 68 65 20 53 51 4c 20  nges of the SQL 
1e480 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 66  statement that f
1e490 61 69 6c 65 64 20 6e 6f 72 20 64 6f 65 73 0a 69  ailed nor does.i
1e4a0 74 20 65 6e 64 20 74 68 65 20 74 72 61 6e 73 61  t end the transa
1e4b0 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d  ction..^For exam
1e4c0 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44 41 54  ple, if an UPDAT
1e4d0 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f  E.statement enco
1e4e0 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73 74 72  untered a constr
1e4f0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
1e500 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f 77 20  n the 100th row 
1e510 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70 74 73  that.it attempts
1e520 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68 65 6e   to update, then
1e530 20 74 68 65 20 66 69 72 73 74 20 39 39 20 72 6f   the first 99 ro
1e540 77 20 63 68 61 6e 67 65 73 20 61 72 65 20 70 72  w changes are pr
1e550 65 73 65 72 76 65 64 0a 62 75 74 20 63 68 61 6e  eserved.but chan
1e560 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30 30 20  ges to rows 100 
1e570 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76 65 72  and beyond never
1e580 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e   occur.</p></dd>
1e590 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c  ..<dt><b>IGNORE<
1e5a0 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
1e5b0 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63   ^When an applic
1e5c0 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  able constraint 
1e5d0 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
1e5e0 2c 20 0a 74 68 65 20 49 47 4e 4f 52 45 20 72 65  , .the IGNORE re
1e5f0 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
1e600 68 6d 20 73 6b 69 70 73 20 74 68 65 20 6f 6e 65  hm skips the one
1e610 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 74 61 69   row that contai
1e620 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ns.the constrain
1e630 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 6e 64 20  t violation and 
1e640 63 6f 6e 74 69 6e 75 65 73 20 70 72 6f 63 65 73  continues proces
1e650 73 69 6e 67 20 73 75 62 73 65 71 75 65 6e 74 20  sing subsequent 
1e660 72 6f 77 73 0a 6f 66 20 74 68 65 20 53 51 4c 20  rows.of the SQL 
1e670 73 74 61 74 65 6d 65 6e 74 20 61 73 20 69 66 20  statement as if 
1e680 6e 6f 74 68 69 6e 67 20 77 65 6e 74 20 77 72 6f  nothing went wro
1e690 6e 67 2e 0a 4f 74 68 65 72 20 72 6f 77 73 20 62  ng..Other rows b
1e6a0 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20  efore and after 
1e6b0 74 68 65 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e  the row that.con
1e6c0 74 61 69 6e 65 64 20 74 68 65 20 63 6f 6e 73 74  tained the const
1e6d0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
1e6e0 61 72 65 20 69 6e 73 65 72 74 65 64 20 6f 72 20  are inserted or 
1e6f0 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79  updated.normally
1e700 2e 20 5e 4e 6f 20 65 72 72 6f 72 20 69 73 20 72  . ^No error is r
1e710 65 74 75 72 6e 65 64 20 77 68 65 6e 20 74 68 65  eturned when the
1e720 20 49 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74   IGNORE conflict
1e730 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f   resolution.algo
1e740 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f  rithm is used.</
1e750 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
1e760 52 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e  REPLACE</b></dt>
1e770 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61  .<dd><p> ^When a
1e780 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
1e790 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1e7a0 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45  urs, the REPLACE
1e7b0 20 61 6c 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74   algorithm.delet
1e7c0 65 73 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  es pre-existing 
1e7d0 72 6f 77 73 20 74 68 61 74 20 61 72 65 20 63 61  rows that are ca
1e7e0 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72  using the constr
1e7f0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70  aint violation.p
1e800 72 69 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e  rior to insertin
1e810 67 20 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68  g or updating th
1e820 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 6e  e current row an
1e830 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f  d the command co
1e840 6e 74 69 6e 75 65 73 20 0a 65 78 65 63 75 74 69  ntinues .executi
1e850 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66  ng normally..^If
1e860 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
1e870 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1e880 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50   occurs, the REP
1e890 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65  LACE conflict.re
1e8a0 73 6f 6c 75 74 69 6f 6e 20 72 65 70 6c 61 63 65  solution replace
1e8b0 73 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65  s the NULL value
1e8c0 20 77 69 74 68 0a 74 68 65 20 64 65 66 61 75 6c   with.the defaul
1e8d0 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74  t value for that
1e8e0 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20 74   column, or if t
1e8f0 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f  he column has no
1e900 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20   default.value, 
1e910 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61  then the ABORT a
1e920 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
1e930 2e 0a 5e 49 66 20 61 20 43 48 45 43 4b 20 63 6f  ..^If a CHECK co
1e940 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1e950 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52  on occurs, the R
1e960 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20  EPLACE conflict 
1e970 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72  resolution.algor
1e980 69 74 68 6d 20 61 6c 77 61 79 73 20 77 6f 72 6b  ithm always work
1e990 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f 70  s like ABORT.</p
1e9a0 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20  >..<p>^When the 
1e9b0 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
1e9c0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61   resolution stra
1e9d0 74 65 67 79 20 64 65 6c 65 74 65 73 20 72 6f 77  tegy deletes row
1e9e0 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61  s in order to.sa
1e9f0 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72 61 69  tisfy a constrai
1ea00 6e 74 2c 20 5b 43 52 45 41 54 45 20 54 52 49 47  nt, [CREATE TRIG
1ea10 47 45 52 20 7c 20 64 65 6c 65 74 65 20 74 72 69  GER | delete tri
1ea20 67 67 65 72 73 5d 20 66 69 72 65 20 69 66 20 61  ggers] fire if a
1ea30 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63 75  nd only if.[recu
1ea40 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 20 70  rsive_triggers p
1ea50 72 61 67 6d 61 20 7c 20 72 65 63 75 72 73 69 76  ragma | recursiv
1ea60 65 20 74 72 69 67 67 65 72 73 5d 20 61 72 65 20  e triggers] are 
1ea70 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  enabled.</p>..<p
1ea80 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 75  >^The [sqlite3_u
1ea90 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64  pdate_hook | upd
1eaa0 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74  ate hook] is not
1eab0 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77   invoked for row
1eac0 73 20 74 68 61 74 0a 61 72 65 20 64 65 6c 65 74  s that.are delet
1ead0 65 64 20 62 79 20 74 68 65 20 52 45 50 4c 41 43  ed by the REPLAC
1eae0 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  E conflict resol
1eaf0 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 2e 20  ution strategy. 
1eb00 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c 41   ^Nor does.REPLA
1eb10 43 45 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65  CE increment the
1eb20 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   [sqlite3_change
1eb30 73 20 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  s | change count
1eb40 65 72 5d 2e 0a 54 68 65 20 65 78 63 65 70 74 69  er]..The excepti
1eb50 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72 73 20 64  onal behaviors d
1eb60 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20 70  efined in this p
1eb70 61 72 61 67 72 61 70 68 20 6d 69 67 68 74 20 63  aragraph might c
1eb80 68 61 6e 67 65 20 0a 69 6e 20 61 20 66 75 74 75  hange .in a futu
1eb90 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a  re release.</p>.
1eba0 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61  </dl>..<p>^The a
1ebb0 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
1ebc0 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63 6c 61  ed in the OR cla
1ebd0 75 73 65 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  use of an INSERT
1ebe0 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72 72   or UPDATE.overr
1ebf0 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69 74  ides any algorit
1ec00 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  hm specified in 
1ec10 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e 0a  a CREATE TABLE..
1ec20 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d  ^If no algorithm
1ec30 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
1ec40 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f 52  ywhere, the ABOR
1ec50 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  T algorithm is u
1ec60 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  sed.</p>..<tcl>.
1ec70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ec80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ec90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ecb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
1ecc0 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20 72  ection REINDEX r
1ecd0 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a 0a  eindex REINDEX..
1ece0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65  BubbleDiagram re
1ecf0 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c 2f 74  index-stmt 1.</t
1ed00 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 49  cl>..<p>^The REI
1ed10 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20  NDEX command is 
1ed20 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20 61  used to delete a
1ed30 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64 69  nd recreate indi
1ed40 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63 68  ces from scratch
1ed50 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66 75 6c  ..This is useful
1ed60 20 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e 69   when the defini
1ed70 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74  tion of a collat
1ed80 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61 73  ion sequence has
1ed90 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a   changed..</p>..
1eda0 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44  <p>^If the REIND
1edb0 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f  EX keyword is no
1edc0 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
1edd0 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e  collation-sequen
1ede0 63 65 20 6f 72 20 64 61 74 61 62 61 73 65 20 0a  ce or database .
1edf0 6f 62 6a 65 63 74 20 69 64 65 6e 74 69 66 69 65  object identifie
1ee00 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69  r, then all indi
1ee10 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63  ces in all attac
1ee20 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72  hed databases ar
1ee30 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e 5e  e rebuilt...<p>^
1ee40 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b  If the REINDEX k
1ee50 65 79 77 6f 72 64 20 69 73 20 66 6f 6c 6c 6f 77  eyword is follow
1ee60 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f  ed by a collatio
1ee70 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 2c  n-sequence name,
1ee80 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64 69 63 65   then.all indice
1ee90 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65  s in all attache
1eea0 64 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  d databases that
1eeb0 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20 63   use the named c
1eec0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
1eed0 65 73 0a 61 72 65 20 72 65 63 72 65 61 74 65 64  es.are recreated
1eee0 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20 74  . ..<p>^Or, if t
1eef0 68 65 20 61 72 67 75 6d 65 6e 74 20 61 74 74 61  he argument atta
1ef00 63 68 65 64 20 74 6f 20 74 68 65 20 52 45 49 4e  ched to the REIN
1ef10 44 45 58 20 69 64 65 6e 74 69 66 69 65 73 20 61  DEX identifies a
1ef20 20 73 70 65 63 69 66 69 63 20 0a 64 61 74 61 62   specific .datab
1ef30 61 73 65 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  ase table, then 
1ef40 61 6c 6c 20 69 6e 64 69 63 65 73 20 61 74 74 61  all indices atta
1ef50 63 68 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  ched to the data
1ef60 62 61 73 65 20 74 61 62 6c 65 20 61 72 65 20 72  base table are r
1ef70 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20 69 74 20  ebuilt. .^If it 
1ef80 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70 65  identifies a spe
1ef90 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20 69  cific database i
1efa0 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75 73 74 20  ndex, then just 
1efb0 74 68 61 74 20 69 6e 64 65 78 20 69 73 20 72 65  that index is re
1efc0 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66  created...<p>^If
1efd0 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61 73 65 2d   no <i>database-
1efe0 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73 70 65 63  name</i> is spec
1eff0 69 66 69 65 64 20 61 6e 64 20 74 68 65 72 65 20  ified and there 
1f000 65 78 69 73 74 73 20 62 6f 74 68 20 61 20 74 61  exists both a ta
1f010 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64  ble or.index and
1f020 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
1f030 75 65 6e 63 65 20 6f 66 20 74 68 65 20 73 70 65  uence of the spe
1f040 63 69 66 69 65 64 20 6e 61 6d 65 2c 20 53 51 4c  cified name, SQL
1f050 69 74 65 20 69 6e 74 65 72 70 72 65 74 73 0a 74  ite interprets.t
1f060 68 69 73 20 61 73 20 61 20 72 65 71 75 65 73 74  his as a request
1f070 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20   to rebuild the 
1f080 69 6e 64 69 63 65 73 20 74 68 61 74 20 75 73 65  indices that use
1f090 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61   the named colla
1f0a0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e 0a 54  tion sequence..T
1f0b0 68 69 73 20 61 6d 62 69 67 75 69 74 79 20 69 6e  his ambiguity in
1f0c0 20 74 68 65 20 73 79 6e 74 61 78 20 6d 61 79 20   the syntax may 
1f0d0 62 65 20 61 76 6f 69 64 65 64 20 62 79 20 61 6c  be avoided by al
1f0e0 77 61 79 73 20 73 70 65 63 69 66 79 69 6e 67 20  ways specifying 
1f0f0 61 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61  a.<i>database-na
1f100 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65 69 6e  me</i> when rein
1f110 64 65 78 69 6e 67 20 61 20 73 70 65 63 69 66 69  dexing a specifi
1f120 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  c table or index
1f130 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
1f140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f180 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1f190 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65   REPLACE replace
1f1a0 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e   REPLACE..</tcl>
1f1b0 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41 43  ..<p>^The REPLAC
1f1c0 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20  E command is an 
1f1d0 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 22 5b  alias for the "[
1f1e0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e  ON CONFLICT | IN
1f1f0 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 5d  SERT OR REPLACE]
1f200 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74 68 65  ".variant of the
1f210 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e   [INSERT] comman
1f220 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61 73 20  d.  .This alias 
1f230 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  is provided for 
1f240 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 6f 74  compatibility ot
1f250 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
1f260 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65 20 74   engines.  See t
1f270 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d  he .[INSERT] com
1f280 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74 69  mand documentati
1f290 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  on for additiona
1f2a0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  l information.</
1f2b0 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  p>  ..<tcl>.####
1f2c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f2d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f2e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f2f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f300 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
1f310 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c 65 63  ion SELECT selec
1f320 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72 79 7d  t {SELECT query}
1f330 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
1f340 73 65 6c 65 63 74 2d 73 74 6d 74 20 31 0a 42 75  select-stmt 1.Bu
1f350 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65  bbleDiagram sele
1f360 63 74 2d 63 6f 72 65 0a 42 75 62 62 6c 65 44 69  ct-core.BubbleDi
1f370 61 67 72 61 6d 20 72 65 73 75 6c 74 2d 63 6f 6c  agram result-col
1f380 75 6d 6e 0a 42 75 62 62 6c 65 44 69 61 67 72 61  umn.BubbleDiagra
1f390 6d 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a 42 75  m join-source.Bu
1f3a0 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6e 67  bbleDiagram sing
1f3b0 6c 65 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c 65  le-source.Bubble
1f3c0 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 6f 70 0a  Diagram join-op.
1f3d0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f  BubbleDiagram jo
1f3e0 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 42 75  in-constraint.Bu
1f3f0 62 62 6c 65 44 69 61 67 72 61 6d 20 6f 72 64 65  bbleDiagram orde
1f400 72 69 6e 67 2d 74 65 72 6d 0a 42 75 62 62 6c 65  ring-term.Bubble
1f410 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64  Diagram compound
1f420 2d 6f 70 65 72 61 74 6f 72 0a 3c 2f 74 63 6c 3e  -operator.</tcl>
1f430 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54  ...<p>The SELECT
1f440 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
1f450 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20  ed to query the 
1f460 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72  database.  The.r
1f470 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43  esult of a SELEC
1f480 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  T is zero or mor
1f490 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77  e rows of data w
1f4a0 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61  here each row.ha
1f4b0 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72  s a fixed number
1f4c0 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 0a 0a   of columns.  ..
1f4d0 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74  <p>The SELECT st
1f4e0 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 6d  atement is the m
1f4f0 6f 73 74 20 63 6f 6d 70 6c 69 63 61 74 65 64 20  ost complicated 
1f500 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20 53  command in the S
1f510 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 54 6f 20  QL language..To 
1f520 6d 61 6b 65 20 74 68 65 20 64 65 73 63 72 69 70  make the descrip
1f530 74 69 6f 6e 20 65 61 73 69 65 72 20 74 6f 20 66  tion easier to f
1f540 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f 66 20 74  ollow, some of t
1f550 68 65 20 70 61 73 73 61 67 65 73 20 62 65 6c 6f  he passages belo
1f560 77 20 64 65 73 63 72 69 62 65 0a 74 68 65 20 77  w describe.the w
1f570 61 79 20 74 68 65 20 64 61 74 61 20 72 65 74 75  ay the data retu
1f580 72 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43 54  rned by a SELECT
1f590 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64 65   statement is de
1f5a0 74 65 72 6d 69 6e 65 64 20 61 73 20 61 20 73 65  termined as a se
1f5b0 72 69 65 73 20 6f 66 0a 73 74 65 70 73 2e 20 49  ries of.steps. I
1f5c0 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
1f5d0 6f 20 6b 65 65 70 20 69 6e 20 6d 69 6e 64 20 74  o keep in mind t
1f5e0 68 61 74 20 74 68 69 73 20 69 73 20 70 75 72 65  hat this is pure
1f5f0 6c 79 20 69 6c 6c 75 73 74 72 61 74 69 76 65 20  ly illustrative 
1f600 2d 0a 69 6e 20 70 72 61 63 74 69 63 65 20 6e 65  -.in practice ne
1f610 69 74 68 65 72 20 53 51 4c 69 74 65 20 6e 6f 72  ither SQLite nor
1f620 20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 65   any other SQL e
1f630 6e 67 69 6e 65 20 69 73 20 72 65 71 75 69 72 65  ngine is require
1f640 64 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a 74 68 69  d to follow .thi
1f650 73 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 73  s or any other s
1f660 70 65 63 69 66 69 63 20 70 72 6f 63 65 73 73 2e  pecific process.
1f670 0a 0a 3c 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c  ..<h3>Simple Sel
1f680 65 63 74 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f  ect Processing</
1f690 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e 74  h3>..<p>The synt
1f6a0 61 78 20 66 6f 72 20 61 20 73 69 6d 70 6c 65 20  ax for a simple 
1f6b0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1f6c0 20 69 73 20 64 65 70 69 63 74 65 64 20 69 6e 20   is depicted in 
1f6d0 74 68 65 20 0a 5b 73 65 6c 65 63 74 2d 63 6f 72  the .[select-cor
1f6e0 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  e syntax diagram
1f6f0 5d 2e 20 47 65 6e 65 72 61 74 69 6e 67 20 74 68  ]. Generating th
1f700 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73  e results of a s
1f710 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73 74 61  imple SELECT.sta
1f720 74 65 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e  tement is presen
1f730 74 65 64 20 61 73 20 61 20 66 6f 75 72 20 73 74  ted as a four st
1f740 65 70 20 70 72 6f 63 65 73 73 20 69 6e 20 74 68  ep process in th
1f750 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 62 65  e description be
1f760 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69  low:..<ol>.  <li
1f770 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73  > <p>[FROM claus
1f780 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54  e] processing: T
1f790 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 6f  he input data fo
1f7a0 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  r the simple SEL
1f7b0 45 43 54 20 69 73 0a 20 20 20 20 20 20 20 64 65  ECT is.       de
1f7c0 74 65 72 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e  termined. The in
1f7d0 70 75 74 20 64 61 74 61 20 69 73 20 65 69 74 68  put data is eith
1f7e0 65 72 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20  er implicitly a 
1f7f0 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68 20  single row with 
1f800 30 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73  0.       columns
1f810 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f   (if there is no
1f820 20 46 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72   FROM clause) or
1f830 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
1f840 79 20 61 6e 61 6c 79 7a 69 6e 67 20 74 68 65 0a  y analyzing the.
1f850 20 20 20 20 20 20 20 5b 6a 6f 69 6e 2d 73 6f 75         [join-sou
1f860 72 63 65 20 73 79 6e 74 61 78 20 64 69 61 67 72  rce syntax diagr
1f870 61 6d 7c 6a 6f 69 6e 2d 73 6f 75 72 63 65 5d 20  am|join-source] 
1f880 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 74 68  specification th
1f890 61 74 20 66 6f 6c 6c 6f 77 73 20 0a 20 20 20 20  at follows .    
1f8a0 20 20 20 61 6e 20 65 78 70 6c 69 63 69 74 20 46     an explicit F
1f8b0 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 20 20 3c 6c  ROM clause..  <l
1f8c0 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20 63 6c 61  i> <p>[WHERE cla
1f8d0 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  use] processing:
1f8e0 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   The input data 
1f8f0 69 73 20 66 69 6c 74 65 72 65 64 20 75 73 69 6e  is filtered usin
1f900 67 20 74 68 65 20 57 48 45 52 45 0a 20 20 20 20  g the WHERE.    
1f910 20 20 20 63 6c 61 75 73 65 20 65 78 70 72 65 73     clause expres
1f920 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c  sion.  .  <li> <
1f930 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47 52 4f 55  p>[GROUP BY|GROU
1f940 50 20 42 59 2c 20 48 41 56 49 4e 47 20 61 6e 64  P BY, HAVING and
1f950 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65   result-column e
1f960 78 70 72 65 73 73 69 6f 6e 5d 20 70 72 6f 63 65  xpression] proce
1f970 73 73 69 6e 67 3a 20 0a 20 20 20 20 20 20 20 54  ssing: .       T
1f980 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74  he set of result
1f990 20 72 6f 77 73 20 69 73 20 63 6f 6d 70 75 74 65   rows is compute
1f9a0 64 20 62 79 20 61 67 67 72 65 67 61 74 69 6e 67  d by aggregating
1f9b0 20 74 68 65 20 64 61 74 61 20 61 63 63 6f 72 64   the data accord
1f9c0 69 6e 67 20 74 6f 0a 20 20 20 20 20 20 20 61 6e  ing to.       an
1f9d0 79 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  y GROUP BY claus
1f9e0 65 20 61 6e 64 20 63 61 6c 63 75 6c 61 74 69 6e  e and calculatin
1f9f0 67 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  g the result-set
1fa00 20 65 78 70 72 65 73 73 69 6f 6e 73 20 66 6f 72   expressions for
1fa10 20 74 68 65 0a 20 20 20 20 20 20 20 72 6f 77 73   the.       rows
1fa20 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72 65 64   of the filtered
1fa30 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 2e 20   input dataset. 
1fa40 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53   .  <li> <p>[DIS
1fa50 54 49 4e 43 54 7c 44 49 53 54 49 4e 43 54 2f 41  TINCT|DISTINCT/A
1fa60 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70 72 6f 63  LL keyword] proc
1fa70 65 73 73 69 6e 67 3a 20 49 66 20 74 68 65 20 71  essing: If the q
1fa80 75 65 72 79 20 69 73 20 61 20 22 53 45 4c 45 43  uery is a "SELEC
1fa90 54 0a 20 20 20 20 20 20 20 44 49 53 54 49 4e 43  T.       DISTINC
1faa0 54 22 20 71 75 65 72 79 2c 20 64 75 70 6c 69 63  T" query, duplic
1fab0 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d  ate rows are rem
1fac0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 73 65  oved from the se
1fad0 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
1fae0 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72  ..</ol>..<p>Ther
1faf0 65 20 61 72 65 20 74 77 6f 20 74 79 70 65 73 20  e are two types 
1fb00 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  of simple SELECT
1fb10 20 73 74 61 74 65 6d 65 6e 74 20 2d 20 61 67 67   statement - agg
1fb20 72 65 67 61 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d  regate and .non-
1fb30 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69 65  aggregate querie
1fb40 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20 53 45 4c  s. ^A simple SEL
1fb50 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
1fb60 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75   an aggregate qu
1fb70 65 72 79 20 69 66 0a 69 74 20 63 6f 6e 74 61 69  ery if.it contai
1fb80 6e 73 20 65 69 74 68 65 72 20 61 20 47 52 4f 55  ns either a GROU
1fb90 50 20 42 59 20 63 6c 61 75 73 65 20 6f 72 20 6f  P BY clause or o
1fba0 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
1fbb0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 69  gate functions.i
1fbc0 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
1fbd0 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  . ^Otherwise, if
1fbe0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
1fbf0 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 61 67 67   contains no agg
1fc00 72 65 67 61 74 65 0a 66 75 6e 63 74 69 6f 6e 73  regate.functions
1fc10 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 63   or a GROUP BY c
1fc20 6c 61 75 73 65 2c 20 69 74 20 69 73 20 61 20 6e  lause, it is a n
1fc30 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65  on-aggregate que
1fc40 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65  ry...<p><b>1. De
1fc50 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 69  termination of i
1fc60 6e 70 75 74 20 64 61 74 61 20 28 46 52 4f 4d 20  nput data (FROM 
1fc70 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e  clause processin
1fc80 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f  g).</b>.<tcl>hd_
1fc90 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d 63 6c 61  fragment fromcla
1fca0 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68  use</tcl>.<tcl>h
1fcb0 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46 52 4f 4d  d_keywords {FROM
1fcc0 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a   clause}</tcl>..
1fcd0 3c 70 3e 54 68 65 20 69 6e 70 75 74 20 64 61 74  <p>The input dat
1fce0 61 20 75 73 65 64 20 62 79 20 61 20 73 69 6d 70  a used by a simp
1fcf0 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72 79 20  le SELECT query 
1fd00 69 73 20 61 20 73 65 74 20 6f 66 20 3c 69 3e 4e  is a set of <i>N
1fd10 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61 63 68 20  </i> rows .each 
1fd20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  <i>M</i> columns
1fd30 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20   wide...<p>^(If 
1fd40 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1fd50 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
1fd60 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
1fd70 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20  statement, then 
1fd80 74 68 65 20 0a 69 6e 70 75 74 20 64 61 74 61 20  the .input data 
1fd90 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20  is implicitly a 
1fda0 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65 72 6f 20  single row zero 
1fdb0 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29 5e 20 28  columns wide)^ (
1fdc0 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20  i.e. <i>N</i>=1 
1fdd0 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e  and.<i>M</i>=0).
1fde0 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f 4d 20 63  ..<p>If a FROM c
1fdf0 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
1fe00 65 64 2c 20 74 68 65 20 64 61 74 61 20 6f 6e 20  ed, the data on 
1fe10 77 68 69 63 68 20 61 20 73 69 6d 70 6c 65 20 53  which a simple S
1fe20 45 4c 45 43 54 20 71 75 65 72 79 0a 6f 70 65 72  ELECT query.oper
1fe30 61 74 65 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20  ates comes from 
1fe40 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  the one or more 
1fe50 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
1fe60 72 69 65 73 20 28 53 45 4c 45 43 54 20 73 74 61  ries (SELECT sta
1fe70 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61 72 65 6e  tements.in paren
1fe80 74 68 65 73 69 73 29 20 73 70 65 63 69 66 69 65  thesis) specifie
1fe90 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  d following the 
1fea0 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 5e 41  FROM keyword. ^A
1feb0 20 73 75 62 2d 73 65 6c 65 63 74 20 73 70 65 63   sub-select spec
1fec0 69 66 69 65 64 0a 69 6e 20 74 68 65 20 6a 6f 69  ified.in the joi
1fed0 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f 77 69  n-source followi
1fee0 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  ng the FROM clau
1fef0 73 65 20 69 6e 20 61 20 73 69 6d 70 6c 65 20 53  se in a simple S
1ff00 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1ff10 69 73 0a 68 61 6e 64 6c 65 64 20 61 73 20 69 66  is.handled as if
1ff20 20 69 74 20 77 61 73 20 61 20 74 61 62 6c 65 20   it was a table 
1ff30 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64  containing the d
1ff40 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20  ata returned by 
1ff50 65 78 65 63 75 74 69 6e 67 20 74 68 65 0a 73 75  executing the.su
1ff60 62 2d 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  b-select stateme
1ff70 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e  nt. ^Each column
1ff80 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65   of the sub-sele
1ff90 63 74 20 64 61 74 61 73 65 74 20 69 6e 68 65 72  ct dataset inher
1ffa0 69 74 73 20 74 68 65 0a 5b 63 6f 6c 6c 61 74 69  its the.[collati
1ffb0 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  on|collation seq
1ffc0 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66 66 69  uence] and [affi
1ffd0 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 72  nity] of the cor
1ffe0 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70 72 65  responding expre
1fff0 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73 75 62  ssion.in the sub
20000 2d 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e  -select statemen
20010 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72 65  t...<p>^If there
20020 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c   is only a singl
20030 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6a  e table in the j
20040 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f  oin-source follo
20050 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 0a 63 6c  wing the FROM.cl
20060 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 69  ause, then the i
20070 6e 70 75 74 20 64 61 74 61 20 75 73 65 64 20 62  nput data used b
20080 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
20090 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 63 6f  tement is the co
200a0 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a 6e 61  ntents of the.na
200b0 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66 20 74  med table. ^If t
200c0 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74 68 61  here is more tha
200d0 6e 20 6f 6e 65 20 74 61 62 6c 65 20 73 70 65 63  n one table spec
200e0 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
200f0 20 74 68 65 0a 6a 6f 69 6e 2d 73 6f 75 72 63 65   the.join-source
20100 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46   following the F
20110 52 4f 4d 20 6b 65 79 77 6f 72 64 2c 20 74 68 65  ROM keyword, the
20120 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  n the contents o
20130 66 20 65 61 63 68 20 6e 61 6d 65 64 20 74 61 62  f each named tab
20140 6c 65 0a 61 72 65 20 6a 6f 69 6e 65 64 20 69 6e  le.are joined in
20150 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61  to a single data
20160 73 65 74 20 66 6f 72 20 74 68 65 20 73 69 6d 70  set for the simp
20170 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
20180 65 6e 74 20 74 6f 20 6f 70 65 72 61 74 65 20 6f  ent to operate o
20190 6e 2e 0a 45 78 61 63 74 6c 79 20 68 6f 77 20 74  n..Exactly how t
201a0 68 65 20 64 61 74 61 20 69 73 20 63 6f 6d 62 69  he data is combi
201b0 6e 65 64 20 64 65 70 65 6e 64 73 20 6f 6e 20 74  ned depends on t
201c0 68 65 20 73 70 65 63 69 66 69 63 20 5b 6a 6f 69  he specific [joi
201d0 6e 2d 6f 70 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d  n-op] and.[join-
201e0 63 6f 6e 73 74 72 61 69 6e 74 5d 20 75 73 65 64  constraint] used
201f0 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65 20   to connect the 
20200 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
20210 72 69 65 73 20 74 6f 67 65 74 68 65 72 2e 0a 0a  ries together...
20220 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20  <p>All joins in 
20230 53 51 4c 69 74 65 20 61 72 65 20 62 61 73 65 64  SQLite are based
20240 20 6f 6e 20 74 68 65 20 63 61 72 74 65 73 69 61   on the cartesia
20250 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65  n product of the
20260 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74 2d   left and.right-
20270 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e  hand datasets. ^
20280 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  The columns of t
20290 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
202a0 64 75 63 74 20 64 61 74 61 73 65 74 20 61 72 65  duct dataset are
202b0 2c 20 69 6e 20 0a 6f 72 64 65 72 2c 20 61 6c 6c  , in .order, all
202c0 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
202d0 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61  the left-hand da
202e0 74 61 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62  taset followed b
202f0 79 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e  y all the column
20300 73 0a 6f 66 20 74 68 65 20 72 69 67 68 74 2d 68  s.of the right-h
20310 61 6e 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68  and dataset. ^Th
20320 65 72 65 20 69 73 20 61 20 72 6f 77 20 69 6e 20  ere is a row in 
20330 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
20340 6f 64 75 63 74 20 64 61 74 61 73 65 74 0a 66 6f  oduct dataset.fo
20350 72 6d 65 64 20 62 79 20 63 6f 6d 62 69 6e 69 6e  rmed by combinin
20360 67 20 65 61 63 68 20 75 6e 69 71 75 65 20 63 6f  g each unique co
20370 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20 72  mbination of a r
20380 6f 77 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74  ow from the left
20390 2d 68 61 6e 64 20 0a 61 6e 64 20 72 69 67 68 74  -hand .and right
203a0 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20  -hand datasets. 
203b0 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  ^(In other words
203c0 2c 20 69 66 20 74 68 65 20 6c 65 66 74 2d 68 61  , if the left-ha
203d0 6e 64 20 64 61 74 61 73 65 74 20 63 6f 6e 73 69  nd dataset consi
203e0 73 74 73 20 6f 66 0a 3c 69 3e 4e 6c 68 73 3c 2f  sts of.<i>Nlhs</
203f0 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e 4d 6c  i> rows of <i>Ml
20400 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20  hs</i> columns, 
20410 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 68 61  and the right-ha
20420 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a 3c 69  nd dataset of.<i
20430 3e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77 73 20 6f  >Nrhs</i> rows o
20440 66 20 3c 69 3e 4d 72 68 73 3c 2f 69 3e 20 63 6f  f <i>Mrhs</i> co
20450 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20  lumns, then the 
20460 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
20470 74 20 69 73 20 61 0a 64 61 74 61 73 65 74 20 6f  t is a.dataset o
20480 66 20 3c 69 3e 4e 6c 68 73 2e 4e 72 68 73 3c 2f  f <i>Nlhs.Nrhs</
20490 69 3e 20 72 6f 77 73 2c 20 65 61 63 68 20 63 6f  i> rows, each co
204a0 6e 74 61 69 6e 69 6e 67 20 3c 69 3e 4d 6c 68 73  ntaining <i>Mlhs
204b0 2b 4d 72 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e  +Mrhs</i> column
204c0 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  s.)^..<p>^If the
204d0 20 6a 6f 69 6e 2d 6f 70 20 69 73 20 22 43 52 4f   join-op is "CRO
204e0 53 53 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45 52  SS JOIN", "INNER
204f0 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 6f   JOIN", "JOIN" o
20500 72 20 61 20 63 6f 6d 6d 61 0a 28 22 2c 22 29 20  r a comma.(",") 
20510 61 6e 64 20 74 68 65 72 65 20 69 73 20 6e 6f 20  and there is no 
20520 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75  ON or USING clau
20530 73 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  se, then the res
20540 75 6c 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ult of the join 
20550 69 73 0a 73 69 6d 70 6c 79 20 74 68 65 20 63 61  is.simply the ca
20560 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
20570 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  of the left and 
20580 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73  right-hand datas
20590 65 74 73 2e 20 0a 49 66 20 6a 6f 69 6e 2d 6f 70  ets. .If join-op
205a0 20 64 6f 65 73 20 68 61 76 65 20 4f 4e 20 6f 72   does have ON or
205b0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 73 2c 20   USING clauses, 
205c0 74 68 6f 73 65 20 61 72 65 20 68 61 6e 64 6c 65  those are handle
205d0 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 74  d according to.t
205e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c  he following bul
205f0 6c 65 74 20 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c  let points:..<ul
20600 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66  >.  <li> <p>^(If
20610 20 74 68 65 72 65 20 69 73 20 61 6e 20 4f 4e 20   there is an ON 
20620 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 64  clause specified
20630 2c 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 65 78  , then the ON ex
20640 70 72 65 73 73 69 6f 6e 20 69 73 0a 20 20 20 20  pression is.    
20650 20 20 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72     evaluated for
20660 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
20670 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
20680 63 74 20 61 73 20 61 20 0a 20 20 20 20 20 20 20  ct as a .       
20690 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
206a0 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20 66  ion]. All rows f
206b0 6f 72 20 77 68 69 63 68 20 74 68 65 20 65 78 70  or which the exp
206c0 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
206d0 73 20 74 6f 20 0a 20 20 20 20 20 20 20 66 61 6c  s to .       fal
206e0 73 65 20 61 72 65 20 65 78 63 6c 75 64 65 64 20  se are excluded 
206f0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
20700 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  .)^..  <li> <p>^
20710 49 66 20 74 68 65 72 65 20 69 73 20 61 20 55 53  If there is a US
20720 49 4e 47 20 63 6c 61 75 73 65 20 73 70 65 63 69  ING clause speci
20730 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
20740 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61  the join-constra
20750 69 6e 74 2c 0a 20 20 20 20 20 20 20 74 68 65 6e  int,.       then
20760 20 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c   each of the col
20770 75 6d 6e 20 6e 61 6d 65 73 20 73 70 65 63 69 66  umn names specif
20780 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69  ied must exist i
20790 6e 20 74 68 65 20 64 61 74 61 73 65 74 73 20 74  n the datasets t
207a0 6f 20 0a 20 20 20 20 20 20 20 62 6f 74 68 20 74  o .       both t
207b0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
207c0 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  t of the join-op
207d0 2e 20 5e 28 46 6f 72 20 65 61 63 68 20 70 61 69  . ^(For each pai
207e0 72 20 6f 66 20 6e 61 6d 65 73 61 6b 65 0a 20 20  r of namesake.  
207f0 20 20 20 20 20 63 6f 6c 75 6d 6e 73 2c 20 74 68       columns, th
20800 65 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c 68  e expression "lh
20810 73 2e 58 20 3d 20 72 68 73 2e 58 22 20 69 73 20  s.X = rhs.X" is 
20820 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61  evaluated for ea
20830 63 68 20 72 6f 77 20 6f 66 0a 20 20 20 20 20 20  ch row of.      
20840 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
20850 72 6f 64 75 63 74 20 61 73 20 61 20 5b 62 6f 6f  roduct as a [boo
20860 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lean expression]
20870 2e 20 41 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77  . All rows for w
20880 68 69 63 68 20 6f 6e 65 0a 20 20 20 20 20 20 20  hich one.       
20890 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 65  or more of the e
208a0 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
208b0 61 74 65 73 20 74 6f 20 66 61 6c 73 65 20 61 72  ates to false ar
208c0 65 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20  e excluded from 
208d0 74 68 65 0a 20 20 20 20 20 20 20 72 65 73 75 6c  the.       resul
208e0 74 20 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20 63  t set.)^ ^When c
208f0 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75 65 73 20  omparing values 
20900 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 61  as a result of a
20910 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74   USING clause, t
20920 68 65 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c  he.       normal
20930 20 72 75 6c 65 73 20 66 6f 72 20 68 61 6e 64 6c   rules for handl
20940 69 6e 67 20 61 66 66 69 6e 69 74 69 65 73 2c 20  ing affinities, 
20950 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
20960 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20 20  ces and NULL.   
20970 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20 63 6f      values in co
20980 6d 70 61 72 69 73 6f 6e 73 20 61 70 70 6c 79 2e  mparisons apply.
20990 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72 6f   ^The column fro
209a0 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 6f 6e  m the dataset on
209b0 20 74 68 65 0a 20 20 20 20 20 20 20 6c 65 66 74   the.       left
209c0 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68  -hand side of th
209d0 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f 72 20  e join operator 
209e0 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  is considered to
209f0 20 62 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d   be on the left-
20a00 68 61 6e 64 0a 20 20 20 20 20 20 20 73 69 64 65  hand.       side
20a10 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
20a20 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 29 20  on operator (=) 
20a30 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
20a40 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20   of collation . 
20a50 20 20 20 20 20 20 73 65 71 75 65 6e 63 65 20 61        sequence a
20a60 6e 64 20 61 66 66 69 6e 69 74 79 20 70 72 65 63  nd affinity prec
20a70 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20 20  edence...       
20a80 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20 70 61 69  <p>^For each pai
20a90 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64 65  r of columns ide
20aa0 6e 74 69 66 69 65 64 20 62 79 20 61 20 55 53 49  ntified by a USI
20ab0 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20 63  NG clause, the c
20ac0 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 66 72 6f  olumn.       fro
20ad0 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  m the right-hand
20ae0 20 64 61 74 61 73 65 74 20 69 73 20 6f 6d 69 74   dataset is omit
20af0 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f 69  ted from the joi
20b00 6e 65 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68  ned dataset. ^Th
20b10 69 73 20 0a 20 20 20 20 20 20 20 69 73 20 74 68  is .       is th
20b20 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63  e only differenc
20b30 65 20 62 65 74 77 65 65 6e 20 61 20 55 53 49 4e  e between a USIN
20b40 47 20 63 6c 61 75 73 65 20 61 6e 64 20 69 74 73  G clause and its
20b50 20 65 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a 20   equivalent ON. 
20b60 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74        constraint
20b70 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49  ...  <li> <p>^(I
20b80 66 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65  f the NATURAL ke
20b90 79 77 6f 72 64 20 69 73 20 61 64 64 65 64 20 74  yword is added t
20ba0 6f 20 61 6e 79 20 6f 66 20 74 68 65 20 6a 6f 69  o any of the joi
20bb0 6e 2d 6f 70 73 2c 20 74 68 65 6e 20 61 6e 0a 20  n-ops, then an. 
20bc0 20 20 20 20 20 20 69 6d 70 6c 69 63 69 74 20 55        implicit U
20bd0 53 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61  SING clause is a
20be0 64 64 65 64 20 74 6f 20 74 68 65 20 6a 6f 69 6e  dded to the join
20bf0 2d 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 54 68  -constraints. Th
20c00 65 20 69 6d 70 6c 69 63 69 74 0a 20 20 20 20 20  e implicit.     
20c10 20 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 63    USING clause c
20c20 6f 6e 74 61 69 6e 73 20 65 61 63 68 20 6f 66 20  ontains each of 
20c30 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  the column names
20c40 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20   that appear in 
20c50 62 6f 74 68 0a 20 20 20 20 20 20 20 74 68 65 20  both.       the 
20c60 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
20c70 61 6e 64 20 69 6e 70 75 74 20 64 61 74 61 73 65  and input datase
20c80 74 73 2e 29 5e 20 5e 49 66 20 74 68 65 20 6c 65  ts.)^ ^If the le
20c90 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
20ca0 64 0a 20 20 20 20 20 20 20 69 6e 70 75 74 20 64  d.       input d
20cb0 61 74 61 73 65 74 73 20 66 65 61 74 75 72 65 20  atasets feature 
20cc0 6e 6f 20 63 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e  no common column
20cd0 20 6e 61 6d 65 73 2c 20 74 68 65 6e 20 74 68 65   names, then the
20ce0 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64   NATURAL keyword
20cf0 0a 20 20 20 20 20 20 20 68 61 73 20 6e 6f 20 65  .       has no e
20d00 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73  ffect on the res
20d10 75 6c 74 73 20 6f 66 20 74 68 65 20 6a 6f 69 6e  ults of the join
20d20 2e 20 5e 41 20 55 53 49 4e 47 20 6f 72 20 4f 4e  . ^A USING or ON
20d30 20 63 6c 61 75 73 65 20 6d 61 79 0a 20 20 20 20   clause may.    
20d40 20 20 20 6e 6f 74 20 62 65 20 61 64 64 65 64 20     not be added 
20d50 74 6f 20 61 20 6a 6f 69 6e 20 74 68 61 74 20 73  to a join that s
20d60 70 65 63 69 66 69 65 73 20 74 68 65 20 4e 41 54  pecifies the NAT
20d70 55 52 41 4c 20 6b 65 79 77 6f 72 64 2e 0a 0a 20  URAL keyword... 
20d80 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68   <li> <p>^(If th
20d90 65 20 6a 6f 69 6e 2d 6f 70 20 69 73 20 61 20 22  e join-op is a "
20da0 4c 45 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c  LEFT JOIN" or "L
20db0 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c  EFT OUTER JOIN",
20dc0 20 74 68 65 6e 20 61 66 74 65 72 0a 20 20 20 20   then after.    
20dd0 20 20 20 74 68 65 20 4f 4e 20 6f 72 20 55 53 49     the ON or USI
20de0 4e 47 20 66 69 6c 74 65 72 69 6e 67 20 63 6c 61  NG filtering cla
20df0 75 73 65 73 20 68 61 76 65 20 62 65 65 6e 20 61  uses have been a
20e00 70 70 6c 69 65 64 2c 20 61 6e 20 65 78 74 72 61  pplied, an extra
20e10 20 72 6f 77 20 69 73 20 0a 20 20 20 20 20 20 20   row is .       
20e20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6f 75 74  added to the out
20e30 70 75 74 20 66 6f 72 20 65 61 63 68 20 72 6f 77  put for each row
20e40 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
20e50 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e 70 75 74   left-hand input
20e60 20 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74   .       dataset
20e70 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
20e80 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20 61 74 20  s to no rows at 
20e90 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  all in the compo
20ea0 73 69 74 65 0a 20 20 20 20 20 20 20 64 61 74 61  site.       data
20eb0 73 65 74 20 28 69 66 20 61 6e 79 29 2e 29 5e 20  set (if any).)^ 
20ec0 5e 54 68 65 20 61 64 64 65 64 20 72 6f 77 73 20  ^The added rows 
20ed0 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20 76 61 6c  contain NULL val
20ee0 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ues in the colum
20ef0 6e 73 0a 20 20 20 20 20 20 20 74 68 61 74 20 77  ns.       that w
20f00 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f  ould normally co
20f10 6e 74 61 69 6e 20 76 61 6c 75 65 73 20 63 6f 70  ntain values cop
20f20 69 65 64 20 66 72 6f 6d 20 74 68 65 20 72 69 67  ied from the rig
20f30 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 0a 20 20  ht-hand input.  
20f40 20 20 20 20 20 64 61 74 61 73 65 74 2e 20 20 0a       dataset.  .
20f50 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e  </ul>..<p>^(When
20f60 20 6d 6f 72 65 20 74 68 61 6e 20 74 77 6f 20 74   more than two t
20f70 61 62 6c 65 73 20 61 72 65 20 6a 6f 69 6e 65 64  ables are joined
20f80 20 74 6f 67 65 74 68 65 72 20 61 73 20 70 61 72   together as par
20f90 74 20 6f 66 20 61 20 46 52 4f 4d 20 63 6c 61 75  t of a FROM clau
20fa0 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20 6f 70 65  se,.the join ope
20fb0 72 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 63  rations are proc
20fc0 65 73 73 65 64 20 69 6e 20 6f 72 64 65 72 20 66  essed in order f
20fd0 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
20fe0 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a 77 6f 72  t. In other .wor
20ff0 64 73 2c 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  ds, the FROM cla
21000 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31  use (A join-op-1
21010 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 20   B join-op-2 C) 
21020 69 73 20 63 6f 6d 70 75 74 65 64 20 61 73 20 0a  is computed as .
21030 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29  ((A join-op-1 B)
21040 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e   join-op-2 C).)^
21050 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
21060 6e 74 20 63 72 6f 73 73 6a 6f 69 6e 20 7b 74 72  nt crossjoin {tr
21070 65 61 74 73 20 74 68 65 20 43 52 4f 53 53 20 4a  eats the CROSS J
21080 4f 49 4e 20 6f 70 65 72 61 74 6f 72 20 73 70 65  OIN operator spe
21090 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c 3e 0a 3c 70  cially}</tcl>.<p
210a0 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65 3a 20 53  ><b>Side note: S
210b0 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
210c0 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 2e 3c 2f  of CROSS JOIN.</
210d0 62 3e 0a 5e 54 68 65 72 65 20 69 73 20 6e 6f 20  b>.^There is no 
210e0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
210f0 65 6e 20 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f  en the "INNER JO
21100 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20  IN", "JOIN" and 
21110 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f  "," join.operato
21120 72 73 2e 20 54 68 65 79 20 61 72 65 20 63 6f 6d  rs. They are com
21130 70 6c 65 74 65 6c 79 20 69 6e 74 65 72 63 68 61  pletely intercha
21140 6e 67 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65  ngable in SQLite
21150 2e 0a 5e 28 54 68 65 20 22 43 52 4f 53 53 20 4a  ..^(The "CROSS J
21160 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61 74  OIN" join operat
21170 6f 72 20 70 72 6f 64 75 63 65 73 20 74 68 65 20  or produces the 
21180 73 61 6d 65 20 72 65 73 75 6c 74 20 61 73 20 74  same result as t
21190 68 65 20 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  he ."INNER JOIN"
211a0 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22  , "JOIN" and ","
211b0 20 6f 70 65 72 61 74 6f 72 73 29 5e 2c 20 62 75   operators)^, bu
211c0 74 20 69 73 20 0a 3c 61 20 68 72 65 66 3d 6f 70  t is .<a href=op
211d0 74 6f 76 65 72 76 69 65 77 2e 68 74 6d 6c 23 63  toverview.html#c
211e0 72 6f 73 73 6a 6f 69 6e 3e 68 61 6e 64 6c 65 64  rossjoin>handled
211f0 20 64 69 66 66 65 72 65 6e 74 6c 79 20 62 79 20   differently by 
21200 74 68 65 20 71 75 65 72 79 0a 6f 70 74 69 6d 69  the query.optimi
21210 7a 65 72 3c 2f 61 3e 20 69 6e 20 74 68 61 74 20  zer</a> in that 
21220 69 74 20 70 72 65 76 65 6e 74 73 20 74 68 65 20  it prevents the 
21230 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
21240 66 72 6f 6d 20 72 65 6f 72 64 65 72 69 6e 67 0a  from reordering.
21250 74 68 65 20 74 61 62 6c 65 73 20 69 6e 20 74 68  the tables in th
21260 65 20 6a 6f 69 6e 2e 20 20 41 6e 20 61 70 70 6c  e join.  An appl
21270 69 63 61 74 69 6f 6e 20 70 72 6f 67 72 61 6d 6d  ication programm
21280 65 72 20 63 61 6e 20 75 73 65 20 74 68 65 20 43  er can use the C
21290 52 4f 53 53 20 4a 4f 49 4e 20 0a 6f 70 65 72 61  ROSS JOIN .opera
212a0 74 6f 72 20 74 6f 20 64 69 72 65 63 74 6c 79 20  tor to directly 
212b0 69 6e 66 6c 75 65 6e 73 65 20 74 68 65 20 61 6c  influense the al
212c0 67 6f 72 69 74 68 6d 20 74 68 61 74 20 69 73 20  gorithm that is 
212d0 63 68 6f 73 65 6e 20 74 6f 20 69 6d 70 6c 65 6d  chosen to implem
212e0 65 6e 74 0a 74 68 65 20 53 45 4c 45 43 54 20 73  ent.the SELECT s
212f0 74 61 74 65 6d 65 6e 74 2e 20 20 41 76 6f 69 64  tatement.  Avoid
21300 20 75 73 69 6e 67 20 43 52 4f 53 53 20 4a 4f 49   using CROSS JOI
21310 4e 20 65 78 63 65 70 74 20 69 6e 20 73 70 65 63  N except in spec
21320 69 66 69 63 20 73 69 74 75 61 74 69 6f 6e 73 20  ific situations 
21330 0a 77 68 65 72 65 20 6d 61 6e 75 61 6c 20 63 6f  .where manual co
21340 6e 74 72 6f 6c 20 6f 66 20 74 68 65 20 71 75 65  ntrol of the que
21350 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20  ry optimizer is 
21360 64 65 73 69 72 65 64 2e 20 20 41 76 6f 69 64 20  desired.  Avoid 
21370 75 73 69 6e 67 0a 43 52 4f 53 53 20 4a 4f 49 4e  using.CROSS JOIN
21380 20 65 61 72 6c 79 20 69 6e 20 74 68 65 20 64 65   early in the de
21390 76 65 6c 6f 70 6d 65 6e 74 20 6f 66 20 61 6e 20  velopment of an 
213a0 61 70 70 6c 69 63 61 74 69 6f 6e 20 61 73 20 64  application as d
213b0 6f 69 6e 67 20 73 6f 20 69 73 0a 61 20 3c 61 20  oing so is.a <a 
213c0 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 63 32 2e  href="http://c2.
213d0 63 6f 6d 2f 63 67 69 2f 77 69 6b 69 3f 50 72 65  com/cgi/wiki?Pre
213e0 6d 61 74 75 72 65 4f 70 74 69 6d 69 7a 61 74 69  matureOptimizati
213f0 6f 6e 22 3e 70 72 65 6d 61 74 75 72 65 0a 6f 70  on">premature.op
21400 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 61 3e 2e 20  timization</a>. 
21410 20 54 68 65 20 73 70 65 63 69 61 6c 20 68 61 6e   The special han
21420 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a  dling of CROSS J
21430 4f 49 4e 20 69 73 20 61 6e 20 53 51 4c 69 74 65  OIN is an SQLite
21440 2d 73 70 65 63 69 66 69 63 0a 66 65 61 74 75 72  -specific.featur
21450 65 20 61 6e 64 20 69 73 20 6e 6f 74 20 61 20 70  e and is not a p
21460 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20  art of standard 
21470 53 51 4c 2e 0a 20 20 20 20 20 20 20 0a 0a 3c 74  SQL..       ..<t
21480 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77  cl>hd_fragment w
21490 68 65 72 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e  hereclause</tcl>
214a0 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64  .<tcl>hd_keyword
214b0 73 20 7b 57 48 45 52 45 20 63 6c 61 75 73 65 7d  s {WHERE clause}
214c0 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 32 2e 20  </tcl>.<p><b>2. 
214d0 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c  WHERE clause fil
214e0 74 65 72 69 6e 67 2e 3c 2f 62 3e 0a 0a 3c 70 3e  tering.</b>..<p>
214f0 5e 28 49 66 20 61 20 57 48 45 52 45 20 63 6c 61  ^(If a WHERE cla
21500 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
21510 2c 20 74 68 65 20 57 48 45 52 45 20 65 78 70 72  , the WHERE expr
21520 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
21530 74 65 64 20 66 6f 72 20 0a 65 61 63 68 20 72 6f  ted for .each ro
21540 77 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64  w in the input d
21550 61 74 61 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61  ata as a [boolea
21560 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41  n expression]. A
21570 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  ll rows for whic
21580 68 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75  h the.WHERE clau
21590 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  se expression ev
215a0 61 6c 75 61 74 65 73 20 74 6f 20 66 61 6c 73 65  aluates to false
215b0 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 66 72   are excluded fr
215c0 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 62  om the dataset b
215d0 65 66 6f 72 65 0a 63 6f 6e 74 69 6e 75 69 6e 67  efore.continuing
215e0 2e 29 5e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47 65  .)^..<p><b>3. Ge
215f0 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  neration of the 
21600 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
21610 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f  ws.</b>.<tcl>hd_
21620 66 72 61 67 6d 65 6e 74 20 72 65 73 75 6c 74 73  fragment results
21630 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64  et</tcl>.<tcl>hd
21640 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65 73 75 6c  _keywords {resul
21650 74 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e  t-set expression
21660 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f 74  s} {GROUP BY}</t
21670 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68 65  cl>..<p>Once the
21680 20 69 6e 70 75 74 20 64 61 74 61 20 66 72 6f 6d   input data from
21690 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
216a0 20 68 61 73 20 62 65 65 6e 20 66 69 6c 74 65 72   has been filter
216b0 65 64 20 62 79 20 74 68 65 0a 57 48 45 52 45 20  ed by the.WHERE 
216c0 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
216d0 6e 20 28 69 66 20 61 6e 79 29 2c 20 74 68 65 20  n (if any), the 
216e0 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
216f0 77 73 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c  ws for the simpl
21700 65 20 0a 53 45 4c 45 43 54 20 61 72 65 20 63 61  e .SELECT are ca
21710 6c 63 75 6c 61 74 65 64 2e 20 45 78 61 63 74 6c  lculated. Exactl
21720 79 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f  y how this is do
21730 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68  ne depends on wh
21740 65 74 68 65 72 20 74 68 65 20 73 69 6d 70 6c 65  ether the simple
21750 20 0a 53 45 4c 45 43 54 20 69 73 20 61 6e 20 61   .SELECT is an a
21760 67 67 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e 2d  ggregate or non-
21770 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2c  aggregate query,
21780 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20   and whether or 
21790 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42 59 20 63  not a GROUP.BY c
217a0 6c 61 75 73 65 20 77 61 73 20 73 70 65 63 69 66  lause was specif
217b0 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c 69  ied...<p> The li
217c0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
217d0 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 53 45  s between the SE
217e0 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65  LECT and FROM ke
217f0 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e 20  ywords is known 
21800 61 73 0a 74 68 65 20 72 65 73 75 6c 74 20 65 78  as.the result ex
21810 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20 20  pression list.  
21820 5e 49 66 20 61 20 72 65 73 75 6c 74 20 65 78 70  ^If a result exp
21830 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 73  ression is the s
21840 70 65 63 69 61 6c 20 65 78 70 72 65 73 73 69 6f  pecial expressio
21850 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63  n."*" then all c
21860 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
21870 70 75 74 20 64 61 74 61 20 61 72 65 20 73 75 62  put data are sub
21880 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 61  stituted for tha
21890 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e  t one expression
218a0 2e 0a 5e 28 49 66 20 74 68 65 20 65 78 70 72 65  ..^(If the expre
218b0 73 73 69 6f 6e 20 69 73 20 74 68 65 20 61 6c 69  ssion is the ali
218c0 61 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72  as of a table or
218d0 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
218e0 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f 6c   FROM clause.fol
218f0 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22 20 74 68  lowed by ".*" th
21900 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 66  en all columns f
21910 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 74 61  rom the named ta
21920 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
21930 61 72 65 0a 73 75 62 73 74 69 74 75 74 65 64 20  are.substituted 
21940 66 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20 65  for the single e
21950 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28 49  xpression.)^ ^(I
21960 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f  t is an error to
21970 20 75 73 65 20 61 20 22 2a 22 20 6f 72 0a 22 61   use a "*" or."a
21980 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69  lias.*" expressi
21990 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78  on in any contex
219a0 74 20 6f 74 68 65 72 20 74 68 61 6e 20 74 68 61  t other than tha
219b0 6e 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65  n a result expre
219c0 73 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28  ssion list.)^.^(
219d0 49 74 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72  It is also an er
219e0 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22  ror to use a "*"
219f0 20 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78   or "alias.*" ex
21a00 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69  pression in a si
21a10 6d 70 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72  mple SELECT.quer
21a20 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  y that does not 
21a30 68 61 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75  have a FROM clau
21a40 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65  se.)^..<p> ^(The
21a50 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
21a60 6e 73 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72  ns in the rows r
21a70 65 74 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d  eturned by a sim
21a80 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
21a90 6d 65 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f  ment.is equal to
21aa0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
21ab0 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
21ac0 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
21ad0 69 6f 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73  ion list after.s
21ae0 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a  ubstitution of *
21af0 20 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70   and alias.* exp
21b00 72 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68  ressions.)^ Each
21b10 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63   result row is c
21b20 61 6c 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61  alculated by.eva
21b30 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78 70 72  luating the expr
21b40 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72  essions in the r
21b50 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
21b60 20 6c 69 73 74 20 77 69 74 68 20 72 65 73 70 65   list with respe
21b70 63 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72  ct to a.single r
21b80 6f 77 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  ow of input data
21b90 20 6f 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61   or, for aggrega
21ba0 74 65 20 71 75 65 72 69 65 73 2c 20 77 69 74 68  te queries, with
21bb0 20 72 65 73 70 65 63 74 20 74 6f 20 61 20 67 72   respect to a gr
21bc0 6f 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75  oup.of rows...<u
21bd0 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  l>.  <li><p>^If 
21be0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
21bf0 6d 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e  ment is <b>a non
21c00 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
21c10 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20  </b>, then .    
21c20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
21c30 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
21c40 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73  pression list is
21c50 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
21c60 61 63 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74  ach row in.    t
21c70 68 65 20 64 61 74 61 73 65 74 20 66 69 6c 74 65  he dataset filte
21c80 72 65 64 20 62 79 20 74 68 65 20 57 48 45 52 45  red by the WHERE
21c90 20 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e   clause...  <li>
21ca0 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43  <p>^If the SELEC
21cb0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
21cc0 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  b>an aggregate q
21cd0 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47  uery without a G
21ce0 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20  ROUP.    BY</b> 
21cf0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63  clause, then eac
21d00 68 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  h aggregate expr
21d10 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
21d20 73 75 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20  sult-set is .   
21d30 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
21d40 61 63 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72  across the entir
21d50 65 20 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68  e dataset. ^Each
21d60 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
21d70 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e  xpression.    in
21d80 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20   the result-set 
21d90 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  is evaluated onc
21da0 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61  e for an arbitra
21db0 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
21dc0 77 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74  w of.    the dat
21dd0 61 73 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20  aset. ^The same 
21de0 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65  arbitrarily sele
21df0 63 74 65 64 20 72 6f 77 20 69 73 20 75 73 65 64  cted row is used
21e00 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f   for each.    no
21e10 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
21e20 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20  ession. ^Or, if 
21e30 74 68 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74  the dataset cont
21e40 61 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20  ains zero rows, 
21e50 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e  then .    each n
21e60 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
21e70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
21e80 61 74 65 64 20 61 67 61 69 6e 73 74 20 61 20 72  ated against a r
21e90 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20  ow consisting.  
21ea0 20 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55    entirely of NU
21eb0 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c  LL values...   <
21ec0 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f  p>^The single ro
21ed0 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  w of result-set 
21ee0 64 61 74 61 20 63 72 65 61 74 65 64 20 62 79 20  data created by 
21ef0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
21f00 67 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64  ggregate.    and
21f10 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
21f20 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
21f30 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72  e result-set for
21f40 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ms the result of
21f50 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74   an.    aggregat
21f60 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20  e query without 
21f70 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
21f80 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65  e. ^An aggregate
21f90 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61   query without a
21fa0 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c  .    GROUP BY cl
21fb0 61 75 73 65 20 61 6c 77 61 79 73 20 72 65 74 75  ause always retu
21fc0 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  rns exactly one 
21fd0 72 6f 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65  row of data, eve
21fe0 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 20  n if there are. 
21ff0 20 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20     zero rows of 
22000 69 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c  input data...  <
22010 6c 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53  li><p>^(If the S
22020 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
22030 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61  is <b>an aggrega
22040 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20  te query with a 
22050 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e  GROUP.    BY</b>
22060 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61   clause, then ea
22070 63 68 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  ch of the expres
22080 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20  sions specified 
22090 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20  as part of the. 
220a0 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75     GROUP BY clau
220b0 73 65 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  se is evaluated 
220c0 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
220d0 74 68 65 20 64 61 74 61 73 65 74 2e 20 45 61 63  the dataset. Eac
220e0 68 20 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65  h row.    is the
220f0 6e 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20  n assigned to a 
22100 22 67 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e  "group" based on
22110 20 74 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f   the results; ro
22120 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20  ws for which.   
22130 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
22140 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47  evaluating the G
22150 52 4f 55 50 20 42 59 20 65 78 70 72 65 73 73 69  ROUP BY expressi
22160 6f 6e 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  ons are the same
22170 20 61 72 65 0a 20 20 20 20 61 73 73 69 67 6e 65   are.    assigne
22180 64 20 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72  d to the same gr
22190 6f 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20  oup.)^ ^For the 
221a0 70 75 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75  purposes of grou
221b0 70 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20  ping rows, NULL 
221c0 0a 20 20 20 20 76 61 6c 75 65 73 20 61 72 65 20  .    values are 
221d0 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c  considered equal
221e0 2e 20 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c  . ^The usual rul
221f0 65 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f  es for [collatio
22200 6e 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20  n|selecting a.  
22210 20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75    collation sequ
22220 65 6e 63 65 5d 20 77 69 74 68 20 77 68 69 63 68  ence] with which
22230 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
22240 20 76 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68   values apply wh
22250 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20  en evaluating.  
22260 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e    expressions in
22270 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
22280 73 65 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73  se.  ^The expres
22290 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f  sions in the GRO
222a0 55 50 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20  UP BY clause.   
222b0 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e   do <em>not</em>
222c0 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 70 72   have to be expr
222d0 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70  essions that app
222e0 65 61 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ear in the resul
222f0 74 2e 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72  t. ^The.    expr
22300 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f  essions in a GRO
22310 55 50 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79  UP BY clause may
22320 20 6e 6f 74 20 62 65 20 61 67 67 72 65 67 61 74   not be aggregat
22330 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a  e expressions...
22340 20 20 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41      <p>^(If a HA
22350 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73  VING clause is s
22360 70 65 63 69 66 69 65 64 2c 20 69 74 20 69 73 20  pecified, it is 
22370 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
22380 6f 72 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20  or each group . 
22390 20 20 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20     of rows as a 
223a0 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
223b0 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73  ion]. If the res
223c0 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
223d0 67 20 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47  g the.    HAVING
223e0 20 63 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65   clause is false
223f0 2c 20 74 68 65 20 67 72 6f 75 70 20 69 73 20 64  , the group is d
22400 69 73 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20  iscarded.)^ ^If 
22410 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  the HAVING claus
22420 65 20 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72  e is.    an aggr
22430 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
22440 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
22450 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77  d across all row
22460 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  s in the group. 
22470 5e 49 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47  ^If.    a HAVING
22480 20 63 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e   clause is a non
22490 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
224a0 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
224b0 6c 75 61 74 65 64 20 77 69 74 68 20 72 65 73 70  luated with resp
224c0 65 63 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72  ect.    to an ar
224d0 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
224e0 65 64 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20  ed row from the 
224f0 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56  group.  ^The HAV
22500 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ING expression m
22510 61 79 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20  ay.    refer to 
22520 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67  values, even agg
22530 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
22540 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69  , that are not i
22550 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70  n the result.</p
22560 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20  >..    <p>^Each 
22570 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
22580 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20  e result-set is 
22590 74 68 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f  then evaluated o
225a0 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20  nce for each.   
225b0 20 67 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20   group of rows. 
225c0 5e 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69  ^If the expressi
225d0 6f 6e 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  on is an aggrega
225e0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
225f0 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61  t is .    evalua
22600 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ted across all r
22610 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ows in the group
22620 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74  . ^Otherwise, it
22630 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67   is evaluated ag
22640 61 69 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67  ainst.    a sing
22650 6c 65 20 61 72 62 69 74 72 61 72 69 6c 79 20 63  le arbitrarily c
22660 68 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77  hosen row from w
22670 69 74 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ithin the group.
22680 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f   ^If there is mo
22690 72 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20  re.    than one 
226a0 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
226b0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
226c0 72 65 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e  result-set, then
226d0 20 61 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78   all such.    ex
226e0 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76  pressions are ev
226f0 61 6c 75 61 74 65 64 20 66 6f 72 20 74 68 65 20  aluated for the 
22700 73 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c  same row...    <
22710 70 3e 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66  p>^Each group of
22720 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 20 72   input dataset r
22730 6f 77 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20  ows contributes 
22740 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20  a single row to 
22750 74 68 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20  the .    set of 
22760 72 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75  result rows. ^Su
22770 62 6a 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69  bject to filteri
22780 6e 67 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ng associated wi
22790 74 68 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a  th the DISTINCT.
227a0 20 20 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65      keyword, the
227b0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
227c0 72 65 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61  returned by an a
227d0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
227e0 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20  ith a GROUP.    
227f0 42 59 20 63 6c 61 75 73 65 20 69 73 20 74 68 65  BY clause is the
22800 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d   same as the num
22810 62 65 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66  ber of groups of
22820 20 72 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62   rows produced b
22830 79 20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74  y applying.    t
22840 68 65 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20  he GROUP BY and 
22850 48 41 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74  HAVING clauses t
22860 6f 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  o the filtered i
22870 6e 70 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f  nput dataset..</
22880 75 6c 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65  ul>..<p><b>4. Re
22890 6d 6f 76 61 6c 20 6f 66 20 64 75 70 6c 69 63 61  moval of duplica
228a0 74 65 20 72 6f 77 73 20 28 44 49 53 54 49 4e 43  te rows (DISTINC
228b0 54 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f  T processing).</
228c0 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
228d0 65 6e 74 20 64 69 73 74 69 6e 63 74 3c 2f 74 63  ent distinct</tc
228e0 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
228f0 72 64 73 20 7b 44 49 53 54 49 4e 43 54 7d 3c 2f  rds {DISTINCT}</
22900 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66  tcl>..<p>^One of
22910 20 74 68 65 20 41 4c 4c 20 6f 72 20 44 49 53 54   the ALL or DIST
22920 49 4e 43 54 20 6b 65 79 77 6f 72 64 73 20 6d 61  INCT keywords ma
22930 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 53 45 4c  y follow the SEL
22940 45 43 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 61  ECT keyword in a
22950 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20   .simple SELECT 
22960 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74  statement. ^If t
22970 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  he simple SELECT
22980 20 69 73 20 61 20 53 45 4c 45 43 54 20 41 4c 4c   is a SELECT ALL
22990 2c 20 74 68 65 6e 20 74 68 65 0a 65 6e 74 69 72  , then the.entir
229a0 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
229b0 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
229c0 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 2e  d by the SELECT.
229d0 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41 4c 4c   ^If neither ALL
229e0 20 6f 72 0a 44 49 53 54 49 4e 43 54 20 61 72 65   or.DISTINCT are
229f0 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
22a00 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 61  he behavior is a
22a10 73 20 69 66 20 41 4c 4c 20 77 65 72 65 20 73 70  s if ALL were sp
22a20 65 63 69 66 69 65 64 2e 20 0a 5e 49 66 20 74 68  ecified. .^If th
22a30 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
22a40 69 73 20 61 20 53 45 4c 45 43 54 20 44 49 53 54  is a SELECT DIST
22a50 49 4e 43 54 2c 20 74 68 65 6e 20 64 75 70 6c 69  INCT, then dupli
22a60 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
22a70 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 73  moved.from the s
22a80 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
22a90 73 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 72  s before it is r
22aa0 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72 20 74 68  eturned. ^For th
22ab0 65 20 70 75 72 70 6f 73 65 73 20 6f 66 0a 64 65  e purposes of.de
22ac0 74 65 63 74 69 6e 67 20 64 75 70 6c 69 63 61 74  tecting duplicat
22ad0 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e 55 4c 4c  e rows, two NULL
22ae0 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
22af0 69 64 65 72 65 64 20 74 6f 20 62 65 20 65 71 75  idered to be equ
22b00 61 6c 2e 20 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20  al. ^The.normal 
22b10 72 75 6c 65 73 20 66 6f 72 20 73 65 6c 65 63 74  rules for select
22b20 69 6e 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ing a collation 
22b30 73 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70  sequence to comp
22b40 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73 20  are text values 
22b50 77 69 74 68 0a 61 70 70 6c 79 2e 0a 0a 3c 68 33  with.apply...<h3
22b60 3e 43 6f 6d 70 6f 75 6e 64 20 53 65 6c 65 63 74  >Compound Select
22b70 20 53 74 61 74 65 6d 65 6e 74 73 0a 3c 74 63 6c   Statements.<tcl
22b80 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d  >hd_fragment com
22b90 70 6f 75 6e 64 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  pound</tcl>.<tcl
22ba0 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 63 6f  >hd_keywords {co
22bb0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 7d 20 7b  mpound select} {
22bc0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 7d 3c  compound query}<
22bd0 2f 74 63 6c 3e 0a 3c 2f 68 33 3e 0a 0a 3c 70 3e  /tcl>.</h3>..<p>
22be0 54 77 6f 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70  Two or more simp
22bf0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
22c00 65 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e  ents may be conn
22c10 65 63 74 65 64 20 74 6f 67 65 74 68 65 72 20 74  ected together t
22c20 6f 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e  o form.a compoun
22c30 64 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20 74  d SELECT using t
22c40 68 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20  he UNION, UNION 
22c50 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20 6f  ALL, INTERSECT o
22c60 72 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f  r EXCEPT operato
22c70 72 2e 0a 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e  r..^In a compoun
22c80 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68  d SELECT, all th
22c90 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  e constituent SE
22ca0 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74 75 72  LECTs must retur
22cb0 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62  n the same .numb
22cc0 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c  er of result col
22cd0 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f  umns. ^As the co
22ce0 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f  mponents of a co
22cf0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75  mpound SELECT mu
22d00 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c  st.be simple SEL
22d10 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  ECT statements, 
22d20 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  they may not con
22d30 74 61 69 6e 20 4f 52 44 45 52 20 42 59 20 6f 72  tain ORDER BY or
22d40 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 2e 0a   LIMIT clauses..
22d50 5e 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49  ^ORDER BY and LI
22d60 4d 49 54 20 63 6c 61 75 73 65 73 20 6d 61 79 20  MIT clauses may 
22d70 6f 6e 6c 79 20 6f 63 63 75 72 20 61 74 20 74 68  only occur at th
22d80 65 20 65 6e 64 20 6f 66 20 74 68 65 20 65 6e 74  e end of the ent
22d90 69 72 65 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c  ire compound.SEL
22da0 45 43 54 2e 20 20 0a 0a 3c 70 3e 5e 41 20 63 6f  ECT.  ..<p>^A co
22db0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63 72  mpound SELECT cr
22dc0 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49 4f  eated using UNIO
22dd0 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20 72  N ALL operator r
22de0 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20 72  eturns all the r
22df0 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c  ows.from the SEL
22e00 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ECT to the left 
22e10 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c  of the UNION ALL
22e20 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20 61   operator, and a
22e30 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d  ll the rows.from
22e40 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74   the SELECT to t
22e50 68 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e 20  he right of it. 
22e60 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72 61  ^The UNION opera
22e70 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73 61  tor works the sa
22e80 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e 20  me way as.UNION 
22e90 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61 74  ALL, except that
22ea0 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
22eb0 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  are removed from
22ec0 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75 6c   the final resul
22ed0 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54 45  t set..^The INTE
22ee0 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20 72  RSECT operator r
22ef0 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65 72  eturns the inter
22f00 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  section of the r
22f10 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c 65  esults of the le
22f20 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45 4c  ft and.right SEL
22f30 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43 45  ECTs.  ^The EXCE
22f40 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75  PT operator retu
22f50 72 6e 73 20 74 68 65 20 73 75 62 73 65 74 20 6f  rns the subset o
22f60 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  f rows returned 
22f70 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c 45  by the.left SELE
22f80 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  CT that are not 
22f90 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62 79  also returned by
22fa0 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
22fb0 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63 61  SELECT. ^Duplica
22fc0 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d 6f  te.rows are remo
22fd0 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73  ved from the res
22fe0 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45 43  ults of INTERSEC
22ff0 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70 65  T and EXCEPT ope
23000 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74 68  rators before th
23010 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  e.result set is 
23020 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46  returned...<p>^F
23030 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
23040 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 64  of determining d
23050 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66 6f  uplicate rows fo
23060 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  r the results of
23070 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54   compound.SELECT
23080 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c 4c   operators, NULL
23090 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
230a0 69 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f 20  idered equal to 
230b0 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65  other NULL value
230c0 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20 66  s and.distinct f
230d0 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c  rom all non-NULL
230e0 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63 6f   values. ^The co
230f0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
23100 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
23110 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65   .two text value
23120 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
23130 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  as if the column
23140 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e  s of the left an
23150 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45 4c  d right-hand.SEL
23160 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ECT statements w
23170 65 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  ere the left and
23180 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72   right-hand oper
23190 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75 61  ands of the equa
231a0 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72 2c  ls (=).operator,
231b0 20 65 78 63 65 70 74 20 74 68 61 74 20 67 72 65   except that gre
231c0 61 74 65 72 20 70 72 65 63 65 64 65 6e 63 65 20  ater precedence 
231d0 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20  is not assigned 
231e0 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a  to a collation .
231f0 73 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69  sequence specifi
23200 65 64 20 77 69 74 68 20 74 68 65 20 70 6f 73 74  ed with the post
23210 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  fix COLLATE oper
23220 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e 69  ator. ^No affini
23230 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  ty.transformatio
23240 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 74  ns are applied t
23250 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68 65  o any values whe
23260 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77 73  n comparing rows
23270 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63 6f   as part of a.co
23280 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 0a  mpound SELECT. .
23290 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65 65  .<p>^(When three
232a0 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20   or more simple 
232b0 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e 6e  SELECTs are conn
232c0 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d  ected into a com
232d0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74 68  pound SELECT,.th
232e0 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65  ey group from le
232f0 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20  ft to right. In 
23300 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
23310 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43 22  "A", "B" and "C"
23320 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65 20   are all.simple 
23330 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
23340 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43 29  s, (A op B op C)
23350 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73   is processed as
23360 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43 29   ((A op B) op C)
23370 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  .)^..</p>..<tcl>
23380 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 65  hd_fragment orde
23390 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 3c 2f  rby {order by}</
233a0 74 63 6c 3e 0a 3c 68 33 3e 4f 52 44 45 52 20 42  tcl>.<h3>ORDER B
233b0 59 20 61 6e 64 20 4c 49 4d 49 54 2f 4f 46 46 53  Y and LIMIT/OFFS
233c0 45 54 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a  ET Clauses</h3>.
233d0 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20  .<p>If a SELECT 
233e0 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72  statement that r
233f0 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e  eturns more than
23400 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f   one row does no
23410 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20  t have an.ORDER 
23420 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f  BY clause, the o
23430 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68  rder in which th
23440 65 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  e rows are retur
23450 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
23460 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43  ..Or, if a SELEC
23470 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  T statement does
23480 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42   have an ORDER B
23490 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
234a0 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65  he list of.expre
234b0 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20  ssions attached 
234c0 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  to the ORDER BY 
234d0 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72  determine the or
234e0 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
234f0 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 74  s.are returned t
23500 6f 20 74 68 65 20 75 73 65 72 2e 20 5e 52 6f 77  o the user. ^Row
23510 73 20 61 72 65 20 66 69 72 73 74 20 73 6f 72 74  s are first sort
23520 65 64 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ed based on the 
23530 72 65 73 75 6c 74 73 20 6f 66 0a 65 76 61 6c 75  results of.evalu
23540 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d  ating the left-m
23550 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ost expression i
23560 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 6c  n the ORDER BY l
23570 69 73 74 2c 20 74 68 65 6e 20 74 69 65 73 20 61  ist, then ties a
23580 72 65 20 62 72 6f 6b 65 6e 0a 62 79 20 65 76 61  re broken.by eva
23590 6c 75 61 74 69 6e 67 20 74 68 65 20 73 65 63 6f  luating the seco
235a0 6e 64 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70  nd left-most exp
235b0 72 65 73 73 69 6f 6e 20 61 6e 64 20 73 6f 20 6f  ression and so o
235c0 6e 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20  n. The order in 
235d0 77 68 69 63 68 0a 74 77 6f 20 72 6f 77 73 20 66  which.two rows f
235e0 6f 72 20 77 68 69 63 68 20 61 6c 6c 20 4f 52 44  or which all ORD
235f0 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
23600 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 65 71  s evaluate to eq
23610 75 61 6c 20 76 61 6c 75 65 73 20 61 72 65 0a 72  ual values are.r
23620 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66  eturned is undef
23630 69 6e 65 64 2e 20 5e 45 61 63 68 20 4f 52 44 45  ined. ^Each ORDE
23640 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
23650 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c  may be optionall
23660 79 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 6f 6e  y followed.by on
23670 65 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64  e of the keyword
23680 73 20 41 53 43 20 28 73 6d 61 6c 6c 65 72 20 76  s ASC (smaller v
23690 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72 6e  alues are return
236a0 65 64 20 66 69 72 73 74 29 20 6f 72 20 44 45 53  ed first) or DES
236b0 43 20 28 6c 61 72 67 65 72 0a 76 61 6c 75 65 73  C (larger.values
236c0 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66 69   are returned fi
236d0 72 73 74 29 2e 20 5e 49 66 20 6e 65 69 74 68 65  rst). ^If neithe
236e0 72 20 41 53 43 20 6f 72 20 44 45 53 43 20 61 72  r ASC or DESC ar
236f0 65 20 73 70 65 63 69 66 69 65 64 2c 20 72 6f 77  e specified, row
23700 73 0a 61 72 65 20 73 6f 72 74 65 64 20 69 6e 20  s.are sorted in 
23710 61 73 63 65 6e 64 69 6e 67 20 28 73 6d 61 6c 6c  ascending (small
23720 65 72 20 76 61 6c 75 65 73 20 66 69 72 73 74 29  er values first)
23730 20 6f 72 64 65 72 20 62 79 20 64 65 66 61 75 6c   order by defaul
23740 74 2e 0a 0a 3c 70 3e 45 61 63 68 20 4f 52 44 45  t...<p>Each ORDE
23750 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
23760 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20  is processed as 
23770 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f  follows:</p>..<o
23780 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  l>.<li><p>^If th
23790 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
237a0 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73 74  ssion is a const
237b0 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74 68  ant integer K th
237c0 65 6e 20 74 68 65 0a 65 78 70 72 65 73 73 69 6f  en the.expressio
237d0 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  n is considered 
237e0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
237f0 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   K-th column of 
23800 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 28  the result set.(
23810 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 75 6d 62  columns are numb
23820 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74  ered from left t
23830 6f 20 72 69 67 68 74 20 73 74 61 72 74 69 6e 67  o right starting
23840 20 77 69 74 68 20 31 29 2e 0a 0a 3c 6c 69 3e 3c   with 1)...<li><
23850 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20  p>^If the ORDER 
23860 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
23870 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 74   an identifier t
23880 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
23890 74 6f 0a 74 68 65 20 61 6c 69 61 73 20 6f 66 20  to.the alias of 
238a0 6f 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75  one of the outpu
238b0 74 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20  t columns, then 
238c0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
238d0 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 61 6e 20  s considered.an 
238e0 61 6c 69 61 73 20 66 6f 72 20 74 68 61 74 20 63  alias for that c
238f0 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e  olumn...<li><p>^
23900 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68  Otherwise, if th
23910 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
23920 73 73 69 6f 6e 20 69 73 20 61 6e 79 20 6f 74 68  ssion is any oth
23930 65 72 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  er expression, i
23940 74 20 0a 69 73 20 65 76 61 6c 75 61 74 65 64 20  t .is evaluated 
23950 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 65 64  and the returned
23960 20 76 61 6c 75 65 20 75 73 65 64 20 74 6f 20 6f   value used to o
23970 72 64 65 72 20 74 68 65 20 6f 75 74 70 75 74 20  rder the output 
23980 72 6f 77 73 2e 20 5e 49 66 0a 74 68 65 20 53 45  rows. ^If.the SE
23990 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
239a0 73 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  s a simple SELEC
239b0 54 2c 20 74 68 65 6e 20 61 6e 20 4f 52 44 45 52  T, then an ORDER
239c0 20 42 59 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20   BY may contain 
239d0 61 6e 79 0a 61 72 62 69 74 72 61 72 79 20 65 78  any.arbitrary ex
239e0 70 72 65 73 73 69 6f 6e 73 2e 20 5e 48 6f 77 65  pressions. ^Howe
239f0 76 65 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45  ver, if the SELE
23a00 43 54 20 69 73 20 61 20 63 6f 6d 70 6f 75 6e 64  CT is a compound
23a10 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 0a 4f 52   SELECT, then.OR
23a20 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
23a30 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  ns that are not 
23a40 61 6c 69 61 73 65 73 20 74 6f 20 6f 75 74 70 75  aliases to outpu
23a50 74 20 63 6f 6c 75 6d 6e 73 20 6d 75 73 74 20 62  t columns must b
23a60 65 20 65 78 61 63 74 6c 79 0a 74 68 65 20 73 61  e exactly.the sa
23a70 6d 65 20 61 73 20 61 6e 20 65 78 70 72 65 73 73  me as an express
23a80 69 6f 6e 20 75 73 65 64 20 61 73 20 61 6e 20 6f  ion used as an o
23a90 75 74 70 75 74 20 63 6f 6c 75 6d 6e 2e 0a 3c 2f  utput column..</
23aa0 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65  ol>..<p>^For the
23ab0 20 70 75 72 70 6f 73 65 73 20 6f 66 20 73 6f 72   purposes of sor
23ac0 74 69 6e 67 20 72 6f 77 73 2c 20 76 61 6c 75 65  ting rows, value
23ad0 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69  s are compared i
23ae0 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a 61  n the same way.a
23af0 73 20 66 6f 72 20 5b 63 6f 6d 70 61 72 69 73 6f  s for [compariso
23b00 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 5d 2e 20  n expressions]. 
23b10 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  The collation se
23b20 71 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20 63  quence used to c
23b30 6f 6d 70 61 72 65 0a 74 77 6f 20 74 65 78 74 20  ompare.two text 
23b40 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d  values is determ
23b50 69 6e 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ined as follows:
23b60 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ol>.  <li><p>
23b70 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59  ^If the ORDER BY
23b80 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
23b90 73 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74  ssigned a collat
23ba0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69  ion sequence usi
23bb0 6e 67 0a 20 20 74 68 65 20 70 6f 73 74 66 69 78  ng.  the postfix
23bc0 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74   [COLLATE operat
23bd0 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 73 70  or], then the sp
23be0 65 63 69 66 69 65 64 20 63 6f 6c 6c 61 74 69 6f  ecified collatio
23bf0 6e 20 73 65 71 75 65 6e 63 65 20 69 73 0a 20 20  n sequence is.  
23c00 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  used..  <li><p>^
23c10 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68  Otherwise, if th
23c20 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
23c30 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 6c 69 61  ssion is an alia
23c40 73 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69  s to an expressi
23c50 6f 6e 0a 20 20 74 68 61 74 20 68 61 73 20 62 65  on.  that has be
23c60 65 6e 20 61 73 73 69 67 6e 65 64 20 61 20 63 6f  en assigned a co
23c70 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
23c80 20 75 73 69 6e 67 20 74 68 65 20 70 6f 73 74 66   using the postf
23c90 69 78 20 0a 20 20 5b 43 4f 4c 4c 41 54 45 20 6f  ix .  [COLLATE o
23ca0 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74  perator], then t
23cb0 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
23cc0 75 65 6e 63 65 20 61 73 73 69 67 6e 65 64 20 74  uence assigned t
23cd0 6f 20 74 68 65 20 61 6c 69 61 73 65 64 0a 20 20  o the aliased.  
23ce0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73  expression is us
23cf0 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74  ed..  <li><p>^Ot
23d00 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65 20  herwise, if the 
23d10 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
23d20 69 6f 6e 20 69 73 20 61 20 63 6f 6c 75 6d 6e 20  ion is a column 
23d30 6f 72 20 61 6e 20 61 6c 69 61 73 20 6f 66 0a 20  or an alias of. 
23d40 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74   an expression t
23d50 68 61 74 20 69 73 20 61 20 63 6f 6c 75 6d 6e 2c  hat is a column,
23d60 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c   then the defaul
23d70 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
23d80 65 6e 63 65 20 66 6f 72 0a 20 20 74 68 65 20 63  ence for.  the c
23d90 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 20 0a  olumn is used. .
23da0 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77    <li><p>^Otherw
23db0 69 73 65 2c 20 74 68 65 20 5b 42 49 4e 41 52 59  ise, the [BINARY
23dc0 5d 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  ] collation sequ
23dd0 65 6e 63 65 20 69 73 20 75 73 65 64 2e 0a 3c 2f  ence is used..</
23de0 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 20 63 6f 6d  ol>..<p>In a com
23df0 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 73 74 61  pound SELECT sta
23e00 74 65 6d 65 6e 74 2c 20 61 6c 6c 20 4f 52 44 45  tement, all ORDE
23e10 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73  R BY expressions
23e20 20 61 72 65 20 68 61 6e 64 6c 65 64 0a 61 73 20   are handled.as 
23e30 61 6c 69 61 73 65 73 20 66 6f 72 20 6f 6e 65 20  aliases for one 
23e40 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
23e50 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 6f 6d  lumns of the com
23e60 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 0a 5e 28  pound SELECT..^(
23e70 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20 65  If an ORDER BY e
23e80 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e 6f 74  xpression is not
23e90 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c 69 61   an integer alia
23ea0 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73  s, then SQLite s
23eb0 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65 66 74  earches.the left
23ec0 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69 6e 20  -most SELECT in 
23ed0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66 6f 72  the compound for
23ee0 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e   a result column
23ef0 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 65 69   that matches ei
23f00 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e 64 20  ther.the second 
23f10 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73 20 61  or third rules a
23f20 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74 63 68  bove. If a match
23f30 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 73   is found, the s
23f40 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e 64 0a  earch stops and.
23f50 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
23f60 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61 6e 20  s handled as an 
23f70 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 65  alias for the re
23f80 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74  sult column that
23f90 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d 61 74   it has been.mat
23fa0 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20 4f 74  ched against. Ot
23fb0 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e 65 78  herwise, the nex
23fc0 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  t SELECT to the 
23fd0 72 69 67 68 74 20 69 73 20 74 72 69 65 64 2c 20  right is tried, 
23fe0 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e 49 66  and so on.)^.^If
23ff0 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65 78 70   no matching exp
24000 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 66  ression can be f
24010 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65 73 75  ound in the resu
24020 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e  lt columns of an
24030 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  y.constituent SE
24040 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e 20 65  LECT, it is an e
24050 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65 72 6d  rror. ^Each term
24060 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   of the ORDER BY
24070 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f 63 65   clause is.proce
24080 73 73 65 64 20 73 65 70 61 72 61 74 65 6c 79 20  ssed separately 
24090 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74 63 68  and may be match
240a0 65 64 20 61 67 61 69 6e 73 74 20 72 65 73 75 6c  ed against resul
240b0 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 64  t columns from d
240c0 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43 54 20  ifferent.SELECT 
240d0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
240e0 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a  e compound.</p>.
240f0 0a 3c 70 3e 54 68 65 20 4c 49 4d 49 54 20 63 6c  .<p>The LIMIT cl
24100 61 75 73 65 20 69 73 20 75 73 65 64 20 74 6f 20  ause is used to 
24110 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72 20 62  place an upper b
24120 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62  ound on the numb
24130 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75 72  er of rows.retur
24140 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43 54 20  ned by a SELECT 
24150 73 74 61 74 65 6d 65 6e 74 2e 20 5e 41 6e 79 20  statement. ^Any 
24160 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
24170 6e 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e  n may be used in
24180 20 74 68 65 20 0a 4c 49 4d 49 54 20 63 6c 61 75   the .LIMIT clau
24190 73 65 2c 20 73 6f 20 6c 6f 6e 67 20 61 73 20 69  se, so long as i
241a0 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  t evaluates to a
241b0 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 76  n integer or a v
241c0 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
241d0 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76  .losslessly conv
241e0 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
241f0 67 65 72 2e 20 5e 49 66 20 74 68 65 20 65 78 70  ger. ^If the exp
24200 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
24210 73 20 74 6f 20 61 20 4e 55 4c 4c 20 0a 76 61 6c  s to a NULL .val
24220 75 65 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  ue or any other 
24230 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f  value that canno
24240 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
24250 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
24260 69 6e 74 65 67 65 72 2c 20 61 6e 0a 65 72 72 6f  integer, an.erro
24270 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e  r is returned. ^
24280 49 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70  If the LIMIT exp
24290 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
242a0 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  s to a negative 
242b0 76 61 6c 75 65 2c 0a 74 68 65 6e 20 74 68 65 72  value,.then ther
242c0 65 20 69 73 20 6e 6f 20 75 70 70 65 72 20 62 6f  e is no upper bo
242d0 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  und on the numbe
242e0 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e  r of rows return
242f0 65 64 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  ed. ^Otherwise, 
24300 74 68 65 0a 53 45 4c 45 43 54 20 72 65 74 75 72  the.SELECT retur
24310 6e 73 20 74 68 65 20 66 69 72 73 74 20 4e 20 72  ns the first N r
24320 6f 77 73 20 6f 66 20 69 74 73 20 72 65 73 75 6c  ows of its resul
24330 74 20 73 65 74 20 6f 6e 6c 79 2c 20 77 68 65 72  t set only, wher
24340 65 20 4e 20 69 73 20 74 68 65 20 76 61 6c 75 65  e N is the value
24350 0a 74 68 61 74 20 74 68 65 20 4c 49 4d 49 54 20  .that the LIMIT 
24360 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
24370 61 74 65 73 20 74 6f 2e 20 5e 4f 72 2c 20 69 66  ates to. ^Or, if
24380 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
24390 65 6d 65 6e 74 20 77 6f 75 6c 64 0a 72 65 74 75  ement would.retu
243a0 72 6e 20 6c 65 73 73 20 74 68 61 6e 20 4e 20 72  rn less than N r
243b0 6f 77 73 20 77 69 74 68 6f 75 74 20 61 20 4c 49  ows without a LI
243c0 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  MIT clause, then
243d0 20 74 68 65 20 65 6e 74 69 72 65 20 72 65 73 75   the entire resu
243e0 6c 74 20 73 65 74 20 69 73 0a 72 65 74 75 72 6e  lt set is.return
243f0 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 65 78  ed. ..<p>^The ex
24400 70 72 65 73 73 69 6f 6e 20 61 74 74 61 63 68 65  pression attache
24410 64 20 74 6f 20 74 68 65 20 6f 70 74 69 6f 6e 61  d to the optiona
24420 6c 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  l OFFSET clause 
24430 74 68 61 74 20 6d 61 79 20 66 6f 6c 6c 6f 77 20  that may follow 
24440 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d  a.LIMIT clause m
24450 75 73 74 20 61 6c 73 6f 20 65 76 61 6c 75 61 74  ust also evaluat
24460 65 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c  e to an integer,
24470 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61 74   or a value that
24480 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73   can be.lossless
24490 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly converted to 
244a0 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20  an integer. ^If 
244b0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61  an expression ha
244c0 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75  s an OFFSET clau
244d0 73 65 2c 0a 74 68 65 6e 20 74 68 65 20 66 69 72  se,.then the fir
244e0 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20 6f 6d  st M rows are om
244f0 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 72  itted from the r
24500 65 73 75 6c 74 20 73 65 74 20 72 65 74 75 72 6e  esult set return
24510 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54  ed by the SELECT
24520 0a 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74  .statement and t
24530 68 65 20 6e 65 78 74 20 4e 20 72 6f 77 73 20 61  he next N rows a
24540 72 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68 65  re returned, whe
24550 72 65 20 4d 20 61 6e 64 20 4e 20 61 72 65 20 74  re M and N are t
24560 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a 74  he values that.t
24570 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20 4c 49  he OFFSET and LI
24580 4d 49 54 20 63 6c 61 75 73 65 73 20 65 76 61 6c  MIT clauses eval
24590 75 61 74 65 20 74 6f 2c 20 72 65 73 70 65 63 74  uate to, respect
245a0 69 76 65 6c 79 2e 20 5e 4f 72 2c 20 69 66 20 74  ively. ^Or, if t
245b0 68 65 20 53 45 4c 45 43 54 0a 77 6f 75 6c 64 20  he SELECT.would 
245c0 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e  return less than
245d0 20 4d 2b 4e 20 72 6f 77 73 20 69 66 20 69 74 20   M+N rows if it 
245e0 64 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20 4c  did not have a L
245f0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
24600 6e 20 74 68 65 0a 66 69 72 73 74 20 4d 20 72 6f  n the.first M ro
24610 77 73 20 61 72 65 20 73 6b 69 70 70 65 64 20 61  ws are skipped a
24620 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67  nd the remaining
24630 20 72 6f 77 73 20 28 69 66 20 61 6e 79 29 20 61   rows (if any) a
24640 72 65 20 72 65 74 75 72 6e 65 64 2e 20 5e 49 66  re returned. ^If
24650 20 74 68 65 0a 4f 46 46 53 45 54 20 63 6c 61 75   the.OFFSET clau
24660 73 65 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  se evaluates to 
24670 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  a negative value
24680 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 72  , the results ar
24690 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 66  e the same as if
246a0 20 69 74 0a 68 61 64 20 65 76 61 6c 75 61 74 65   it.had evaluate
246b0 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e  d to zero...<p>^
246c0 49 6e 73 74 65 61 64 20 6f 66 20 61 20 73 65 70  Instead of a sep
246d0 61 72 61 74 65 20 4f 46 46 53 45 54 20 63 6c 61  arate OFFSET cla
246e0 75 73 65 2c 20 74 68 65 20 4c 49 4d 49 54 20 63  use, the LIMIT c
246f0 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63 69 66  lause may specif
24700 79 20 74 77 6f 0a 73 63 61 6c 61 72 20 65 78 70  y two.scalar exp
24710 72 65 73 73 69 6f 6e 73 20 73 65 70 61 72 61 74  ressions separat
24720 65 64 20 62 79 20 61 20 63 6f 6d 6d 61 2e 20 5e  ed by a comma. ^
24730 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68  In this case, th
24740 65 20 66 69 72 73 74 20 65 78 70 72 65 73 73 69  e first expressi
24750 6f 6e 0a 69 73 20 75 73 65 64 20 61 73 20 74 68  on.is used as th
24760 65 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73  e OFFSET express
24770 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 65 63 6f  ion and the seco
24780 6e 64 20 61 73 20 74 68 65 20 4c 49 4d 49 54 20  nd as the LIMIT 
24790 65 78 70 72 65 73 73 69 6f 6e 2e 0a 54 68 69 73  expression..This
247a0 20 69 73 20 63 6f 75 6e 74 65 72 2d 69 6e 74 75   is counter-intu
247b0 69 74 69 76 65 2c 20 61 73 20 77 68 65 6e 20 75  itive, as when u
247c0 73 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20  sing the OFFSET 
247d0 63 6c 61 75 73 65 20 74 68 65 20 73 65 63 6f 6e  clause the secon
247e0 64 20 6f 66 0a 74 68 65 20 74 77 6f 20 65 78 70  d of.the two exp
247f0 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 65 20  ressions is the 
24800 4f 46 46 53 45 54 20 61 6e 64 20 74 68 65 20 66  OFFSET and the f
24810 69 72 73 74 20 74 68 65 20 4c 49 4d 49 54 2e 20  irst the LIMIT. 
24820 54 68 69 73 20 69 73 20 69 6e 74 65 6e 74 69 6f  This is intentio
24830 6e 61 6c 0a 2d 20 69 74 20 6d 61 78 69 6d 69 7a  nal.- it maximiz
24840 65 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  es compatibility
24850 20 77 69 74 68 20 6f 74 68 65 72 20 53 51 4c 20   with other SQL 
24860 64 61 74 61 62 61 73 65 20 73 79 73 74 65 6d 73  database systems
24870 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
24880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
248a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
248b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
248c0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
248d0 55 50 44 41 54 45 20 75 70 64 61 74 65 20 7b 55  UPDATE update {U
248e0 50 44 41 54 45 20 2a 55 50 44 41 54 45 73 7d 0a  PDATE *UPDATEs}.
248f0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75  .BubbleDiagram u
24900 70 64 61 74 65 2d 73 74 6d 74 20 31 0a 42 75 62  pdate-stmt 1.Bub
24910 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69  bleDiagram quali
24920 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a  fied-table-name.
24930 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55  </tcl>..<p>^An U
24940 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
24950 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64 69 66  is used to modif
24960 79 20 61 20 73 75 62 73 65 74 20 6f 66 20 74 68  y a subset of th
24970 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20  e values stored 
24980 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  in .zero or more
24990 20 72 6f 77 73 20 6f 66 20 74 68 65 20 64 61 74   rows of the dat
249a0 61 62 61 73 65 20 74 61 62 6c 65 20 69 64 65 6e  abase table iden
249b0 74 69 66 69 65 64 20 62 79 20 74 68 65 20 0a 3c  tified by the .<
249c0 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c  i>qualified-tabl
249d0 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69  e-name</i> speci
249e0 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
249f0 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
24a00 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ment...<p>^If th
24a10 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
24a20 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  nt does not have
24a30 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 2c   a WHERE clause,
24a40 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65   all rows in the
24a50 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f 64 69 66  .table are modif
24a60 69 65 64 20 62 79 20 74 68 65 20 55 50 44 41 54  ied by the UPDAT
24a70 45 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  E. ^Otherwise, t
24a80 68 65 20 55 50 44 41 54 45 20 61 66 66 65 63 74  he UPDATE affect
24a90 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a 72 6f 77  s only those.row
24aa0 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
24ab0 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61  result of evalua
24ac0 74 69 6e 67 20 74 68 65 20 57 48 45 52 45 20 63  ting the WHERE c
24ad0 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
24ae0 20 61 73 20 61 20 0a 5b 62 6f 6f 6c 65 61 6e 20   as a .[boolean 
24af0 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65  expression|boole
24b00 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  an expression is
24b10 20 74 72 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e   true]. ^It is n
24b20 6f 74 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ot an error if t
24b30 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
24b40 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75 61 74  does not evaluat
24b50 65 20 74 6f 20 74 72 75 65 20 66 6f 72 20 61 6e  e to true for an
24b60 79 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62  y row in the tab
24b70 6c 65 20 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d  le - this just.m
24b80 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 55 50  eans that the UP
24b90 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
24ba0 66 66 65 63 74 73 20 7a 65 72 6f 20 72 6f 77 73  ffects zero rows
24bb0 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69  ...<p>The modifi
24bc0 63 61 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20  cations made to 
24bd0 65 61 63 68 20 72 6f 77 20 61 66 66 65 63 74 65  each row affecte
24be0 64 20 62 79 20 61 6e 20 55 50 44 41 54 45 20 73  d by an UPDATE s
24bf0 74 61 74 65 6d 65 6e 74 20 61 72 65 0a 64 65 74  tatement are.det
24c00 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6c  ermined by the l
24c10 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e  ist of assignmen
24c20 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ts following the
24c30 20 53 45 54 20 6b 65 79 77 6f 72 64 2e 20 45 61   SET keyword. Ea
24c40 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73 70  ch.assignment sp
24c50 65 63 69 66 69 65 73 20 61 20 63 6f 6c 75 6d 6e  ecifies a column
24c60 20 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c 65 66   name to the lef
24c70 74 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20  t of the equals 
24c80 73 69 67 6e 20 61 6e 64 20 61 0a 73 63 61 6c 61  sign and a.scala
24c90 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  r expression to 
24ca0 74 68 65 20 72 69 67 68 74 2e 20 5e 46 6f 72 20  the right. ^For 
24cb0 65 61 63 68 20 61 66 66 65 63 74 65 64 20 72 6f  each affected ro
24cc0 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c  w, the named col
24cd0 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74 6f 20  umns.are set to 
24ce0 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75 6e 64  the values found
24cf0 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74   by evaluating t
24d00 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
24d10 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65 73 73   scalar .express
24d20 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69 6e 67  ions. ^If a sing
24d30 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 61  le column-name a
24d40 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68 61 6e  ppears more than
24d50 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c 69 73   once in the lis
24d60 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e 74 20  t of.assignment 
24d70 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61 6c 6c  expressions, all
24d80 20 62 75 74 20 74 68 65 20 72 69 67 68 74 6d 6f   but the rightmo
24d90 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 69 73  st occurrence is
24da0 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75 6d   ignored. ^Colum
24db0 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74 20 61  ns.that do not a
24dc0 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c 69 73  ppear in the lis
24dd0 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73  t of assignments
24de0 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f 64 69   are left unmodi
24df0 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61 6c 61  fied. ^The scala
24e00 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61  r.expressions ma
24e10 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d  y refer to colum
24e20 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65  ns of the row be
24e30 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e 49 6e  ing updated. ^In
24e40 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c 0a 73   this case all.s
24e50 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
24e60 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20  s are evaluated 
24e70 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69 67  before any assig
24e80 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65 2e  nments are made.
24e90 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e  ..<p>^The option
24ea0 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  al conflict-clau
24eb0 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73  se allows the us
24ec0 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61  er to nominate a
24ed0 20 73 70 65 63 69 66 69 63 0a 63 6f 6e 73 74 72   specific.constr
24ee0 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
24ef0 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
24f00 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67  hm to use during
24f10 20 74 68 69 73 20 6f 6e 65 20 55 50 44 41 54 45   this one UPDATE
24f20 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20   command..Refer 
24f30 74 6f 20 74 68 65 20 73 65 63 74 69 6f 6e 20 65  to the section e
24f40 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46  ntitled [ON CONF
24f50 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69  LICT] for additi
24f60 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
24f70 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69  ...<h3>Restricti
24f80 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 53 74  ons on UPDATE St
24f90 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20  atements Within 
24fa0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f  CREATE TRIGGER</
24fb0 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h3>..<p>The foll
24fc0 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c  owing additional
24fd0 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74   syntax restrict
24fe0 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 55 50  ions apply to UP
24ff0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  DATE statements 
25000 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68 69  that.occur withi
25010 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
25020 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
25030 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c   statement.  ..<
25040 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  ul>.  <li><p>^Th
25050 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
25060 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73  /i> specified as
25070 20 70 61 72 74 20 6f 66 20 61 6e 20 55 50 44 41   part of an UPDA
25080 54 45 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74  TE statement wit
25090 68 69 6e 0a 20 20 20 20 20 20 61 20 74 72 69 67  hin.      a trig
250a0 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65  ger body must be
250b0 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e 28   unqualified. ^(
250c0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
250d0 74 68 65 0a 20 20 20 20 20 20 3c 69 3e 64 61 74  the.      <i>dat
250e0 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62  abase-name</i><b
250f0 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e  >.</b> prefix on
25100 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20   the table name 
25110 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 69 73  of the UPDATE is
25120 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77  .      not allow
25130 65 64 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ed within trigge
25140 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68  rs.)^ ^Unless th
25150 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68  e table to which
25160 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20   the trigger.   
25170 20 20 20 69 73 20 61 74 74 61 63 68 65 64 20 69     is attached i
25180 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
25190 74 61 62 61 73 65 2c 20 74 68 65 20 74 61 62 6c  tabase, the tabl
251a0 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20  e being updated 
251b0 62 79 20 74 68 65 0a 20 20 20 20 20 20 74 72 69  by the.      tri
251c0 67 67 65 72 20 70 72 6f 67 72 61 6d 20 6d 75 73  gger program mus
251d0 74 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20  t reside in the 
251e0 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73  same database as
251f0 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62   it. ^If the tab
25200 6c 65 0a 20 20 20 20 20 20 74 6f 20 77 68 69 63  le.      to whic
25210 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
25220 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20   attached is in 
25230 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
25240 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20  e, then the.    
25250 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61    unqualified na
25260 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
25270 62 65 69 6e 67 20 75 70 64 61 74 65 64 20 69 73  being updated is
25280 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65   resolved in the
25290 20 73 61 6d 65 20 77 61 79 0a 20 20 20 20 20 20   same way.      
252a0 61 73 20 69 74 20 69 73 20 66 6f 72 20 61 20 74  as it is for a t
252b0 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65  op-level stateme
252c0 6e 74 20 28 62 79 20 73 65 61 72 63 68 69 6e 67  nt (by searching
252d0 20 66 69 72 73 74 20 74 68 65 20 54 45 4d 50 20   first the TEMP 
252e0 64 61 74 61 62 61 73 65 2c 0a 20 20 20 20 20 20  database,.      
252f0 74 68 65 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  then the main da
25300 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79  tabase, then any
25310 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73   other databases
25320 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
25330 65 79 20 77 65 72 65 0a 20 20 20 20 20 20 61 74  ey were.      at
25340 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e  tached)...  <li>
25350 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
25360 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58  BY and NOT INDEX
25370 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e  ED clauses are n
25380 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50  ot allowed on UP
25390 44 41 54 45 0a 20 20 20 20 20 20 73 74 61 74 65  DATE.      state
253a0 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
253b0 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c  ggers.</p>..  <l
253c0 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  i><p>^The LIMIT 
253d0 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
253e0 75 73 65 73 20 66 6f 72 20 55 50 44 41 54 45 20  uses for UPDATE 
253f0 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20  are unsupported 
25400 77 69 74 68 69 6e 0a 20 20 20 20 20 20 74 72 69  within.      tri
25410 67 67 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  ggers, regardles
25420 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 61  s of the compila
25430 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65  tion options use
25440 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74  d to build SQLit
25450 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70  e..</ul>..<h3>Op
25460 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64  tional LIMIT and
25470 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75 73 65   ORDER BY Clause
25480 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20  s</h3>..<p>^(If 
25490 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20  SQLite is built 
254a0 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45  with the [SQLITE
254b0 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
254c0 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d  ELETE_LIMIT].com
254d0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
254e0 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78   then the syntax
254f0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
25500 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65  tatement is exte
25510 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e  nded.with option
25520 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
25530 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29 5e 20  LIMIT clauses)^ 
25540 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as follows:</p>.
25550 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
25560 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 2d  ram update-stmt-
25570 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c  limited</tcl>..<
25580 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20  p>^If an UPDATE 
25590 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20  statement has a 
255a0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
255b0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
255c0 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69   of rows that.wi
255d0 6c 6c 20 62 65 20 75 70 64 61 74 65 64 20 69 73  ll be updated is
255e0 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61   found by evalua
255f0 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61  ting the accompa
25600 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nying expression
25610 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20   and casting.it 
25620 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
25630 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74 69 76 65  lue. ^A negative
25640 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70   value is interp
25650 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d  reted as "no lim
25660 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  it"...<p>^If the
25670 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
25680 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6e  n evaluates to n
25690 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
256a0 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74  e <i>N</i> and t
256b0 68 65 0a 55 50 44 41 54 45 20 73 74 61 74 65 6d  he.UPDATE statem
256c0 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52  ent has an ORDER
256d0 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
256e0 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77   all rows that w
256f0 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20  ould be updated 
25700 69 6e 0a 74 68 65 20 61 62 73 65 6e 63 65 20 6f  in.the absence o
25710 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  f the LIMIT clau
25720 73 65 20 61 72 65 20 73 6f 72 74 65 64 20 61 63  se are sorted ac
25730 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 4f  cording to the O
25740 52 44 45 52 20 42 59 20 61 6e 64 20 74 68 65 0a  RDER BY and the.
25750 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75  first <i>N</i> u
25760 70 64 61 74 65 64 2e 20 5e 28 49 66 20 74 68 65  pdated. ^(If the
25770 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
25780 74 20 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46  t also has an OF
25790 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65  FSET clause,.the
257a0 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c  n it is similarl
257b0 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20  y evaluated and 
257c0 63 61 73 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  cast to an integ
257d0 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  er value. If the
257e0 20 4f 46 46 53 45 54 0a 65 78 70 72 65 73 73 69   OFFSET.expressi
257f0 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
25800 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  a non-negative v
25810 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74  alue <i>M</i>, t
25820 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 3c 69  hen the first <i
25830 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20  >M</i>.rows are 
25840 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20  skipped and the 
25850 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f  following <i>N</
25860 69 3e 20 72 6f 77 73 20 75 70 64 61 74 65 64 20  i> rows updated 
25870 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e  instead.)^..<p>^
25880 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  If the UPDATE st
25890 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f  atement has no O
258a0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
258b0 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68  then all rows th
258c0 61 74 0a 77 6f 75 6c 64 20 62 65 20 75 70 64 61  at.would be upda
258d0 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e  ted in the absen
258e0 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
258f0 63 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d  clause are assem
25900 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74  bled in an.arbit
25910 72 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72  rary order befor
25920 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c  e applying the L
25930 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20  IMIT and OFFSET 
25940 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72  clauses to deter
25950 6d 69 6e 65 20 0a 77 68 69 63 68 20 61 72 65 20  mine .which are 
25960 61 63 74 75 61 6c 6c 79 20 75 70 64 61 74 65 64  actually updated
25970 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45  ...<p>^(The ORDE
25980 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61  R BY clause on a
25990 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
259a0 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  nt is used only 
259b0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
259c0 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74  ch.rows fall wit
259d0 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54  hin the LIMIT. T
259e0 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
259f0 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64 69 66  h rows are modif
25a00 69 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ied is arbitrary
25a10 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c  .and is not infl
25a20 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52  uenced by the OR
25a30 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e  DER BY clause.)^
25a40 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
25a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25a90 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 56  ######.Section V
25aa0 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56 41 43  ACUUM vacuum VAC
25ab0 55 55 4d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  UUM..BubbleDiagr
25ac0 61 6d 20 76 61 63 75 75 6d 2d 73 74 6d 74 20 31  am vacuum-stmt 1
25ad0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 54  .</tcl>..<p>.  T
25ae0 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
25af0 64 20 72 65 62 75 69 6c 64 73 20 74 68 65 20 65  d rebuilds the e
25b00 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20  ntire database. 
25b10 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61  There are severa
25b20 6c 20 0a 20 20 72 65 61 73 6f 6e 73 20 61 6e 20  l .  reasons an 
25b30 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 69 67 68  application migh
25b40 74 20 64 6f 20 74 68 69 73 3a 0a 0a 3c 75 6c 3e  t do this:..<ul>
25b50 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 55 6e 6c  .  <li> <p> ^Unl
25b60 65 73 73 20 53 51 4c 69 74 65 20 69 73 20 72 75  ess SQLite is ru
25b70 6e 6e 69 6e 67 20 69 6e 20 22 61 75 74 6f 5f 76  nning in "auto_v
25b80 61 63 75 75 6d 3d 46 55 4c 4c 22 20 6d 6f 64 65  acuum=FULL" mode
25b90 2c 20 77 68 65 6e 20 61 20 6c 61 72 67 65 0a 20  , when a large. 
25ba0 20 20 20 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61      amount of da
25bb0 74 61 20 69 73 20 64 65 6c 65 74 65 64 20 66 72  ta is deleted fr
25bc0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
25bd0 66 69 6c 65 20 69 74 20 6c 65 61 76 65 73 20 62  file it leaves b
25be0 65 68 69 6e 64 20 65 6d 70 74 79 0a 20 20 20 20  ehind empty.    
25bf0 20 73 70 61 63 65 2c 20 6f 72 20 22 66 72 65 65   space, or "free
25c00 22 20 64 61 74 61 62 61 73 65 20 70 61 67 65 73  " database pages
25c10 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68 65  . This means the
25c20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
25c30 69 67 68 74 0a 20 20 20 20 20 62 65 20 6c 61 72  ight.     be lar
25c40 67 65 72 20 74 68 61 6e 20 73 74 72 69 63 74 6c  ger than strictl
25c50 79 20 6e 65 63 65 73 73 61 72 79 2e 20 5e 52 75  y necessary. ^Ru
25c60 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 74 6f 20  nning VACUUM to 
25c70 72 65 62 75 69 6c 64 20 74 68 65 20 0a 20 20 20  rebuild the .   
25c80 20 20 64 61 74 61 62 61 73 65 20 72 65 63 6c 61    database recla
25c90 69 6d 73 20 74 68 69 73 20 73 70 61 63 65 20 61  ims this space a
25ca0 6e 64 20 72 65 64 75 63 65 73 20 74 68 65 20 73  nd reduces the s
25cb0 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
25cc0 61 73 65 20 66 69 6c 65 2e 0a 0a 20 20 3c 6c 69  ase file...  <li
25cd0 3e 20 3c 70 3e 20 5e 46 72 65 71 75 65 6e 74 20  > <p> ^Frequent 
25ce0 69 6e 73 65 72 74 73 2c 20 75 70 64 61 74 65 73  inserts, updates
25cf0 2c 20 61 6e 64 20 64 65 6c 65 74 65 73 20 63 61  , and deletes ca
25d00 6e 20 63 61 75 73 65 20 74 68 65 20 64 61 74 61  n cause the data
25d10 62 61 73 65 20 66 69 6c 65 0a 20 20 20 20 20 74  base file.     t
25d20 6f 20 62 65 63 6f 6d 65 20 66 72 61 67 6d 65 6e  o become fragmen
25d30 74 65 64 20 2d 20 77 68 65 72 65 20 64 61 74 61  ted - where data
25d40 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 74 61   for a single ta
25d50 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
25d60 73 63 61 74 74 65 72 65 64 20 0a 20 20 20 20 20  scattered .     
25d70 61 72 6f 75 6e 64 20 74 68 65 20 64 61 74 61 62  around the datab
25d80 61 73 65 20 66 69 6c 65 2e 20 5e 52 75 6e 6e 69  ase file. ^Runni
25d90 6e 67 20 56 41 43 55 55 4d 20 65 6e 73 75 72 65  ng VACUUM ensure
25da0 73 20 74 68 61 74 20 65 61 63 68 20 74 61 62 6c  s that each tabl
25db0 65 20 61 6e 64 0a 20 20 20 20 20 69 6e 64 65 78  e and.     index
25dc0 20 69 73 20 6c 61 72 67 65 6c 79 20 73 74 6f 72   is largely stor
25dd0 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 20  ed contiguously 
25de0 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
25df0 61 73 65 20 66 69 6c 65 2e 20 5e 49 6e 20 73 6f  ase file. ^In so
25e00 6d 65 0a 20 20 20 20 20 63 61 73 65 73 2c 20 56  me.     cases, V
25e10 41 43 55 55 4d 20 6d 61 79 20 61 6c 73 6f 20 72  ACUUM may also r
25e20 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
25e30 20 6f 66 20 70 61 72 74 69 61 6c 6c 79 20 66 69   of partially fi
25e40 6c 6c 65 64 20 70 61 67 65 73 20 69 6e 0a 20 20  lled pages in.  
25e50 20 20 20 74 68 65 20 64 61 74 61 62 61 73 65 2c     the database,
25e60 20 72 65 64 75 63 69 6e 67 20 74 68 65 20 73 69   reducing the si
25e70 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
25e80 73 65 20 66 69 6c 65 20 66 75 72 74 68 65 72 2e  se file further.
25e90 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 4e 6f  ..  <li> <p> ^No
25ea0 72 6d 61 6c 6c 79 2c 20 74 68 65 20 64 61 74 61  rmally, the data
25eb0 62 61 73 65 20 5b 70 61 67 65 5f 73 69 7a 65 5d  base [page_size]
25ec0 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20   and whether or 
25ed0 6e 6f 74 20 74 68 65 20 64 61 74 61 62 61 73 65  not the database
25ee0 0a 20 20 20 20 20 73 75 70 70 6f 72 74 73 20 5b  .     supports [
25ef0 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 6d 75 73  auto_vacuum] mus
25f00 74 20 62 65 20 63 6f 6e 66 69 67 75 72 65 64 20  t be configured 
25f10 62 65 66 6f 72 65 20 74 68 65 20 64 61 74 61 62  before the datab
25f20 61 73 65 20 66 69 6c 65 20 69 73 0a 20 20 20 20  ase file is.    
25f30 20 61 63 74 75 61 6c 6c 79 20 63 72 65 61 74 65   actually create
25f40 64 2e 20 5e 48 6f 77 65 76 65 72 2c 20 77 68 65  d. ^However, whe
25f50 6e 20 6e 6f 74 20 69 6e 20 5b 77 72 69 74 65 2d  n not in [write-
25f60 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c  ahead log] mode,
25f70 20 74 68 65 20 0a 20 20 20 20 20 5b 70 61 67 65   the .     [page
25f80 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f 72 20 5b 61  _size] and/or [a
25f90 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 6f 70  uto_vacuum] prop
25fa0 65 72 74 69 65 73 20 6f 66 20 61 6e 20 65 78 69  erties of an exi
25fb0 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 6d  sting database m
25fc0 61 79 20 62 65 0a 20 20 20 20 20 63 68 61 6e 67  ay be.     chang
25fd0 65 64 20 62 79 20 75 73 69 6e 67 20 74 68 65 20  ed by using the 
25fe0 5b 70 61 67 65 5f 73 69 7a 65 20 70 72 61 67 6d  [page_size pragm
25ff0 61 7c 70 61 67 65 5f 73 69 7a 65 5d 20 20 61 6e  a|page_size]  an
26000 64 2f 6f 72 20 0a 20 20 20 20 20 5b 61 75 74 6f  d/or .     [auto
26010 5f 76 61 63 75 75 6d 7c 70 72 61 67 6d 61 20 61  _vacuum|pragma a
26020 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67  uto_vacuum] prag
26030 6d 61 73 20 61 6e 64 20 74 68 65 6e 20 69 6d 6d  mas and then imm
26040 65 64 69 61 74 65 6c 79 20 56 41 43 55 55 4d 69  ediately VACUUMi
26050 6e 67 0a 20 20 20 20 20 74 68 65 20 64 61 74 61  ng.     the data
26060 62 61 73 65 2e 20 5e 57 68 65 6e 20 69 6e 20 5b  base. ^When in [
26070 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
26080 20 6d 6f 64 65 2c 20 6f 6e 6c 79 20 74 68 65 20   mode, only the 
26090 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 20 20  [auto_vacuum].  
260a0 20 20 20 73 75 70 70 6f 72 74 20 70 72 6f 70 65     support prope
260b0 72 74 79 20 63 61 6e 20 62 65 20 63 68 61 6e 67  rty can be chang
260c0 65 64 20 75 73 69 6e 67 20 56 41 43 55 55 4d 2e  ed using VACUUM.
260d0 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 56 41 43  .</ul>..<p>^(VAC
260e0 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  UUM only works o
260f0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
26100 61 73 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70  ase. It is not p
26110 6f 73 73 69 62 6c 65 20 74 6f 20 56 41 43 55 55  ossible to VACUU
26120 4d 20 61 6e 0a 61 74 74 61 63 68 65 64 20 64 61  M an.attached da
26130 74 61 62 61 73 65 20 66 69 6c 65 2e 29 5e 0a 0a  tabase file.)^..
26140 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
26150 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79 20  ommand works by 
26160 63 6f 70 79 69 6e 67 20 74 68 65 20 63 6f 6e 74  copying the cont
26170 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
26180 62 61 73 65 20 69 6e 74 6f 0a 61 20 74 65 6d 70  base into.a temp
26190 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 66  orary database f
261a0 69 6c 65 20 61 6e 64 20 74 68 65 6e 20 6f 76 65  ile and then ove
261b0 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69  rwriting the ori
261c0 67 69 6e 61 6c 20 77 69 74 68 20 74 68 65 20 0a  ginal with the .
261d0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
261e0 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e 20  temporary file. 
261f0 5e 57 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e  ^When overwritin
26200 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 2c 20  g the original, 
26210 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e  a rollback.journ
26220 61 6c 20 6f 72 20 5b 77 72 69 74 65 2d 61 68 65  al or [write-ahe
26230 61 64 20 6c 6f 67 5d 20 57 41 4c 20 66 69 6c 65  ad log] WAL file
26240 20 69 73 20 75 73 65 64 20 6a 75 73 74 20 61 73   is used just as
26250 20 69 74 20 77 6f 75 6c 64 20 62 65 20 66 6f 72   it would be for
26260 20 61 6e 79 0a 6f 74 68 65 72 20 64 61 74 61 62   any.other datab
26270 61 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ase transaction.
26280 20 5e 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61   ^This means tha
26290 74 20 77 68 65 6e 20 56 41 43 55 55 4d 69 6e 67  t when VACUUMing
262a0 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a 61 73   a database, .as
262b0 20 6d 75 63 68 20 61 73 20 74 77 69 63 65 20 74   much as twice t
262c0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6f  he size of the o
262d0 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65  riginal database
262e0 20 66 69 6c 65 20 69 73 20 72 65 71 75 69 72 65   file is require
262f0 64 20 69 6e 20 66 72 65 65 0a 64 69 73 6b 20 73  d in free.disk s
26300 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56  pace...<p>^The V
26310 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61  ACUUM command ma
26320 79 20 63 68 61 6e 67 65 20 74 68 65 20 5b 52 4f  y change the [RO
26330 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66  WID | ROWIDs] of
26340 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e 79 0a   entries in any.
26350 74 61 62 6c 65 73 20 74 68 61 74 20 64 6f 20 6e  tables that do n
26360 6f 74 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69  ot have an expli
26370 63 69 74 20 5b 49 4e 54 45 47 45 52 20 50 52 49  cit [INTEGER PRI
26380 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a  MARY KEY]..</p>.
26390 0a 3c 70 3e 5e 41 20 56 41 43 55 55 4d 20 77 69  .<p>^A VACUUM wi
263a0 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72 65  ll fail if there
263b0 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 72 61 6e   is an open tran
263c0 73 61 63 74 69 6f 6e 2c 20 6f 72 20 69 66 20 74  saction, or if t
263d0 68 65 72 65 20 61 72 65 20 6f 6e 65 20 6f 72 0a  here are one or.
263e0 6d 6f 72 65 20 61 63 74 69 76 65 20 53 51 4c 20  more active SQL 
263f0 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 20  statements when 
26400 69 74 20 69 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e  it is run...<p>^
26410 28 41 73 20 6f 66 20 53 51 4c 69 74 65 20 76 65  (As of SQLite ve
26420 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e 20 61 6c  rsion 3.1, an al
26430 74 65 72 6e 61 74 69 76 65 20 74 6f 20 75 73 69  ternative to usi
26440 6e 67 20 74 68 65 20 56 41 43 55 55 4d 20 63 6f  ng the VACUUM co
26450 6d 6d 61 6e 64 20 74 6f 0a 72 65 63 6c 61 69 6d  mmand to.reclaim
26460 20 73 70 61 63 65 20 61 66 74 65 72 20 64 61 74   space after dat
26470 61 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74  a has been delet
26480 65 64 20 69 73 20 61 75 74 6f 2d 76 61 63 75 75  ed is auto-vacuu
26490 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20  m mode, enabled 
264a0 75 73 69 6e 67 0a 74 68 65 20 5b 61 75 74 6f 5f  using.the [auto_
264b0 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e 29  vacuum] pragma.)
264c0 5e 20 5e 57 68 65 6e 20 5b 61 75 74 6f 5f 76 61  ^ ^When [auto_va
264d0 63 75 75 6d 5d 20 69 73 20 65 6e 61 62 6c 65 64  cuum] is enabled
264e0 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a   for a database.
264f0 66 72 65 65 20 70 61 67 65 73 20 6d 61 79 20 62  free pages may b
26500 65 20 72 65 63 6c 61 69 6d 65 64 20 61 66 74 65  e reclaimed afte
26510 72 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 2c  r deleting data,
26520 20 63 61 75 73 69 6e 67 20 74 68 65 20 66 69 6c   causing the fil
26530 65 20 74 6f 20 73 68 72 69 6e 6b 2c 0a 77 69 74  e to shrink,.wit
26540 68 6f 75 74 20 72 65 62 75 69 6c 64 69 6e 67 20  hout rebuilding 
26550 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
26560 61 73 65 20 75 73 69 6e 67 20 56 41 43 55 55 4d  ase using VACUUM
26570 2e 20 20 48 6f 77 65 76 65 72 2c 20 75 73 69 6e  .  However, usin
26580 67 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  g.[auto_vacuum] 
26590 63 61 6e 20 6c 65 61 64 20 74 6f 20 65 78 74 72  can lead to extr
265a0 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  a database file 
265b0 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e 2e 20 20  fragmentation.  
265c0 41 6e 64 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  And [auto_vacuum
265d0 5d 0a 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70 61  ].does not compa
265e0 63 74 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c  ct partially fil
265f0 6c 65 64 20 70 61 67 65 73 20 6f 66 20 74 68 65  led pages of the
26600 20 64 61 74 61 62 61 73 65 20 61 73 20 56 41 43   database as VAC
26610 55 55 4d 20 64 6f 65 73 2e 0a 0a 3c 2f 70 3e 0a  UUM does...</p>.
26620 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
26630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26670 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
26680 49 4e 44 45 58 45 44 20 42 59 7d 20 69 6e 64 65  INDEXED BY} inde
26690 78 65 64 62 79 20 7b 7b 49 4e 44 45 58 45 44 20  xedby {{INDEXED 
266a0 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45 58 45 44  BY} {NOT INDEXED
266b0 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  }}..</tcl>.<p>^T
266c0 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
266d0 72 61 73 65 20 66 6f 72 63 65 73 20 74 68 65 20  rase forces the 
266e0 5b 53 51 4c 69 74 65 20 71 75 65 72 79 20 70 6c  [SQLite query pl
266f0 61 6e 6e 65 72 5d 20 74 6f 20 75 73 65 20 61 0a  anner] to use a.
26700 70 61 72 74 69 63 75 6c 61 72 20 6e 61 6d 65 64  particular named
26710 20 69 6e 64 65 78 20 6f 6e 20 61 20 5b 44 45 4c   index on a [DEL
26720 45 54 45 5d 2c 20 5b 53 45 4c 45 43 54 5d 2c 20  ETE], [SELECT], 
26730 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74  or [UPDATE] stat
26740 65 6d 65 6e 74 2e 0a 54 68 65 20 49 4e 44 45 58  ement..The INDEX
26750 45 44 20 42 59 20 70 68 72 61 73 65 20 69 73 20  ED BY phrase is 
26760 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61  an extension tha
26770 74 20 69 73 20 70 61 72 74 69 63 75 6c 61 72 20  t is particular 
26780 74 6f 20 53 51 4c 69 74 65 20 61 6e 64 0a 69 73  to SQLite and.is
26790 20 6e 6f 74 20 70 6f 72 74 61 62 6c 65 20 74 6f   not portable to
267a0 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62   other SQL datab
267b0 61 73 65 20 65 6e 67 69 6e 65 73 2e 0a 54 68 65  ase engines..The
267c0 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61   INDEXED BY phra
267d0 73 65 20 63 61 6e 20 62 65 20 73 65 65 6e 20 69  se can be seen i
267e0 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
267f0 73 79 6e 74 61 78 0a 64 69 61 67 72 61 6d 73 3a  syntax.diagrams:
26800 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 42 75 62 62  </p>..<tcl>.Bubb
26810 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66  leDiagram qualif
26820 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 42  ied-table-name.B
26830 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6e  ubbleDiagram sin
26840 67 6c 65 2d 73 6f 75 72 63 65 0a 3c 2f 74 63 6c  gle-source.</tcl
26850 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45  >..<p>^The "INDE
26860 58 45 44 20 42 59 20 69 6e 64 65 78 2d 6e 61 6d  XED BY index-nam
26870 65 22 20 70 68 72 61 73 65 20 73 70 65 63 69 66  e" phrase specif
26880 69 65 73 20 74 68 61 74 20 74 68 65 20 6e 61 6d  ies that the nam
26890 65 64 20 69 6e 64 65 78 0a 6d 75 73 74 20 62 65  ed index.must be
268a0 20 75 73 65 64 20 69 6e 20 6f 72 64 65 72 20 74   used in order t
268b0 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73  o look up values
268c0 20 6f 6e 20 74 68 65 20 70 72 65 63 65 64 69 6e   on the precedin
268d0 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20 69 6e 64  g table..^If ind
268e0 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74  ex-name does not
268f0 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74   exist or cannot
26900 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
26910 20 71 75 65 72 79 2c 20 74 68 65 6e 0a 74 68 65   query, then.the
26920 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66 20   preparation of 
26930 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
26940 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22  t fails..^(The "
26950 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61  NOT INDEXED" cla
26960 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68  use specifies th
26970 61 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c  at no index shal
26980 6c 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61  l be used when.a
26990 63 63 65 73 73 69 6e 67 20 74 68 65 20 70 72 65  ccessing the pre
269a0 63 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e  ceding table, in
269b0 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20  cluding implied 
269c0 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 20 62  indices create b
269d0 79 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49  y.UNIQUE and PRI
269e0 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
269f0 69 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20  ints.  However, 
26a00 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d  the INTEGER PRIM
26a10 41 52 59 20 4b 45 59 0a 63 61 6e 20 73 74 69 6c  ARY KEY.can stil
26a20 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f  l be used to loo
26a30 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65 76 65  k up entries eve
26a40 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45  n when "NOT INDE
26a50 58 45 44 22 20 69 73 20 73 70 65 63 69 66 69 65  XED" is specifie
26a60 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d  d.)^</p>..<p>Som
26a70 65 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  e SQL database e
26a80 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e  ngines provide n
26a90 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e  on-standard "hin
26aa0 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68  t" mechanisms wh
26ab0 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20  ich.can be used 
26ac0 74 6f 20 67 69 76 65 20 74 68 65 20 71 75 65 72  to give the quer
26ad0 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65  y optimizer clue
26ae0 73 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64  s about what ind
26af0 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75  ices it should.u
26b00 73 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75  se for a particu
26b10 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  lar statement.  
26b20 54 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61  The INDEX BY cla
26b30 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73  use of SQLite is
26b40 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61   .<em>not</em> a
26b50 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69   hinting mechani
26b60 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64  sm and it should
26b70 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20   not be used as 
26b80 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58  such..^The INDEX
26b90 45 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65  ED BY clause doe
26ba0 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f  s not give the o
26bb0 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61  ptimizer hints a
26bc0 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65 78  bout which index
26bd0 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65  .to use; it give
26be0 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  s the optimizer 
26bf0 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66  a requirement of
26c00 20 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20   which index to 
26c10 75 73 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65  use..^If the que
26c20 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20  ry optimizer is 
26c30 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68  unable to use th
26c40 65 20 69 6e 64 65 78 20 73 70 65 63 69 66 69 65  e index specifie
26c50 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42  d by the.INDEX B
26c60 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
26c70 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61  he query will fa
26c80 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  il with an error
26c90 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  .</p>..<p>The IN
26ca0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
26cb0 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  is <em>not</em> 
26cc0 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
26cd0 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70   in tuning.the p
26ce0 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20  erformance of a 
26cf0 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65  query.  The inte
26d00 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45  nt of the INDEXE
26d10 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74  D BY clause is.t
26d20 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69  o raise a run-ti
26d30 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20 73 63  me error if a sc
26d40 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63  hema change, suc
26d50 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72  h as dropping or
26d60 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64  .creating an ind
26d70 65 78 2c 20 63 61 75 73 65 73 20 74 68 65 20 71  ex, causes the q
26d80 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20  uery plan for a 
26d90 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71  time-sensitive q
26da0 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20  uery.to change. 
26db0 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   The INDEXED BY 
26dc0 63 6c 61 75 73 65 20 69 73 20 64 65 73 69 67 6e  clause is design
26dd0 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63  ed to help detec
26de0 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75  t.undesirable qu
26df0 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73  ery plan changes
26e00 20 64 75 72 69 6e 67 20 72 65 67 72 65 73 73 69   during regressi
26e10 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 44 65 76 65  on testing..Deve
26e20 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e  lopers are admon
26e30 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c  ished to omit al
26e40 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44  l use of INDEXED
26e50 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69   BY during.appli
26e60 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69  cation design, i
26e70 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
26e80 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69  esting, and tuni
26e90 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20  ng.  If.INDEXED 
26ea0 42 59 20 69 73 20 74 6f 20 62 65 20 75 73 65 64  BY is to be used
26eb0 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75   at all, it shou
26ec0 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64 20 61  ld be inserted a
26ed0 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f  t the very.end o
26ee0 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e  f the developmen
26ef0 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22  t process when "
26f00 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20  locking down" a 
26f10 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33  design.</p>..<h3
26f20 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a  >See Also:</h3>.
26f30 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65  .<ol>.<li><p>The
26f40 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20   [query planner 
26f50 63 68 65 63 6b 6c 69 73 74 5d 20 64 65 73 63 72  checklist] descr
26f60 69 62 65 73 20 73 74 65 70 73 20 74 68 61 74 20  ibes steps that 
26f70 61 70 70 6c 69 63 61 74 69 6f 6e 0a 64 65 76 65  application.deve
26f80 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 66 6f  lopers should fo
26f90 6c 6c 6f 77 69 6e 67 20 74 6f 20 68 65 6c 70 20  llowing to help 
26fa0 72 65 73 6f 6c 76 65 20 71 75 65 72 79 20 70 6c  resolve query pl
26fb0 61 6e 6e 65 72 20 70 72 6f 62 6c 65 6d 73 2e 0a  anner problems..
26fc0 4e 6f 74 69 63 65 20 74 68 65 20 74 68 61 74 20  Notice the that 
26fd0 74 68 65 20 75 73 65 20 6f 66 20 49 4e 44 45 58  the use of INDEX
26fe0 45 44 20 42 59 20 69 73 20 61 20 6c 61 73 74 20  ED BY is a last 
26ff0 72 65 73 6f 72 74 2c 20 74 6f 20 62 65 20 75 73  resort, to be us
27000 65 64 20 6f 6e 6c 79 0a 77 68 65 6e 20 61 6c 6c  ed only.when all
27010 20 6f 74 68 65 72 20 6d 65 61 73 75 72 65 73 20   other measures 
27020 66 61 69 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c  fail.</p>..<li><
27030 70 3e 5b 75 70 6c 75 73 63 6f 6e 74 72 6f 6c 7c  p>[upluscontrol|
27040 54 68 65 20 75 6e 61 72 79 20 2b 20 6f 70 65 72  The unary + oper
27050 61 74 6f 72 5d 0a 63 61 6e 20 62 65 20 75 73 65  ator].can be use
27060 64 20 74 6f 20 64 69 73 71 75 61 6c 69 66 79 20  d to disqualify 
27070 74 65 72 6d 73 20 69 6e 20 74 68 65 20 57 48 45  terms in the WHE
27080 52 45 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 75  RE clause from u
27090 73 65 20 62 79 20 69 6e 64 69 63 65 73 2e 0a 43  se by indices..C
270a0 61 72 65 66 75 6c 20 75 73 65 20 6f 66 20 75 6e  areful use of un
270b0 61 72 79 20 2b 20 63 61 6e 20 73 6f 6d 65 74 69  ary + can someti
270c0 6d 65 73 20 68 65 6c 70 20 70 72 65 76 65 6e 74  mes help prevent
270d0 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   the query plann
270e0 65 72 20 66 72 6f 6d 0a 63 68 6f 6f 73 69 6e 67  er from.choosing
270f0 20 61 20 70 6f 6f 72 20 69 6e 64 65 78 20 77 69   a poor index wi
27100 74 68 6f 75 74 20 72 65 73 74 72 69 63 74 69 6e  thout restrictin
27110 67 20 69 74 20 74 6f 20 75 73 69 6e 67 20 6f 6e  g it to using on
27120 65 20 73 70 65 63 69 66 69 63 20 69 6e 64 65 78  e specific index
27130 2e 0a 43 61 72 65 66 75 6c 20 70 6c 61 63 65 6d  ..Careful placem
27140 65 6e 74 20 6f 66 20 75 6e 61 72 79 20 2b 20 6f  ent of unary + o
27150 70 65 72 61 74 6f 72 73 20 69 73 20 61 20 62 65  perators is a be
27160 74 74 65 72 20 6d 65 74 68 6f 64 20 66 6f 72 20  tter method for 
27170 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 0a 77 68 69  controlling .whi
27180 63 68 20 69 6e 64 69 63 65 73 20 61 72 65 20 75  ch indices are u
27190 73 65 64 20 61 20 71 75 65 72 79 2e 3c 2f 70 3e  sed a query.</p>
271a0 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 73 71  ..<li><p>The [sq
271b0 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75  lite3_stmt_statu
271c0 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72  s()] C/C++ inter
271d0 66 61 63 65 20 74 6f 67 65 74 68 65 72 20 77 69  face together wi
271e0 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53  th the.[SQLITE_S
271f0 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43  TMTSTATUS_FULLSC
27200 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53 51  AN_STEP] and [SQ
27210 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
27220 53 4f 52 54 5d 20 76 65 72 62 73 0a 63 61 6e 20  SORT] verbs.can 
27230 62 65 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  be used to detec
27240 74 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 77 68  t at run-time wh
27250 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  en an SQL statem
27260 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e  ent is not.makin
27270 67 20 65 66 66 65 63 74 69 76 65 20 75 73 65 20  g effective use 
27280 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e  of indices.  Man
27290 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d  y applications m
272a0 61 79 20 70 72 65 66 65 72 20 74 6f 0a 75 73 65  ay prefer to.use
272b0 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74   the [sqlite3_st
272c0 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74  mt_status()] int
272d0 65 72 66 61 63 65 20 74 6f 20 64 65 74 65 63 74  erface to detect
272e0 20 69 6e 64 65 78 20 6d 69 73 75 73 65 0a 72 61   index misuse.ra
272f0 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 49 4e  ther than the IN
27300 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
27310 64 65 73 63 72 69 62 65 64 20 68 65 72 65 2e 3c  described here.<
27320 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e  /p>.</ol>..<tcl>
27330 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
27340 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27350 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
27380 20 41 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f   A list of keywo
27390 72 64 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b  rds.  A asterisk
273a0 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68   occurs after th
273b0 65 20 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20  e keyword if it 
273c0 69 73 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c  is on.# the fall
273d0 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74  back list..#.set
273e0 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c   keyword_list [l
273f0 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 0a  sort {.   ABORT.
27400 20 20 20 41 43 54 49 4f 4e 0a 20 20 20 41 44 44     ACTION.   ADD
27410 0a 20 20 20 41 46 54 45 52 0a 20 20 20 41 4c 4c  .   AFTER.   ALL
27420 0a 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41  .   ALTER.   ANA
27430 4c 59 5a 45 0a 20 20 20 41 4e 44 0a 20 20 20 41  LYZE.   AND.   A
27440 53 0a 20 20 20 41 53 43 0a 20 20 20 41 54 54 41  S.   ASC.   ATTA
27450 43 48 0a 20 20 20 41 55 54 4f 49 4e 43 52 45 4d  CH.   AUTOINCREM
27460 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 0a 20 20  ENT.   BEFORE.  
27470 20 42 45 47 49 4e 0a 20 20 20 42 45 54 57 45 45   BEGIN.   BETWEE
27480 4e 0a 20 20 20 42 59 0a 20 20 20 43 41 53 43 41  N.   BY.   CASCA
27490 44 45 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41  DE.   CASE.   CA
274a0 53 54 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43  ST.   CHECK.   C
274b0 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e  OLLATE.   COLUMN
274c0 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f  .   COMMIT.   CO
274d0 4e 46 4c 49 43 54 0a 20 20 20 43 4f 4e 53 54 52  NFLICT.   CONSTR
274e0 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20  AINT.   CREATE. 
274f0 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45    CROSS.   CURRE
27500 4e 54 5f 44 41 54 45 0a 20 20 20 43 55 52 52 45  NT_DATE.   CURRE
27510 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55 52 52 45  NT_TIME.   CURRE
27520 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20 20  NT_TIMESTAMP.   
27530 44 41 54 41 42 41 53 45 0a 20 20 20 44 45 46 41  DATABASE.   DEFA
27540 55 4c 54 0a 20 20 20 44 45 46 45 52 52 45 44 0a  ULT.   DEFERRED.
27550 20 20 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20     DEFERRABLE.  
27560 20 44 45 4c 45 54 45 0a 20 20 20 44 45 53 43 0a   DELETE.   DESC.
27570 20 20 20 44 45 54 41 43 48 0a 20 20 20 44 49 53     DETACH.   DIS
27580 54 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20  TINCT.   DROP.  
27590 20 45 4e 44 0a 20 20 20 45 41 43 48 0a 20 20 20   END.   EACH.   
275a0 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20  ELSE.   ESCAPE. 
275b0 20 20 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c    EXCEPT.   EXCL
275c0 55 53 49 56 45 0a 20 20 20 45 58 49 53 54 53 0a  USIVE.   EXISTS.
275d0 20 20 20 45 58 50 4c 41 49 4e 0a 20 20 20 46 41     EXPLAIN.   FA
275e0 49 4c 0a 20 20 20 46 4f 52 0a 20 20 20 46 4f 52  IL.   FOR.   FOR
275f0 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20  EIGN.   FROM.   
27600 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20 20 20  FULL.   GLOB.   
27610 47 52 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a  GROUP.   HAVING.
27620 20 20 20 49 46 0a 20 20 20 49 47 4e 4f 52 45 0a     IF.   IGNORE.
27630 20 20 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 20     IMMEDIATE.   
27640 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20 20 49  IN.   INDEX.   I
27650 4e 44 45 58 45 44 0a 20 20 20 49 4e 49 54 49 41  NDEXED.   INITIA
27660 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20  LLY.   INNER.   
27670 49 4e 53 45 52 54 0a 20 20 20 49 4e 53 54 45 41  INSERT.   INSTEA
27680 44 0a 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20  D.   INTERSECT. 
27690 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20    INTO.   IS.   
276a0 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20  ISNULL.   JOIN. 
276b0 20 20 4b 45 59 0a 20 20 20 4c 45 46 54 0a 20 20    KEY.   LEFT.  
276c0 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49 54 0a 20   LIKE.   LIMIT. 
276d0 20 20 4d 41 54 43 48 0a 20 20 20 4e 41 54 55 52    MATCH.   NATUR
276e0 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a  AL.   NO.   NOT.
276f0 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55     NOTNULL.   NU
27700 4c 4c 0a 20 20 20 4f 46 0a 20 20 20 4f 46 46 53  LL.   OF.   OFFS
27710 45 54 0a 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20  ET.   ON.   OR. 
27720 20 20 4f 52 44 45 52 0a 20 20 20 4f 55 54 45 52    ORDER.   OUTER
27730 0a 20 20 20 50 4c 41 4e 0a 20 20 20 50 52 41 47  .   PLAN.   PRAG
27740 4d 41 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20  MA.   PRIMARY.  
27750 20 51 55 45 52 59 0a 20 20 20 52 41 49 53 45 0a   QUERY.   RAISE.
27760 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20     REFERENCES.  
27770 20 52 45 47 45 58 50 0a 20 20 20 52 45 49 4e 44   REGEXP.   REIND
27780 45 58 0a 20 20 20 52 45 4c 45 41 53 45 0a 20 20  EX.   RELEASE.  
27790 20 52 45 4e 41 4d 45 0a 20 20 20 52 45 50 4c 41   RENAME.   REPLA
277a0 43 45 0a 20 20 20 52 45 53 54 52 49 43 54 0a 20  CE.   RESTRICT. 
277b0 20 20 52 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42    RIGHT.   ROLLB
277c0 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20 20 53 41  ACK.   ROW.   SA
277d0 56 45 50 4f 49 4e 54 0a 20 20 20 53 45 4c 45 43  VEPOINT.   SELEC
277e0 54 0a 20 20 20 53 45 54 0a 20 20 20 54 41 42 4c  T.   SET.   TABL
277f0 45 0a 20 20 20 54 45 4d 50 0a 20 20 20 54 45 4d  E.   TEMP.   TEM
27800 50 4f 52 41 52 59 0a 20 20 20 54 48 45 4e 0a 20  PORARY.   THEN. 
27810 20 20 54 4f 0a 20 20 20 54 52 41 4e 53 41 43 54    TO.   TRANSACT
27820 49 4f 4e 0a 20 20 20 54 52 49 47 47 45 52 0a 20  ION.   TRIGGER. 
27830 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55    UNION.   UNIQU
27840 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20 20 55  E.   UPDATE.   U
27850 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d 0a 20  SING.   VACUUM. 
27860 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49 45 57    VALUES.   VIEW
27870 0a 20 20 20 56 49 52 54 55 41 4c 0a 20 20 20 57  .   VIRTUAL.   W
27880 48 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a  HEN.   WHERE.}].
27890 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63  .hd_puts {<DIV c
278a0 6c 61 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f  lass="pdf_sectio
278b0 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51  n">}.Section {SQ
278c0 4c 69 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b  Lite Keywords} k
278d0 65 79 77 6f 72 64 73 20 7b 7b 2a 53 51 4c 20 6b  eywords {{*SQL k
278e0 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79  eyword} {SQL key
278f0 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20  words}}.hd_puts 
27900 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a  {</DIV>}.</tcl>.
27910 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e  .<p>The SQL stan
27920 64 61 72 64 20 73 70 65 63 69 66 69 65 73 20 61  dard specifies a
27930 20 68 75 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   huge number of 
27940 6b 65 79 77 6f 72 64 73 20 77 68 69 63 68 20 6d  keywords which m
27950 61 79 20 6e 6f 74 0a 62 65 20 75 73 65 64 20 61  ay not.be used a
27960 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  s the names of t
27970 61 62 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20  ables, indices, 
27980 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62 61 73  columns, databas
27990 65 73 2c 20 75 73 65 72 2d 64 65 66 69 6e 65 64  es, user-defined
279a0 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c  .functions, coll
279b0 61 74 69 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20  ations, virtual 
279c0 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f  table modules, o
279d0 72 20 61 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65  r any other name
279e0 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69  d object..The li
279f0 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 69  st of keywords i
27a00 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66  s so long that f
27a10 65 77 20 70 65 6f 70 6c 65 20 63 61 6e 20 72 65  ew people can re
27a20 6d 65 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e  member them all.
27a30 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f  .For most SQL co
27a40 64 65 2c 20 79 6f 75 72 20 73 61 66 65 73 74 20  de, your safest 
27a50 62 65 74 20 69 73 20 74 6f 20 6e 65 76 65 72 20  bet is to never 
27a60 75 73 65 20 61 6e 79 20 45 6e 67 6c 69 73 68 20  use any English 
27a70 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64 20 61 73  language.word as
27a80 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 75   the name of a u
27a90 73 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65  ser-defined obje
27aa0 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79  ct.</p>..<p>If y
27ab0 6f 75 20 77 61 6e 74 20 74 6f 20 75 73 65 20 61  ou want to use a
27ac0 20 6b 65 79 77 6f 72 64 20 61 73 20 61 20 6e 61   keyword as a na
27ad0 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20 74 6f 20  me, you need to 
27ae0 71 75 6f 74 65 20 69 74 2e 20 20 54 68 65 72 65  quote it.  There
27af0 0a 61 72 65 20 66 6f 75 72 20 77 61 79 73 20 6f  .are four ways o
27b00 66 20 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72  f quoting keywor
27b10 64 73 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70  ds in SQLite:</p
27b20 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f  >..<p>.<blockquo
27b30 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e  te>.<table>.<tr>
27b40 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
27b50 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f  "><b>'keyword'</
27b60 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  b></td><td width
27b70 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64  ="20"></td>..<td
27b80 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 73  >^A keyword in s
27b90 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 73 20  ingle quotes is 
27ba0 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
27bb0 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  .</td></tr>..<tr
27bc0 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
27bd0 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c  p"><b>"keyword"<
27be0 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
27bf0 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
27c00 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74  d in double-quot
27c10 65 73 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  es is an identif
27c20 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a  ier.</td></tr>..
27c30 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
27c40 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65  "top"><b>&#91;ke
27c50 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f  yword&#93;</b></
27c60 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74  td><td></td>..<t
27c70 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63  d>^A keyword enc
27c80 6c 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65 20  losed in square 
27c90 62 72 61 63 6b 65 74 73 20 69 73 20 0a 20 20 20  brackets is .   
27ca0 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69       an identifi
27cb0 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  er.  This is not
27cc0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20   standard SQL.  
27cd0 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63  This quoting mec
27ce0 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69  hanism.        i
27cf0 73 20 75 73 65 64 20 62 79 20 4d 53 20 41 63 63  s used by MS Acc
27d00 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76  ess and SQL Serv
27d10 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64  er and is includ
27d20 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72  ed in SQLite for
27d30 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69  .        compati
27d40 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72  bility.</td></tr
27d50 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
27d60 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 36  gn="top"><b>&#96
27d70 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f 62  ;keyword&#96;</b
27d80 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a  ></td><td></td>.
27d90 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20  .<td>^A keyword 
27da0 65 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72 61 76  enclosed in grav
27db0 65 20 61 63 63 65 6e 74 73 20 28 41 53 43 49 49  e accents (ASCII
27dc0 20 63 6f 64 65 20 39 36 29 20 69 73 20 0a 20 20   code 96) is .  
27dd0 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66        an identif
27de0 69 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  ier.  This is no
27df0 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20  t standard SQL. 
27e00 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65   This quoting me
27e10 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20  chanism.        
27e20 69 73 20 75 73 65 64 20 62 79 20 4d 79 53 51 4c  is used by MySQL
27e30 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64   and is included
27e40 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20   in SQLite for. 
27e50 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69         compatibi
27e60 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  lity.</td></tr>.
27e70 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
27e80 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  quote>.</p>..<p>
27e90 46 6f 72 20 72 65 73 69 6c 69 65 6e 63 65 20 77  For resilience w
27ea0 68 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20 77  hen confronted w
27eb0 69 74 68 20 68 69 73 74 6f 72 69 63 61 6c 20 53  ith historical S
27ec0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 53  QL statements, S
27ed0 51 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65 74  QLite.will somet
27ee0 69 6d 65 73 20 62 65 6e 64 20 74 68 65 20 71 75  imes bend the qu
27ef0 6f 74 69 6e 67 20 72 75 6c 65 73 20 61 62 6f 76  oting rules abov
27f00 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69  e:</p>..<ul>.<li
27f10 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72  ><p>^If a keywor
27f20 64 20 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f 74  d in single.quot
27f30 65 73 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79 27  es (ex: <b>'key'
27f40 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f 62  </b> or <b>'glob
27f50 27 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69  '</b>) is used i
27f60 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72  n a context wher
27f70 65 0a 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  e.an identifier 
27f80 69 73 20 61 6c 6c 6f 77 65 64 20 62 75 74 20 77  is allowed but w
27f90 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69  here a string li
27fa0 74 65 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c 6c  teral is not all
27fb0 6f 77 65 64 2c 20 74 68 65 6e 0a 74 68 65 20 74  owed, then.the t
27fc0 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f  oken is understo
27fd0 6f 64 20 74 6f 20 62 65 20 61 6e 20 69 64 65 6e  od to be an iden
27fe0 74 69 66 69 65 72 20 69 6e 73 74 65 61 64 20 6f  tifier instead o
27ff0 66 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  f a string liter
28000 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  al..</p></li>..<
28010 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77  li><p>^If a keyw
28020 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75  ord in double.qu
28030 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65  otes (ex: <b>"ke
28040 79 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c  y"</b> or <b>"gl
28050 6f 62 22 3c 2f 62 3e 29 20 69 73 20 75 73 65 64  ob"</b>) is used
28060 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68   in a context wh
28070 65 72 65 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere.it cannot be
28080 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20   resolved to an 
28090 69 64 65 6e 74 69 66 69 65 72 20 62 75 74 20 77  identifier but w
280a0 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69  here a string li
280b0 74 65 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64  teral.is allowed
280c0 2c 20 74 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e  , then the token
280d0 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74   is understood t
280e0 6f 20 62 65 20 61 20 73 74 72 69 6e 67 20 6c 69  o be a string li
280f0 74 65 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66  teral instead.of
28100 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c   an identifier.<
28110 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a  /p></li>.</ul>..
28120 3c 70 3e 50 72 6f 67 72 61 6d 6d 65 72 73 20 61  <p>Programmers a
28130 72 65 20 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74  re cautioned not
28140 20 74 6f 20 75 73 65 20 74 68 65 20 74 77 6f 20   to use the two 
28150 65 78 63 65 70 74 69 6f 6e 73 20 64 65 73 63 72  exceptions descr
28160 69 62 65 64 20 69 6e 0a 74 68 65 20 70 72 65 76  ibed in.the prev
28170 69 6f 75 73 20 62 75 6c 6c 65 74 73 2e 20 20 57  ious bullets.  W
28180 65 20 65 6d 70 68 61 73 69 7a 65 20 74 68 61 74  e emphasize that
28190 20 74 68 65 79 20 65 78 69 73 74 20 6f 6e 6c 79   they exist only
281a0 20 73 6f 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64   so that old.and
281b0 20 69 6c 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20   ill-formed SQL 
281c0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20  statements will 
281d0 72 75 6e 20 63 6f 72 72 65 63 74 6c 79 2e 20 20  run correctly.  
281e0 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
281f0 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20  of.SQLite might 
28200 63 68 61 6e 67 65 20 74 6f 20 72 61 69 73 65 20  change to raise 
28210 65 72 72 6f 72 73 20 69 6e 73 74 65 61 64 20 6f  errors instead o
28220 66 20 61 63 63 65 70 74 69 6e 67 20 74 68 65 20  f accepting the 
28230 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d  malformed.statem
28240 65 6e 74 73 20 63 6f 76 65 72 65 64 20 62 79 20  ents covered by 
28250 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61  the exceptions a
28260 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53  bove.</p>..<p>.S
28270 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20 6b  QLite adds new k
28280 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d  eywords from tim
28290 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20 69  e to time when i
282a0 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66  t takes on new f
282b0 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70  eatures..So to p
282c0 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f 64 65  revent your code
282d0 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b   from being brok
282e0 65 6e 20 62 79 20 66 75 74 75 72 65 20 65 6e 68  en by future enh
282f0 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73  ancements, you s
28300 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71  hould.normally q
28310 75 6f 74 65 20 61 6e 79 20 69 64 65 6e 74 69 66  uote any identif
28320 69 65 72 20 74 68 61 74 20 69 73 20 61 6e 20 45  ier that is an E
28330 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
28340 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f  word, even if.yo
28350 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f  u do not have to
28360 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
28370 6c 69 73 74 20 62 65 6c 6f 77 20 73 68 6f 77 73  list below shows
28380 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 6b 65   all possible ke
28390 79 77 6f 72 64 73 20 75 73 65 64 20 62 79 20 61  ywords used by a
283a0 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53 51 4c 69  ny build of.SQLi
283b0 74 65 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  te regardless of
283c0 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f   [compile-time o
283d0 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20  ptions].  .Most 
283e0 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e 66 69  reasonable confi
283f0 67 75 72 61 74 69 6f 6e 73 20 75 73 65 20 6d 6f  gurations use mo
28400 73 74 20 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  st or all of the
28410 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62 75 74  se keywords,.but
28420 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73 20 6d   some keywords m
28430 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20 77 68  ay be omitted wh
28440 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20  en SQL language 
28450 66 65 61 74 75 72 65 73 20 61 72 65 0a 64 69 73  features are.dis
28460 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72 64 6c  abled..^(Regardl
28470 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ess of the compi
28480 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
28490 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65 6e 74  ation, any ident
284a0 69 66 69 65 72 20 74 68 61 74 20 69 73 20 6e 6f  ifier that is no
284b0 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77 69  t on.the followi
284c0 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  ng <tcl>hd_puts 
284d0 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72  [llength $keywor
284e0 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c  d_list]</tcl> el
284f0 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20 6e 6f  ement.list is no
28500 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f 20 74  t a keyword to t
28510 68 65 20 53 51 4c 20 70 61 72 73 65 72 20 69 6e  he SQL parser in
28520 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c   SQLite:.</p>..<
28530 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
28540 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e  le width="100%">
28550 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
28560 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  left" valign="to
28570 70 22 20 77 69 64 74 68 3d 22 32 30 25 22 3e 0a  p" width="20%">.
28580 3c 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65  <tcl>.set n [lle
28590 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69  ngth $keyword_li
285a0 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73  st].set nCol 5.s
285b0 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28  et nRow [expr {(
285c0 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f  $n+$nCol-1)/$nCo
285d0 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65  l}].set i 0.fore
285e0 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72  ach word $keywor
285f0 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 24  d_list {.  if {$
28600 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20  i==$nRow} {.    
28610 68 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e 3c 74  hd_puts "</td><t
28620 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22  d valign=\"top\"
28630 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c 22 20   align=\"left\" 
28640 77 69 64 74 68 3d 5c 22 32 30 25 5c 22 3e 22 0a  width=\"20%\">".
28650 20 20 20 20 73 65 74 20 69 20 31 0a 20 20 7d 20      set i 1.  } 
28660 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e 63 72 20  else {.    incr 
28670 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20  i.  }.  hd_puts 
28680 22 24 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a 7d 0a  "$word<br>\n".}.
28690 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74 72  </tcl>.</td></tr
286a0 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b  ></table></block
286b0 71 75 6f 74 65 3e 29 5e 0a                       quote>)^.