Documentation Source Text

Hex Artifact Content
Login

Artifact a0c46267986dfcbce39caee99f212b5b4d379b17:


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 2c 20 74 68 65  AT3] option, the
1d10: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
1d20: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
1d30: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
1d40: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
1d50: 74 61 74 33 5d 2e 0a 4f 6c 64 65 72 20 76 65 72  tat3]..Older ver
1d60: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1d70: 77 6f 75 6c 64 20 6d 61 6b 65 20 75 73 65 20 6f  would make use o
1d80: 66 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 73 74  f the [sqlite_st
1d90: 61 74 32 5d 20 74 61 62 6c 65 0a 77 68 65 6e 20  at2] table.when 
1da0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 5b 53  compiled with [S
1db0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
1dc0: 54 32 5d 20 62 75 74 20 61 6c 6c 20 72 65 63 65  T2] but all rece
1dd0: 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53  nt versions of.S
1de0: 51 4c 69 74 65 20 69 67 6e 6f 72 65 20 74 68 65  QLite ignore the
1df0: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
1e00: 62 6c 65 2e 0a 46 75 74 75 72 65 20 65 6e 68 61  ble..Future enha
1e10: 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65  ncements may cre
1e20: 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 5b  ate.additional [
1e30: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 5d  internal tables]
1e40: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
1e50: 61 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63 65  ame pattern exce
1e60: 70 74 20 77 69 74 68 0a 66 69 6e 61 6c 20 64 69  pt with.final di
1e70: 67 69 74 20 6c 61 72 67 65 72 20 74 68 61 6e 20  git larger than 
1e80: 22 33 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54  "3".</p>..<p> ^T
1e90: 68 65 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d  he [ALTER TABLE]
1ea0: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 0a 6e 6f   command does.no
1eb0: 74 20 77 6f 72 6b 20 6f 6e 20 74 68 65 20 73 71  t work on the sq
1ec0: 6c 69 74 65 5f 73 74 61 74 31 20 6f 72 20 73 71  lite_stat1 or sq
1ed0: 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
1ee0: 73 2c 0a 62 75 74 20 61 6c 6c 20 74 68 65 20 63  s,.but all the c
1ef0: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 6f 73 65 20  ontent of those 
1f00: 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75  tables can be qu
1f10: 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c  eried using [SEL
1f20: 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20  ECT].and can be 
1f30: 64 65 6c 65 74 65 64 2c 20 61 75 67 6d 65 6e 74  deleted, augment
1f40: 65 64 2c 20 6f 72 20 6d 6f 64 69 66 69 65 64 20  ed, or modified 
1f50: 75 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54  using the [DELET
1f60: 45 5d 2c 0a 5b 49 4e 53 45 52 54 5d 2c 20 61 6e  E],.[INSERT], an
1f70: 64 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d 61  d [UPDATE] comma
1f80: 6e 64 73 2e 0a 5e 28 54 68 65 20 5b 44 52 4f 50  nds..^(The [DROP
1f90: 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20   TABLE] command 
1fa0: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 5f  works on sqlite_
1fb0: 73 74 61 74 31 20 61 6e 64 0a 73 71 6c 69 74 65  stat1 and.sqlite
1fc0: 5f 73 74 61 74 33 20 61 73 20 6f 66 20 53 51 4c  _stat3 as of SQL
1fd0: 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e  ite version 3.7.
1fe0: 39 2e 29 5e 0a 41 70 70 72 6f 70 72 69 61 74 65  9.)^.Appropriate
1ff0: 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20   care should be 
2000: 75 73 65 64 20 77 68 65 6e 20 63 68 61 6e 67 69  used when changi
2010: 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
2020: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
2030: 0a 74 61 62 6c 65 73 20 61 73 20 69 6e 76 61 6c  .tables as inval
2040: 69 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20 63  id content can c
2050: 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 73  ause SQLite to s
2060: 65 6c 65 63 74 20 69 6e 65 66 66 69 63 69 65 6e  elect inefficien
2070: 74 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e 20 20  t.query plans.  
2080: 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69  Generally speaki
2090: 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 20 6e  ng, one should n
20a0: 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f  ot modify the co
20b0: 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20 73 74 61  ntent of.the sta
20c0: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62  tistics tables b
20d0: 79 20 61 6e 79 20 6d 65 63 68 61 6e 69 73 6d 20  y any mechanism 
20e0: 6f 74 68 65 72 20 74 68 61 6e 20 69 6e 76 6f 6b  other than invok
20f0: 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a 45 20  ing the.ANALYZE 
2100: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  command.</p>..<p
2110: 3e 20 5e 53 74 61 74 69 73 74 69 63 73 20 67 61  > ^Statistics ga
2120: 74 68 65 72 65 64 20 62 79 20 41 4e 41 4c 59 5a  thered by ANALYZ
2130: 45 20 61 72 65 20 3c 75 3e 6e 6f 74 3c 2f 75 3e  E are <u>not</u>
2140: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75   automatically u
2150: 70 64 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f  pdated as.the co
2160: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74  ntent of the dat
2170: 61 62 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20  abase changes.  
2180: 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  If the content o
2190: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 63  f the database.c
21a0: 68 61 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61  hanges significa
21b0: 6e 74 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20  ntly, or if the 
21c0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
21d0: 63 68 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e  changes, then on
21e0: 65 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65  e should.conside
21f0: 72 20 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20  r rerunning the 
2200: 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20  ANALYZE command 
2210: 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61  in order to upda
2220: 74 65 20 74 68 65 20 73 74 61 74 69 73 74 69 63  te the statistic
2230: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20  s.</p>..<p> The 
2240: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69  query planner mi
2250: 67 68 74 20 6e 6f 74 20 6e 6f 74 69 63 65 20 6d  ght not notice m
2260: 61 6e 75 61 6c 20 63 68 61 6e 67 65 73 20 74 6f  anual changes to
2270: 20 74 68 65 0a 73 71 6c 69 74 65 5f 73 74 61 74   the.sqlite_stat
2280: 31 20 61 6e 64 2f 6f 72 20 73 71 6c 69 74 65 5f  1 and/or sqlite_
2290: 73 74 61 74 33 20 74 61 62 6c 65 73 2e 20 20 5e  stat3 tables.  ^
22a0: 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63  An application.c
22b0: 61 6e 20 66 6f 72 63 65 20 74 68 65 20 71 75 65  an force the que
22c0: 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20 72 65  ry planner to re
22d0: 72 65 61 64 20 74 68 65 20 73 74 61 74 69 73 74  read the statist
22e0: 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 72 75  ics tables by ru
22f0: 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59 5a 45  nning.<b>ANALYZE
2300: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f   sqlite_master</
2310: 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  b>. </p>..<tcl>.
2320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
2370: 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44  ection {ATTACH D
2380: 41 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20  ATABASE} attach 
2390: 2a 41 54 54 41 43 48 0a 0a 42 75 62 62 6c 65 44  *ATTACH..BubbleD
23a0: 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73 74  iagram attach-st
23b0: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
23c0: 20 5e 54 68 65 20 41 54 54 41 43 48 20 44 41 54   ^The ATTACH DAT
23d0: 41 42 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20  ABASE statement 
23e0: 61 64 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74  adds another dat
23f0: 61 62 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74  abase .file to t
2400: 68 65 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61  he current [data
2410: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
2420: 2e 20 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  . .^The filename
2430: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
2440: 65 20 74 6f 20 62 65 20 61 74 74 61 63 68 65 64  e to be attached
2450: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
2460: 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  .the expression 
2470: 74 68 61 74 20 6f 63 63 75 72 73 20 62 65 66 6f  that occurs befo
2480: 72 65 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72  re the AS keywor
2490: 64 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  d..^The filename
24a0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
24b0: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d   follows the sam
24c0: 65 20 73 65 6d 61 6e 74 69 63 73 20 61 73 20 74  e semantics as t
24d0: 68 65 0a 66 69 6c 65 6e 61 6d 65 20 61 72 67 75  he.filename argu
24e0: 6d 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74 65 33  ment to [sqlite3
24f0: 5f 6f 70 65 6e 28 29 5d 20 61 6e 64 20 5b 73 71  _open()] and [sq
2500: 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d  lite3_open_v2()]
2510: 3b 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61  ; the.special na
2520: 6d 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20  me "[:memory:]" 
2530: 72 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 5b 69  results in an [i
2540: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
2550: 65 5d 20 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20  e] and an.empty 
2560: 73 74 72 69 6e 67 20 72 65 73 75 6c 74 73 20 69  string results i
2570: 6e 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72  n a new temporar
2580: 79 20 64 61 74 61 62 61 73 65 2e 0a 5e 54 68 65  y database..^The
2590: 20 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65   filename argume
25a0: 6e 74 20 63 61 6e 20 62 65 20 61 20 5b 55 52 49  nt can be a [URI
25b0: 20 66 69 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52   filename] if UR
25c0: 49 20 66 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65  I filename proce
25d0: 73 73 69 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20  ssing.is enable 
25e0: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
25f0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
2600: 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f   default behavio
2610: 72 20 69 73 20 66 6f 72 0a 55 52 49 20 66 69 6c  r is for.URI fil
2620: 65 6e 61 6d 65 73 20 74 6f 20 62 65 20 64 69 73  enames to be dis
2630: 61 62 6c 65 64 2c 20 68 6f 77 65 76 65 72 20 74  abled, however t
2640: 68 61 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65  hat might change
2650: 20 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c   in a future rel
2660: 65 61 73 65 0a 6f 66 20 53 51 4c 69 74 65 2c 20  ease.of SQLite, 
2670: 73 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  so application d
2680: 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64  evelopers are ad
2690: 76 69 73 65 64 20 74 6f 20 70 6c 61 6e 20 61 63  vised to plan ac
26a0: 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 54  cordingly...<p>T
26b0: 68 65 20 6e 61 6d 65 20 74 68 61 74 20 6f 63 63  he name that occ
26c0: 75 72 73 20 61 66 74 65 72 20 74 68 65 20 41 53  urs after the AS
26d0: 20 6b 65 79 77 6f 72 64 20 69 73 20 74 68 65 20   keyword is the 
26e0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
26f0: 62 61 73 65 0a 75 73 65 64 20 69 6e 74 65 72 6e  base.used intern
2700: 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 0a  ally by SQLite..
2710: 5e 54 68 65 20 64 61 74 61 62 61 73 65 2d 6e 61  ^The database-na
2720: 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a  mes 'main' and .
2730: 27 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20  'temp' refer to 
2740: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2750: 65 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61  e and the databa
2760: 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d  se used for .tem
2770: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
2780: 5e 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65  ^The main and te
2790: 6d 70 20 64 61 74 61 62 61 73 65 73 20 63 61 6e  mp databases can
27a0: 6e 6f 74 20 62 65 20 61 74 74 61 63 68 65 64 20  not be attached 
27b0: 6f 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e  or.detached.</p>
27c0: 0a 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20 69  ..<p> ^(Tables i
27d0: 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
27e0: 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 72 65  tabase can be re
27f0: 66 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20  ferred to using 
2800: 74 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64  the syntax .<i>d
2810: 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62  atabase-name.tab
2820: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20  le-name</i>.)^  
2830: 5e 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ^If the name of 
2840: 74 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69  the table is uni
2850: 71 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61  que.across all a
2860: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2870: 73 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61  s and the main a
2880: 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  nd temp database
2890: 73 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64  s, then the.<i>d
28a0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
28b0: 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 72   prefix is not r
28c0: 65 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74 77  equired.  ^If tw
28d0: 6f 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  o or more tables
28e0: 20 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64 61   in.different da
28f0: 74 61 62 61 73 65 73 20 68 61 76 65 20 74 68 65  tabases have the
2900: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74   same name and t
2910: 68 65 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  he .<i>database-
2920: 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20  name</i> prefix 
2930: 69 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61  is not used on a
2940: 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65   table reference
2950: 2c 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65  , then the.table
2960: 20 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f   chosen is the o
2970: 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
2980: 73 65 20 74 68 61 74 20 77 61 73 20 6c 65 61 73  se that was leas
2990: 74 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63  t recently attac
29a0: 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54  hed.</p>..<p>.^T
29b0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f  ransactions invo
29c0: 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61  lving multiple a
29d0: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
29e0: 73 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73  s are atomic,.as
29f0: 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20  suming that the 
2a00: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
2a10: 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d   not "[:memory:]
2a20: 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72  " and the .[jour
2a30: 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74  nal_mode] is not
2a40: 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68   [WAL].  ^(If th
2a50: 65 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20  e main.database 
2a60: 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72  is ":memory:" or
2a70: 20 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f   if the journal_
2a80: 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65  mode is WAL, the
2a90: 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  n .transactions 
2aa0: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61  continue to be a
2ab0: 74 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63  tomic within eac
2ac0: 68 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74  h individual.dat
2ad0: 61 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20  abase file. But 
2ae0: 69 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70  if the host comp
2af0: 75 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20  uter crashes in 
2b00: 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20  the middle.of a 
2b10: 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74  [COMMIT] where t
2b20: 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62  wo or more datab
2b30: 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 75 70  ase files are up
2b40: 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74  dated,.some of t
2b50: 68 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74  hose files might
2b60: 20 67 65 74 20 74 68 65 20 63 68 61 6e 67 65 73   get the changes
2b70: 20 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69   where others.mi
2b80: 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a  ght not.)^.</p>.
2b90: 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61  .<p> ^There is a
2ba0: 20 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e   limit, set usin
2bb0: 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  g [sqlite3_limit
2bc0: 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45  ()] and .[SQLITE
2bd0: 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d  _LIMIT_ATTACHED]
2be0: 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  , to the number 
2bf0: 6f 66 20 64 61 74 61 62 61 73 65 73 20 74 68 61  of databases tha
2c00: 74 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61  t can be.simulta
2c10: 6e 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64  neously attached
2c20: 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74   to a single dat
2c30: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2c40: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
2c50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c90: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
2ca0: 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e  tion {BEGIN TRAN
2cb0: 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63  SACTION} transac
2cc0: 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d  tion {*BEGIN COM
2cd0: 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 42  MIT ROLLBACK}..B
2ce0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 62 65 67  ubbleDiagram beg
2cf0: 69 6e 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69  in-stmt.BubbleDi
2d00: 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d  agram commit-stm
2d10: 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  t.BubbleDiagram 
2d20: 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f  rollback-stmt.</
2d30: 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68  tcl>..<p>.^No ch
2d40: 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64  anges can be mad
2d50: 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
2d60: 65 20 65 78 63 65 70 74 20 77 69 74 68 69 6e 20  e except within 
2d70: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  a transaction..^
2d80: 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74  Any command that
2d90: 20 63 68 61 6e 67 65 73 20 74 68 65 20 64 61 74   changes the dat
2da0: 61 62 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79  abase (basically
2db0: 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e  , any SQL comman
2dc0: 64 0a 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 45  d.other than [SE
2dd0: 4c 45 43 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f  LECT]) will auto
2de0: 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20  matically start 
2df0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66  a transaction if
2e00: 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65  .one is not alre
2e10: 61 64 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20  ady in effect.  
2e20: 5e 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73  ^Automatically s
2e30: 74 61 72 74 65 64 20 74 72 61 6e 73 61 63 74 69  tarted transacti
2e40: 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65  ons.are committe
2e50: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
2e60: 71 75 65 72 79 20 66 69 6e 69 73 68 65 73 2e 0a  query finishes..
2e70: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73  </p>..<p>.^Trans
2e80: 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73  actions can be s
2e90: 74 61 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20  tarted manually 
2ea0: 75 73 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a  using the BEGIN.
2eb0: 63 6f 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68  command.  ^(Such
2ec0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73   transactions us
2ed0: 75 61 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e  ually persist un
2ee0: 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d  til the next.COM
2ef0: 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20  MIT or ROLLBACK 
2f00: 63 6f 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20  command.  But a 
2f10: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c  transaction will
2f20: 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20   also .ROLLBACK 
2f30: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2f40: 69 73 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20  is closed or if 
2f50: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a  an error occurs.
2f60: 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  and the ROLLBACK
2f70: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
2f80: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69  tion algorithm i
2f90: 73 20 73 70 65 63 69 66 69 65 64 2e 29 5e 0a 53  s specified.)^.S
2fa0: 65 65 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61  ee the documenta
2fb0: 74 69 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20  tion on the [ON 
2fc0: 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65  CONFLICT].clause
2fd0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
2fe0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
2ff0: 74 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63  t the ROLLBACK.c
3000: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
3010: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f  on algorithm..</
3020: 70 3e 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41  p>..<p>.^END TRA
3030: 4e 53 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61  NSACTION is an a
3040: 6c 69 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e  lias for COMMIT.
3050: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61  .</p>..<p> ^(Tra
3060: 6e 73 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65  nsactions create
3070: 64 20 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e  d using BEGIN...
3080: 43 4f 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65  COMMIT do not ne
3090: 73 74 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65  st.)^.^For neste
30a0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20  d transactions, 
30b0: 75 73 65 20 74 68 65 20 5b 53 41 56 45 50 4f 49  use the [SAVEPOI
30c0: 4e 54 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53 45  NT] and [RELEASE
30d0: 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20  ] commands..The 
30e0: 22 54 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c 69  "TO SAVEPOINT <i
30f0: 3e 6e 61 6d 65 3c 2f 69 3e 22 20 63 6c 61 75 73  >name</i>" claus
3100: 65 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43  e of the ROLLBAC
3110: 4b 20 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a  K command shown.
3120: 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64 69  in the syntax di
3130: 61 67 72 61 6d 20 61 62 6f 76 65 20 69 73 20 6f  agram above is o
3140: 6e 6c 79 20 61 70 70 6c 69 63 61 62 6c 65 20 74  nly applicable t
3150: 6f 20 5b 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72  o [SAVEPOINT].tr
3160: 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e  ansactions.  ^An
3170: 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f   attempt to invo
3180: 6b 65 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d  ke the BEGIN com
3190: 6d 61 6e 64 20 77 69 74 68 69 6e 0a 61 20 74 72  mand within.a tr
31a0: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66  ansaction will f
31b0: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
31c0: 72 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  r, regardless of
31d0: 20 77 68 65 74 68 65 72 0a 74 68 65 20 74 72 61   whether.the tra
31e0: 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 73 74 61  nsaction was sta
31f0: 72 74 65 64 20 62 79 20 5b 53 41 56 45 50 4f 49  rted by [SAVEPOI
3200: 4e 54 5d 20 6f 72 20 61 20 70 72 69 6f 72 20 42  NT] or a prior B
3210: 45 47 49 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49  EGIN..^The COMMI
3220: 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68  T command and th
3230: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
3240: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 54  nd without the T
3250: 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68  O clause.work th
3260: 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50  e same on [SAVEP
3270: 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63 74 69 6f  OINT] transactio
3280: 6e 73 20 61 73 20 74 68 65 79 20 64 6f 20 77 69  ns as they do wi
3290: 74 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a  th transactions.
32a0: 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49 4e  started by BEGIN
32b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e  .</p>..<p>.^Tran
32c0: 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  sactions can be 
32d0: 64 65 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69  deferred, immedi
32e0: 61 74 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76  ate, or exclusiv
32f0: 65 2e 20 20 0a 5e 54 68 65 20 64 65 66 61 75 6c  e.  .^The defaul
3300: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65  t transaction be
3310: 68 61 76 69 6f 72 20 69 73 20 64 65 66 65 72 72  havior is deferr
3320: 65 64 2e 0a 5e 44 65 66 65 72 72 65 64 20 6d 65  ed..^Deferred me
3330: 61 6e 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b  ans that no lock
3340: 73 20 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f  s are acquired.o
3350: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  n the database u
3360: 6e 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73  ntil the databas
3370: 65 20 69 73 20 66 69 72 73 74 20 61 63 63 65 73  e is first acces
3380: 73 65 64 2e 20 20 5e 54 68 75 73 20 77 69 74 68  sed.  ^Thus with
3390: 20 61 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e   a.deferred tran
33a0: 73 61 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47  saction, the BEG
33b0: 49 4e 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73  IN statement its
33c0: 65 6c 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67  elf does nothing
33d0: 20 74 6f 20 74 68 65 0a 66 69 6c 65 73 79 73 74   to the.filesyst
33e0: 65 6d 2e 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20  em.  ^Locks.are 
33f0: 6e 6f 74 20 61 63 71 75 69 72 65 64 20 75 6e 74  not acquired unt
3400: 69 6c 20 74 68 65 20 66 69 72 73 74 20 72 65 61  il the first rea
3410: 64 20 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61  d or write opera
3420: 74 69 6f 6e 2e 20 20 5e 54 68 65 20 66 69 72 73  tion.  ^The firs
3430: 74 20 72 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e  t read.operation
3440: 20 61 67 61 69 6e 73 74 20 61 20 64 61 74 61 62   against a datab
3450: 61 73 65 20 63 72 65 61 74 65 73 20 61 20 5b 53  ase creates a [S
3460: 48 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20  HARED] lock and 
3470: 74 68 65 20 66 69 72 73 74 0a 77 72 69 74 65 20  the first.write 
3480: 6f 70 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65  operation create
3490: 73 20 61 20 5b 52 45 53 45 52 56 45 44 5d 20 6c  s a [RESERVED] l
34a0: 6f 63 6b 2e 20 20 20 5e 42 65 63 61 75 73 65 20  ock.   ^Because 
34b0: 74 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e 20  the acquisition 
34c0: 6f 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66 65  of.locks is defe
34d0: 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79 20  rred until they 
34e0: 61 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20 69  are needed, it i
34f0: 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
3500: 61 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20 6f  another.thread o
3510: 72 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64 20  r process could 
3520: 63 72 65 61 74 65 20 61 20 73 65 70 61 72 61 74  create a separat
3530: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  e transaction an
3540: 64 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20 64  d write to.the d
3550: 61 74 61 62 61 73 65 20 61 66 74 65 72 20 74 68  atabase after th
3560: 65 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20 63  e BEGIN on the c
3570: 75 72 72 65 6e 74 20 74 68 72 65 61 64 20 68 61  urrent thread ha
3580: 73 20 65 78 65 63 75 74 65 64 2e 0a 5e 49 66 20  s executed..^If 
3590: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
35a0: 69 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68  is immediate, th
35b0: 65 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f  en [RESERVED] lo
35c0: 63 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64  cks.are acquired
35d0: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
35e0: 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  s as soon as the
35f0: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69   BEGIN command i
3600: 73 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68  s.executed, with
3610: 6f 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20  out waiting for 
3620: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
3630: 62 65 20 75 73 65 64 2e 20 20 5e 41 66 74 65 72  be used.  ^After
3640: 20 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41   a BEGIN IMMEDIA
3650: 54 45 2c 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64  TE, .no other [d
3660: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
3670: 6f 6e 5d 20 77 69 6c 6c 20 62 65 20 61 62 6c 65  on] will be able
3680: 20 74 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65   to write to the
3690: 20 64 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20   database or.do 
36a0: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
36b0: 45 20 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55  E or BEGIN EXCLU
36c0: 53 49 56 45 2e 20 20 5e 4f 74 68 65 72 20 70 72  SIVE.  ^Other pr
36d0: 6f 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74  ocesses can cont
36e0: 69 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f  inue.to read fro
36f0: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20  m the database, 
3700: 68 6f 77 65 76 65 72 2e 20 20 5e 41 6e 20 65 78  however.  ^An ex
3710: 63 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74  clusive transact
3720: 69 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c  ion causes.[EXCL
3730: 55 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20  USIVE] locks to 
3740: 62 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  be acquired on a
3750: 6c 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 5e  ll databases.  ^
3760: 41 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58  After a BEGIN.EX
3770: 43 4c 55 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65  CLUSIVE, no othe
3780: 72 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  r [database conn
3790: 65 63 74 69 6f 6e 5d 20 65 78 63 65 70 74 20 66  ection] except f
37a0: 6f 72 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69  or [read_uncommi
37b0: 74 74 65 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e  tted].connection
37c0: 73 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74  s will be able t
37d0: 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
37e0: 61 73 65 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72  ase and no other
37f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68   connection with
3800: 6f 75 74 0a 65 78 63 65 70 74 69 6f 6e 20 77 69  out.exception wi
3810: 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72  ll be able to wr
3820: 69 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ite the database
3830: 20 75 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73   until the trans
3840: 61 63 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65  action is.comple
3850: 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28  te..</p>..<p>.^(
3860: 41 6e 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e  An implicit tran
3870: 73 61 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73  saction (a trans
3880: 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73  action that is s
3890: 74 61 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63  tarted automatic
38a0: 61 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e  ally,.not a tran
38b0: 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20  saction started 
38c0: 62 79 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d  by BEGIN) is com
38d0: 6d 69 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63  mitted automatic
38e0: 61 6c 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61  ally when.the la
38f0: 73 74 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  st active statem
3900: 65 6e 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41  ent finishes.  A
3910: 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73   statement finis
3920: 68 65 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65  hes when its.pre
3930: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
3940: 69 73 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65  is [sqlite3_rese
3950: 74 28 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a  t() | reset] or.
3960: 5b 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  [sqlite3_finaliz
3970: 65 28 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d  e() | finalized]
3980: 2e 20 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69  .  An open [sqli
3990: 74 65 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66  te3_blob] used f
39a0: 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42  or.incremental B
39b0: 4c 4f 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61  LOB I/O counts a
39c0: 73 20 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20  s an unfinished 
39d0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
39e0: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66  [sqlite3_blob].f
39f0: 69 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 20  inishes when it 
3a00: 69 73 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  is [sqlite3_blob
3a10: 5f 63 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65  _close() | close
3a20: 64 5d 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  d].)^.</p>..<p>.
3a30: 5e 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f  ^The explicit CO
3a40: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  MMIT command run
3a50: 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65  s immediately, e
3a60: 76 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65  ven if there are
3a70: 0a 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54  .pending [SELECT
3a80: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e  ] statements.  ^
3a90: 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72  However, if ther
3aa0: 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72  e are pending.wr
3ab0: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20  ite operations, 
3ac0: 74 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61  the COMMIT comma
3ad0: 6e 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  nd.will fail wit
3ae0: 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
3af0: 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c  [SQLITE_BUSY]..<
3b00: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74  /p>..<p>.^An att
3b10: 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20  empt to execute 
3b20: 43 4f 4d 4d 49 54 20 6d 69 67 68 74 20 61 6c 73  COMMIT might als
3b30: 6f 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b  o result in an [
3b40: 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 72 65 74  SQLITE_BUSY] ret
3b50: 75 72 6e 20 63 6f 64 65 0a 69 66 20 61 6e 20 61  urn code.if an a
3b60: 6e 6f 74 68 65 72 20 74 68 72 65 61 64 20 6f 72  nother thread or
3b70: 20 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 5b   process has a [
3b80: 73 68 61 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20  shared lock] on 
3b90: 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 68 61  the database.tha
3ba0: 74 20 70 72 65 76 65 6e 74 65 64 20 74 68 65 20  t prevented the 
3bb0: 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65  database from be
3bc0: 69 6e 67 20 75 70 64 61 74 65 64 2e 20 20 5e 57  ing updated.  ^W
3bd0: 68 65 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73  hen COMMIT fails
3be0: 20 69 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68   in this.way, th
3bf0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65  e transaction re
3c00: 6d 61 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64  mains active and
3c10: 20 74 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20   the COMMIT can 
3c20: 62 65 20 72 65 74 72 69 65 64 20 6c 61 74 65 72  be retried later
3c30: 0a 61 66 74 65 72 20 74 68 65 20 72 65 61 64 65  .after the reade
3c40: 72 20 68 61 73 20 68 61 64 20 61 20 63 68 61 6e  r has had a chan
3c50: 63 65 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70  ce to clear..</p
3c60: 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 52 4f 4c 4c  >..<p>.^The ROLL
3c70: 42 41 43 4b 20 77 69 6c 6c 20 66 61 69 6c 20 77  BACK will fail w
3c80: 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  ith an error cod
3c90: 65 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 20  e [SQLITE_BUSY] 
3ca0: 69 66 20 74 68 65 72 65 0a 61 72 65 20 61 6e 79  if there.are any
3cb0: 20 70 65 6e 64 69 6e 67 20 71 75 65 72 69 65 73   pending queries
3cc0: 2e 20 20 5e 42 6f 74 68 20 72 65 61 64 2d 6f 6e  .  ^Both read-on
3cd0: 6c 79 20 61 6e 64 20 72 65 61 64 2f 77 72 69 74  ly and read/writ
3ce0: 65 20 71 75 65 72 69 65 73 20 77 69 6c 6c 0a 63  e queries will.c
3cf0: 61 75 73 65 20 61 20 52 4f 4c 4c 42 41 43 4b 20  ause a ROLLBACK 
3d00: 74 6f 20 66 61 69 6c 2e 20 20 41 20 52 4f 4c 4c  to fail.  A ROLL
3d10: 42 41 43 4b 20 6d 75 73 74 20 66 61 69 6c 20 69  BACK must fail i
3d20: 66 20 74 68 65 72 65 20 61 72 65 20 70 65 6e 64  f there are pend
3d30: 69 6e 67 0a 72 65 61 64 20 6f 70 65 72 61 74 69  ing.read operati
3d40: 6f 6e 73 20 28 75 6e 6c 69 6b 65 20 43 4f 4d 4d  ons (unlike COMM
3d50: 49 54 20 77 68 69 63 68 20 63 61 6e 20 73 75 63  IT which can suc
3d60: 63 65 65 64 29 20 62 65 63 61 75 73 65 20 62 61  ceed) because ba
3d70: 64 20 74 68 69 6e 67 73 0a 77 69 6c 6c 20 68 61  d things.will ha
3d80: 70 70 65 6e 20 69 66 20 74 68 65 20 69 6e 2d 6d  ppen if the in-m
3d90: 65 6d 6f 72 79 20 69 6d 61 67 65 20 6f 66 20 74  emory image of t
3da0: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63  he database is c
3db0: 68 61 6e 67 65 64 20 6f 75 74 20 66 72 6f 6d 20  hanged out from 
3dc0: 75 6e 64 65 72 0a 61 6e 20 61 63 74 69 76 65 20  under.an active 
3dd0: 71 75 65 72 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  query..</p>..<p>
3de0: 0a 49 66 20 5b 50 52 41 47 4d 41 20 6a 6f 75 72  .If [PRAGMA jour
3df0: 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 73 65 74  nal_mode] is set
3e00: 20 74 6f 20 4f 46 46 20 28 74 68 75 73 20 64 69   to OFF (thus di
3e10: 73 61 62 6c 69 6e 67 20 74 68 65 20 72 6f 6c 6c  sabling the roll
3e20: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c  back journal.fil
3e30: 65 29 20 74 68 65 6e 20 74 68 65 20 62 65 68 61  e) then the beha
3e40: 76 69 6f 72 20 6f 66 20 74 68 65 20 52 4f 4c 4c  vior of the ROLL
3e50: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 69 73 20  BACK command is 
3e60: 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a  undefined..</p>.
3e70: 0a 3c 68 33 3e 52 65 73 70 6f 6e 73 65 20 54 6f  .<h3>Response To
3e80: 20 45 72 72 6f 72 73 20 57 69 74 68 69 6e 20 41   Errors Within A
3e90: 20 54 72 61 6e 73 61 63 74 69 6f 6e 3c 2f 68 33   Transaction</h3
3ea0: 3e 0a 0a 3c 70 3e 20 5e 28 49 66 20 63 65 72 74  >..<p> ^(If cert
3eb0: 61 69 6e 20 6b 69 6e 64 73 20 6f 66 20 65 72 72  ain kinds of err
3ec0: 6f 72 73 20 6f 63 63 75 72 20 77 69 74 68 69 6e  ors occur within
3ed0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20   a transaction, 
3ee0: 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  the.transaction 
3ef0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
3f00: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75  e rolled back au
3f10: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 20 54 68  tomatically.  Th
3f20: 65 0a 65 72 72 6f 72 73 20 74 68 61 74 20 63 61  e.errors that ca
3f30: 75 73 65 20 74 68 65 20 62 65 68 61 76 69 6f 72  use the behavior
3f40: 20 69 6e 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c   include:</p>..<
3f50: 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ul>.<li> [SQLITE
3f60: 5f 46 55 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65  _FULL]: database
3f70: 20 6f 72 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c   or disk full.<l
3f80: 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52  i> [SQLITE_IOERR
3f90: 5d 3a 20 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f  ]: disk I/O erro
3fa0: 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42  r.<li> [SQLITE_B
3fb0: 55 53 59 5d 3a 20 64 61 74 61 62 61 73 65 20 69  USY]: database i
3fc0: 6e 20 75 73 65 20 62 79 20 61 6e 6f 74 68 65 72  n use by another
3fd0: 20 70 72 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53   process.<li> [S
3fe0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75  QLITE_NOMEM]: ou
3ff0: 74 20 6f 72 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e  t or memory.<li>
4000: 20 5b 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55   [SQLITE_INTERRU
4010: 50 54 5d 3a 20 70 72 6f 63 65 73 73 69 6e 67 20  PT]: processing 
4020: 5b 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75  [sqlite3_interru
4030: 70 74 7c 69 6e 74 65 72 72 75 70 74 65 64 5d 0a  pt|interrupted].
4040: 20 20 20 20 20 62 79 20 61 70 70 6c 69 63 61 74       by applicat
4050: 69 6f 6e 20 72 65 71 75 65 73 74 0a 3c 2f 75 6c  ion request.</ul
4060: 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c  >)^..<p>.^For al
4070: 6c 20 6f 66 20 74 68 65 73 65 20 65 72 72 6f 72  l of these error
4080: 73 2c 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70  s, SQLite attemp
4090: 74 73 20 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20  ts to undo just 
40a0: 74 68 65 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e  the one statemen
40b0: 74 0a 69 74 20 77 61 73 20 77 6f 72 6b 69 6e 67  t.it was working
40c0: 20 6f 6e 20 61 6e 64 20 6c 65 61 76 65 20 63 68   on and leave ch
40d0: 61 6e 67 65 73 20 66 72 6f 6d 20 70 72 69 6f 72  anges from prior
40e0: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
40f0: 69 6e 20 74 68 65 0a 73 61 6d 65 20 74 72 61 6e  in the.same tran
4100: 73 61 63 74 69 6f 6e 20 69 6e 74 61 63 74 20 61  saction intact a
4110: 6e 64 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68  nd continue with
4120: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4130: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65  .  ^However, .de
4140: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 73  pending on the s
4150: 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65  tatement being e
4160: 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
4170: 20 70 6f 69 6e 74 20 61 74 20 77 68 69 63 68 20   point at which 
4180: 74 68 65 0a 65 72 72 6f 72 20 6f 63 63 75 72 73  the.error occurs
4190: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 6e 65  , it might be ne
41a0: 63 65 73 73 61 72 79 20 66 6f 72 20 53 51 4c 69  cessary for SQLi
41b0: 74 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  te to rollback a
41c0: 6e 64 0a 63 61 6e 63 65 6c 20 74 68 65 20 65 6e  nd.cancel the en
41d0: 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tire transaction
41e0: 2e 20 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69  .  ^An applicati
41f0: 6f 6e 20 63 61 6e 20 74 65 6c 6c 20 77 68 69 63  on can tell whic
4200: 68 0a 63 6f 75 72 73 65 20 6f 66 20 61 63 74 69  h.course of acti
4210: 6f 6e 20 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62  on SQLite took b
4220: 79 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c  y using the.[sql
4230: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
4240: 6d 69 74 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  mit()] C-languag
4250: 65 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  e interface.</p>
4260: 0a 0a 3c 70 3e 49 74 20 69 73 20 72 65 63 6f 6d  ..<p>It is recom
4270: 6d 65 6e 64 65 64 20 74 68 61 74 20 61 70 70 6c  mended that appl
4280: 69 63 61 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64  ications respond
4290: 20 74 6f 20 74 68 65 20 65 72 72 6f 72 73 0a 6c   to the errors.l
42a0: 69 73 74 65 64 20 61 62 6f 76 65 20 62 79 20 65  isted above by e
42b0: 78 70 6c 69 63 69 74 6c 79 20 69 73 73 75 69 6e  xplicitly issuin
42c0: 67 20 61 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  g a ROLLBACK com
42d0: 6d 61 6e 64 2e 20 20 5e 49 66 20 74 68 65 20 0a  mand.  ^If the .
42e0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20  transaction has 
42f0: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 72 6f 6c  already been rol
4300: 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74  led back automat
4310: 69 63 61 6c 6c 79 0a 62 79 20 74 68 65 20 65 72  ically.by the er
4320: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c 20 74 68  ror response, th
4330: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
4340: 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69  command will fai
4350: 6c 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c  l with an.error,
4360: 20 62 75 74 20 6e 6f 20 68 61 72 6d 20 69 73 20   but no harm is 
4370: 63 61 75 73 65 64 20 62 79 20 74 68 69 73 2e 3c  caused by this.<
4380: 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76  /p>..<p>Future v
4390: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
43a0: 65 20 6d 61 79 20 65 78 74 65 6e 64 20 74 68 65  e may extend the
43b0: 20 6c 69 73 74 20 6f 66 20 65 72 72 6f 72 73 20   list of errors 
43c0: 77 68 69 63 68 0a 6d 69 67 68 74 20 63 61 75 73  which.might caus
43d0: 65 20 61 75 74 6f 6d 61 74 69 63 20 74 72 61 6e  e automatic tran
43e0: 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b  saction rollback
43f0: 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
4400: 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67  ns of.SQLite mig
4410: 68 74 20 63 68 61 6e 67 65 20 74 68 65 20 65 72  ht change the er
4420: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e 20 20 49  ror response.  I
4430: 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 77 65  n particular, we
4440: 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73   may.choose to s
4450: 69 6d 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65  implify the inte
4460: 72 66 61 63 65 20 69 6e 20 66 75 74 75 72 65 20  rface in future 
4470: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
4480: 74 65 20 62 79 0a 63 61 75 73 69 6e 67 20 74 68  te by.causing th
4490: 65 20 65 72 72 6f 72 73 20 61 62 6f 76 65 20 74  e errors above t
44a0: 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e  o force an uncon
44b0: 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63  ditional rollbac
44c0: 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  k.</p>..<tcl>.##
44d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
44e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
44f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4510: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
4520: 63 74 69 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54  ction {SAVEPOINT
4530: 7d 20 73 61 76 65 70 6f 69 6e 74 20 7b 53 41 56  } savepoint {SAV
4540: 45 50 4f 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a  EPOINT RELEASE}.
4550: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  .BubbleDiagram s
4560: 61 76 65 70 6f 69 6e 74 2d 73 74 6d 74 0a 42 75  avepoint-stmt.Bu
4570: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 6c 65  bbleDiagram rele
4580: 61 73 65 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44  ase-stmt.BubbleD
4590: 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d  iagram rollback-
45a0: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
45b0: 20 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65   ^SAVEPOINTs are
45c0: 20 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65   a method of cre
45d0: 61 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f  ating transactio
45e0: 6e 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b  ns, similar to.[
45f0: 42 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d  BEGIN] and [COMM
4600: 49 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74  IT], except that
4610: 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61   the SAVEPOINT a
4620: 6e 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  nd RELEASE comma
4630: 6e 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e  nds.are named an
4640: 64 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e  d may be nested.
4650: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53  </p>..<p> ^The S
4660: 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64  AVEPOINT command
4670: 20 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72   starts a new tr
4680: 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61  ansaction with a
4690: 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e   name..^The tran
46a0: 73 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65  saction names ne
46b0: 65 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65  ed not be unique
46c0: 2e 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20  ..^(A SAVEPOINT 
46d0: 63 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65  can be started e
46e0: 69 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20  ither within or 
46f0: 6f 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45  outside of.a [BE
4700: 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e  GIN]...[COMMIT].
4710: 29 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56  )^  ^(When a SAV
4720: 45 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75  EPOINT is the ou
4730: 74 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69  ter-most savepoi
4740: 6e 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74  nt.and it is not
4750: 20 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e   within a [BEGIN
4760: 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65  ]...[COMMIT] the
4770: 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
4780: 73 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45  s the.same as BE
4790: 47 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41  GIN DEFERRED TRA
47a0: 4e 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a  NSACTION.)^</p>.
47b0: 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43  .<p>^The ROLLBAC
47c0: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76  K TO command rev
47d0: 65 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f  erts the state o
47e0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  f the database b
47f0: 61 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77  ack to what.it w
4800: 61 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68  as just after th
4810: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
4820: 53 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74  SAVEPOINT.  ^Not
4830: 65 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68  e that unlike th
4840: 61 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41  at.plain [ROLLBA
4850: 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74  CK] command (wit
4860: 68 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77  hout the TO keyw
4870: 6f 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43  ord) the ROLLBAC
4880: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65  K TO command.doe
4890: 73 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65  s not cancel the
48a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
48b0: 49 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65  Instead of cance
48c0: 6c 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61  lling the transa
48d0: 63 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42  ction,.the ROLLB
48e0: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72  ACK TO command r
48f0: 65 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e  estarts the tran
4900: 73 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74  saction again at
4910: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
4920: 5e 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67  ^All intervening
4930: 20 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20   SAVEPOINTs are 
4940: 63 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65  canceled, howeve
4950: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
4960: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4970: 69 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49  is like a [COMMI
4980: 54 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49  T] for a SAVEPOI
4990: 4e 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45  NT..^The RELEASE
49a0: 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20   command causes 
49b0: 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62  all savepoints b
49c0: 61 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75  ack to and inclu
49d0: 64 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72  ding the .most r
49e0: 65 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  ecent savepoint 
49f0: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
4a00: 6e 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76  name to be remov
4a10: 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61  ed from the .tra
4a20: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20  nsaction stack. 
4a30: 20 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66   ^The RELEASE of
4a40: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
4a50: 63 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63  ction.does not c
4a60: 61 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73  ause any changes
4a70: 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74   to be written t
4a80: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
4a90: 69 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72  ile; it merely.r
4aa0: 65 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74  emoves savepoint
4ab0: 73 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73  s from the trans
4ac0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63  action stack suc
4ad0: 68 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20  h that it is.no 
4ae0: 6c 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20  longer possible 
4af0: 74 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74  to ROLLBACK TO t
4b00: 68 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e  hose savepoints.
4b10: 0a 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63  .^If a RELEASE c
4b20: 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ommand releases 
4b30: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
4b40: 76 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74  vepoint, so.that
4b50: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4b60: 20 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65   stack becomes e
4b70: 6d 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41  mpty, then RELEA
4b80: 53 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61  SE is the same.a
4b90: 73 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65  s [COMMIT]..^The
4ba0: 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e   [COMMIT] comman
4bb0: 64 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f  d may be used to
4bc0: 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76   release all sav
4bd0: 65 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d  epoints and.comm
4be0: 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  it the transacti
4bf0: 6f 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74  on even if the t
4c00: 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f  ransaction was o
4c10: 72 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65  riginally starte
4c20: 64 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54  d.by a SAVEPOINT
4c30: 20 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64   command instead
4c40: 20 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f   of a [BEGIN] co
4c50: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  mmand.</p>..<p>^
4c60: 49 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  If the savepoint
4c70: 2d 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41  -name in a RELEA
4c80: 53 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20  SE command does 
4c90: 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61  not match any.sa
4ca0: 76 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c  vepoint currentl
4cb0: 79 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63  y in the transac
4cc0: 74 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e  tion stack, then
4cd0: 20 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61   no savepoints a
4ce0: 72 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65  re.released, the
4cf0: 20 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63   database is unc
4d00: 68 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20  hanged, and the 
4d10: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4d20: 72 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72  returns.an error
4d30: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  .</p>..<p>^Note 
4d40: 74 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72  that an inner tr
4d50: 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20  ansaction might 
4d60: 63 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68  commit (using th
4d70: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4d80: 64 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65  d).but then late
4d90: 72 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20  r have its work 
4da0: 75 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c  undone by a ROLL
4db0: 42 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72  BACK in an outer
4dc0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41   transaction..^A
4dd0: 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f   power failure o
4de0: 72 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20  r program crash 
4df0: 6f 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c  or OS crash will
4e00: 20 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72   cause the outer
4e10: 2d 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f  -most.transactio
4e20: 6e 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75  n to rollback, u
4e30: 6e 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67  ndoing all chang
4e40: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
4e50: 75 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61  urred within.tha
4e60: 74 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  t outer transact
4e70: 69 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65  ion, even change
4e80: 73 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70  s that have supp
4e90: 6f 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d  osedly been "com
4ea0: 6d 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52  mitted".by the R
4eb0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20  ELEASE command. 
4ec0: 20 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74   ^Content is not
4ed0: 20 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74   actually commit
4ee0: 74 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20  ted on the disk 
4ef0: 0a 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72  .until the outer
4f00: 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  most transaction
4f10: 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c   commits.</p>..<
4f20: 70 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65  p>There are seve
4f30: 72 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e  ral ways of thin
4f40: 6b 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52  king about the R
4f50: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c  ELEASE command:<
4f60: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
4f70: 3e 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69  >.Some people vi
4f80: 65 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68  ew RELEASE as th
4f90: 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  e equivalent of 
4fa0: 43 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56  COMMIT for a SAV
4fb0: 45 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20  EPOINT..This is 
4fc0: 61 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f  an acceptable po
4fd0: 69 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c  int of view as l
4fe0: 6f 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d  ong as one remem
4ff0: 62 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68  bers that the.ch
5000: 61 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20  anges committed 
5010: 62 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e  by an inner tran
5020: 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61  saction might la
5030: 74 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79  ter be undone by
5040: 20 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61   a.rollback in a
5050: 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  n outer transact
5060: 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ion.</p></li>..<
5070: 6c 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76  li><p>.Another v
5080: 69 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69  iew of RELEASE i
5090: 73 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73  s that it merges
50a0: 20 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63   a named transac
50b0: 74 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61  tion into its.pa
50c0: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
50d0: 2c 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61  , so that the na
50e0: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
50f0: 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62  and its parent b
5100: 65 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74  ecome.the same t
5110: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74  ransaction.  Aft
5120: 65 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20  er RELEASE, the 
5130: 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f  named transactio
5140: 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74  n and its parent
5150: 0a 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20  .will commit or 
5160: 72 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65  rollback togethe
5170: 72 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69  r, whatever thei
5180: 72 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c  r fate may be..<
5190: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
51a0: 3e 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74  >.One can also t
51b0: 68 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e  hink of savepoin
51c0: 74 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e  ts as."marks" in
51d0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
51e0: 20 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74   timeline.  In t
51f0: 68 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41  his view, the SA
5200: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a  VEPOINT command.
5210: 63 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61  creates a new ma
5220: 72 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rk, the ROLLBACK
5230: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69   TO command rewi
5240: 6e 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65  nds the timeline
5250: 20 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74   back.to a point
5260: 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20   just after the 
5270: 6e 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20  named mark, and 
5280: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
5290: 61 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73  and.erases marks
52a0: 20 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69   from the timeli
52b0: 6e 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61  ne without actua
52c0: 6c 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63  lly making any.c
52d0: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
52e0: 74 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69  tabase..</p></li
52f0: 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54  >.</ul>....<h3>T
5300: 72 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69  ransaction Nesti
5310: 6e 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  ng Rules</h3>..<
5320: 70 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e  p>^The last tran
5330: 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20  saction started 
5340: 77 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73  will be the firs
5350: 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  t.transaction co
5360: 6d 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65  mmitted or rolle
5370: 64 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e  d back.</p>..<p>
5380: 5e 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  ^The [BEGIN] com
5390: 6d 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  mand only works 
53a0: 69 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  if the transacti
53b0: 6f 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74  on stack is empt
53c0: 79 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77  y, or.in other w
53d0: 6f 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72  ords if there ar
53e0: 65 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61  e no pending tra
53f0: 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20  nsactions.  ^If 
5400: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  the transaction.
5410: 73 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70  stack is not emp
5420: 74 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47  ty when the [BEG
5430: 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69  IN] command is i
5440: 6e 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65  nvoked, then the
5450: 20 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77   command.fails w
5460: 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70  ith an error.</p
5470: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d  >..<p>^The [COMM
5480: 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  IT] command comm
5490: 69 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64  its all outstand
54a0: 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ing transactions
54b0: 20 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20   and leaves.the 
54c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
54d0: 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70  k empty.</p>..<p
54e0: 3e 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f  >^The RELEASE co
54f0: 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74  mmand starts wit
5500: 68 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  h the most recen
5510: 74 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68  t addition to th
5520: 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e.transaction st
5530: 61 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73  ack and releases
5540: 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b   savepoints back
5550: 77 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75  wards .in time u
5560: 6e 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73  ntil it releases
5570: 20 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74   a savepoint wit
5580: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76  h a matching sav
5590: 65 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72  epoint-name..^Pr
55a0: 69 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20  ior savepoints, 
55b0: 65 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  even savepoints 
55c0: 77 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61  with matching sa
55d0: 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61  vepoint-names, a
55e0: 72 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49  re.unchanged..^I
55f0: 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  f the RELEASE co
5600: 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65  mmand causes the
5610: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
5620: 63 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70  ck to become emp
5630: 74 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41  ty (if the RELEA
5640: 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61  SE command relea
5650: 73 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73  ses the.outermos
5660: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72  t transaction fr
5670: 6f 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68  om the stack) th
5680: 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  en the transacti
5690: 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a  on commits.</p>.
56a0: 0a 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41  .<p>^The [ROLLBA
56b0: 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68  CK] command with
56c0: 6f 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20  out a TO clause 
56d0: 72 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20  rolls backs all 
56e0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64  transactions.and
56f0: 20 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e   leaves the tran
5700: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d  saction stack em
5710: 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  pty.</p>..<p>^Th
5720: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
5730: 6e 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61  nd with a TO cla
5740: 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74  use rolls back t
5750: 72 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e  ransactions goin
5760: 67 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74  g.backwards in t
5770: 69 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20  ime back to the 
5780: 6d 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45  most recent SAVE
5790: 50 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74  POINT with a mat
57a0: 63 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65  ching name..^The
57b0: 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20   SAVEPOINT with 
57c0: 74 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  the matching nam
57d0: 65 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65  e remains on the
57e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
57f0: 63 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61  ck,.but all data
5800: 62 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61  base changes tha
5810: 74 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72  t occurred after
5820: 20 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20   that SAVEPOINT 
5830: 77 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20  was created.are 
5840: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49  rolled back.  ^I
5850: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
5860: 6e 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41  name in a ROLLBA
5870: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f  CK TO command do
5880: 65 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79  es not.match any
5890: 20 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68   SAVEPOINT on th
58a0: 65 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68  e stack, then th
58b0: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
58c0: 6e 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  nd fails with an
58d0: 0a 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65  .error and leave
58e0: 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  s the state of t
58f0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68  he database unch
5900: 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  anged.</p>..<tcl
5910: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
5920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5960: 23 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e  #.Section commen
5970: 74 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65  t comment {comme
5980: 6e 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 42  nt *comments}..B
5990: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d  ubbleDiagram com
59a0: 6d 65 6e 74 2d 73 79 6e 74 61 78 0a 3c 2f 74 63  ment-syntax.</tc
59b0: 6c 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73  l>..<p>^Comments
59c0: 20 61 72 65 20 6e 6f 74 20 53 51 4c 20 63 6f 6d   are not SQL com
59d0: 6d 61 6e 64 73 2c 20 62 75 74 20 63 61 6e 20 6f  mands, but can o
59e0: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20  ccur within the 
59f0: 74 65 78 74 20 6f 66 0a 53 51 4c 20 71 75 65 72  text of.SQL quer
5a00: 69 65 73 20 70 61 73 73 65 64 20 74 6f 20 5b 73  ies passed to [s
5a10: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
5a20: 32 28 29 5d 20 61 6e 64 20 72 65 6c 61 74 65 64  2()] and related
5a30: 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 5e 43 6f   interfaces..^Co
5a40: 6d 6d 65 6e 74 73 20 61 72 65 20 74 72 65 61 74  mments are treat
5a50: 65 64 20 61 73 20 77 68 69 74 65 73 70 61 63 65  ed as whitespace
5a60: 20 62 79 20 74 68 65 20 70 61 72 73 65 72 2e 0a   by the parser..
5a70: 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65  ^Comments can be
5a80: 67 69 6e 20 61 6e 79 77 68 65 72 65 20 77 68 69  gin anywhere whi
5a90: 74 65 73 70 61 63 65 20 0a 63 61 6e 20 62 65 20  tespace .can be 
5aa0: 66 6f 75 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67  found, including
5ab0: 20 69 6e 73 69 64 65 20 65 78 70 72 65 73 73 69   inside expressi
5ac0: 6f 6e 73 20 74 68 61 74 20 73 70 61 6e 20 6d 75  ons that span mu
5ad0: 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f  ltiple lines..</
5ae0: 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d  p>..<p>^SQL comm
5af0: 65 6e 74 73 20 62 65 67 69 6e 20 77 69 74 68 20  ents begin with 
5b00: 74 77 6f 20 63 6f 6e 73 65 63 75 74 69 76 65 20  two consecutive 
5b10: 22 2d 22 20 63 68 61 72 61 63 74 65 72 73 20 28  "-" characters (
5b20: 41 53 43 49 49 20 30 78 32 64 29 0a 61 6e 64 20  ASCII 0x2d).and 
5b30: 65 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64  extend up to and
5b40: 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e   including the n
5b50: 65 78 74 20 6e 65 77 6c 69 6e 65 20 63 68 61 72  ext newline char
5b60: 61 63 74 65 72 20 28 41 53 43 49 49 20 30 78 30  acter (ASCII 0x0
5b70: 61 29 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  a).or until the 
5b80: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
5b90: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
5ba0: 72 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d  rst.</p>..<p>^C-
5bb0: 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 20 62  style comments b
5bc0: 65 67 69 6e 0a 77 69 74 68 20 22 2f 2a 22 20 61  egin.with "/*" a
5bd0: 6e 64 20 65 78 74 65 6e 64 20 75 70 20 74 6f 20  nd extend up to 
5be0: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
5bf0: 65 20 6e 65 78 74 20 22 2a 2f 22 20 63 68 61 72  e next "*/" char
5c00: 61 63 74 65 72 20 70 61 69 72 0a 6f 72 20 75 6e  acter pair.or un
5c10: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
5c20: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
5c30: 63 6f 6d 65 73 20 66 69 72 73 74 2e 20 20 5e 43  comes first.  ^C
5c40: 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a  -style comments.
5c50: 63 61 6e 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c  can span multipl
5c60: 65 20 6c 69 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c  e lines. </p>..<
5c70: 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20  p>^Comments can 
5c80: 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20  appear anywhere 
5c90: 77 68 69 74 65 73 70 61 63 65 20 63 61 6e 20 6f  whitespace can o
5ca0: 63 63 75 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20  ccur,.including 
5cb0: 69 6e 73 69 64 65 20 65 78 70 72 65 73 73 69 6f  inside expressio
5cc0: 6e 73 20 61 6e 64 20 69 6e 20 74 68 65 20 6d 69  ns and in the mi
5cd0: 64 64 6c 65 20 6f 66 20 6f 74 68 65 72 20 53 51  ddle of other SQ
5ce0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 43  L statements..^C
5cf0: 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e 6f 74 20 6e  omments do not n
5d00: 65 73 74 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  est..</p>...<tcl
5d10: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
5d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d60: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
5d70: 20 49 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e   INDEX} createin
5d80: 64 65 78 20 7b 7b 43 52 45 41 54 45 20 49 4e 44  dex {{CREATE IND
5d90: 45 58 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  EX}}..BubbleDiag
5da0: 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65 78  ram create-index
5db0: 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
5dc0: 61 67 72 61 6d 20 69 6e 64 65 78 65 64 2d 63 6f  agram indexed-co
5dd0: 6c 75 6d 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  lumn.</tcl>..<p>
5de0: 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e 44 45  ^The CREATE INDE
5df0: 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73  X command consis
5e00: 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72  ts of the keywor
5e10: 64 73 20 22 43 52 45 41 54 45 20 49 4e 44 45 58  ds "CREATE INDEX
5e20: 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68  " followed.by th
5e30: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  e name of the ne
5e40: 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b 65 79  w index, the key
5e50: 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e  word "ON", the n
5e60: 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69 6f 75  ame of a previou
5e70: 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61 62 6c  sly.created tabl
5e80: 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20  e that is to be 
5e90: 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61 20 70  indexed, and a p
5ea0: 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73  arenthesized lis
5eb0: 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66 0a 63 6f  t of names of.co
5ec0: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
5ed0: 6c 65 20 74 68 61 74 20 61 72 65 20 75 73 65 64  le that are used
5ee0: 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78 20 6b   for the index k
5ef0: 65 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ey.</p>..<tcl>hd
5f00: 5f 66 72 61 67 6d 65 6e 74 20 7b 64 65 73 63 69  _fragment {desci
5f10: 64 78 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67 20  dx} {descending 
5f20: 69 6e 64 69 63 65 73 7d 20 7b 64 65 73 63 65 6e  indices} {descen
5f30: 64 69 6e 67 20 69 6e 64 65 78 7d 3c 2f 74 63 6c  ding index}</tcl
5f40: 3e 0a 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d  >.<p>^Each colum
5f50: 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66 6f  n name can be fo
5f60: 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f 66  llowed by one of
5f70: 20 74 68 65 20 22 41 53 43 22 20 6f 72 20 22 44   the "ASC" or "D
5f80: 45 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74 6f  ESC" keywords.to
5f90: 20 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20 6f   indicate sort o
5fa0: 72 64 65 72 2e 20 20 5e 54 68 65 20 73 6f 72 74  rder.  ^The sort
5fb0: 20 6f 72 64 65 72 20 6d 61 79 20 6f 72 20 6d 61   order may or ma
5fc0: 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64  y not be ignored
5fd0: 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e 20 74 68   depending.on th
5fe0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
5ff0: 66 6f 72 6d 61 74 2c 20 61 6e 64 20 69 6e 20 70  format, and in p
6000: 61 72 74 69 63 75 6c 61 72 20 74 68 65 20 5b 73  articular the [s
6010: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d  chema format num
6020: 62 65 72 5d 2e 0a 5e 54 68 65 20 22 6c 65 67 61  ber]..^The "lega
6030: 63 79 22 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  cy" schema forma
6040: 74 20 28 31 29 20 69 67 6e 6f 72 65 73 20 69 6e  t (1) ignores in
6050: 64 65 78 0a 73 6f 72 74 20 6f 72 64 65 72 2e 20  dex.sort order. 
6060: 20 5e 54 68 65 20 64 65 73 63 65 6e 64 69 6e 67   ^The descending
6070: 20 69 6e 64 65 78 20 73 63 68 65 6d 61 20 66 6f   index schema fo
6080: 72 6d 61 74 20 28 34 29 20 74 61 6b 65 73 20 69  rmat (4) takes i
6090: 6e 64 65 78 20 73 6f 72 74 20 6f 72 64 65 72 0a  ndex sort order.
60a0: 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2e 20 20 5e  into account.  ^
60b0: 28 4f 6e 6c 79 20 63 6f 70 69 65 73 20 6f 66 20  (Only copies of 
60c0: 53 51 4c 69 74 65 20 6e 65 77 65 72 20 74 68 61  SQLite newer tha
60d0: 6e 20 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30  n [version 3.3.0
60e0: 5d 20 0a 28 72 65 6c 65 61 73 65 64 20 6f 6e 20  ] .(released on 
60f0: 32 30 30 36 2d 30 31 2d 31 30 29 20 61 72 65 20  2006-01-10) are 
6100: 61 62 6c 65 20 74 6f 20 75 6e 64 65 72 73 74 61  able to understa
6110: 6e 64 20 74 68 65 20 6e 65 77 65 72 20 64 65 73  nd the newer des
6120: 63 65 6e 64 69 6e 67 0a 69 6e 64 65 78 20 66 69  cending.index fi
6130: 6c 65 20 66 6f 72 6d 61 74 2e 29 5e 20 20 46 6f  le format.)^  Fo
6140: 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c  r compatibility,
6150: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69   version of SQLi
6160: 74 65 20 62 65 74 77 65 65 6e 20 33 2e 33 2e 30  te between 3.3.0
6170: 0a 61 6e 64 20 33 2e 37 2e 39 20 75 73 65 20 74  .and 3.7.9 use t
6180: 68 65 20 6c 65 67 61 63 79 20 73 63 68 65 6d 61  he legacy schema
6190: 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66 61 75   format by defau
61a0: 6c 74 2e 20 20 54 68 65 20 6e 65 77 65 72 20 73  lt.  The newer s
61b0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 0a  chema format is.
61c0: 75 73 65 64 20 62 79 20 64 65 66 61 75 6c 74 20  used by default 
61d0: 69 6e 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 31  in version 3.7.1
61e0: 30 20 61 6e 64 20 6c 61 74 65 72 2e 0a 5e 54 68  0 and later..^Th
61f0: 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66  e [legacy_file_f
6200: 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20 63 61  ormat pragma] ca
6210: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 68 61  n be used to cha
6220: 6e 67 65 20 73 65 74 20 74 68 65 20 73 70 65 63  nge set the spec
6230: 69 66 69 63 0a 62 65 68 61 76 69 6f 72 20 66 6f  ific.behavior fo
6240: 72 20 61 6e 79 20 76 65 72 73 69 6f 6e 20 6f 66  r any version of
6250: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70   SQLite.</p>..<p
6260: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
6270: 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  ause optionally 
6280: 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20 63  following each c
6290: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e  olumn name defin
62a0: 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73  es a.collating s
62b0: 65 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72  equence used for
62c0: 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e   text entries in
62d0: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54   that column..^T
62e0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
62f0: 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73  ting.sequence is
6300: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
6310: 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20  equence defined 
6320: 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20  for that column 
6330: 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54  in the.[CREATE T
6340: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
6350: 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c    ^Or if no coll
6360: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
6370: 73 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 69  s otherwise defi
6380: 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69  ned,.the built-i
6390: 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  n BINARY collati
63a0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
63b0: 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  sed.</p>..<p>The
63c0: 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72  re are no arbitr
63d0: 61 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68  ary limits on th
63e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 69  e number of indi
63f0: 63 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a  ces that can be.
6400: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 73 69  attached to a si
6410: 6e 67 6c 65 20 74 61 62 6c 65 2e 20 20 5e 28 54  ngle table.  ^(T
6420: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
6430: 75 6d 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  umns in an index
6440: 20 69 73 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20   is .limited to 
6450: 74 68 65 20 76 61 6c 75 65 20 73 65 74 20 62 79  the value set by
6460: 0a 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d  .[sqlite3_limit]
6470: 28 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43  ([SQLITE_LIMIT_C
6480: 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f  OLUMN],...).)^</
6490: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
64a0: 6d 65 6e 74 20 75 6e 69 71 75 65 69 64 78 20 7b  ment uniqueidx {
64b0: 75 6e 69 71 75 65 20 69 6e 64 65 78 7d 3c 2f 74  unique index}</t
64c0: 63 6c 3e 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55  cl>.<p>^If the U
64d0: 4e 49 51 55 45 20 6b 65 79 77 6f 72 64 20 61 70  NIQUE keyword ap
64e0: 70 65 61 72 73 20 62 65 74 77 65 65 6e 20 43 52  pears between CR
64f0: 45 41 54 45 20 61 6e 64 20 49 4e 44 45 58 20 74  EATE and INDEX t
6500: 68 65 6e 20 64 75 70 6c 69 63 61 74 65 0a 69 6e  hen duplicate.in
6510: 64 65 78 20 65 6e 74 72 69 65 73 20 61 72 65 20  dex entries are 
6520: 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e 20 20 5e 41  not allowed.  ^A
6530: 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e  ny attempt to in
6540: 73 65 72 74 20 61 20 64 75 70 6c 69 63 61 74 65  sert a duplicate
6550: 20 65 6e 74 72 79 0a 77 69 6c 6c 20 72 65 73 75   entry.will resu
6560: 6c 74 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 20  lt in an error. 
6570: 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
6580: 65 73 20 6f 66 20 75 6e 69 71 75 65 20 69 6e 64  es of unique ind
6590: 69 63 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76  ices, all NULL v
65a0: 61 6c 75 65 73 0a 61 72 65 20 63 6f 6e 73 69 64  alues.are consid
65b0: 65 72 65 64 20 74 6f 20 64 69 66 66 65 72 65 6e  ered to differen
65c0: 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72  t from all other
65d0: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64   NULL values and
65e0: 20 61 72 65 20 74 68 75 73 20 75 6e 69 71 75 65   are thus unique
65f0: 2e 0a 54 68 69 73 20 69 73 20 6f 6e 65 20 6f 66  ..This is one of
6600: 20 74 68 65 20 74 77 6f 20 70 6f 73 73 69 62 6c   the two possibl
6610: 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
6620: 73 20 6f 66 20 74 68 65 20 53 51 4c 2d 39 32 20  s of the SQL-92 
6630: 73 74 61 6e 64 61 72 64 0a 28 74 68 65 20 6c 61  standard.(the la
6640: 6e 67 75 61 67 65 20 69 6e 20 74 68 65 20 73 74  nguage in the st
6650: 61 6e 64 61 72 64 20 69 73 20 61 6d 62 69 67 75  andard is ambigu
6660: 6f 75 73 29 20 61 6e 64 20 69 73 20 74 68 65 20  ous) and is the 
6670: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 0a 66  interpretation.f
6680: 6f 6c 6c 6f 77 65 64 20 62 79 20 50 6f 73 74 67  ollowed by Postg
6690: 72 65 53 51 4c 2c 20 4d 79 53 51 4c 2c 20 46 69  reSQL, MySQL, Fi
66a0: 72 65 62 69 72 64 2c 20 61 6e 64 20 4f 72 61 63  rebird, and Orac
66b0: 6c 65 2e 20 20 49 6e 66 6f 72 6d 69 78 20 61 6e  le.  Informix an
66c0: 64 0a 4d 69 63 72 6f 73 6f 66 74 20 53 51 4c 20  d.Microsoft SQL 
66d0: 53 65 72 76 65 72 20 66 6f 6c 6c 6f 77 20 74 68  Server follow th
66e0: 65 20 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65  e other interpre
66f0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74  tation of the st
6700: 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  andard.</p>..<p>
6710: 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  ^If the optional
6720: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63   IF NOT EXISTS c
6730: 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
6740: 20 61 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e 64   and another ind
6750: 65 78 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65  ex.with the same
6760: 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78   name already ex
6770: 69 73 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20  ists, then this 
6780: 63 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20  command becomes 
6790: 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70  a no-op.</p>..<p
67a0: 3e 5e 49 6e 64 65 78 65 73 20 61 72 65 20 72 65  >^Indexes are re
67b0: 6d 6f 76 65 64 20 77 69 74 68 20 74 68 65 20 5b  moved with the [
67c0: 44 52 4f 50 20 49 4e 44 45 58 5d 20 63 6f 6d 6d  DROP INDEX] comm
67d0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  and.</p>...<tcl>
67e0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
67f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
6830: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
6840: 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61  TABLE} {createta
6850: 62 6c 65 7d 20 7b 7b 43 52 45 41 54 45 20 54 41  ble} {{CREATE TA
6860: 42 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  BLE}}..BubbleDia
6870: 67 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c  gram create-tabl
6880: 65 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44  e-stmt 1.BubbleD
6890: 69 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65  iagram column-de
68a0: 66 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  f.BubbleDiagram 
68b0: 74 79 70 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65  type-name.Bubble
68c0: 44 69 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63  Diagram column-c
68d0: 6f 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65  onstraint.Bubble
68e0: 44 69 61 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f  Diagram table-co
68f0: 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44  nstraint.BubbleD
6900: 69 61 67 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b  iagram foreign-k
6910: 65 79 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  ey-clause.</tcl>
6920: 0a 0a 3c 70 3e 54 68 65 20 22 43 52 45 41 54 45  ..<p>The "CREATE
6930: 20 54 41 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20   TABLE" command 
6940: 69 73 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  is used to creat
6950: 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
6960: 20 61 6e 20 53 51 4c 69 74 65 20 0a 64 61 74 61   an SQLite .data
6970: 62 61 73 65 2e 20 41 20 43 52 45 41 54 45 20 54  base. A CREATE T
6980: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65  ABLE command spe
6990: 63 69 66 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f  cifies the follo
69a0: 77 69 6e 67 20 61 74 74 72 69 62 75 74 65 73 20  wing attributes 
69b0: 6f 66 20 74 68 65 0a 6e 65 77 20 74 61 62 6c 65  of the.new table
69c0: 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ul>.  <li><p
69d0: 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  >The name of the
69e0: 20 6e 65 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   new table...  <
69f0: 6c 69 3e 3c 70 3e 20 54 68 65 20 64 61 74 61 62  li><p> The datab
6a00: 61 73 65 20 69 6e 20 77 68 69 63 68 20 74 68 65  ase in which the
6a10: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63 72   new table is cr
6a20: 65 61 74 65 64 2e 20 54 61 62 6c 65 73 20 6d 61  eated. Tables ma
6a30: 79 20 62 65 20 0a 20 20 20 20 20 20 63 72 65 61  y be .      crea
6a40: 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ted in the main 
6a50: 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 65  database, the te
6a60: 6d 70 20 64 61 74 61 62 61 73 65 2c 20 6f 72 20  mp database, or 
6a70: 69 6e 20 61 6e 79 20 61 74 74 61 63 68 65 64 0a  in any attached.
6a80: 20 20 20 20 20 20 64 61 74 61 62 61 73 65 2e 0a        database..
6a90: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e  .  <li><p> The n
6aa0: 61 6d 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ame of each colu
6ab0: 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  mn in the table.
6ac0: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20  ..  <li><p> The 
6ad0: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66  declared type of
6ae0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
6af0: 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c  the table...  <l
6b00: 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74 20  i><p> A default 
6b10: 76 61 6c 75 65 20 6f 72 20 65 78 70 72 65 73 73  value or express
6b20: 69 6f 6e 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  ion for each col
6b30: 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65  umn in the table
6b40: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64  ...  <li><p> A d
6b50: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
6b60: 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65   sequence to use
6b70: 20 77 69 74 68 20 65 61 63 68 20 63 6f 6c 75 6d   with each colum
6b80: 6e 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70  n...  <li><p> Op
6b90: 74 69 6f 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d  tionally, a PRIM
6ba0: 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20  ARY KEY for the 
6bb0: 74 61 62 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67  table. Both sing
6bc0: 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20  le column and.  
6bd0: 20 20 20 20 20 63 6f 6d 70 6f 73 69 74 65 20 28       composite (
6be0: 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29  multiple column)
6bf0: 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 61 72   primary keys ar
6c00: 65 20 73 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20  e supported...  
6c10: 3c 6c 69 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66  <li><p> A set of
6c20: 20 53 51 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73   SQL constraints
6c30: 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 2e   for each table.
6c40: 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
6c50: 20 55 4e 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20   UNIQUE, NOT.   
6c60: 20 20 20 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20      NULL, CHECK 
6c70: 61 6e 64 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  and FOREIGN KEY 
6c80: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 3c 2f 75  constraints..</u
6c90: 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 43 52 45  l>..<p>Every CRE
6ca0: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
6cb0: 65 6e 74 20 6d 75 73 74 20 73 70 65 63 69 66 79  ent must specify
6cc0: 20 61 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20   a name for the 
6cd0: 6e 65 77 20 74 61 62 6c 65 2e 0a 20 20 5e 28 54  new table..  ^(T
6ce0: 61 62 6c 65 20 6e 61 6d 65 73 20 74 68 61 74 20  able names that 
6cf0: 62 65 67 69 6e 20 77 69 74 68 20 22 73 71 6c 69  begin with "sqli
6d00: 74 65 5f 22 20 61 72 65 20 72 65 73 65 72 76 65  te_" are reserve
6d10: 64 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75  d for internal u
6d20: 73 65 2e 20 49 74 0a 20 20 69 73 20 61 6e 20 65  se. It.  is an e
6d30: 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20  rror to attempt 
6d40: 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c  to create a tabl
6d50: 65 20 77 69 74 68 20 61 20 6e 61 6d 65 20 74 68  e with a name th
6d60: 61 74 20 73 74 61 72 74 73 20 77 69 74 68 0a 20  at starts with. 
6d70: 20 22 73 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a 3c   "sqlite_".)^..<
6d80: 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74  p> ^If a &lt;dat
6d90: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
6da0: 73 20 73 70 65 63 69 66 69 65 64 2c 20 69 74 20  s specified, it 
6db0: 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 22  must be either "
6dc0: 6d 61 69 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22  main", .  "temp"
6dd0: 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66  , or the name of
6de0: 20 61 6e 20 5b 41 54 54 41 43 48 20 44 41 54 41   an [ATTACH DATA
6df0: 42 41 53 45 7c 61 74 74 61 63 68 65 64 20 64 61  BASE|attached da
6e00: 74 61 62 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69  tabase]. ^In thi
6e10: 73 20 63 61 73 65 0a 20 20 74 68 65 20 6e 65 77  s case.  the new
6e20: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
6e30: 64 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 64  d in the named d
6e40: 61 74 61 62 61 73 65 2e 20 5e 49 66 20 74 68 65  atabase. ^If the
6e50: 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50   "TEMP" or "TEMP
6e60: 4f 52 41 52 59 22 0a 20 20 6b 65 79 77 6f 72 64  ORARY".  keyword
6e70: 20 6f 63 63 75 72 73 20 62 65 74 77 65 65 6e 20   occurs between 
6e80: 74 68 65 20 22 43 52 45 41 54 45 22 20 61 6e 64  the "CREATE" and
6e90: 20 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74 68   "TABLE" then th
6ea0: 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 0a 20  e new table is. 
6eb0: 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20   created in the 
6ec0: 74 65 6d 70 20 64 61 74 61 62 61 73 65 2e 20 5e  temp database. ^
6ed0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
6ee0: 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61  o specify both a
6ef0: 20 0a 20 20 26 6c 74 3b 64 61 74 61 62 61 73 65   .  &lt;database
6f00: 2d 6e 61 6d 65 26 67 74 3b 20 61 6e 64 20 74 68  -name&gt; and th
6f10: 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52  e TEMP or TEMPOR
6f20: 41 52 59 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c  ARY keyword, unl
6f30: 65 73 73 20 74 68 65 0a 20 20 26 6c 74 3b 64 61  ess the.  &lt;da
6f40: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
6f50: 69 73 20 22 74 65 6d 70 22 2e 20 5e 49 66 20 6e  is "temp". ^If n
6f60: 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  o database name 
6f70: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 64  is specified and
6f80: 20 74 68 65 0a 20 20 54 45 4d 50 20 6b 65 79 77   the.  TEMP keyw
6f90: 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65  ord is not prese
6fa0: 6e 74 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  nt then the tabl
6fb0: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  e is created in 
6fc0: 74 68 65 20 6d 61 69 6e 0a 20 20 64 61 74 61 62  the main.  datab
6fd0: 61 73 65 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20  ase...<p>.  ^It 
6fe0: 69 73 20 75 73 75 61 6c 6c 79 20 61 6e 20 65 72  is usually an er
6ff0: 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74  ror to attempt t
7000: 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74  o create a new t
7010: 61 62 6c 65 20 69 6e 20 61 20 64 61 74 61 62 61  able in a databa
7020: 73 65 20 74 68 61 74 0a 20 20 61 6c 72 65 61 64  se that.  alread
7030: 79 20 63 6f 6e 74 61 69 6e 73 20 61 20 74 61 62  y contains a tab
7040: 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20 76 69 65  le, index or vie
7050: 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61  w of the same na
7060: 6d 65 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  me. ^However, if
7070: 20 74 68 65 0a 20 20 22 49 46 20 4e 4f 54 20 45   the.  "IF NOT E
7080: 58 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73  XISTS" clause is
7090: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
70a0: 72 74 20 6f 66 20 74 68 65 20 43 52 45 41 54 45  rt of the CREATE
70b0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
70c0: 20 61 6e 64 0a 20 20 61 20 74 61 62 6c 65 20 6f   and.  a table o
70d0: 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61  r view of the sa
70e0: 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20  me name already 
70f0: 65 78 69 73 74 73 2c 20 74 68 65 20 43 52 45 41  exists, the CREA
7100: 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  TE TABLE command
7110: 0a 20 20 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f  .  simply has no
7120: 20 65 66 66 65 63 74 20 28 61 6e 64 20 6e 6f 20   effect (and no 
7130: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73  error message is
7140: 20 72 65 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20   returned). ^An 
7150: 65 72 72 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20  error is still. 
7160: 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
7170: 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65   table cannot be
7180: 20 63 72 65 61 74 65 64 20 62 65 63 61 75 73 65   created because
7190: 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   of an existing 
71a0: 69 6e 64 65 78 2c 20 65 76 65 6e 20 0a 20 20 69  index, even .  i
71b0: 66 20 74 68 65 20 22 49 46 20 4e 4f 54 20 45 58  f the "IF NOT EX
71c0: 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73 20  ISTS" clause is 
71d0: 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e  specified...<p>^
71e0: 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72  It is not an err
71f0: 6f 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 74  or to create a t
7200: 61 62 6c 65 20 74 68 61 74 20 68 61 73 20 74 68  able that has th
7210: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
7220: 6e 20 0a 20 20 65 78 69 73 74 69 6e 67 20 5b 43  n .  existing [C
7230: 52 45 41 54 45 20 54 52 49 47 47 45 52 7c 74 72  REATE TRIGGER|tr
7240: 69 67 67 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62  igger]...<p>^Tab
7250: 6c 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  les are removed 
7260: 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20  using the [DROP 
7270: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
7280: 2e 20 20 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 52 45  .  </p>..<h3>CRE
7290: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
72a0: 20 53 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e   SELECT Statemen
72b0: 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  ts</h3>..<p>^(A 
72c0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  "CREATE TABLE ..
72d0: 2e 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61  . AS SELECT" sta
72e0: 74 65 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61  tement creates a
72f0: 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64  nd populates a d
7300: 61 74 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61  atabase.table ba
7310: 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  sed on the resul
7320: 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  ts of a SELECT s
7330: 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68  tatement.)^ ^(Th
7340: 65 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20  e table has the 
7350: 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63  same.number of c
7360: 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f  olumns as the ro
7370: 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ws returned by t
7380: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
7390: 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66  ent. The name of
73a0: 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20  .each column is 
73b0: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
73c0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72  name of the corr
73d0: 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e  esponding column
73e0: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73   in the result.s
73f0: 65 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et of the SELECT
7400: 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28   statement.)^ ^(
7410: 54 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  The declared typ
7420: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
7430: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62   is determined.b
7440: 79 20 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f  y the [expressio
7450: 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74  n affinity] of t
7460: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
7470: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
7480: 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66  he result set.of
7490: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
74a0: 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77  ement, as follow
74b0: 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  s:.</p>..<center
74c0: 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  ><table border=1
74d0: 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72  >.  <tr><th>Expr
74e0: 65 73 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20  ession Affinity 
74f0: 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63    <th>Column Dec
7500: 6c 61 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72  lared Type.  <tr
7510: 3e 3c 74 64 3e 54 45 58 54 20 20 20 20 20 20 20  ><td>TEXT       
7520: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
7530: 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e  TEXT".  <tr><td>
7540: 4e 55 4d 45 52 49 43 20 20 20 20 20 20 20 20 20  NUMERIC         
7550: 20 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a        <td>"NUM".
7560: 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45    <tr><td>INTEGE
7570: 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  R               
7580: 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e  <td>"INT".  <tr>
7590: 3c 74 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20  <td>REAL        
75a0: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52            <td>"R
75b0: 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e  EAL".  <tr><td>N
75c0: 4f 4e 45 20 20 20 20 20 20 20 20 20 20 20 20 20  ONE             
75d0: 20 20 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70       <td>"" (emp
75e0: 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62  ty string).</tab
75f0: 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  le></center>)^..
7600: 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65  <p>^(A table cre
7610: 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
7620: 45 20 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e  E TABLE AS has n
7630: 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  o PRIMARY KEY an
7640: 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73  d no.constraints
7650: 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68   of any kind. Th
7660: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
7670: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
7680: 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61  s NULL. The defa
7690: 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult.collation se
76a0: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
76b0: 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65  column of the ne
76c0: 77 20 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52  w table is BINAR
76d0: 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  Y.)^..<p>^Tables
76e0: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   created using C
76f0: 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 61  REATE TABLE AS a
7700: 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70  re initially pop
7710: 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 0a  ulated with the.
7720: 72 6f 77 73 20 6f 66 20 64 61 74 61 20 72 65 74  rows of data ret
7730: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
7740: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
7750: 52 6f 77 73 20 61 72 65 20 61 73 73 69 67 6e 65  Rows are assigne
7760: 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61  d contiguously.a
7770: 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d  scending [rowid]
7780: 20 76 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e   values, startin
7790: 67 20 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65  g with 1, in the
77a0: 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72   [order by|order
77b0: 5d 20 74 68 61 74 20 74 68 65 79 0a 61 72 65 20  ] that they.are 
77c0: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
77d0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
77e0: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
77f0: 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66  ent {tablecoldef
7800: 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  } {column defini
7810: 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65  tion} {column de
7820: 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e  finitions}</tcl>
7830: 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69  .<h3>Column Defi
7840: 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  nitions</h3>..<p
7850: 3e 55 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20  >Unless it is a 
7860: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
7870: 20 41 53 20 53 45 4c 45 43 54 20 73 74 61 74 65   AS SELECT state
7880: 6d 65 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54  ment, a CREATE T
7890: 41 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e  ABLE includes.on
78a0: 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d  e or more [colum
78b0: 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66  n-def|column def
78c0: 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f  initions], optio
78d0: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
78e0: 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62  y a list of.[tab
78f0: 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61  le-constraint|ta
7900: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  ble constraints]
7910: 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64  .  Each column d
7920: 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73  efinition consis
7930: 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f  ts of the.name o
7940: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70  f the column, op
7950: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
7960: 64 20 62 79 20 74 68 65 20 64 65 63 6c 61 72 65  d by the declare
7970: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  d type of the co
7980: 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f  lumn,.then one o
7990: 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20  r more optional 
79a0: 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69  [column-constrai
79b0: 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72  nt|column constr
79c0: 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64  aints]. Included
79d0: 20 69 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69   in.the definiti
79e0: 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f  on of "column co
79f0: 6e 73 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74  nstraints" for t
7a00: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
7a10: 68 65 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74  he previous.stat
7a20: 65 6d 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f  ement are the CO
7a30: 4c 4c 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c  LLATE and DEFAUL
7a40: 54 20 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20  T clauses, even 
7a50: 74 68 6f 75 67 68 20 74 68 65 73 65 20 61 72 65  though these are
7a60: 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73   not really.cons
7a70: 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73  traints in the s
7a80: 65 6e 73 65 20 74 68 61 74 20 74 68 65 79 20 64  ense that they d
7a90: 6f 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74  o not restrict t
7aa0: 68 65 20 64 61 74 61 20 74 68 61 74 20 74 68 65  he data that the
7ab0: 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61   table may.conta
7ac0: 69 6e 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f  in. The other co
7ad0: 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20  nstraints - NOT 
7ae0: 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49  NULL, CHECK, UNI
7af0: 51 55 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  QUE, PRIMARY KEY
7b00: 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59   and.FOREIGN KEY
7b10: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69   constraints - i
7b20: 6d 70 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f  mpose restrictio
7b30: 6e 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73  ns on the tables
7b40: 20 64 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61   data, and are a
7b50: 72 65 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64  re.described und
7b60: 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c  er [constraints|
7b70: 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61  SQL Data Constra
7b80: 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70  ints] below...<p
7b90: 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51  >^Unlike most SQ
7ba0: 4c 20 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c  L databases, SQL
7bb0: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ite does not res
7bc0: 74 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f  trict the type o
7bd0: 66 20 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20  f data that.may 
7be0: 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  be inserted into
7bf0: 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20   a column based 
7c00: 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64  on the columns d
7c10: 65 63 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e  eclared type. In
7c20: 73 74 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73  stead,.SQLite us
7c30: 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69  es [dynamic typi
7c40: 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72  ng]. ^The declar
7c50: 65 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c  ed type of a col
7c60: 75 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64  umn is used to.d
7c70: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66  etermine the [af
7c80: 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
7c90: 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 70 3e  olumn only...<p>
7ca0: 54 68 65 20 44 45 46 41 55 4c 54 20 63 6c 61 75  The DEFAULT clau
7cb0: 73 65 20 73 70 65 63 69 66 69 65 73 20 61 20 64  se specifies a d
7cc0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 74 6f 20  efault value to 
7cd0: 75 73 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  use for the colu
7ce0: 6d 6e 20 69 66 20 6e 6f 0a 76 61 6c 75 65 20 69  mn if no.value i
7cf0: 73 20 65 78 70 6c 69 63 69 74 6c 79 20 70 72 6f  s explicitly pro
7d00: 76 69 64 65 64 20 62 79 20 74 68 65 20 75 73 65  vided by the use
7d10: 72 20 77 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20  r when doing an 
7d20: 5b 49 4e 53 45 52 54 5d 2e 20 5e 49 66 20 74 68  [INSERT]. ^If th
7d30: 65 72 65 0a 69 73 20 6e 6f 20 65 78 70 6c 69 63  ere.is no explic
7d40: 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73  it DEFAULT claus
7d50: 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  e attached to a 
7d60: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
7d70: 6e 2c 20 74 68 65 6e 20 74 68 65 20 0a 64 65 66  n, then the .def
7d80: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
7d90: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c  e column is NULL
7da0: 2e 20 5e 28 41 6e 20 65 78 70 6c 69 63 69 74 20  . ^(An explicit 
7db0: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 6d  DEFAULT clause m
7dc0: 61 79 20 73 70 65 63 69 66 79 0a 74 68 61 74 20  ay specify.that 
7dd0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
7de0: 65 20 69 73 20 4e 55 4c 4c 2c 20 61 20 73 74 72  e is NULL, a str
7df0: 69 6e 67 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20  ing constant, a 
7e00: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2c 20 61  blob constant, a
7e10: 0a 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 2c 20  .signed-number, 
7e20: 6f 72 20 61 6e 79 20 63 6f 6e 73 74 61 6e 74 20  or any constant 
7e30: 65 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6c 6f  expression enclo
7e40: 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73  sed in parenthes
7e50: 65 73 2e 20 41 6e 20 65 78 70 6c 69 63 69 74 0a  es. An explicit.
7e60: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6d 61  default value ma
7e70: 79 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66  y also be one of
7e80: 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73   the special cas
7e90: 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65  e-independent ke
7ea0: 79 77 6f 72 64 73 0a 43 55 52 52 45 4e 54 5f 54  ywords.CURRENT_T
7eb0: 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54  IME, CURRENT_DAT
7ec0: 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d  E or CURRENT_TIM
7ed0: 45 53 54 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74  ESTAMP.)^ ^For t
7ee0: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
7ef0: 68 65 0a 44 45 46 41 55 4c 54 20 63 6c 61 75 73  he.DEFAULT claus
7f00: 65 2c 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  e, an expression
7f10: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 63   is considered c
7f20: 6f 6e 73 74 61 6e 74 20 70 72 6f 76 69 64 65 64  onstant provided
7f30: 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 6e 6f   that it does.no
7f40: 74 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20 73 75  t contain any su
7f50: 62 2d 71 75 65 72 69 65 73 20 6f 72 20 73 74 72  b-queries or str
7f60: 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 20 65 6e  ing constants en
7f70: 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62 6c 65  closed in double
7f80: 20 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45   quotes...<p>^(E
7f90: 61 63 68 20 74 69 6d 65 20 61 20 72 6f 77 20 69  ach time a row i
7fa0: 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
7fb0: 74 68 65 20 74 61 62 6c 65 20 62 79 20 61 6e 20  the table by an 
7fc0: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
7fd0: 20 74 68 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20   that .does not 
7fe0: 70 72 6f 76 69 64 65 20 65 78 70 6c 69 63 69 74  provide explicit
7ff0: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
8000: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68  table columns th
8010: 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20  e values stored 
8020: 69 6e 0a 74 68 65 20 6e 65 77 20 72 6f 77 20 61  in.the new row a
8030: 72 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  re determined by
8040: 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76   their default v
8050: 61 6c 75 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c  alues)^, as foll
8060: 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  ows:..<ul>.  <li
8070: 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61  ><p>^If the defa
8080: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ult value of the
8090: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e   column is a con
80a0: 73 74 61 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74  stant NULL, text
80b0: 2c 20 62 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69  , blob or.    si
80c0: 67 6e 65 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75  gned-number valu
80d0: 65 2c 20 74 68 65 6e 20 74 68 61 74 20 76 61 6c  e, then that val
80e0: 75 65 20 69 73 20 75 73 65 64 20 64 69 72 65 63  ue is used direc
80f0: 74 6c 79 20 69 6e 20 74 68 65 20 6e 65 77 20 72  tly in the new r
8100: 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49  ow...  <li><p>^I
8110: 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  f the default va
8120: 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  lue of a column 
8130: 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
8140: 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2c   in parentheses,
8150: 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20 65 78   then.    the ex
8160: 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
8170: 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65  uated once for e
8180: 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64  ach row inserted
8190: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 73   and the results
81a0: 0a 20 20 20 20 75 73 65 64 20 69 6e 20 74 68 65  .    used in the
81b0: 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69   new row...  <li
81c0: 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61  ><p>^If the defa
81d0: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63  ult value of a c
81e0: 6f 6c 75 6d 6e 20 69 73 20 43 55 52 52 45 4e 54  olumn is CURRENT
81f0: 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44  _TIME, CURRENT_D
8200: 41 54 45 20 6f 72 0a 20 20 20 20 43 55 52 52 45  ATE or.    CURRE
8210: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68  NT_TIMESTAMP, th
8220: 65 6e 20 74 68 65 20 76 61 6c 75 65 20 75 73 65  en the value use
8230: 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  d in the new row
8240: 20 69 73 20 61 20 74 65 78 74 0a 20 20 20 20 72   is a text.    r
8250: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
8260: 20 74 68 65 20 63 75 72 72 65 6e 74 20 55 54 43   the current UTC
8270: 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d   date and/or tim
8280: 65 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f  e. ^For CURRENT_
8290: 54 49 4d 45 2c 20 74 68 65 0a 20 20 20 20 66 6f  TIME, the.    fo
82a0: 72 6d 61 74 20 6f 66 20 74 68 65 20 76 61 6c 75  rmat of the valu
82b0: 65 20 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e  e is "HH:MM:SS".
82c0: 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 44 41   ^For CURRENT_DA
82d0: 54 45 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22  TE, "YYYY-MM-DD"
82e0: 2e 20 5e 54 68 65 0a 20 20 20 20 66 6f 72 6d 61  . ^The.    forma
82f0: 74 20 66 6f 72 20 43 55 52 52 45 4e 54 5f 54 49  t for CURRENT_TI
8300: 4d 45 53 54 41 4d 50 20 69 73 20 22 59 59 59 59  MESTAMP is "YYYY
8310: 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22  -MM-DD HH:MM:SS"
8320: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  ..</ul>..<p>^The
8330: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
8340: 73 70 65 63 69 66 69 65 73 20 74 68 65 20 6e 61  specifies the na
8350: 6d 65 20 6f 66 20 61 20 5b 63 6f 6c 6c 61 74 69  me of a [collati
8360: 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f 20  ng sequence] to 
8370: 75 73 65 20 61 73 0a 74 68 65 20 64 65 66 61 75  use as.the defau
8380: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
8390: 75 65 6e 63 65 20 66 6f 72 20 74 68 65 20 63 6f  uence for the co
83a0: 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c  lumn. ^If no COL
83b0: 4c 41 54 45 20 63 6c 61 75 73 65 20 69 73 0a 73  LATE clause is.s
83c0: 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 65  pecified, the de
83d0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
83e0: 73 65 71 75 65 6e 63 65 20 69 73 20 5b 42 49 4e  sequence is [BIN
83f0: 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e  ARY]...<p>^The n
8400: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
8410: 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c   in a table is l
8420: 69 6d 69 74 65 64 20 62 79 20 74 68 65 20 5b 53  imited by the [S
8430: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
8440: 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70  ].compile-time p
8450: 61 72 61 6d 65 74 65 72 2e 20 5e 41 20 73 69 6e  arameter. ^A sin
8460: 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62  gle row of a tab
8470: 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20  le cannot store 
8480: 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54  more than.[SQLIT
8490: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79  E_MAX_LENGTH] by
84a0: 74 65 73 20 6f 66 20 64 61 74 61 2e 20 5e 42 6f  tes of data. ^Bo
84b0: 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69  th of these limi
84c0: 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65  ts can be lowere
84d0: 64 20 61 74 0a 72 75 6e 74 69 6d 65 20 75 73 69  d at.runtime usi
84e0: 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
84f0: 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69  limit()] C/C++ i
8500: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
8510: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
8520: 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 20 7b 63  {constraints} {c
8530: 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c  onstraints}</tcl
8540: 3e 0a 3c 68 33 3e 53 51 4c 20 44 61 74 61 20 43  >.<h3>SQL Data C
8550: 6f 6e 73 74 72 61 69 6e 74 73 3c 2f 68 33 3e 0a  onstraints</h3>.
8560: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
8570: 74 20 70 72 69 6d 6b 65 79 63 6f 6e 73 74 20 7b  t primkeyconst {
8580: 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 7b 50 52  PRIMARY KEY} {PR
8590: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72  IMARY KEY constr
85a0: 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  aint}</tcl>.<p>^
85b0: 45 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53 51  Each table in SQ
85c0: 4c 69 74 65 20 6d 61 79 20 68 61 76 65 20 61 74  Lite may have at
85d0: 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52 49   most one <b>PRI
85e0: 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e 49  MARY KEY</b>. ^I
85f0: 66 20 74 68 65 0a 20 20 6b 65 79 77 6f 72 64 73  f the.  keywords
8600: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72 65   PRIMARY KEY are
8610: 20 61 64 64 65 64 20 74 6f 20 61 20 63 6f 6c 75   added to a colu
8620: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74  mn definition, t
8630: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
8640: 6b 65 79 0a 20 20 66 6f 72 20 74 68 65 20 74 61  key.  for the ta
8650: 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ble consists of 
8660: 74 68 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c 75  that single colu
8670: 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50 52  mn. ^Or, if a PR
8680: 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65  IMARY KEY clause
8690: 20 0a 20 20 69 73 20 73 70 65 63 69 66 69 65 64   .  is specified
86a0: 20 61 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f 6e   as a [table-con
86b0: 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20 74  straint], then t
86c0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  he primary key o
86d0: 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 63 6f  f the table.  co
86e0: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c 69  nsists of the li
86f0: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 70  st of columns sp
8700: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
8710: 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  of the PRIMARY K
8720: 45 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e 49 66  EY clause..  ^If
8730: 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74   there is more t
8740: 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20  han one PRIMARY 
8750: 4b 45 59 20 63 6c 61 75 73 65 20 69 6e 20 61 20  KEY clause in a 
8760: 73 69 6e 67 6c 65 20 43 52 45 41 54 45 20 54 41  single CREATE TA
8770: 42 4c 45 0a 20 20 73 74 61 74 65 6d 65 6e 74 2c  BLE.  statement,
8780: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e   it is an error.
8790: 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20  ..<p>If a table 
87a0: 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  has a single col
87b0: 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 2c  umn primary key,
87c0: 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65   and the declare
87d0: 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20  d type of that. 
87e0: 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45   column is "INTE
87f0: 47 45 52 22 2c 20 74 68 65 6e 20 74 68 65 20 63  GER", then the c
8800: 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61  olumn is known a
8810: 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52  s an [INTEGER PR
8820: 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65  IMARY KEY]..  Se
8830: 65 20 62 65 6c 6f 77 20 66 6f 72 20 61 20 64 65  e below for a de
8840: 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65  scription of the
8850: 20 73 70 65 63 69 61 6c 20 70 72 6f 70 65 72 74   special propert
8860: 69 65 73 20 61 6e 64 20 62 65 68 61 76 69 6f 72  ies and behavior
8870: 73 0a 20 20 61 73 73 6f 63 69 61 74 65 64 20 77  s.  associated w
8880: 69 74 68 20 61 6e 20 5b 49 4e 54 45 47 45 52 20  ith an [INTEGER 
8890: 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c  PRIMARY KEY]...<
88a0: 70 3e 5e 45 61 63 68 20 72 6f 77 20 69 6e 20 61  p>^Each row in a
88b0: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 70 72   table with a pr
88c0: 69 6d 61 72 79 20 6b 65 79 20 6d 75 73 74 20 66  imary key must f
88d0: 65 61 74 75 72 65 20 61 20 75 6e 69 71 75 65 20  eature a unique 
88e0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66  combination.  of
88f0: 20 76 61 6c 75 65 73 20 69 6e 20 69 74 73 20 70   values in its p
8900: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
8910: 6e 73 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72  ns. ^For the pur
8920: 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69  poses of determi
8930: 6e 69 6e 67 0a 20 20 74 68 65 20 75 6e 69 71 75  ning.  the uniqu
8940: 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61 72 79  eness of primary
8950: 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e 55 4c   key values, NUL
8960: 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
8970: 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63 74  sidered distinct
8980: 20 66 72 6f 6d 0a 20 20 61 6c 6c 20 6f 74 68 65   from.  all othe
8990: 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64  r values, includ
89a0: 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e  ing other NULLs.
89b0: 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d   ^If an [INSERT]
89c0: 20 6f 72 20 5b 55 50 44 41 54 45 5d 0a 20 20 73   or [UPDATE].  s
89d0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
89e0: 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20  s to modify the 
89f0: 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20 73 6f  table content so
8a00: 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72   that two or mor
8a10: 65 20 72 6f 77 73 0a 20 20 66 65 61 74 75 72 65  e rows.  feature
8a20: 20 69 64 65 6e 74 69 63 61 6c 20 70 72 69 6d 61   identical prima
8a30: 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 69  ry key values, i
8a40: 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61 69 6e  t is a constrain
8a50: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 41  t violation..  A
8a60: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
8a70: 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20 50 52  SQL standard, PR
8a80: 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75 6c 64  IMARY KEY should
8a90: 20 61 6c 77 61 79 73 20 69 6d 70 6c 79 20 4e 4f   always imply NO
8aa0: 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74  T NULL..  Unfort
8ab0: 75 6e 61 74 65 6c 79 2c 20 64 75 65 20 74 6f 20  unately, due to 
8ac0: 61 20 6c 6f 6e 67 2d 73 74 61 6e 64 69 6e 67 20  a long-standing 
8ad0: 63 6f 64 69 6e 67 20 6f 76 65 72 73 69 67 68 74  coding oversight
8ae0: 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 74 68  , this is not th
8af0: 65 0a 20 20 63 61 73 65 20 69 6e 20 53 51 4c 69  e.  case in SQLi
8b00: 74 65 2e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20  te. ^Unless the 
8b10: 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 5b 49 4e  column is an [IN
8b20: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
8b30: 59 5d 20 53 51 4c 69 74 65 0a 20 20 61 6c 6c 6f  Y] SQLite.  allo
8b40: 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  ws NULL values i
8b50: 6e 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  n a PRIMARY KEY 
8b60: 63 6f 6c 75 6d 6e 2e 20 20 57 65 20 63 6f 75 6c  column.  We coul
8b70: 64 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20  d change SQLite 
8b80: 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74 6f 20  to.  conform to 
8b90: 74 68 65 20 73 74 61 6e 64 61 72 64 20 28 61 6e  the standard (an
8ba0: 64 20 77 65 20 6d 69 67 68 74 20 64 6f 20 73 6f  d we might do so
8bb0: 20 69 6e 20 74 68 65 20 66 75 74 75 72 65 29 2c   in the future),
8bc0: 20 62 75 74 20 62 79 20 74 68 65 20 74 69 6d 65   but by the time
8bd0: 0a 20 20 74 68 65 20 6f 76 65 72 73 69 67 68 74  .  the oversight
8be0: 20 77 61 73 20 64 69 73 63 6f 76 65 72 65 64 2c   was discovered,
8bf0: 20 53 51 4c 69 74 65 20 77 61 73 20 69 6e 20 73   SQLite was in s
8c00: 75 63 68 20 77 69 64 65 20 75 73 65 20 74 68 61  uch wide use tha
8c10: 74 20 77 65 20 66 65 61 72 65 64 0a 20 20 62 72  t we feared.  br
8c20: 65 61 6b 69 6e 67 20 6c 65 67 61 63 79 20 63 6f  eaking legacy co
8c30: 64 65 20 69 66 20 77 65 20 66 69 78 65 64 20 74  de if we fixed t
8c40: 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20 53 6f 20  he problem.  So 
8c50: 66 6f 72 20 6e 6f 77 20 77 65 20 68 61 76 65 20  for now we have 
8c60: 63 68 6f 73 65 6e 20 74 6f 0a 20 20 63 6f 6e 74  chosen to.  cont
8c70: 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20 4e 55  inue allowing NU
8c80: 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52 59 20 4b  LLs in PRIMARY K
8c90: 45 59 20 63 6f 6c 75 6d 6e 73 2e 20 20 44 65 76  EY columns.  Dev
8ca0: 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 62  elopers should b
8cb0: 65 0a 20 20 61 77 61 72 65 2c 20 68 6f 77 65 76  e.  aware, howev
8cc0: 65 72 2c 20 74 68 61 74 20 77 65 20 6d 61 79 20  er, that we may 
8cd0: 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f  change SQLite to
8ce0: 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20   conform to the 
8cf0: 53 51 4c 20 73 74 61 6e 64 61 72 64 20 69 6e 0a  SQL standard in.
8d00: 20 20 66 75 74 75 72 65 20 61 6e 64 20 73 68 6f    future and sho
8d10: 75 6c 64 20 64 65 73 69 67 6e 20 6e 65 77 20 70  uld design new p
8d20: 72 6f 67 72 61 6d 73 20 61 63 63 6f 72 64 69 6e  rograms accordin
8d30: 67 6c 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  gly...<tcl>hd_fr
8d40: 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e  agment uniquecon
8d50: 73 74 20 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69  st {UNIQUE} {uni
8d60: 71 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c  que constraint}<
8d70: 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55  /tcl>.<p>^A <b>U
8d80: 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72  NIQUE</b> constr
8d90: 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72 20  aint is similar 
8da0: 74 6f 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  to a PRIMARY KEY
8db0: 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78 63   constraint, exc
8dc0: 65 70 74 0a 20 20 74 68 61 74 20 61 20 73 69 6e  ept.  that a sin
8dd0: 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61  gle table may ha
8de0: 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66  ve any number of
8df0: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
8e00: 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20  nts. ^For each. 
8e10: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
8e20: 6e 74 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c  nt on the table,
8e30: 20 65 61 63 68 20 72 6f 77 20 6d 75 73 74 20 66   each row must f
8e40: 65 61 74 75 72 65 20 61 20 75 6e 69 71 75 65 20  eature a unique 
8e50: 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66  combination.  of
8e60: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63   values in the c
8e70: 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65  olumns identifie
8e80: 64 20 62 79 20 74 68 65 20 55 4e 49 51 55 45 20  d by the UNIQUE 
8e90: 63 6f 6e 73 74 72 61 69 6e 74 2e 20 5e 41 73 20  constraint. ^As 
8ea0: 77 69 74 68 0a 20 20 50 52 49 4d 41 52 59 20 4b  with.  PRIMARY K
8eb0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  EY constraints, 
8ec0: 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
8ed0: 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74   of UNIQUE const
8ee0: 72 61 69 6e 74 73 20 4e 55 4c 4c 20 76 61 6c 75  raints NULL valu
8ef0: 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69 64 65  es.  are conside
8f00: 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f  red distinct fro
8f10: 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  m all other valu
8f20: 65 73 20 28 69 6e 63 6c 75 64 69 6e 67 20 6f 74  es (including ot
8f30: 68 65 72 20 4e 55 4c 4c 73 29 2e 0a 20 20 5e 49  her NULLs)..  ^I
8f40: 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72  f an [INSERT] or
8f50: 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d   [UPDATE] statem
8f60: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
8f70: 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65  modify the table
8f80: 20 63 6f 6e 74 65 6e 74 20 73 6f 0a 20 20 74 68   content so.  th
8f90: 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72  at two or more r
8fa0: 6f 77 73 20 66 65 61 74 75 72 65 20 69 64 65 6e  ows feature iden
8fb0: 74 69 63 61 6c 20 76 61 6c 75 65 73 20 69 6e 20  tical values in 
8fc0: 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d 6e 73  a set of columns
8fd0: 20 74 68 61 74 0a 20 20 61 72 65 20 73 75 62 6a   that.  are subj
8fe0: 65 63 74 20 74 6f 20 61 20 55 4e 49 51 55 45 20  ect to a UNIQUE 
8ff0: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74 20 69  constraint, it i
9000: 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  s a constraint v
9010: 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 5b  iolation...<p>^[
9020: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9030: 4b 45 59 5d 20 63 6f 6c 75 6d 6e 73 20 61 73 69  KEY] columns asi
9040: 64 65 2c 20 62 6f 74 68 20 55 4e 49 51 55 45 20  de, both UNIQUE 
9050: 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 0a  and PRIMARY KEY.
9060: 20 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72    constraints ar
9070: 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  e implemented by
9080: 20 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64   creating an ind
9090: 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ex in the databa
90a0: 73 65 20 28 69 6e 20 74 68 65 20 73 61 6d 65 0a  se (in the same.
90b0: 20 20 77 61 79 20 61 73 20 61 20 5b 43 52 45 41    way as a [CREA
90c0: 54 45 20 49 4e 44 45 58 7c 22 43 52 45 41 54 45  TE INDEX|"CREATE
90d0: 20 55 4e 49 51 55 45 20 49 4e 44 45 58 22 5d 20   UNIQUE INDEX"] 
90e0: 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 29  statement would)
90f0: 2e 20 5e 53 75 63 68 20 61 6e 20 0a 20 20 69 6e  . ^Such an .  in
9100: 64 65 78 20 69 73 20 75 73 65 64 20 6c 69 6b 65  dex is used like
9110: 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 64 65 78   any other index
9120: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
9130: 20 74 6f 20 5b 6f 70 74 69 6d 69 7a 65 72 7c 6f   to [optimizer|o
9140: 70 74 69 6d 69 7a 65 0a 20 20 71 75 65 72 69 65  ptimize.  querie
9150: 73 5d 2e 20 20 41 73 20 61 20 72 65 73 75 6c 74  s].  As a result
9160: 2c 20 74 68 65 72 65 20 6f 66 74 65 6e 20 6e 6f  , there often no
9170: 20 61 64 76 61 6e 74 61 67 65 20 28 62 75 74 20   advantage (but 
9180: 73 69 67 6e 69 66 69 63 61 6e 74 20 6f 76 65 72  significant over
9190: 68 65 61 64 29 0a 20 20 69 6e 20 63 72 65 61 74  head).  in creat
91a0: 69 6e 67 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20  ing an index on 
91b0: 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d 6e 73  a set of columns
91c0: 20 74 68 61 74 20 61 72 65 20 61 6c 72 65 61 64   that are alread
91d0: 79 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 0a 20  y collectively. 
91e0: 20 73 75 62 6a 65 63 74 20 74 6f 20 61 20 55 4e   subject to a UN
91f0: 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52 59 20  IQUE or PRIMARY 
9200: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a  KEY constraint..
9210: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9220: 74 20 7b 63 6b 63 6f 6e 73 74 7d 20 7b 43 48 45  t {ckconst} {CHE
9230: 43 4b 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74  CK} {CHECK const
9240: 72 61 69 6e 74 7d 20 7b 43 48 45 43 4b 20 63 6f  raint} {CHECK co
9250: 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e  nstraints}</tcl>
9260: 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48 45 43 4b  .<p>^(A <b>CHECK
9270: 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20  </b> constraint 
9280: 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64 20  may be attached 
9290: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
92a0: 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73 70 65 63  nition or.  spec
92b0: 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c 65  ified as a table
92c0: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 49 6e 20   constraint. In 
92d0: 70 72 61 63 74 69 63 65 20 69 74 20 6d 61 6b 65  practice it make
92e0: 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 2e  s no difference.
92f0: 29 5e 20 5e 28 45 61 63 68 0a 20 20 74 69 6d 65  )^ ^(Each.  time
9300: 20 61 20 6e 65 77 20 72 6f 77 20 69 73 20 69 6e   a new row is in
9310: 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
9320: 74 61 62 6c 65 20 6f 72 20 61 6e 20 65 78 69 73  table or an exis
9330: 74 69 6e 67 20 72 6f 77 20 69 73 20 75 70 64 61  ting row is upda
9340: 74 65 64 2c 0a 20 20 74 68 65 20 65 78 70 72 65  ted,.  the expre
9350: 73 73 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ssion associated
9360: 20 77 69 74 68 20 65 61 63 68 20 43 48 45 43 4b   with each CHECK
9370: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 65   constraint is e
9380: 76 61 6c 75 61 74 65 64 20 61 6e 64 0a 20 20 63  valuated and.  c
9390: 61 73 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43  ast to a NUMERIC
93a0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61   value in the sa
93b0: 6d 65 20 77 61 79 20 61 73 20 61 20 5b 43 41 53  me way as a [CAS
93c0: 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49  T expression]. I
93d0: 66 20 74 68 65 20 0a 20 20 72 65 73 75 6c 74 20  f the .  result 
93e0: 69 73 20 7a 65 72 6f 20 28 69 6e 74 65 67 65 72  is zero (integer
93f0: 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c   value 0 or real
9400: 20 76 61 6c 75 65 20 30 2e 30 29 2c 20 74 68 65   value 0.0), the
9410: 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20  n a constraint. 
9420: 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61 73 20 6f   violation has o
9430: 63 63 75 72 72 65 64 2e 29 5e 20 5e 49 66 20 74  ccurred.)^ ^If t
9440: 68 65 20 43 48 45 43 4b 20 65 78 70 72 65 73 73  he CHECK express
9450: 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
9460: 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61 6e 79 20   NULL, or.  any 
9470: 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76  other non-zero v
9480: 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f 74 20  alue, it is not 
9490: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
94a0: 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 65  lation..  ^The e
94b0: 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 61 20 43  xpression of a C
94c0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
94d0: 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  may not contain 
94e0: 61 20 73 75 62 71 75 65 72 79 2e 0a 0a 3c 70 3e  a subquery...<p>
94f0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
9500: 73 20 68 61 76 65 20 62 65 65 6e 20 73 75 70 70  s have been supp
9510: 6f 72 74 65 64 20 73 69 6e 63 65 20 5b 76 65 72  orted since [ver
9520: 73 69 6f 6e 20 33 2e 33 2e 30 5d 2e 20 50 72 69  sion 3.3.0]. Pri
9530: 6f 72 20 74 6f 0a 20 20 76 65 72 73 69 6f 6e 20  or to.  version 
9540: 33 2e 33 2e 30 2c 20 43 48 45 43 4b 20 63 6f 6e  3.3.0, CHECK con
9550: 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 70 61  straints were pa
9560: 72 73 65 64 20 62 75 74 20 6e 6f 74 20 65 6e 66  rsed but not enf
9570: 6f 72 63 65 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  orced...<tcl>hd_
9580: 66 72 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75 6c  fragment {notnul
9590: 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55 4c  lconst} {NOT NUL
95a0: 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  L} {NOT NULL con
95b0: 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c  straint}</tcl>.<
95c0: 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c  p>^A <b>NOT NULL
95d0: 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20  </b> constraint 
95e0: 6d 61 79 20 6f 6e 6c 79 20 62 65 20 61 74 74 61  may only be atta
95f0: 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  ched to a column
9600: 20 64 65 66 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e   definition,.  n
9610: 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ot specified as 
9620: 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  a table constrai
9630: 6e 74 2e 20 20 4e 6f 74 20 73 75 72 70 72 69 73  nt.  Not surpris
9640: 69 6e 67 6c 79 2c 20 5e 28 61 20 4e 4f 54 20 4e  ingly, ^(a NOT N
9650: 55 4c 4c 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74  ULL.  constraint
9660: 20 64 69 63 74 61 74 65 73 20 74 68 61 74 20 74   dictates that t
9670: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f  he associated co
9680: 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  lumn may not con
9690: 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75  tain a NULL valu
96a0: 65 2e 0a 20 20 41 74 74 65 6d 70 74 69 6e 67 20  e..  Attempting 
96b0: 74 6f 20 73 65 74 20 74 68 65 20 63 6f 6c 75 6d  to set the colum
96c0: 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20  n value to NULL 
96d0: 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67 20 61  when inserting a
96e0: 20 6e 65 77 20 72 6f 77 20 6f 72 0a 20 20 75 70   new row or.  up
96f0: 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69  dating an existi
9700: 6e 67 20 6f 6e 65 20 63 61 75 73 65 73 20 61 20  ng one causes a 
9710: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
9720: 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63  tion.)^..<p>Exac
9730: 74 6c 79 20 68 6f 77 20 61 20 63 6f 6e 73 74 72  tly how a constr
9740: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69  aint violation i
9750: 73 20 64 65 61 6c 74 20 77 69 74 68 20 69 73 20  s dealt with is 
9760: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
9770: 65 0a 20 20 5b 63 6f 6e 66 6c 69 63 74 20 63 6c  e.  [conflict cl
9780: 61 75 73 65 7c 63 6f 6e 73 74 72 61 69 6e 74 20  ause|constraint 
9790: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
97a0: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 2e 20  ion algorithm]. 
97b0: 45 61 63 68 20 0a 20 20 50 52 49 4d 41 52 59 20  Each .  PRIMARY 
97c0: 4b 45 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f 54  KEY, UNIQUE, NOT
97d0: 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20   NULL and CHECK 
97e0: 63 6f 6e 73 74 72 61 69 6e 74 20 68 61 73 20 61  constraint has a
97f0: 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
9800: 74 0a 20 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  t.  resolution a
9810: 6c 67 6f 72 69 74 68 6d 2e 20 5e 50 52 49 4d 41  lgorithm. ^PRIMA
9820: 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 20 61  RY KEY, UNIQUE a
9830: 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  nd NOT NULL cons
9840: 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65 0a 20  traints may be. 
9850: 20 65 78 70 6c 69 63 69 74 6c 79 20 61 73 73 69   explicitly assi
9860: 67 6e 65 64 20 61 20 64 65 66 61 75 6c 74 20 63  gned a default c
9870: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
9880: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 62 79 20  on algorithm by 
9890: 69 6e 63 6c 75 64 69 6e 67 0a 20 20 61 20 5b 63  including.  a [c
98a0: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20  onflict-clause] 
98b0: 69 6e 20 74 68 65 69 72 20 64 65 66 69 6e 69 74  in their definit
98c0: 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69 66 20 61 20  ions. ^Or, if a 
98d0: 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66 69 6e  constraint defin
98e0: 69 74 69 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f 74  ition.  does not
98f0: 20 69 6e 63 6c 75 64 65 20 61 20 5b 63 6f 6e 66   include a [conf
9900: 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 6f 72 20  lict-clause] or 
9910: 69 74 20 69 73 20 61 20 43 48 45 43 4b 20 63 6f  it is a CHECK co
9920: 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 64 65  nstraint, the de
9930: 66 61 75 6c 74 0a 20 20 63 6f 6e 66 6c 69 63 74  fault.  conflict
9940: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
9950: 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20  rithm is ABORT. 
9960: 5e 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74  ^Different const
9970: 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68  raints within th
9980: 65 0a 20 20 73 61 6d 65 20 74 61 62 6c 65 20 6d  e.  same table m
9990: 61 79 20 68 61 76 65 20 64 69 66 66 65 72 65 6e  ay have differen
99a0: 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  t default confli
99b0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
99c0: 67 6f 72 69 74 68 6d 73 2e 20 53 65 65 0a 20 20  gorithms. See.  
99d0: 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
99e0: 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
99f0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
9a00: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74  information...<t
9a10: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
9a20: 6f 77 69 64 20 7b 49 4e 54 45 47 45 52 20 50 52  owid {INTEGER PR
9a30: 49 4d 41 52 59 20 4b 45 59 7d 20 52 4f 57 49 44  IMARY KEY} ROWID
9a40: 20 72 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33   rowid</tcl>.<h3
9a50: 3e 52 4f 57 49 44 73 20 61 6e 64 20 74 68 65 20  >ROWIDs and the 
9a60: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9a70: 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 76  KEY</h3>..<p>^Ev
9a80: 65 72 79 20 72 6f 77 20 6f 66 20 65 76 65 72 79  ery row of every
9a90: 20 53 51 4c 69 74 65 20 74 61 62 6c 65 20 68 61   SQLite table ha
9aa0: 73 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  s a 64-bit signe
9ab0: 64 20 69 6e 74 65 67 65 72 20 6b 65 79 20 0a 74  d integer key .t
9ac0: 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64 65  hat uniquely ide
9ad0: 6e 74 69 66 69 65 73 20 74 68 65 20 72 6f 77 20  ntifies the row 
9ae0: 77 69 74 68 69 6e 20 69 74 73 20 74 61 62 6c 65  within its table
9af0: 2e 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 69  . This integer i
9b00: 73 20 75 73 75 61 6c 6c 79 0a 63 61 6c 6c 65 64  s usually.called
9b10: 20 74 68 65 20 22 72 6f 77 69 64 22 2e 20 5e 54   the "rowid". ^T
9b20: 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 63  he rowid value c
9b30: 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 75  an be accessed u
9b40: 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20  sing one of the 
9b50: 73 70 65 63 69 61 6c 0a 63 61 73 65 2d 69 6e 64  special.case-ind
9b60: 65 70 65 6e 64 65 6e 74 20 6e 61 6d 65 73 20 22  ependent names "
9b70: 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 2c 20 6f  rowid", "oid", o
9b80: 72 20 22 5f 72 6f 77 69 64 5f 22 20 69 6e 20 70  r "_rowid_" in p
9b90: 6c 61 63 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  lace of a column
9ba0: 20 6e 61 6d 65 2e 0a 5e 49 66 20 61 20 74 61 62   name..^If a tab
9bb0: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 75 73  le contains a us
9bc0: 65 72 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  er defined colum
9bd0: 6e 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22 2c  n named "rowid",
9be0: 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69   "oid" or "_rowi
9bf0: 64 5f 22 2c 0a 74 68 65 6e 20 74 68 61 74 20 6e  d_",.then that n
9c00: 61 6d 65 20 61 6c 77 61 79 73 20 72 65 66 65 72  ame always refer
9c10: 73 20 74 68 65 20 65 78 70 6c 69 63 69 74 6c 79  s the explicitly
9c20: 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e   declared column
9c30: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 75   and cannot be u
9c40: 73 65 64 0a 74 6f 20 72 65 74 72 69 65 76 65 20  sed.to retrieve 
9c50: 74 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77 69  the integer rowi
9c60: 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54 68 65  d value...<p>The
9c70: 20 64 61 74 61 20 66 6f 72 20 65 61 63 68 20 74   data for each t
9c80: 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 69  able in SQLite i
9c90: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 42 2d  s stored as a B-
9ca0: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 63  Tree structure c
9cb0: 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 20 65 6e 74  ontaining.an ent
9cc0: 72 79 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c  ry for each tabl
9cd0: 65 20 72 6f 77 2c 20 75 73 69 6e 67 20 74 68 65  e row, using the
9ce0: 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 73 20   rowid value as 
9cf0: 74 68 65 20 6b 65 79 2e 20 54 68 69 73 20 6d 65  the key. This me
9d00: 61 6e 73 20 74 68 61 74 0a 72 65 74 72 69 65 76  ans that.retriev
9d10: 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e 67 20 72  ing or sorting r
9d20: 65 63 6f 72 64 73 20 62 79 20 72 6f 77 69 64 20  ecords by rowid 
9d30: 69 73 20 66 61 73 74 2e 20 53 65 61 72 63 68 69  is fast. Searchi
9d40: 6e 67 20 66 6f 72 20 61 20 72 65 63 6f 72 64 20  ng for a record 
9d50: 77 69 74 68 20 61 0a 73 70 65 63 69 66 69 63 20  with a.specific 
9d60: 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72 20 61 6c  rowid, or for al
9d70: 6c 20 72 65 63 6f 72 64 73 20 77 69 74 68 20 72  l records with r
9d80: 6f 77 69 64 73 20 77 69 74 68 69 6e 20 61 20 73  owids within a s
9d90: 70 65 63 69 66 69 65 64 20 72 61 6e 67 65 20 69  pecified range i
9da0: 73 0a 61 72 6f 75 6e 64 20 74 77 69 63 65 20 61  s.around twice a
9db0: 73 20 66 61 73 74 20 61 73 20 61 20 73 69 6d 69  s fast as a simi
9dc0: 6c 61 72 20 73 65 61 72 63 68 20 6d 61 64 65 20  lar search made 
9dd0: 62 79 20 73 70 65 63 69 66 79 69 6e 67 20 61 6e  by specifying an
9de0: 79 20 6f 74 68 65 72 20 50 52 49 4d 41 52 59 0a  y other PRIMARY.
9df0: 4b 45 59 20 6f 72 20 69 6e 64 65 78 65 64 20 76  KEY or indexed v
9e00: 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68  alue...<p> ^With
9e10: 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 2c 20   one exception, 
9e20: 69 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 61  if a table has a
9e30: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61   primary key tha
9e40: 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
9e50: 73 69 6e 67 6c 65 0a 63 6f 6c 75 6d 6e 2c 20 61  single.column, a
9e60: 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  nd the declared 
9e70: 74 79 70 65 20 6f 66 20 74 68 61 74 20 63 6f 6c  type of that col
9e80: 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22  umn is "INTEGER"
9e90: 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20   in any mixture 
9ea0: 6f 66 0a 75 70 70 65 72 20 61 6e 64 20 6c 6f 77  of.upper and low
9eb0: 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20 74 68  er case, then th
9ec0: 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73  e column becomes
9ed0: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
9ee0: 65 20 72 6f 77 69 64 2e 20 53 75 63 68 20 61 0a  e rowid. Such a.
9ef0: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 75 61 6c 6c  column is usuall
9f00: 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61 73  y referred to as
9f10: 20 61 6e 20 22 69 6e 74 65 67 65 72 20 70 72 69   an "integer pri
9f20: 6d 61 72 79 20 6b 65 79 22 2e 20 41 20 50 52 49  mary key". A PRI
9f30: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a  MARY KEY column.
9f40: 6f 6e 6c 79 20 62 65 63 6f 6d 65 73 20 61 6e 20  only becomes an 
9f50: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
9f60: 6b 65 79 20 69 66 20 74 68 65 20 64 65 63 6c 61  key if the decla
9f70: 72 65 64 20 74 79 70 65 20 6e 61 6d 65 20 69 73  red type name is
9f80: 20 65 78 61 63 74 6c 79 0a 22 49 4e 54 45 47 45   exactly."INTEGE
9f90: 52 22 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74 65  R".  ^Other inte
9fa0: 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c  ger type names l
9fb0: 69 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49  ike "INT" or "BI
9fc0: 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20  GINT" or "SHORT 
9fd0: 49 4e 54 45 47 45 52 22 0a 6f 72 20 22 55 4e 53  INTEGER".or "UNS
9fe0: 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20 63  IGNED INTEGER" c
9ff0: 61 75 73 65 73 20 74 68 65 20 70 72 69 6d 61 72  auses the primar
a000: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20  y key column to 
a010: 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64  behave as an ord
a020: 69 6e 61 72 79 0a 74 61 62 6c 65 20 63 6f 6c 75  inary.table colu
a030: 6d 6e 20 77 69 74 68 20 69 6e 74 65 67 65 72 20  mn with integer 
a040: 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61  [affinity] and a
a050: 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e   unique index, n
a060: 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ot as an alias f
a070: 6f 72 0a 74 68 65 20 72 6f 77 69 64 2e 0a 0a 3c  or.the rowid...<
a080: 70 3e 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e  p> The exception
a090: 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65   mentioned above
a0a0: 20 69 73 20 74 68 61 74 20 5e 69 66 20 74 68 65   is that ^if the
a0b0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20   declaration of 
a0c0: 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 64 65  a column with.de
a0d0: 63 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e 54  clared type "INT
a0e0: 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20 61  EGER" includes a
a0f0: 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20 44  n "PRIMARY KEY D
a100: 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74 20  ESC" clause, it 
a110: 64 6f 65 73 20 6e 6f 74 0a 62 65 63 6f 6d 65 20  does not.become 
a120: 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
a130: 20 72 6f 77 69 64 20 61 6e 64 20 69 73 20 6e 6f   rowid and is no
a140: 74 20 63 6c 61 73 73 69 66 69 65 64 20 61 73 20  t classified as 
a150: 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
a160: 72 79 20 6b 65 79 2e 0a 54 68 69 73 20 71 75 69  ry key..This qui
a170: 72 6b 20 69 73 20 6e 6f 74 20 62 79 20 64 65 73  rk is not by des
a180: 69 67 6e 2e 20 49 74 20 69 73 20 64 75 65 20 74  ign. It is due t
a190: 6f 20 61 20 62 75 67 20 69 6e 20 65 61 72 6c 79  o a bug in early
a1a0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
a1b0: 69 74 65 2e 0a 42 75 74 20 66 69 78 69 6e 67 20  ite..But fixing 
a1c0: 74 68 65 20 62 75 67 20 63 6f 75 6c 64 20 72 65  the bug could re
a1d0: 73 75 6c 74 20 69 6e 20 76 65 72 79 20 73 65 72  sult in very ser
a1e0: 69 6f 75 73 20 62 61 63 6b 77 61 72 64 73 20 69  ious backwards i
a1f0: 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73  ncompatibilities
a200: 2e 0a 54 68 65 20 53 51 4c 69 74 65 20 64 65 76  ..The SQLite dev
a210: 65 6c 6f 70 65 72 73 20 66 65 65 6c 20 74 68 61  elopers feel tha
a220: 74 20 67 6f 6f 66 79 20 62 65 68 61 76 69 6f 72  t goofy behavior
a230: 20 69 6e 20 61 20 63 6f 72 6e 65 72 20 63 61 73   in a corner cas
a240: 65 20 69 73 20 66 61 72 20 62 65 74 74 65 72 0a  e is far better.
a250: 74 68 61 6e 20 61 20 63 6f 6d 70 61 74 69 62 69  than a compatibi
a260: 6c 69 74 79 20 62 72 65 61 6b 2c 20 73 6f 20 74  lity break, so t
a270: 68 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68 61  he original beha
a280: 76 69 6f 72 20 69 73 20 72 65 74 61 69 6e 65 64  vior is retained
a290: 2e 20 54 68 69 73 20 6d 65 61 6e 73 0a 74 68 61  . This means.tha
a2a0: 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  t ^(the followin
a2b0: 67 20 74 68 72 65 65 20 74 61 62 6c 65 20 64 65  g three table de
a2c0: 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63  clarations all c
a2d0: 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ause the column 
a2e0: 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61 6c 69  "x" to be an.ali
a2f0: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
a300: 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69   (an integer pri
a310: 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e  mary key):..<ul>
a320: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
a330: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
a340: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53  R PRIMARY KEY AS
a350: 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c  C, y, z);</tt>.<
a360: 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41  li><tt>CREATE TA
a370: 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c  BLE t(x INTEGER,
a380: 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b   y, z, PRIMARY K
a390: 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e  EY(x ASC));</tt>
a3a0: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
a3b0: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
a3c0: 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59  R, y, z, PRIMARY
a3d0: 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b 3c 2f   KEY(x DESC));</
a3e0: 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  tt>.</ul>)^..<p>
a3f0: 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77  But ^(the follow
a400: 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  ing declaration 
a410: 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c 74 20  does not result 
a420: 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61 6e 20  in "x" being an 
a430: 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f  alias for.the ro
a440: 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74  wid:.<ul>.<li><t
a450: 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  t>CREATE TABLE t
a460: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
a470: 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20  RY KEY DESC, y, 
a480: 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e  z);</tt>.</ul>)^
a490: 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61 6c 75  ..<p>^Rowid valu
a4a0: 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66 69  es may be modifi
a4b0: 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50 44 41  ed using an UPDA
a4c0: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  TE statement in 
a4d0: 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61 73 20  the same.way as 
a4e0: 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e  any other column
a4f0: 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69 74 68   value can, eith
a500: 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20  er using one of 
a510: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61 6c 69  the built-in ali
a520: 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c 20 22  ases.("rowid", "
a530: 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f  oid" or "_rowid_
a540: 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67 20 61  ") or by using a
a550: 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65 64 20  n alias created 
a560: 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a 70 72  by an integer.pr
a570: 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69 6d 69  imary key. ^Simi
a580: 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45 52 54  larly, an INSERT
a590: 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 70   statement may p
a5a0: 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65 20 74  rovide a value t
a5b0: 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77  o use as the.row
a5c0: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
a5d0: 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e 6c 69  inserted. ^(Unli
a5e0: 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65  ke normal SQLite
a5f0: 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e 74   columns, an int
a600: 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79  eger primary.key
a610: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
a620: 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e   must contain in
a630: 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20 49 6e  teger values. In
a640: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
a650: 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c 75 6d  y or rowid.colum
a660: 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c 65 20  ns are not able 
a670: 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67  to hold floating
a680: 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c 20 73   point values, s
a690: 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f  trings, BLOBs, o
a6a0: 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e  r NULLs.)^..<p>^
a6b0: 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  If an UPDATE sta
a6c0: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
a6d0: 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65 67 65  to set an intege
a6e0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72  r primary key or
a6f0: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f   rowid column.to
a700: 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62 20   a NULL or blob 
a710: 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61 20 73  value, or to a s
a720: 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20 76 61  tring or real va
a730: 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  lue that cannot 
a740: 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f  be losslessly.co
a750: 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
a760: 74 65 67 65 72 2c 20 61 20 22 64 61 74 61 74 79  teger, a "dataty
a770: 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72  pe mismatch" err
a780: 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68  or occurs and th
a790: 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 61  e statement.is a
a7a0: 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e 20 49  borted. ^If an I
a7b0: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
a7c0: 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65  attempts to inse
a7d0: 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 2c  rt a blob value,
a7e0: 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f 72 20   or a string.or 
a7f0: 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20  real value that 
a800: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
a810: 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
a820: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e 74  o an integer int
a830: 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70 72 69  o an.integer pri
a840: 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69  mary key or rowi
a850: 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64 61 74  d column, a "dat
a860: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20  atype mismatch" 
a870: 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64  error occurs and
a880: 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74 20 69   the.statement i
a890: 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e  s aborted...<p>^
a8a0: 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  If an INSERT sta
a8b0: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
a8c0: 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c  to insert a NULL
a8d0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f   value into a ro
a8e0: 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72 20 70  wid or.integer p
a8f0: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
a900: 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20 63 68  n, the system ch
a910: 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67 65 72  ooses an integer
a920: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73   value to use as
a930: 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74 6f 6d   the.rowid autom
a940: 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65 74 61  atically. A deta
a950: 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e  iled description
a960: 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69 73 20   of how this is 
a970: 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64 65 64  done is provided
a980: 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f 69 6e  .<a href="autoin
a990: 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61 74 65  c.html">separate
a9a0: 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ly</a>.</p>..<p>
a9b0: 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20 6b 65  ^(The [parent ke
a9c0: 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69 67 6e  y] of a [foreign
a9d0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d   key constraint]
a9e0: 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
a9f0: 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77 69 64  to.use the rowid
aa00: 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20 6b 65  .  The parent ke
aa10: 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61 6d 65  y must used name
aa20: 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29  d columns only.)
aa30: 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ^</p>..<tcl>.###
aa40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa80: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
aa90: 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47  ion {CREATE TRIG
aaa0: 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67 67  GER} createtrigg
aab0: 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47  er {{CREATE TRIG
aac0: 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  GER}}..BubbleDia
aad0: 67 72 61 6d 20 63 72 65 61 74 65 2d 74 72 69 67  gram create-trig
aae0: 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ger-stmt 1.</tcl
aaf0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54  >..<p>^The CREAT
ab00: 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d  E TRIGGER statem
ab10: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 61  ent is used to a
ab20: 64 64 20 74 72 69 67 67 65 72 73 20 74 6f 20 74  dd triggers to t
ab30: 68 65 20 0a 64 61 74 61 62 61 73 65 20 73 63 68  he .database sch
ab40: 65 6d 61 2e 20 5e 54 72 69 67 67 65 72 73 20 61  ema. ^Triggers a
ab50: 72 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 72  re database oper
ab60: 61 74 69 6f 6e 73 20 0a 74 68 61 74 20 61 72 65  ations .that are
ab70: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70   automatically p
ab80: 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20 61 20  erformed when a 
ab90: 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61  specified databa
aba0: 73 65 20 65 76 65 6e 74 0a 6f 63 63 75 72 73 2e  se event.occurs.
abb0: 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74 72    </p>..<p>^A tr
abc0: 69 67 67 65 72 20 6d 61 79 20 62 65 20 73 70 65  igger may be spe
abd0: 63 69 66 69 65 64 20 74 6f 20 66 69 72 65 20 77  cified to fire w
abe0: 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c 45 54  henever a [DELET
abf0: 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f 72  E], [INSERT],.or
ac00: 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61 0a 70   [UPDATE] of a.p
ac10: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
ac20: 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72 73 2c  se table occurs,
ac30: 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61 6e 20   or whenever an 
ac40: 5b 55 50 44 41 54 45 5d 20 6f 63 63 75 72 73 20  [UPDATE] occurs 
ac50: 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72  on.on one or mor
ac60: 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75  e specified colu
ac70: 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 3c  mns of a table.<
ac80: 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68 69 73  /p>..<p>^At this
ac90: 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73 75 70   time SQLite sup
aca0: 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52 20 45  ports only FOR E
acb0: 41 43 48 20 52 4f 57 20 74 72 69 67 67 65 72 73  ACH ROW triggers
acc0: 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48 0a 53  , not FOR EACH.S
acd0: 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67 65 72  TATEMENT trigger
ace0: 73 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c 69 63  s. ^Hence explic
acf0: 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e 67 20  itly specifying 
ad00: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 73 20  FOR EACH ROW is 
ad10: 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20 45  optional..^FOR E
ad20: 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65 73 20  ACH ROW implies 
ad30: 74 68 61 74 20 74 68 65 20 53 51 4c 20 73 74 61  that the SQL sta
ad40: 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
ad50: 64 20 69 6e 20 74 68 65 20 74 72 69 67 67 65 72  d in the trigger
ad60: 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64  .may be executed
ad70: 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   (depending on t
ad80: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29 20  he WHEN clause) 
ad90: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
ada0: 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65  e row being.inse
adb0: 72 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f 72  rted, updated or
adc0: 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
add0: 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e  statement causin
ade0: 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f  g the trigger to
adf0: 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   fire.</p>..<p>^
ae00: 28 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63  (Both the WHEN c
ae10: 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 74 72  lause and the tr
ae20: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 6d 61  igger actions ma
ae30: 79 20 61 63 63 65 73 73 20 65 6c 65 6d 65 6e 74  y access element
ae40: 73 20 6f 66 20 0a 74 68 65 20 72 6f 77 20 62 65  s of .the row be
ae50: 69 6e 67 20 69 6e 73 65 72 74 65 64 2c 20 64 65  ing inserted, de
ae60: 6c 65 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  leted or updated
ae70: 20 75 73 69 6e 67 20 72 65 66 65 72 65 6e 63 65   using reference
ae80: 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a 22  s of the form ."
ae90: 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  NEW.<i>column-na
aea0: 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44  me</i>" and "OLD
aeb0: 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
aec0: 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63  /i>", where.<i>c
aed0: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69  olumn-name</i> i
aee0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
aef0: 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20  column from the 
af00: 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 74  table that the t
af10: 72 69 67 67 65 72 0a 69 73 20 61 73 73 6f 63 69  rigger.is associ
af20: 61 74 65 64 20 77 69 74 68 2e 29 5e 20 5e 28 4f  ated with.)^ ^(O
af30: 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72  LD and NEW refer
af40: 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62  ences may only b
af50: 65 20 75 73 65 64 20 69 6e 20 74 72 69 67 67 65  e used in trigge
af60: 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66 6f 72  rs on.events for
af70: 20 77 68 69 63 68 20 74 68 65 79 20 61 72 65 20   which they are 
af80: 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c  relevant, as fol
af90: 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c  lows:</p>..<tabl
afa0: 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
afb0: 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a  adding=10>.<tr>.
afc0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
afd0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77   align="right" w
afe0: 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45  idth=120><i>INSE
aff0: 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20  RT</i></td>.<td 
b000: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57  valign="top">NEW
b010: 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20   references are 
b020: 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  valid</td>.</tr>
b030: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
b040: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
b050: 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c  ght" width=120><
b060: 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64  i>UPDATE</i></td
b070: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
b080: 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72  p">NEW and OLD r
b090: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61  eferences are va
b0a0: 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  lid</td>.</tr>.<
b0b0: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
b0c0: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
b0d0: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e  t" width=120><i>
b0e0: 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a  DELETE</i></td>.
b0f0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
b100: 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20  >OLD references 
b110: 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c  are valid</td>.<
b120: 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
b130: 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57  p>)^..<p>^If a W
b140: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
b150: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
b160: 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
b170: 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78  fied.are only ex
b180: 65 63 75 74 65 64 20 66 6f 72 20 72 6f 77 73 20  ecuted for rows 
b190: 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 57 48  for which the WH
b1a0: 45 4e 0a 63 6c 61 75 73 65 20 69 73 20 74 72 75  EN.clause is tru
b1b0: 65 2e 20 5e 49 66 20 6e 6f 20 57 48 45 4e 20 63  e. ^If no WHEN c
b1c0: 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65  lause is supplie
b1d0: 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  d, the SQL state
b1e0: 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63 75 74  ments.are execut
b1f0: 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77 73 2e  ed for all rows.
b200: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42 45  </p>..<p>^The BE
b210: 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20 6b 65  FORE or AFTER ke
b220: 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e 65 73  yword determines
b230: 20 77 68 65 6e 20 74 68 65 20 74 72 69 67 67 65   when the trigge
b240: 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62  r actions.will b
b250: 65 20 65 78 65 63 75 74 65 64 20 72 65 6c 61 74  e executed relat
b260: 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72  ive to the inser
b270: 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69  tion, modificati
b280: 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66  on or removal of
b290: 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20   the.associated 
b2a0: 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e  row.</p>..<p>^An
b2b0: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63   [ON CONFLICT] c
b2c0: 6c 61 75 73 65 20 6d 61 79 20 62 65 20 73 70 65  lause may be spe
b2d0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
b2e0: 66 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72  f an [UPDATE] or
b2f0: 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e   [INSERT].action
b300: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
b310: 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2e   of the trigger.
b320: 0a 5e 48 6f 77 65 76 65 72 20 69 66 20 61 6e 20  .^However if an 
b330: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c  [ON CONFLICT] cl
b340: 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
b350: 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74 68  d as part of .th
b360: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
b370: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
b380: 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 63 6f  to fire, then co
b390: 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a  nflict handling.
b3a0: 70 6f 6c 69 63 79 20 6f 66 20 74 68 65 20 6f 75  policy of the ou
b3b0: 74 65 72 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ter statement is
b3c0: 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f   used instead.</
b3d0: 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73  p>..<p>^Triggers
b3e0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
b3f0: 6c 79 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52  ly [DROP TRIGGER
b400: 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68 65 6e   | dropped].when
b410: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
b420: 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63 69  they are .associ
b430: 61 74 65 64 20 77 69 74 68 20 28 74 68 65 20 3c  ated with (the <
b440: 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e  i>table-name</i>
b450: 20 74 61 62 6c 65 29 20 69 73 20 0a 5b 44 52 4f   table) is .[DRO
b460: 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65  P TABLE | droppe
b470: 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20 69 66  d].  ^However if
b480: 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74   the trigger act
b490: 69 6f 6e 73 20 72 65 66 65 72 65 6e 63 65 0a 6f  ions reference.o
b4a0: 74 68 65 72 20 74 61 62 6c 65 73 2c 20 74 68 65  ther tables, the
b4b0: 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20   trigger is not 
b4c0: 64 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64 69 66  dropped or modif
b4d0: 69 65 64 20 69 66 20 74 68 6f 73 65 20 6f 74 68  ied if those oth
b4e0: 65 72 0a 74 61 62 6c 65 73 20 61 72 65 20 5b 44  er.tables are [D
b4f0: 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70  ROP TABLE | drop
b500: 70 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54  ped] or [ALTER T
b510: 41 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d  ABLE | modified]
b520: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67  .</p>..<p>^Trigg
b530: 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ers are removed 
b540: 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20  using the [DROP 
b550: 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
b560: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79 6e  nt.</p>..<h3>Syn
b570: 74 61 78 20 52 65 73 74 72 69 63 74 69 6f 6e 73  tax Restrictions
b580: 20 4f 6e 20 55 50 44 41 54 45 2c 20 44 45 4c 45   On UPDATE, DELE
b590: 54 45 2c 20 61 6e 64 20 49 4e 53 45 52 54 20 53  TE, and INSERT S
b5a0: 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
b5b0: 0a 20 20 20 20 54 72 69 67 67 65 72 73 3c 2f 68  .    Triggers</h
b5c0: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55 50 44  3>..<p>^The [UPD
b5d0: 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20  ATE], [DELETE], 
b5e0: 61 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73 74 61  and [INSERT].sta
b5f0: 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
b600: 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 20 73  riggers do not s
b610: 75 70 70 6f 72 74 0a 74 68 65 20 66 75 6c 6c 20  upport.the full 
b620: 73 79 6e 74 61 78 20 66 6f 72 20 5b 55 50 44 41  syntax for [UPDA
b630: 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61  TE], [DELETE], a
b640: 6e 64 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74  nd [INSERT] stat
b650: 65 6d 65 6e 74 73 2e 20 20 54 68 65 20 66 6f 6c  ements.  The fol
b660: 6c 6f 77 69 6e 67 0a 72 65 73 74 72 69 63 74 69  lowing.restricti
b670: 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a 0a  ons apply:</p>..
b680: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  <ul>.<li><p>.  ^
b690: 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  (The name of the
b6a0: 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64   table to be mod
b6b0: 69 66 69 65 64 20 69 6e 20 61 6e 20 5b 55 50 44  ified in an [UPD
b6c0: 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20  ATE], [DELETE], 
b6d0: 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20 73 74  or [INSERT].  st
b6e0: 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65 20  atement must be 
b6f0: 61 6e 20 75 6e 71 75 61 6c 69 66 69 65 64 20 74  an unqualified t
b700: 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e 20 6f  able name.  In o
b710: 74 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e 65 20  ther words, one 
b720: 6d 75 73 74 0a 20 20 75 73 65 20 6a 75 73 74 20  must.  use just 
b730: 22 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69  "<i>tablename</i
b740: 3e 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74 61 62  >" not "<i>datab
b750: 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c  ase</i><b>.</b><
b760: 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22  i>tablename</i>"
b770: 0a 20 20 77 68 65 6e 20 73 70 65 63 69 66 79 69  .  when specifyi
b780: 6e 67 20 74 68 65 20 74 61 62 6c 65 2e 29 5e 20  ng the table.)^ 
b790: 20 5e 54 68 65 20 74 61 62 6c 65 20 74 6f 20 62   ^The table to b
b7a0: 65 20 6d 6f 64 69 66 69 65 64 20 6d 75 73 74 20  e modified must 
b7b0: 65 78 69 73 74 20 69 6e 20 74 68 65 0a 20 20 73  exist in the.  s
b7c0: 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20  ame database as 
b7d0: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
b7e0: 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  w to which the t
b7f0: 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68  rigger is attach
b800: 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ed..  </p></li>.
b810: 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20  .<li><p>.  ^The 
b820: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 69 3e  "INSERT INTO <i>
b830: 74 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41 55 4c  table</i> DEFAUL
b840: 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f  T VALUES" form o
b850: 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 73  f the [INSERT] s
b860: 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 6e 6f  tatement.  is no
b870: 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 3c  t supported..  <
b880: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
b890: 3e 0a 20 20 5e 54 68 65 20 49 4e 44 45 58 45 44  >.  ^The INDEXED
b8a0: 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45   BY and NOT INDE
b8b0: 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20  XED clauses are 
b8c0: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f  not supported fo
b8d0: 72 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 0a 20  r [UPDATE] and. 
b8e0: 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d   [DELETE] statem
b8f0: 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  ents..  </p></li
b900: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54  >..<li><p>.  ^(T
b910: 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  he ORDER BY and 
b920: 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20 6f 6e  LIMIT clauses on
b930: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
b940: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
b950: 73 20 61 72 65 20 6e 6f 74 0a 20 20 73 75 70 70  s are not.  supp
b960: 6f 72 74 65 64 2e 20 20 4f 52 44 45 52 20 42 59  orted.  ORDER BY
b970: 20 61 6e 64 20 4c 49 4d 49 54 20 61 72 65 20 6e   and LIMIT are n
b980: 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75 70 70  ot normally supp
b990: 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54  orted for [UPDAT
b9a0: 45 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54 45 5d  E] or.  [DELETE]
b9b0: 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74 20   in any context 
b9c0: 62 75 74 20 63 61 6e 20 62 65 20 65 6e 61 62 6c  but can be enabl
b9d0: 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c  ed for top-level
b9e0: 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 75 73   statements.  us
b9f0: 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ing the [SQLITE_
ba00: 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
ba10: 4c 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70  LETE_LIMIT] comp
ba20: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e  ile-time option.
ba30: 20 20 48 6f 77 65 76 65 72 2c 0a 20 20 74 68 61    However,.  tha
ba40: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  t compile-time o
ba50: 70 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70 6c 69  ption only appli
ba60: 65 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65 6c 20  es to top-level 
ba70: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
ba80: 4c 45 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e  LETE].  statemen
ba90: 74 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54 45 5d  ts, not [UPDATE]
baa0: 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74   and [DELETE] st
bab0: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
bac0: 74 72 69 67 67 65 72 73 2e 29 5e 0a 20 20 3c 2f  triggers.)^.  </
bad0: 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  p></li>.</ul>..<
bae0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
baf0: 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69 67 67  instead_of_trigg
bb00: 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46 7d 20  er {INSTEAD OF} 
bb10: 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67  {INSTEAD OF trig
bb20: 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49  ger}</tcl>.<h3>I
bb30: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
bb40: 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67  r</h3>..<p>^Trig
bb50: 67 65 72 73 20 6d 61 79 20 62 65 20 63 72 65 61  gers may be crea
bb60: 74 65 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20  ted on [views], 
bb70: 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e  as well as ordin
bb80: 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79 0a 73  ary tables, by.s
bb90: 70 65 63 69 66 79 69 6e 67 20 49 4e 53 54 45 41  pecifying INSTEA
bba0: 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41  D OF in the CREA
bbb0: 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65  TE TRIGGER state
bbc0: 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f  ment. .^If one o
bbd0: 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54  r more ON INSERT
bbe0: 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f  , ON DELETE.or O
bbf0: 4e 20 55 50 44 41 54 45 20 74 72 69 67 67 65 72  N UPDATE trigger
bc00: 73 20 61 72 65 20 64 65 66 69 6e 65 64 20 6f 6e  s are defined on
bc10: 20 61 20 76 69 65 77 2c 20 74 68 65 6e 20 69 74   a view, then it
bc20: 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72   is not an.error
bc30: 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 20 49   to execute an I
bc40: 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72  NSERT, DELETE or
bc50: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
bc60: 74 20 6f 6e 20 74 68 65 20 76 69 65 77 2c 20 0a  t on the view, .
bc70: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 5e  respectively.  ^
bc80: 49 6e 73 74 65 61 64 2c 0a 65 78 65 63 75 74 69  Instead,.executi
bc90: 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  ng an INSERT, DE
bca0: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
bcb0: 6e 20 74 68 65 20 76 69 65 77 20 63 61 75 73 65  n the view cause
bcc0: 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  s the associated
bcd0: 0a 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72  .triggers to fir
bce0: 65 2e 20 5e 54 68 65 20 72 65 61 6c 20 74 61 62  e. ^The real tab
bcf0: 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67 20 74  les underlying t
bd00: 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f 74 20  he view are not 
bd10: 6d 6f 64 69 66 69 65 64 0a 28 65 78 63 65 70 74  modified.(except
bd20: 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c 69 63   possibly explic
bd30: 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69 67 67  itly, by a trigg
bd40: 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e  er program).</p>
bd50: 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
bd60: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
bd70: 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 73 71 6c  nges()] and [sql
bd80: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
bd90: 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73  es()] interfaces
bda0: 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e 74 20 49 4e  .do not count IN
bdb0: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
bdc0: 20 66 69 72 69 6e 67 73 2c 20 62 75 74 20 74 68   firings, but th
bdd0: 65 0a 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  e.[count_changes
bde0: 20 70 72 61 67 6d 61 5d 20 64 6f 65 73 20 63 6f   pragma] does co
bdf0: 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74  unt INSTEAD OF t
be00: 72 69 67 67 65 72 20 66 69 72 69 6e 67 2e 3c 2f  rigger firing.</
be10: 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73  p>..<h3>Examples
be20: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75  </h3>..<p>^(Assu
be30: 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d  ming that custom
be40: 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73  er records are s
be50: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 63 75  tored in the "cu
be60: 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20  stomers" table, 
be70: 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72  and.that order r
be80: 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65  ecords are store
be90: 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73  d in the "orders
bea0: 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c  " table, the fol
beb0: 6c 6f 77 69 6e 67 20 74 72 69 67 67 65 72 0a 65  lowing trigger.e
bec0: 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20  nsures that all 
bed0: 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72  associated order
bee0: 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65 64  s are redirected
bef0: 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72   when a customer
bf00: 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20   changes.his or 
bf10: 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e  her address:</p>
bf20: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
bf30: 0a 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20  .CREATE TRIGGER 
bf40: 75 70 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f  update_customer_
bf50: 61 64 64 72 65 73 73 20 55 50 44 41 54 45 20 4f  address UPDATE O
bf60: 46 20 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73  F address ON cus
bf70: 74 6f 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a  tomers .  BEGIN.
bf80: 20 20 20 20 55 50 44 41 54 45 20 6f 72 64 65 72      UPDATE order
bf90: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
bfa0: 6e 65 77 2e 61 64 64 72 65 73 73 20 57 48 45 52  new.address WHER
bfb0: 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20  E customer_name 
bfc0: 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e  = old.name;.  EN
bfd0: 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57  D;.}</tcl>..<p>W
bfe0: 69 74 68 20 74 68 69 73 20 74 72 69 67 67 65 72  ith this trigger
bff0: 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63   installed, exec
c000: 75 74 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d  uting the statem
c010: 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ent:</p>..<tcl>E
c020: 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20  xample {.UPDATE 
c030: 63 75 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64  customers SET ad
c040: 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20  dress = '1 Main 
c050: 53 74 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20  St.' WHERE name 
c060: 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a  = 'Jack Jones';.
c070: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73  }</tcl>..<p>caus
c080: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
c090: 20 74 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63   to be automatic
c0a0: 61 6c 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f  ally executed:</
c0b0: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
c0c0: 20 7b 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73   {.UPDATE orders
c0d0: 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 27   SET address = '
c0e0: 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52  1 Main St.' WHER
c0f0: 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20  E customer_name 
c100: 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a  = 'Jack Jones';.
c110: 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e  }</tcl>)^..<tcl>
c120: 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 64 65  hd_fragment unde
c130: 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64 65 66 69  f_before {undefi
c140: 6e 65 64 20 42 45 46 4f 52 45 20 74 72 69 67 67  ned BEFORE trigg
c150: 65 72 20 62 65 68 61 76 69 6f 72 7d 3c 2f 74 63  er behavior}</tc
c160: 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f 6e 73 20  l>.<h3>Cautions 
c170: 4f 6e 20 54 68 65 20 55 73 65 20 4f 66 20 42 45  On The Use Of BE
c180: 46 4f 52 45 20 74 72 69 67 67 65 72 73 3c 2f 68  FORE triggers</h
c190: 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42 45 46 4f  3>..<p>If a BEFO
c1a0: 52 45 20 55 50 44 41 54 45 20 6f 72 20 42 45 46  RE UPDATE or BEF
c1b0: 4f 52 45 20 44 45 4c 45 54 45 20 74 72 69 67 67  ORE DELETE trigg
c1c0: 65 72 20 6d 6f 64 69 66 69 65 73 20 6f 72 20 64  er modifies or d
c1d0: 65 6c 65 74 65 73 20 61 20 72 6f 77 0a 74 68 61  eletes a row.tha
c1e0: 74 20 77 61 73 20 74 6f 20 68 61 76 65 20 62 65  t was to have be
c1f0: 65 6e 20 75 70 64 61 74 65 64 20 6f 72 20 64 65  en updated or de
c200: 6c 65 74 65 64 2c 20 74 68 65 6e 20 74 68 65 20  leted, then the 
c210: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
c220: 62 73 65 71 75 65 6e 74 0a 75 70 64 61 74 65 20  bsequent.update 
c230: 6f 72 20 64 65 6c 65 74 65 20 6f 70 65 72 61 74  or delete operat
c240: 69 6f 6e 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ion is undefined
c250: 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20  .  Furthermore, 
c260: 69 66 20 61 20 42 45 46 4f 52 45 20 74 72 69 67  if a BEFORE trig
c270: 67 65 72 0a 6d 6f 64 69 66 69 65 73 20 6f 72 20  ger.modifies or 
c280: 64 65 6c 65 74 65 73 20 61 20 72 6f 77 2c 20 74  deletes a row, t
c290: 68 65 6e 20 69 74 20 69 73 20 75 6e 64 65 66 69  hen it is undefi
c2a0: 6e 65 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ned whether or n
c2b0: 6f 74 20 41 46 54 45 52 20 74 72 69 67 67 65 72  ot AFTER trigger
c2c0: 73 0a 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76  s.that would hav
c2d0: 65 20 6f 74 68 65 72 77 69 73 65 20 72 75 6e 20  e otherwise run 
c2e0: 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73 20 77 69  on those rows wi
c2f0: 6c 6c 20 69 6e 20 66 61 63 74 20 72 75 6e 2e 0a  ll in fact run..
c300: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c  </p>..<p>The val
c310: 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77 69 64 20  ue of NEW.rowid 
c320: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 20  is undefined in 
c330: 61 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20  a BEFORE INSERT 
c340: 74 72 69 67 67 65 72 20 69 6e 20 77 68 69 63 68  trigger in which
c350: 0a 74 68 65 20 72 6f 77 69 64 20 69 73 20 6e 6f  .the rowid is no
c360: 74 20 65 78 70 6c 69 63 69 74 6c 79 20 73 65 74  t explicitly set
c370: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 3c   to an integer.<
c380: 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20  /p>..<p>Because 
c390: 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f 72 73  of the behaviors
c3a0: 20 64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65   described above
c3b0: 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72  , programmers ar
c3c0: 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 0a  e encouraged to.
c3d0: 70 72 65 66 65 72 20 41 46 54 45 52 20 74 72 69  prefer AFTER tri
c3e0: 67 67 65 72 73 20 6f 76 65 72 20 42 45 46 4f 52  ggers over BEFOR
c3f0: 45 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  E triggers.</p>.
c400: 0a 3c 68 33 3e 54 68 65 20 52 41 49 53 45 28 29  .<h3>The RAISE()
c410: 20 66 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a   function</h3>..
c420: 3c 70 3e 5e 28 41 20 73 70 65 63 69 61 6c 20 53  <p>^(A special S
c430: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 52 41 49 53  QL function RAIS
c440: 45 28 29 20 6d 61 79 20 62 65 20 75 73 65 64 20  E() may be used 
c450: 77 69 74 68 69 6e 20 61 20 74 72 69 67 67 65 72  within a trigger
c460: 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a 77 69 74 68  -program,)^.with
c470: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
c480: 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63 6c  yntax</p> ..<tcl
c490: 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  >BubbleDiagram r
c4a0: 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f 74  aise-function</t
c4b0: 63 6c 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 6f 6e  cl>..<p>^When on
c4c0: 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 74  e of the first t
c4d0: 68 72 65 65 20 66 6f 72 6d 73 20 69 73 20 63 61  hree forms is ca
c4e0: 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72 69 67  lled during trig
c4f0: 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63  ger-program.exec
c500: 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65 63 69  ution, the speci
c510: 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  fied [ON CONFLIC
c520: 54 5d 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  T] processing is
c530: 20 70 65 72 66 6f 72 6d 65 64 0a 28 65 69 74 68   performed.(eith
c540: 65 72 20 41 42 4f 52 54 2c 20 46 41 49 4c 20 6f  er ABORT, FAIL o
c550: 72 20 52 4f 4c 4c 42 41 43 4b 29 20 61 6e 64 20  r ROLLBACK) and 
c560: 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65 72  the current quer
c570: 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 0a 41 6e  y terminates..An
c580: 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 5b   error code of [
c590: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
c5a0: 54 5d 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  T] is returned t
c5b0: 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  o the applicatio
c5c0: 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20 74 68  n,.along with th
c5d0: 65 20 73 70 65 63 69 66 69 65 64 20 65 72 72 6f  e specified erro
c5e0: 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a  r message.</p>..
c5f0: 3c 70 3e 5e 57 68 65 6e 20 52 41 49 53 45 28 49  <p>^When RAISE(I
c600: 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c 65 64  GNORE) is called
c610: 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  , the remainder 
c620: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  of the current t
c630: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 0a  rigger program,.
c640: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68  the statement th
c650: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72  at caused the tr
c660: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 74 6f  igger program to
c670: 20 65 78 65 63 75 74 65 20 61 6e 64 20 61 6e 79   execute and any
c680: 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72 69 67   subsequent.trig
c690: 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 68 61  ger programs tha
c6a0: 74 20 77 6f 75 6c 64 20 6f 66 20 62 65 65 6e 20  t would of been 
c6b0: 65 78 65 63 75 74 65 64 20 61 72 65 20 61 62 61  executed are aba
c6c0: 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61 74 61  ndoned. ^No data
c6d0: 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61 72 65  base.changes are
c6e0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e   rolled back.  ^
c6f0: 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
c700: 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
c710: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
c720: 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73 20 69  .to execute is i
c730: 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20  tself part of a 
c740: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c  trigger program,
c750: 20 74 68 65 6e 20 74 68 61 74 20 74 72 69 67 67   then that trigg
c760: 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d  er program.resum
c770: 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61 74 20  es execution at 
c780: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
c790: 20 74 68 65 20 6e 65 78 74 20 73 74 65 70 2e 0a   the next step..
c7a0: 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
c7b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7f0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
c800: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45  tion {CREATE VIE
c810: 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d 20  W} {createview} 
c820: 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 76  {{CREATE VIEW} v
c830: 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a 42 75 62  iew *views}..Bub
c840: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
c850: 65 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c 2f  e-view-stmt 1.</
c860: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52  tcl>..<p>^The CR
c870: 45 41 54 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e  EATE VIEW comman
c880: 64 20 61 73 73 69 67 6e 73 20 61 20 6e 61 6d 65  d assigns a name
c890: 20 74 6f 20 61 20 70 72 65 2d 70 61 63 6b 61 67   to a pre-packag
c8a0: 65 64 20 0a 5b 53 45 4c 45 43 54 5d 20 73 74 61  ed .[SELECT] sta
c8b0: 74 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20 74  tement. .^Once t
c8c0: 68 65 20 76 69 65 77 20 69 73 20 63 72 65 61 74  he view is creat
c8d0: 65 64 2c 20 69 74 20 63 61 6e 20 62 65 20 75 73  ed, it can be us
c8e0: 65 64 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ed in the FROM c
c8f0: 6c 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72  lause.of another
c900: 20 5b 53 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61   [SELECT] in pla
c910: 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
c920: 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  me..</p>..<p>^If
c930: 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22   the "TEMP" or "
c940: 54 45 4d 50 4f 52 41 52 59 22 20 6b 65 79 77 6f  TEMPORARY" keywo
c950: 72 64 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74  rd occurs in bet
c960: 77 65 65 6e 20 22 43 52 45 41 54 45 22 0a 61 6e  ween "CREATE".an
c970: 64 20 22 56 49 45 57 22 20 74 68 65 6e 20 74 68  d "VIEW" then th
c980: 65 20 76 69 65 77 20 74 68 61 74 20 69 73 20 63  e view that is c
c990: 72 65 61 74 65 64 20 69 73 20 6f 6e 6c 79 20 76  reated is only v
c9a0: 69 73 69 62 6c 65 20 74 6f 20 74 68 65 0a 70 72  isible to the.pr
c9b0: 6f 63 65 73 73 20 74 68 61 74 20 6f 70 65 6e 65  ocess that opene
c9c0: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  d the database a
c9d0: 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  nd is automatica
c9e0: 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e  lly deleted when
c9f0: 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73  .the database is
ca00: 20 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70   closed.</p>..<p
ca10: 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74 61  > ^If a &lt;data
ca20: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73  base-name&gt; is
ca30: 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
ca40: 20 74 68 65 20 76 69 65 77 20 69 73 20 63 72 65   the view is cre
ca50: 61 74 65 64 20 69 6e 20 0a 74 68 65 20 6e 61 6d  ated in .the nam
ca60: 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74  ed database. ^It
ca70: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
ca80: 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 26  specify both a &
ca90: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
caa0: 26 67 74 3b 0a 61 6e 64 20 74 68 65 20 54 45 4d  &gt;.and the TEM
cab0: 50 20 6b 65 79 77 6f 72 64 20 6f 6e 20 61 20 56  P keyword on a V
cac0: 49 45 57 2c 20 75 6e 6c 65 73 73 20 74 68 65 20  IEW, unless the 
cad0: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
cae0: 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e  e&gt; is "temp".
caf0: 0a 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65  .^If no database
cb00: 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69   name is specifi
cb10: 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50  ed, and the TEMP
cb20: 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20   keyword is not 
cb30: 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 56 49 45  present,.the VIE
cb40: 57 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  W is created in 
cb50: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
cb60: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75 20  e.</p>..<p>^You 
cb70: 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c  cannot [DELETE],
cb80: 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55   [INSERT], or [U
cb90: 50 44 41 54 45 5d 20 61 20 76 69 65 77 2e 20 20  PDATE] a view.  
cba0: 5e 56 69 65 77 73 20 61 72 65 20 72 65 61 64 2d  ^Views are read-
cbb0: 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e  only .in SQLite.
cbc0: 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d    ^However, in m
cbd0: 61 6e 79 20 63 61 73 65 73 20 79 6f 75 20 63 61  any cases you ca
cbe0: 6e 20 75 73 65 20 61 6e 0a 5b 49 4e 53 54 45 41  n use an.[INSTEA
cbf0: 44 20 4f 46 20 74 72 69 67 67 65 72 5d 20 6f 6e  D OF trigger] on
cc00: 20 74 68 65 20 76 69 65 77 20 74 6f 20 61 63 63   the view to acc
cc10: 6f 6d 70 6c 69 73 68 20 0a 74 68 65 20 73 61 6d  omplish .the sam
cc20: 65 20 74 68 69 6e 67 2e 20 20 5e 56 69 65 77 73  e thing.  ^Views
cc30: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 0a 77 69   are removed .wi
cc40: 74 68 20 74 68 65 20 5b 44 52 4f 50 20 56 49 45  th the [DROP VIE
cc50: 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  W] command.</p>.
cc60: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
cc70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cc80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cc90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ccb0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
ccc0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
ccd0: 42 4c 45 7d 20 7b 63 72 65 61 74 65 76 74 61 62  BLE} {createvtab
cce0: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 52 54 55  } {{CREATE VIRTU
ccf0: 41 4c 20 54 41 42 4c 45 7d 7d 0a 0a 42 75 62 62  AL TABLE}}..Bubb
cd00: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
cd10: 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73  -virtual-table-s
cd20: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
cd30: 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  >A [virtual tabl
cd40: 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61  e] is an interfa
cd50: 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61  ce to an externa
cd60: 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d  l storage or com
cd70: 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20  putation.engine 
cd80: 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20  that appears to 
cd90: 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20 64  be a table but d
cda0: 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  oes not actually
cdb0: 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69   store informati
cdc0: 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  on.in the databa
cdd0: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
cde0: 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75  >In general, you
cdf0: 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67   can do anything
ce00: 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61 6c   with a [virtual
ce10: 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61 6e   table] that can
ce20: 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e   be done.with an
ce30: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c   ordinary table,
ce40: 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79 6f   except that ^yo
ce50: 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20  u cannot create 
ce60: 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67 67  indices or trigg
ce70: 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c  ers on a.virtual
ce80: 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76   table.  ^Some v
ce90: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
cea0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67  lementations mig
ceb0: 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69  ht impose additi
cec0: 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e  onal.restriction
ced0: 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  s.  For example,
cee0: 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61   many virtual ta
cef0: 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e  bles are read-on
cf00: 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ly.</p>..<p>The 
cf10: 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26  &lt;module-name&
cf20: 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20  gt; is the name 
cf30: 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  of an object tha
cf40: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65  t implements.the
cf50: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
cf60: 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65   ^The &lt;module
cf70: 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62  -name&gt; must b
cf80: 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69 74  e registered wit
cf90: 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61 74  h.the SQLite dat
cfa0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
cfb0: 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f   using.[sqlite3_
cfc0: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d  create_module()]
cfd0: 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65   or [sqlite3_cre
cfe0: 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d  ate_module_v2()]
cff0: 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e  .prior to issuin
d000: 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  g the CREATE VIR
d010: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
d020: 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c  ment..^The modul
d030: 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20  e takes zero or 
d040: 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72  more comma-separ
d050: 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a  ated arguments..
d060: 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 63  ^The arguments c
d070: 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75 74  an be just about
d080: 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f 6e   any text as lon
d090: 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c 61  g as it has bala
d0a0: 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65 73  nced.parentheses
d0b0: 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  .  The argument 
d0c0: 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69 63  syntax is suffic
d0d0: 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20 74  iently general t
d0e0: 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e 74  hat the.argument
d0f0: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
d100: 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c 75   appear as [colu
d110: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20  mn definitions] 
d120: 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c  in a traditional
d130: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
d140: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51  statement.  .^SQ
d150: 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20  Lite passes the 
d160: 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73  module arguments
d170: 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65   directly.to the
d180: 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b   [xCreate] and [
d190: 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64  xConnect] method
d1a0: 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20  s of the module 
d1b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77  implementation.w
d1c0: 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
d1d0: 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69  pretation.  It i
d1e0: 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69  s the responsibi
d1f0: 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75  lity.of the modu
d200: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
d210: 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69  n to parse and i
d220: 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e  nterpret its own
d230: 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a   arguments.</p>.
d240: 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74  .<p>^A virtual t
d250: 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65  able is destroye
d260: 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69  d using the ordi
d270: 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45  nary.[DROP TABLE
d280: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
d290: 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56  ere is no.DROP V
d2a0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d2b0: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63  tement.</p>..<tc
d2c0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
d2d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d2e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d310: 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45  #.Section DELETE
d320: 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20   delete {DELETE 
d330: 2a 44 45 4c 45 54 45 73 7d 0a 0a 42 75 62 62 6c  *DELETEs}..Bubbl
d340: 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
d350: 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61  stmt 1.BubbleDia
d360: 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74  gram qualified-t
d370: 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e  able-name.</tcl>
d380: 0a 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20  ..<p>The DELETE 
d390: 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20  command removes 
d3a0: 72 65 63 6f 72 64 73 20 66 72 6f 6d 20 74 68 65  records from the
d3b0: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
d3c0: 64 20 62 79 20 74 68 65 0a 20 20 20 3c 69 3e 71  d by the.   <i>q
d3d0: 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
d3e0: 61 6d 65 3c 2f 69 3e 2e 20 0a 0a 3c 70 3e 5e 49  ame</i>. ..<p>^I
d3f0: 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  f the WHERE clau
d400: 73 65 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  se is not presen
d410: 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 69  t, all records i
d420: 6e 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20  n the table are 
d430: 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e 49 66 20  deleted..   ^If 
d440: 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
d450: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e  s supplied, then
d460: 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77 73   only those rows
d470: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 20   for which the. 
d480: 20 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c    result of eval
d490: 75 61 74 69 6e 67 20 74 68 65 20 57 48 45 52 45  uating the WHERE
d4a0: 20 63 6c 61 75 73 65 20 61 73 20 61 20 5b 62 6f   clause as a [bo
d4b0: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
d4c0: 7c 0a 20 20 20 62 6f 6f 6c 65 61 6e 20 65 78 70  |.   boolean exp
d4d0: 72 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d  ression is true]
d4e0: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
d4f0: 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20  h3>Restrictions 
d500: 6f 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d  on DELETE Statem
d510: 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41  ents Within CREA
d520: 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a  TE TRIGGER</h3>.
d530: 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
d540: 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61  g restrictions a
d550: 70 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73  pply to DELETE s
d560: 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f  tatements that o
d570: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a  ccur within the.
d580: 20 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52     body of a [CR
d590: 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
d5a0: 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20  atement:..<ul>. 
d5b0: 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e   <li><p>^The <i>
d5c0: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73  table-name</i> s
d5d0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
d5e0: 20 6f 66 20 61 20 44 45 4c 45 54 45 20 73 74 61   of a DELETE sta
d5f0: 74 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20  tement within.  
d600: 20 20 61 20 74 72 69 67 67 65 72 20 62 6f 64 79    a trigger body
d610: 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69   must be unquali
d620: 66 69 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65  fied.  ^(In othe
d630: 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20  r words, the.   
d640: 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
d650: 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72  e</i><b>.</b> pr
d660: 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c  efix on the tabl
d670: 65 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c  e name is not al
d680: 6c 6f 77 65 64 20 0a 20 20 20 20 77 69 74 68 69  lowed .    withi
d690: 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 49  n triggers.)^ ^I
d6a0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  f the table to w
d6b0: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
d6c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 0a   is attached is.
d6d0: 20 20 20 20 6e 6f 74 20 69 6e 20 74 68 65 20 74      not in the t
d6e0: 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20 74 68  emp database, th
d6f0: 65 6e 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  en DELETE statem
d700: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20  ents within the 
d710: 74 72 69 67 67 65 72 0a 20 20 20 20 62 6f 64 79  trigger.    body
d720: 20 6d 75 73 74 20 6f 70 65 72 61 74 65 20 6f 6e   must operate on
d730: 20 74 61 62 6c 65 73 20 77 69 74 68 69 6e 20 74   tables within t
d740: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
d750: 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20   as it. ^If the 
d760: 74 61 62 6c 65 0a 20 20 20 20 74 6f 20 77 68 69  table.    to whi
d770: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
d780: 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e  s attached is in
d790: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
d7a0: 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20  se, then the.   
d7b0: 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d   unqualified nam
d7c0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
d7d0: 65 69 6e 67 20 64 65 6c 65 74 65 64 20 69 73 20  eing deleted is 
d7e0: 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20  resolved in the 
d7f0: 73 61 6d 65 20 77 61 79 20 61 73 0a 20 20 20 20  same way as.    
d800: 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d  it is for a top-
d810: 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20  level statement 
d820: 28 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69  (by searching fi
d830: 72 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74  rst the TEMP dat
d840: 61 62 61 73 65 2c 20 74 68 65 6e 0a 20 20 20 20  abase, then.    
d850: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
d860: 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65  e, then any othe
d870: 72 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  r databases in t
d880: 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 77 65  he order they we
d890: 72 65 0a 20 20 20 20 61 74 74 61 63 68 65 64 29  re.    attached)
d8a0: 2e 0a 20 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e  ..    .  <li><p>
d8b0: 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
d8c0: 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
d8d0: 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
d8e0: 61 6c 6c 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54  allowed on DELET
d8f0: 45 0a 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73  E.    statements
d900: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
d910: 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  .</p>..  <li><p>
d920: 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f  ^The LIMIT and O
d930: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 20  RDER BY clauses 
d940: 28 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77  (described below
d950: 29 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  ) are unsupporte
d960: 64 20 66 6f 72 0a 20 20 20 20 44 45 4c 45 54 45  d for.    DELETE
d970: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
d980: 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
d990: 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69  .</ul>..<h3>Opti
d9a0: 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f  onal LIMIT and O
d9b0: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 3c  RDER BY clauses<
d9c0: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51  /h3>..<p>^(If SQ
d9d0: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
d9e0: 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54   with the [SQLIT
d9f0: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
da00: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f  DELETE_LIMIT].co
da10: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
da20: 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  n, then the synt
da30: 61 78 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  ax of the DELETE
da40: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 65 78   statement is.ex
da50: 74 65 6e 64 65 64 20 62 79 20 74 68 65 20 61 64  tended by the ad
da60: 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e  dition of option
da70: 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
da80: 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 3a 29 5e  LIMIT clauses:)^
da90: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
daa0: 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
dab0: 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63  stmt-limited</tc
dac0: 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c  l>..<p>^If a DEL
dad0: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ETE statement ha
dae0: 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
daf0: 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  , the maximum nu
db00: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
db10: 74 0a 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65  t.will be delete
db20: 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76  d is found by ev
db30: 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63  aluating the acc
db40: 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73  ompanying expres
db50: 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67  sion and casting
db60: 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  .it to an intege
db70: 72 20 76 61 6c 75 65 2e 20 5e 49 66 20 74 68 65  r value. ^If the
db80: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 65   result of the e
db90: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4c 49  valuating the LI
dba0: 4d 49 54 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f  MIT clause.canno
dbb0: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
dbc0: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
dbd0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69  integer value, i
dbe0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e  t is an error. ^
dbf0: 41 20 0a 6e 65 67 61 74 69 76 65 20 4c 49 4d 49  A .negative LIMI
dc00: 54 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72  T value is inter
dc10: 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69  preted as "no li
dc20: 6d 69 74 22 2e 20 5e 28 49 66 20 74 68 65 20 44  mit". ^(If the D
dc30: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
dc40: 0a 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46  .also has an OFF
dc50: 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  SET clause, then
dc60: 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79   it is similarly
dc70: 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63   evaluated and c
dc80: 61 73 74 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65  ast to an.intege
dc90: 72 20 76 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20  r value. Again, 
dca0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 69  it is an error i
dcb0: 66 20 74 68 65 20 76 61 6c 75 65 20 63 61 6e 6e  f the value cann
dcc0: 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ot be losslessly
dcd0: 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e  .converted to an
dce0: 20 69 6e 74 65 67 65 72 2e 29 5e 20 5e 49 66 20   integer.)^ ^If 
dcf0: 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53  there is no OFFS
dd00: 45 54 20 63 6c 61 75 73 65 2c 20 6f 72 20 74 68  ET clause, or th
dd10: 65 20 63 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74  e calculated.int
dd20: 65 67 65 72 20 76 61 6c 75 65 20 69 73 20 6e 65  eger value is ne
dd30: 67 61 74 69 76 65 2c 20 74 68 65 20 65 66 66 65  gative, the effe
dd40: 63 74 69 76 65 20 4f 46 46 53 45 54 20 76 61 6c  ctive OFFSET val
dd50: 75 65 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e  ue is zero...<p>
dd60: 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54 45 20  ^(If the DELETE 
dd70: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e  statement has an
dd80: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
dd90: 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
dda0: 74 68 61 74 20 77 6f 75 6c 64 20 0a 62 65 20 64  that would .be d
ddb0: 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
ddc0: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
ddd0: 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f  IT clause are so
dde0: 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  rted according t
ddf0: 6f 20 74 68 65 20 0a 4f 52 44 45 52 20 42 59 2e  o the .ORDER BY.
de00: 20 54 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c   The first <i>M<
de10: 2f 69 3e 20 72 6f 77 73 2c 20 77 68 65 72 65 20  /i> rows, where 
de20: 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20  <i>M</i> is the 
de30: 76 61 6c 75 65 20 66 6f 75 6e 64 20 62 79 0a 65  value found by.e
de40: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4f 46  valuating the OF
de50: 46 53 45 54 20 63 6c 61 75 73 65 20 65 78 70 72  FSET clause expr
de60: 65 73 73 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70  ession, are skip
de70: 70 65 64 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c  ped, and the fol
de80: 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e  lowing .<i>N</i>
de90: 2c 20 77 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e  , where <i>N</i>
dea0: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
deb0: 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65   the LIMIT expre
dec0: 73 73 69 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74  ssion, are delet
ded0: 65 64 2e 29 5e 0a 5e 49 66 20 74 68 65 72 65 20  ed.)^.^If there 
dee0: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 3c 69  are less than <i
def0: 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61  >N</i> rows rema
df00: 69 6e 69 6e 67 20 61 66 74 65 72 20 74 61 6b 69  ining after taki
df10: 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c  ng the OFFSET cl
df20: 61 75 73 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e  ause.into accoun
df30: 74 2c 20 6f 72 20 69 66 20 74 68 65 20 4c 49 4d  t, or if the LIM
df40: 49 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61  IT clause evalua
df50: 74 65 64 20 74 6f 20 61 20 6e 65 67 61 74 69 76  ted to a negativ
df60: 65 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c  e value, then al
df70: 6c 0a 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73  l.remaining rows
df80: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
df90: 70 3e 5e 49 66 20 74 68 65 20 44 45 4c 45 54 45  p>^If the DELETE
dfa0: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e   statement has n
dfb0: 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
dfc0: 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
dfd0: 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 64   that.would be d
dfe0: 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
dff0: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
e000: 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73  IT clause are as
e010: 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72  sembled in an.ar
e020: 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65  bitrary order be
e030: 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68  fore applying th
e040: 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
e050: 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65  ET clauses to de
e060: 74 65 72 6d 69 6e 65 20 0a 74 68 65 20 73 75 62  termine .the sub
e070: 73 65 74 20 74 68 61 74 20 61 72 65 20 61 63 74  set that are act
e080: 75 61 6c 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a  ually deleted...
e090: 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42  <p>^(The ORDER B
e0a0: 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 44 45  Y clause on a DE
e0b0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
e0c0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64  s used only to d
e0d0: 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72  etermine which.r
e0e0: 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20  ows fall within 
e0f0: 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f  the LIMIT. The o
e100: 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
e110: 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 20 69  ws are deleted i
e120: 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20  s arbitrary.and 
e130: 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65  is not influence
e140: 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42  d by the ORDER B
e150: 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63  Y clause.)^..<tc
e160: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72  l>hd_fragment tr
e170: 75 6e 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63  uncateopt {trunc
e180: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
e190: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
e1a0: 54 72 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a  Truncate Optimiz
e1b0: 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ation</h3>..<p>^
e1c0: 57 68 65 6e 20 74 68 65 20 57 48 45 52 45 20 69  When the WHERE i
e1d0: 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61  s omitted from a
e1e0: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
e1f0: 74 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a  t and the table.
e200: 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61  being deleted ha
e210: 73 20 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53  s no triggers,.S
e220: 51 4c 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70  QLite uses an op
e230: 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72  timization to er
e240: 61 73 65 20 74 68 65 20 65 6e 74 69 72 65 20 74  ase the entire t
e250: 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74  able content.wit
e260: 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76  hout having to v
e270: 69 73 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66  isit each row of
e280: 20 74 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76   the table indiv
e290: 69 64 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74  idually..This "t
e2a0: 72 75 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a  runcate" optimiz
e2b0: 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20  ation makes the 
e2c0: 64 65 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20  delete run much 
e2d0: 66 61 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f  faster..Prior to
e2e0: 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e   SQLite [version
e2f0: 20 33 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75   3.6.5], the tru
e300: 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
e310: 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68  on.also meant th
e320: 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  at the [sqlite3_
e330: 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b  changes()] and.[
e340: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
e350: 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61  anges()] interfa
e360: 63 65 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75  ces.and the [cou
e370: 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d  nt_changes pragm
e380: 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75  a].will not actu
e390: 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  ally return the 
e3a0: 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65  number of delete
e3b0: 64 20 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70  d rows.  .That p
e3c0: 72 6f 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20  roblem has been 
e3d0: 66 69 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72  fixed as of [ver
e3e0: 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70  sion 3.6.5]...<p
e3f0: 3e 5e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f  >^The truncate o
e400: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20  ptimization can 
e410: 62 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  be permanently d
e420: 69 73 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20  isabled for all 
e430: 71 75 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d  queries.by recom
e440: 70 69 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69  piling.SQLite wi
e450: 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f  th the [SQLITE_O
e460: 4d 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54  MIT_TRUNCATE_OPT
e470: 49 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69  IMIZATION] compi
e480: 6c 65 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c  le-time switch.<
e490: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e  /p>..<p>The trun
e4a0: 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
e4b0: 6e 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69  n can also be di
e4c0: 73 61 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d  sabled at runtim
e4d0: 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c  e using.the [sql
e4e0: 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69  ite3_set_authori
e4f0: 7a 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65  zer()] interface
e500: 2e 20 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72  .  ^If an author
e510: 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65  izer callback.re
e520: 74 75 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47  turns [SQLITE_IG
e530: 4e 4f 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51  NORE] for an [SQ
e540: 4c 49 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74  LITE_DELETE] act
e550: 69 6f 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74  ion code, then.t
e560: 68 65 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74  he DELETE operat
e570: 69 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64  ion will proceed
e580: 20 62 75 74 20 74 68 65 20 74 72 75 6e 63 61 74   but the truncat
e590: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77  e optimization w
e5a0: 69 6c 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20  ill.be bypassed 
e5b0: 61 6e 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65  and rows will be
e5c0: 20 64 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20   deleted one by 
e5d0: 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  one.</p>..<tcl>.
e5e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e5f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
e630: 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
e640: 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
e650: 20 2a 44 45 54 41 43 48 0a 0a 42 75 62 62 6c 65   *DETACH..Bubble
e660: 44 69 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73  Diagram detach-s
e670: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
e680: 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74  >^This statement
e690: 20 64 65 74 61 63 68 65 73 20 61 6e 20 61 64 64   detaches an add
e6a0: 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  itional database
e6b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76   connection prev
e6c0: 69 6f 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64  iously .attached
e6d0: 20 75 73 69 6e 67 20 74 68 65 20 5b 41 54 54 41   using the [ATTA
e6e0: 43 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  CH] statement.  
e6f0: 0a 5e 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65  .^It is possible
e700: 20 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d   to have the sam
e710: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
e720: 61 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c  attached multipl
e730: 65 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64  e times using .d
e740: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20  ifferent names, 
e750: 61 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e  and detaching on
e760: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
e770: 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76  a file will leav
e780: 65 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e  e the .others in
e790: 74 61 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  tact.</p>..<p>^T
e7a0: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69  his statement wi
e7b0: 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74  ll fail if SQLit
e7c0: 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64  e is in the midd
e7d0: 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74  le of a transact
e7e0: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  ion.</p>...<tcl>
e7f0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
e800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
e840: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e  Section {DROP IN
e850: 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b  DEX} dropindex {
e860: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 42  {DROP INDEX}}..B
e870: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
e880: 70 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c  p-index-stmt 1.<
e890: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
e8a0: 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ROP INDEX statem
e8b0: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69  ent removes an i
e8c0: 6e 64 65 78 20 61 64 64 65 64 0a 77 69 74 68 20  ndex added.with 
e8d0: 74 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45  the [CREATE INDE
e8e0: 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  X] statement.  T
e8f0: 68 65 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70  he index is comp
e900: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
e910: 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54  rom.the disk.  T
e920: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72  he only way to r
e930: 65 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78  ecover the index
e940: 20 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74   is to reenter t
e950: 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b  he.appropriate [
e960: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f  CREATE INDEX] co
e970: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  mmand.</p>..<tcl
e980: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
e990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9d0: 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54  .Section {DROP T
e9e0: 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20  ABLE} droptable 
e9f0: 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a  {{DROP TABLE}}..
ea00: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
ea10: 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a  op-table-stmt 1.
ea20: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
ea30: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
ea40: 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
ea50: 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20  able added with 
ea60: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
ea70: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
ea80: 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
ea90: 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
eaa0: 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70  ame.  ^The dropp
eab0: 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70  ed table is comp
eac0: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
ead0: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
eae0: 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65   .schema and the
eaf0: 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65   disk file.  The
eb00: 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
eb10: 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e  e recovered.  .^
eb20: 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
eb30: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
eb40: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
eb50: 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
eb60: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ted.</p>..<p>^Th
eb70: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58  e optional IF EX
eb80: 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70  ISTS clause supp
eb90: 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72  resses the error
eba0: 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
ebb0: 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74  ally.result if t
ebc0: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
ebd0: 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  t exist.</p>..<p
ebe0: 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
ebf0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
ec00: 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52  re enabled, a DR
ec10: 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
ec20: 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70   performs an.imp
ec30: 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20  licit [DELETE | 
ec40: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
ec50: 74 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64  tbl&gt;] command
ec60: 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67   before removing
ec70: 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20   the.table from 
ec80: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
ec90: 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65  ema. ^Any trigge
eca0: 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  rs attached to t
ecb0: 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f  he table are.dro
ecc0: 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  pped from the da
ecd0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65  tabase schema be
ece0: 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69  fore the implici
ecf0: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
ed00: 74 3b 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78  t;tbl&gt; .is ex
ed10: 65 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20  ecuted, so this 
ed20: 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79  cannot cause any
ed30: 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72   triggers to fir
ed40: 65 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20  e. By contrast, 
ed50: 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c  ^an.implicit DEL
ed60: 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c  ETE FROM &lt;tbl
ed70: 26 67 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20  &gt; does cause 
ed80: 61 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b  any configured.[
ed90: 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
eda0: 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61  ons] to take pla
edb0: 63 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70  ce. .^If the imp
edc0: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
edd0: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78  M &lt;tbl&gt; ex
ede0: 65 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f  ecuted.as part o
edf0: 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  f a DROP TABLE c
ee00: 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20  ommand violates 
ee10: 61 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  any immediate fo
ee20: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
ee30: 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20  aints,.an error 
ee40: 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  is returned and 
ee50: 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  the table is not
ee60: 20 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74   dropped. ^If .t
ee70: 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
ee80: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
ee90: 67 74 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a  gt; causes any .
eea0: 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
eeb0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
eec0: 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c   to be violated,
eed0: 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69   and the violati
eee0: 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20  ons still.exist 
eef0: 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  when the transac
ef00: 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65  tion is committe
ef10: 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  d, an error is r
ef20: 65 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74  eturned at the t
ef30: 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a  ime.of commit...
ef40: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
ef50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef90: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
efa0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
efb0: 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54  trigger {{DROP T
efc0: 52 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65  RIGGER}}..Bubble
efd0: 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69  Diagram drop-tri
efe0: 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  gger-stmt 1.</tc
eff0: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
f000: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
f010: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69  nt removes a tri
f020: 67 67 65 72 20 63 72 65 61 74 65 64 20 62 79 20  gger created by 
f030: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49  the .[CREATE TRI
f040: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
f050: 20 5e 4f 6e 63 65 20 72 65 6d 6f 76 65 64 2c 20   ^Once removed, 
f060: 74 68 65 20 74 72 69 67 67 65 72 20 64 65 66 69  the trigger defi
f070: 6e 69 74 69 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e  nition is no.lon
f080: 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
f090: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
f0a0: 20 28 6f 72 20 73 71 6c 69 74 65 5f 74 65 6d 70   (or sqlite_temp
f0b0: 5f 6d 61 73 74 65 72 29 20 74 61 62 6c 65 20 61  _master) table a
f0c0: 6e 64 20 69 73 0a 6e 6f 74 20 66 69 72 65 64 20  nd is.not fired 
f0d0: 62 79 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e  by any subsequen
f0e0: 74 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  t INSERT, UPDATE
f0f0: 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65   or DELETE state
f100: 6d 65 6e 74 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65  ments...<p>^Note
f110: 20 74 68 61 74 20 74 72 69 67 67 65 72 73 20 61   that triggers a
f120: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
f130: 20 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68   dropped when th
f140: 65 20 61 73 73 6f 63 69 61 74 65 64 20 74 61 62  e associated tab
f150: 6c 65 20 69 73 0a 64 72 6f 70 70 65 64 2e 0a 0a  le is.dropped...
f160: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
f170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1b0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
f1c0: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
f1d0: 77 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a  w {{DROP VIEW}}.
f1e0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  .BubbleDiagram d
f1f0: 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a  rop-view-stmt 1.
f200: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
f210: 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
f220: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69  ent removes a vi
f230: 65 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68  ew created by th
f240: 65 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20  e [CREATE VIEW] 
f250: 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54  .  statement. ^T
f260: 68 65 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  he view definiti
f270: 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72  on is removed fr
f280: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
f290: 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e  schema, but .  n
f2a0: 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e  o actual data in
f2b0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
f2c0: 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d  base tables is m
f2d0: 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54  odified...<p>^(T
f2e0: 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20  he view to drop 
f2f0: 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
f300: 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61   the view-name a
f310: 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 64  nd optional .  d
f320: 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 73 70 65  atabase-name spe
f330: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
f340: 66 20 74 68 65 20 44 52 4f 50 20 56 49 45 57 20  f the DROP VIEW 
f350: 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20  statement. This 
f360: 0a 20 20 72 65 66 65 72 65 6e 63 65 20 69 73 20  .  reference is 
f370: 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74  resolved using t
f380: 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63  he standard proc
f390: 65 64 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63  edure for [objec
f3a0: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e  t resolution].)^
f3b0: 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20  ..<p>.  ^If the 
f3c0: 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20 63  specified view c
f3d0: 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61  annot be found a
f3e0: 6e 64 20 74 68 65 20 49 46 20 45 58 49 53 54 53  nd the IF EXISTS
f3f0: 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a   clause is not .
f400: 20 20 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73    present, it is
f410: 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74   an error. ^If t
f420: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65  he specified vie
f430: 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e  w cannot be foun
f440: 64 20 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58  d and an IF.  EX
f450: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
f460: 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52  resent in the DR
f470: 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
f480: 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74 61 74  t, then the stat
f490: 65 6d 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d  ement.  is a no-
f4a0: 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  op....<tcl>.####
f4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4f0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
f500: 6f 6e 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a  on {Database Obj
f510: 65 63 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74  ect Name Resolut
f520: 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b  ion} {naming} {{
f530: 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f  object resolutio
f540: 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  n}}.</tcl>..<p>.
f550: 20 20 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64    In SQLite, a d
f560: 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28  atabase object (
f570: 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  a table, index, 
f580: 74 72 69 67 67 65 72 20 6f 72 20 76 69 65 77 29  trigger or view)
f590: 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20   is identified. 
f5a0: 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   by the name of 
f5b0: 74 68 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  the object and t
f5c0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
f5d0: 61 74 61 62 61 73 65 20 74 68 61 74 20 69 74 20  atabase that it 
f5e0: 72 65 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44  resides in. .  D
f5f0: 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20  atabase objects 
f600: 6d 61 79 20 72 65 73 69 64 65 20 69 6e 20 74 68  may reside in th
f610: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
f620: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
f630: 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b  se, or in.  an [
f640: 41 54 54 41 43 48 7c 61 74 74 61 63 68 65 64 20  ATTACH|attached 
f650: 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a  database]...<p>.
f660: 20 20 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20    The syntax of 
f670: 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  the [DROP TABLE]
f680: 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20  , [DROP INDEX], 
f690: 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52  [DROP VIEW], [DR
f6a0: 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b  OP TRIGGER],.  [
f6b0: 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52  REINDEX], [ALTER
f6c0: 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79   TABLE] and many
f6d0: 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20   other commands 
f6e0: 61 6c 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75  all permit the u
f6f0: 73 65 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79  ser to.  specify
f700: 20 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65   a database obje
f710: 63 74 20 65 69 74 68 65 72 20 62 79 20 69 74 73  ct either by its
f720: 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20   name alone, or 
f730: 62 79 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  by a combination
f740: 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61   of.  its name a
f750: 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69  nd the name of i
f760: 74 73 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49  ts database. ^(I
f770: 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73  f no database is
f780: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
f790: 72 74 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65  rt.  of the obje
f7a0: 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68  ct reference, th
f7b0: 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63 68  en SQLite search
f7c0: 65 73 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d  es the main, tem
f7d0: 70 20 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68  p and all attach
f7e0: 65 64 0a 20 20 64 61 74 61 62 61 73 65 73 20 66  ed.  databases f
f7f0: 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74  or an object wit
f800: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  h a matching nam
f810: 65 2e 20 54 68 65 20 74 65 6d 70 20 64 61 74 61  e. The temp data
f820: 62 61 73 65 20 69 73 20 73 65 61 72 63 68 65 64  base is searched
f830: 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77  .  first, follow
f840: 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64  ed by the main d
f850: 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65  atabase, followe
f860: 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  d all attached d
f870: 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a  atabases in the.
f880: 20 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65    order that the
f890: 79 20 77 65 72 65 20 61 74 74 61 63 68 65 64 2e  y were attached.
f8a0: 20 54 68 65 20 72 65 66 65 72 65 6e 63 65 20 72   The reference r
f8b0: 65 73 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66  esolves to the f
f8c0: 69 72 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75  irst match.  fou
f8d0: 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c  nd.)^ For exampl
f8e0: 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20  e:..<pre>^(.    
f8f0: 20 20 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65    /* Add a table
f900: 20 6e 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74   named 't1' to t
f910: 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e  he temp, main an
f920: 64 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  d an attached da
f930: 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  tabase */.      
f940: 41 54 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27  ATTACH 'file.db'
f950: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43   AS aux;.      C
f960: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
f970: 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , y);.      CREA
f980: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
f990: 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52  (x, y);.      CR
f9a0: 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74  EATE TABLE aux.t
f9b0: 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20  1(x, y);..      
f9c0: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20  DROP TABLE t1;  
f9d0: 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74         /* Drop t
f9e0: 61 62 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74  able in temp dat
f9f0: 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44  abase */.      D
fa00: 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20  ROP TABLE t1;   
fa10: 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61        /* Drop ta
fa20: 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61  ble in main data
fa30: 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52  base */.      DR
fa40: 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
fa50: 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
fa60: 6c 65 20 69 6e 20 61 75 78 20 64 61 74 61 62 61  le in aux databa
fa70: 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a  se */.)^</pre>..
fa80: 3c 70 3e 0a 20 20 5e 49 66 20 61 20 64 61 74 61  <p>.  ^If a data
fa90: 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73 70 65  base name is spe
faa0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
fab0: 66 20 61 6e 20 6f 62 6a 65 63 74 20 72 65 66 65  f an object refe
fac0: 72 65 6e 63 65 2c 20 69 74 20 6d 75 73 74 20 62  rence, it must b
fad0: 65 0a 20 20 65 69 74 68 65 72 20 22 6d 61 69 6e  e.  either "main
fae0: 22 2c 20 6f 72 20 22 74 65 6d 70 22 20 6f 72 20  ", or "temp" or 
faf0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 61  the name of an a
fb00: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
fb10: 2e 20 5e 4c 69 6b 65 20 6f 74 68 65 72 0a 20 20  . ^Like other.  
fb20: 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72 73 2c  SQL identifiers,
fb30: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 73 20   database names 
fb40: 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69  are case-insensi
fb50: 74 69 76 65 2e 20 5e 49 66 20 61 20 64 61 74 61  tive. ^If a data
fb60: 62 61 73 65 20 6e 61 6d 65 0a 20 20 69 73 20 73  base name.  is s
fb70: 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f  pecified, then o
fb80: 6e 6c 79 20 74 68 65 20 6e 61 6d 65 64 20 64 61  nly the named da
fb90: 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63 68  tabase is search
fba0: 65 64 20 66 6f 72 20 74 68 65 20 6e 61 6d 65 64  ed for the named
fbb0: 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20   object...<p>.  
fbc0: 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65  Most object refe
fbd0: 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20  rences may only 
fbe0: 72 65 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65  resolve to a spe
fbf0: 63 69 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62  cific type of ob
fc00: 6a 65 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d  ject (for.  exam
fc10: 70 6c 65 20 61 20 72 65 66 65 72 65 6e 63 65 20  ple a reference 
fc20: 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
fc30: 61 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61  a DROP TABLE sta
fc40: 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20  tement may only 
fc50: 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74  resolve.  to a t
fc60: 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74  able object, not
fc70: 20 61 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67   an index, trigg
fc80: 65 72 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77  er or view). How
fc90: 65 76 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e  ever in some con
fca0: 74 65 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b  texts .  (e.g. [
fcb0: 52 45 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a  REINDEX]) an obj
fcc0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61  ect reference ma
fcd0: 79 20 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20  y be resolve to 
fce0: 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79  more than one ty
fcf0: 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20  pe.  of object. 
fd00: 5e 57 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20  ^When searching 
fd10: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 73  database schemas
fd20: 20 66 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a   for a named obj
fd30: 65 63 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a  ect, objects of.
fd40: 20 20 74 79 70 65 73 20 74 68 61 74 20 63 61 6e    types that can
fd50: 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e 20 74  not be used in t
fd60: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68  he context of th
fd70: 65 20 72 65 66 65 72 65 6e 63 65 20 61 72 65 20  e reference are 
fd80: 61 6c 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65  always .  ignore
fd90: 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  d...<tcl>.######
fda0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fdb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fdc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fdd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fde0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
fdf0: 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e   EXPLAIN explain
fe00: 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65   EXPLAIN..Bubble
fe10: 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74  Diagram sql-stmt
fe20: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20  .</tcl>..<p>^An 
fe30: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61  SQL statement ca
fe40: 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  n be preceded by
fe50: 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58   the keyword "EX
fe60: 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65  PLAIN" or.by the
fe70: 20 70 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e   phrase "EXPLAIN
fe80: 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e   QUERY PLAN".  ^
fe90: 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74  Either modificat
fea0: 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53  ion causes the.S
feb0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  QL statement to 
fec0: 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72  behave as a quer
fed0: 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20  y and to return 
fee0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
fef0: 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74  t.how the SQL st
ff00: 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61  atement would ha
ff10: 76 65 20 6f 70 65 72 61 74 65 64 20 69 66 20 74  ve operated if t
ff20: 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
ff30: 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64  rd or.phrase had
ff40: 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f   been omitted.</
ff50: 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75  p>..<p>The outpu
ff60: 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61  t from EXPLAIN a
ff70: 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  nd EXPLAIN QUERY
ff80: 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65   PLAN is intende
ff90: 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76  d for.interactiv
ffa0: 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74  e analysis and t
ffb0: 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f  roubleshooting o
ffc0: 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c  nly.  The detail
ffd0: 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74  s of the .output
ffe0: 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a   format are subj
fff0: 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72  ect to change fr
10000 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f  om one release o
10010 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20  f SQLite to the 
10020 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f  next..Applicatio
10030 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73  ns should not us
10040 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50  e EXPLAIN or EXP
10050 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
10060 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63  since.their exac
10070 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 76 61  t behavior is va
10080 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20  riable and only 
10090 70 61 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65  partially docume
100a0 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57  nted.</p>..<p>^W
100b0 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
100c0 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20  keyword appears 
100d0 62 79 20 69 74 73 65 6c 66 20 69 74 20 63 61 75  by itself it cau
100e0 73 65 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ses the statemen
100f0 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  t.to behave as a
10100 20 71 75 65 72 79 20 74 68 61 74 20 72 65 74 75   query that retu
10110 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e 63 65  rns the sequence
10120 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61   of .[virtual ma
10130 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f  chine instructio
10140 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76  ns] it would hav
10150 65 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  e used to execut
10160 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61  e the command ha
10170 64 0a 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  d.the EXPLAIN ke
10180 79 77 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70  yword not been p
10190 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68  resent. ^When th
101a0 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  e EXPLAIN QUERY 
101b0 50 4c 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65  PLAN phrase.appe
101c0 61 72 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65  ars, the stateme
101d0 6e 74 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d  nt returns high-
101e0 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  level informatio
101f0 6e 20 72 65 67 61 72 64 69 6e 67 20 74 68 65 20  n regarding the 
10200 71 75 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20  query.plan that 
10210 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
10220 75 73 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41  used...The EXPLA
10230 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f  IN QUERY PLAN co
10240 6d 6d 61 6e 64 20 69 73 20 64 65 73 63 72 69 62  mmand is describ
10250 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20  ed in .[explain 
10260 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20  query plan|more 
10270 64 65 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c  detail here]...<
10280 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
10290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102d0 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72  ###.Section expr
102e0 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78  ession expr {*ex
102f0 70 72 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73  pression {expres
10300 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 42  sion syntax}}..B
10310 75 62 62 6c 65 44 69 61 67 72 61 6d 20 65 78 70  ubbleDiagram exp
10320 72 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  r 1.BubbleDiagra
10330 6d 20 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 0a  m literal-value.
10340 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
10350 67 6e 65 64 2d 6e 75 6d 62 65 72 0a 42 75 62 62  gned-number.Bubb
10360 6c 65 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d  leDiagram raise-
10370 66 75 6e 63 74 69 6f 6e 0a 3c 2f 74 63 6c 3e 0a  function.</tcl>.
10380 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e  .<p>This section
10390 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
103a0 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20  om the others.  
103b0 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74 69  Most other secti
103c0 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75  ons of.this docu
103d0 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74  ment talks about
103e0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 53 51   a particular SQ
103f0 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73  L command.  This
10400 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f   section does.no
10410 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73  t talk about a s
10420 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e  tandalone comman
10430 64 20 62 75 74 20 61 62 6f 75 74 20 22 65 78 70  d but about "exp
10440 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20  ressions" which 
10450 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e  are .subcomponen
10460 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72  ts of most other
10470 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a   commands.</p>..
10480 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
10490 20 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61   binaryops {bina
104a0 72 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74  ry operators}</t
104b0 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72  cl>.<h3>Operator
104c0 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69  s</h3>.<p>^(SQLi
104d0 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74  te understands t
104e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e  he following bin
104f0 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69  ary operators, i
10500 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67  n order from.hig
10510 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70  hest to lowest p
10520 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a  recedence:</p>..
10530 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10540 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
10550 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a  2c2cf0"><big>||.
10560 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20  *    /    %.+   
10570 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67   -.&lt;&lt;   &g
10580 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20  t;&gt;   &amp;  
10590 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b    |.&lt;    &lt;
105a0 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b  =   &gt;    &gt;
105b0 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20  =.=    ==   !=  
105c0 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69   &lt;&gt;   </bi
105d0 67 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20  g>IS   IS NOT   
105e0 49 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42  IN   LIKE   GLOB
105f0 20 20 20 4d 41 54 43 48 20 20 20 52 45 47 45 58     MATCH   REGEX
10600 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e  P.AND   .OR</fon
10610 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
10620 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53  quote>)^..<p>^(S
10630 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70  upported unary p
10640 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  refix operators 
10650 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a  are these:</p>..
10660 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10670 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
10680 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20  2c2cf0"><big>-  
10690 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c    +    ~    NOT<
106a0 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70  /big></font>.</p
106b0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
106c0 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
106d0 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b  ment collateop {
106e0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
106f0 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  }</tcl>.<p>^The 
10700 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
10710 20 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74   is a unary post
10720 66 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61  fix.operator tha
10730 74 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c  t assigns a [col
10740 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d  lating sequence]
10750 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f   to an expressio
10760 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  n..^The COLLATE 
10770 6f 70 65 72 61 74 6f 72 20 68 61 73 20 61 20 68  operator has a h
10780 69 67 68 65 72 20 70 72 65 63 65 64 65 6e 63 65  igher precedence
10790 20 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67   (binds more tig
107a0 68 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 70  htly) than any.p
107b0 72 65 66 69 78 20 75 6e 61 72 79 20 6f 70 65 72  refix unary oper
107c0 61 74 6f 72 20 6f 72 20 61 6e 79 20 62 69 6e 61  ator or any bina
107d0 72 79 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 54 68  ry operator..^Th
107e0 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
107f0 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 65 20  ence set by the 
10800 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
10810 20 6f 76 65 72 72 69 64 65 73 20 74 68 65 0a 63   overrides the.c
10820 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10830 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  e determined by 
10840 74 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  the COLLATE clau
10850 73 65 20 69 6e 20 61 20 74 61 62 6c 65 0a 5b 63  se in a table.[c
10860 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
10870 5d 2e 0a 53 65 65 20 74 68 65 20 5b 63 6f 6c 6c  ]..See the [coll
10880 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 7c 20  ating sequence| 
10890 64 65 74 61 69 6c 65 64 20 64 69 73 63 75 73 73  detailed discuss
108a0 69 6f 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e 67  ion on collating
108b0 20 73 65 71 75 65 6e 63 65 73 5d 0a 69 6e 20 74   sequences].in t
108c0 68 65 20 5b 64 61 74 61 74 79 70 65 20 7c 20 44  he [datatype | D
108d0 61 74 61 74 79 70 65 20 49 6e 20 53 51 4c 69 74  atatype In SQLit
108e0 65 33 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72  e3] document for
108f0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
10900 72 6d 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c  rmation..</p>..<
10910 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70  tcl>hd_puts ".<p
10920 3e 5e 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72  >^The unary oper
10930 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b  ator [Operator +
10940 5d 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e  ] is a no-op.  ^
10950 49 74 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65  It can be applie
10960 64 0a 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75  d.to strings, nu
10970 6d 62 65 72 73 2c 20 62 6c 6f 62 73 20 6f 72 20  mbers, blobs or 
10980 4e 55 4c 4c 20 61 6e 64 20 69 74 20 61 6c 77 61  NULL and it alwa
10990 79 73 20 72 65 74 75 72 6e 73 20 61 20 72 65 73  ys returns a res
109a0 75 6c 74 0a 77 69 74 68 20 74 68 65 20 73 61 6d  ult.with the sam
109b0 65 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 6f  e value as the o
109c0 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63  perand.</p>"</tc
109d0 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74  l>..<p>Note that
109e0 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 76   there are two v
109f0 61 72 69 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  ariations of the
10a00 20 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20   equals and not 
10a10 65 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73  equals.operators
10a20 2e 20 20 5e 45 71 75 61 6c 73 20 63 61 6e 20 62  .  ^Equals can b
10a30 65 20 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a  e either..<tcl>.
10a40 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74  hd_puts "[Operat
10a50 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74  or =] or [Operat
10a60 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f 6e  or ==]..^The non
10a70 2d 65 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72  -equals operator
10a80 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b   can be either.[
10a90 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20  Operator !=] or 
10aa0 5b 4f 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26  [Operator {&lt;&
10ab0 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70 65  gt;}]..^The [Ope
10ac0 72 61 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74  rator ||] operat
10ad0 6f 72 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e  or is \"concaten
10ae0 61 74 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73  ate\" - it joins
10af0 20 74 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77   together.the tw
10b00 6f 20 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73  o strings of its
10b10 20 6f 70 65 72 61 6e 64 73 2e 0a 5e 54 68 65 20   operands..^The 
10b20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74  operator [Operat
10b30 6f 72 20 25 5d 20 6f 75 74 70 75 74 73 20 74 68  or %] outputs th
10b40 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c  e value of its l
10b50 65 66 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64  eft .operand mod
10b60 75 6c 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70  ulo its right op
10b70 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  erand.</p>..<p>^
10b80 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e  The result of an
10b90 79 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  y binary operato
10ba0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 6e 75  r is either a nu
10bb0 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 72 20 0a  meric value or .
10bc0 4e 55 4c 4c 2c 20 65 78 63 65 70 74 20 66 6f 72  NULL, except for
10bd0 20 74 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c   the [Operator |
10be0 7c 5d 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e  |] concatenation
10bf0 20 6f 70 65 72 61 74 6f 72 20 77 68 69 63 68 20   operator which 
10c00 61 6c 77 61 79 73 20 0a 65 76 61 6c 75 61 74 65  always .evaluate
10c10 73 20 74 6f 20 65 69 74 68 65 72 20 4e 55 4c 4c  s to either NULL
10c20 20 6f 72 20 61 20 74 65 78 74 20 76 61 6c 75 65   or a text value
10c30 2e 3c 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67 6d  .</p>"..hd_fragm
10c40 65 6e 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b 49  ent {isisnot} {I
10c50 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53 20  S operator} {IS 
10c60 4e 4f 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a 68  NOT operator}..h
10c70 64 5f 70 75 74 73 20 22 3c 70 3e 5e 54 68 65 20  d_puts "<p>^The 
10c80 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e  [Operator IS] an
10c90 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20  d [Operator {IS 
10ca0 4e 4f 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73 20  NOT}] operators 
10cb0 77 6f 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72 61  work.like [Opera
10cc0 74 6f 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65 72  tor =] and [Oper
10cd0 61 74 6f 72 20 21 3d 5d 20 65 78 63 65 70 74 20  ator !=] except 
10ce0 77 68 65 6e 20 6f 6e 65 20 6f 72 20 62 6f 74 68  when one or both
10cf0 20 6f 66 20 74 68 65 0a 6f 70 65 72 61 6e 64 73   of the.operands
10d00 20 61 72 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20 74   are NULL. ^In t
10d10 68 69 73 20 63 61 73 65 2c 20 69 66 20 62 6f 74  his case, if bot
10d20 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
10d30 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 49 53  ULL, then the.IS
10d40 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
10d50 74 65 73 20 74 6f 20 31 20 28 74 72 75 65 29 20  tes to 1 (true) 
10d60 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f  and the IS NOT o
10d70 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
10d80 73 0a 74 6f 20 30 20 28 66 61 6c 73 65 29 2e 20  s.to 0 (false). 
10d90 5e 49 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ^If one operand 
10da0 69 73 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65 20  is NULL and the 
10db0 6f 74 68 65 72 20 69 73 20 6e 6f 74 2c 20 74 68  other is not, th
10dc0 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74  en the.IS operat
10dd0 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  or evaluates to 
10de0 30 20 28 66 61 6c 73 65 29 20 61 6e 64 20 74 68  0 (false) and th
10df0 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f  e IS NOT operato
10e00 72 20 69 73 20 31 20 28 74 72 75 65 29 2e 0a 5e  r is 1 (true)..^
10e10 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
10e20 6c 65 20 66 6f 72 20 61 6e 20 49 53 20 6f 72 20  le for an IS or 
10e30 49 53 20 4e 4f 54 20 65 78 70 72 65 73 73 69 6f  IS NOT expressio
10e40 6e 20 74 6f 20 65 76 61 6c 75 61 74 65 20 74 6f  n to evaluate to
10e50 20 4e 55 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f 72   NULL..^Operator
10e60 73 20 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20  s [Operator IS] 
10e70 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49  and [Operator {I
10e80 53 20 4e 4f 54 7d 5d 20 68 61 76 65 20 74 68 65  S NOT}] have the
10e90 20 73 61 6d 65 20 0a 70 72 65 63 65 64 65 6e 63   same .precedenc
10ea0 65 20 61 73 20 5b 4f 70 65 72 61 74 6f 72 20 3d  e as [Operator =
10eb0 5d 2e 22 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ]."..<tcl>hd_fra
10ec0 67 6d 65 6e 74 20 6c 69 74 76 61 6c 75 65 20 7b  gment litvalue {
10ed0 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 7d 3c 2f  literal value}</
10ee0 74 63 6c 3e 0a 3c 68 33 3e 4c 69 74 65 72 61 6c  tcl>.<h3>Literal
10ef0 20 56 61 6c 75 65 73 3c 2f 68 33 3e 0a 3c 70 3e   Values</h3>.<p>
10f00 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75  .^A literal valu
10f10 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  e is a constant 
10f20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 5e 4c  of some kind..^L
10f30 69 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61  iteral values ma
10f40 79 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66  y be integers, f
10f50 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
10f60 6d 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a  mbers, strings,.
10f70 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e  BLOBs, or NULLs.
10f80 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e  </p>..<p>The syn
10f90 74 61 78 20 66 6f 72 20 69 6e 74 65 67 65 72 20  tax for integer 
10fa0 61 6e 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  and floating poi
10fb0 6e 74 20 6c 69 74 65 72 61 6c 73 20 28 63 6f 6c  nt literals (col
10fc0 6c 65 63 74 69 76 65 6c 79 0a 22 6e 75 6d 65 72  lectively."numer
10fd0 69 63 20 6c 69 74 65 72 61 6c 73 22 29 20 69 73  ic literals") is
10fe0 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f   shown by the fo
10ff0 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a  llowing diagram:
11000 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
11010 65 44 69 61 67 72 61 6d 20 6e 75 6d 65 72 69 63  eDiagram numeric
11020 2d 6c 69 74 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a  -literal</tcl>..
11030 3c 70 3e 0a 5e 28 49 66 20 61 20 6e 75 6d 65 72  <p>.^(If a numer
11040 69 63 20 6c 69 74 65 72 61 6c 20 68 61 73 20 61  ic literal has a
11050 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 6f   decimal point o
11060 72 20 61 6e 20 65 78 70 6f 6e 65 6e 74 69 61 74  r an exponentiat
11070 69 6f 6e 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e  ion.clause, then
11080 20 69 74 20 69 73 20 61 20 66 6c 6f 61 74 69 6e   it is a floatin
11090 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 2e  g point literal.
110a0 20 20 4f 74 68 65 72 77 69 73 65 20 69 73 20 69    Otherwise is i
110b0 74 20 69 73 20 61 6e 20 0a 69 6e 74 65 67 65 72  t is an .integer
110c0 20 6c 69 74 65 72 61 6c 2e 29 5e 20 20 5e 54 68   literal.)^  ^Th
110d0 65 20 22 45 22 20 63 68 61 72 61 63 74 65 72 20  e "E" character 
110e0 74 68 61 74 20 62 65 67 69 6e 73 20 74 68 65 20  that begins the 
110f0 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63  exponentiation.c
11100 6c 61 75 73 65 20 6f 66 20 61 20 66 6c 6f 61 74  lause of a float
11110 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
11120 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  l can be either 
11130 75 70 70 65 72 20 6f 72 20 6c 6f 77 65 72 20 63  upper or lower c
11140 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63  ase..^(The "." c
11150 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77 61  haracter is alwa
11160 79 73 20 75 73 65 64 20 0a 61 73 20 74 68 65 20  ys used .as the 
11170 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76  decimal point ev
11180 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65  en if the locale
11190 20 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69   setting specifi
111a0 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20  es "," for.this 
111b0 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f  role - the use o
111c0 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65  f "," for the de
111d0 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c  cimal point woul
111e0 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74  d result in.synt
111f0 61 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e  actic ambiguity.
11200 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 41 20 73  )^</p>..<p> ^A s
11210 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69  tring constant i
11220 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c  s formed by encl
11230 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67  osing the.string
11240 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
11250 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c  s (').  ^A singl
11260 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74  e quote within t
11270 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65  he string can.be
11280 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74   encoded by putt
11290 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71  ing two single q
112a0 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d  uotes in a row -
112b0 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43   as in Pascal..C
112c0 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73 20 75  -style escapes u
112d0 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61  sing the backsla
112e0 73 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65  sh character are
112f0 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62   not supported b
11300 65 63 61 75 73 65 0a 74 68 65 79 20 61 72 65 20  ecause.they are 
11310 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
11320 2e 0a 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73  ..^BLOB literals
11330 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69 74 65   are string lite
11340 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20  rals containing 
11350 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61 74 61  hexadecimal data
11360 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20 62 79   and.preceded by
11370 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20 6f 72   a single "x" or
11380 20 22 58 22 20 63 68 61 72 61 63 74 65 72 2e 20   "X" character. 
11390 20 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65 3a 3c   ^(For example:<
113a0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
113b0 3e 3c 70 72 65 3e 0a 58 27 35 33 35 31 34 43 36  ><pre>.X'53514C6
113c0 39 37 34 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f 62  97465'.</pre></b
113d0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
113e0 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c  >.^A literal val
113f0 75 65 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74  ue can also be t
11400 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e  he token "NULL".
11410 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
11420 72 61 67 6d 65 6e 74 20 76 61 72 70 61 72 61 6d  ragment varparam
11430 20 70 61 72 61 6d 65 74 65 72 20 70 61 72 61 6d   parameter param
11440 65 74 65 72 73 20 7b 62 6f 75 6e 64 20 70 61 72  eters {bound par
11450 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20 70  ameter} {bound p
11460 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c 3e  arameters}</tcl>
11470 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65 72 73 3c  .<h3>Parameters<
11480 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69  /h3>.<p>.A "vari
11490 61 62 6c 65 22 20 6f 72 20 22 70 61 72 61 6d 65  able" or "parame
114a0 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69  ter" token.speci
114b0 66 69 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64  fies a placehold
114c0 65 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  er in the expres
114d0 73 69 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c 75  sion for a .valu
114e0 65 20 74 68 61 74 20 69 73 20 66 69 6c 6c 65 64  e that is filled
114f0 20 69 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75   in at runtime u
11500 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65  sing the.[sqlite
11510 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20  3_bind_blob() | 
11520 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20  sqlite3_bind()] 
11530 66 61 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20  family of C/C++ 
11540 69 6e 74 65 72 66 61 63 65 73 2e 0a 50 61 72 61  interfaces..Para
11550 6d 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20  meters can take 
11560 73 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c  several forms:.<
11570 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
11580 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c  >.<table>.<tr>.<
11590 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
115a0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
115b0 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e  >?</b><i>NNN</i>
115c0 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
115d0 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28  20"></td>.<td>^(
115e0 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  A question mark 
115f0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75  followed by a nu
11600 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20  mber <i>NNN</i> 
11610 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72  holds a spot for
11620 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61   the.NNN-th para
11630 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74  meter.  NNN must
11640 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
11650 64 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  d [SQLITE_MAX_VA
11660 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29  RIABLE_NUMBER].)
11670 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  ^.</td>.</tr>.<t
11680 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
11690 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
116a0 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c  "><b>?</b></td><
116b0 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
116c0 74 64 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73 74  td>.<td>^A quest
116d0 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74 20 69 73  ion mark that is
116e0 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79   not followed by
116f0 20 61 20 6e 75 6d 62 65 72 20 63 72 65 61 74 65   a number create
11700 73 20 61 20 70 61 72 61 6d 65 74 65 72 0a 77 69  s a parameter.wi
11710 74 68 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65 20  th a number one 
11720 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
11730 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65 74   largest paramet
11740 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64  er number alread
11750 79 20 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66 20  y assigned..^If 
11760 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70  this means the p
11770 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
11780 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a  is greater than.
11790 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49  [SQLITE_MAX_VARI
117a0 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74  ABLE_NUMBER], it
117b0 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 2f   is an error..</
117c0 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
117d0 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
117e0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
117f0 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >:</b><i>AAAA</i
11800 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
11810 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
11820 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64  A colon followed
11830 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65   by an identifie
11840 72 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73  r name holds a s
11850 70 6f 74 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69  pot for a .[sqli
11860 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
11870 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61  er_name|named pa
11880 72 61 6d 65 74 65 72 5d 20 77 69 74 68 20 74 68  rameter] with th
11890 65 20 6e 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a  e name :AAAA.  .
118a0 5e 28 4e 61 6d 65 64 20 70 61 72 61 6d 65 74 65  ^(Named paramete
118b0 72 73 20 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62  rs are also numb
118c0 65 72 65 64 2e 20 54 68 65 20 6e 75 6d 62 65 72  ered. The number
118d0 20 61 73 73 69 67 6e 65 64 20 69 73 20 6f 6e 65   assigned is one
118e0 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 74 68   greater than.th
118f0 65 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65  e largest parame
11900 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61  ter number alrea
11910 64 79 20 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e  dy assigned.)^ ^
11920 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68  If this means th
11930 65 20 70 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c  e parameter.woul
11940 64 20 62 65 20 61 73 73 69 67 6e 65 64 20 61 20  d be assigned a 
11950 6e 75 6d 62 65 72 20 67 72 65 61 74 65 72 20 74  number greater t
11960 68 61 6e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  han [SQLITE_MAX_
11970 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
11980 2c 20 69 74 20 69 73 0a 61 6e 20 65 72 72 6f 72  , it is.an error
11990 2e 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  . To avoid confu
119a0 73 69 6f 6e 2c 20 69 74 20 69 73 20 62 65 73 74  sion, it is best
119b0 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67   to avoid mixing
119c0 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65   named and numbe
119d0 72 65 64 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c  red.parameters.<
119e0 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
119f0 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
11a00 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
11a10 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>@</b><i>AAAA</
11a20 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
11a30 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
11a40 5e 41 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f  ^An "at" sign wo
11a50 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
11a60 20 61 20 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74   a colon, except
11a70 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 20 6f   that the name o
11a80 66 0a 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f.the parameter 
11a90 63 72 65 61 74 65 64 20 69 73 20 40 41 41 41 41  created is @AAAA
11aa0 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  .</td>.</tr>.<tr
11ab0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
11ac0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
11ad0 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41  ><b>$</b><i>AAAA
11ae0 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </i></td><td wid
11af0 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
11b00 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e  d>^A dollar-sign
11b10 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
11b20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20  identifier name 
11b30 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f  also holds a spo
11b40 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61  t for a named.pa
11b50 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68 65  rameter with the
11b60 20 6e 61 6d 65 20 24 41 41 41 41 2e 20 20 5e 28   name $AAAA.  ^(
11b70 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e  The identifier n
11b80 61 6d 65 20 69 6e 20 74 68 69 73 20 63 61 73 65  ame in this case
11b90 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65   can include.one
11ba0 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72 72 65   or more occurre
11bb0 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64  nces of "::" and
11bc0 20 61 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73   a suffix enclos
11bd0 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f  ed in "(...)" co
11be0 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78  ntaining.any tex
11bf0 74 20 61 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69  t at all.)^  Thi
11c00 73 20 73 79 6e 74 61 78 20 69 73 20 74 68 65 20  s syntax is the 
11c10 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62  form of a variab
11c20 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b  le name in the.[
11c30 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74  http://www.tcl.t
11c40 6b 2f 20 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d  k/ | Tcl program
11c50 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20  ming language]. 
11c60 20 54 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66   The presence.of
11c70 20 74 68 69 73 20 73 79 6e 74 61 78 20 72 65 73   this syntax res
11c80 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61  ults from the fa
11c90 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 69  ct that SQLite i
11ca0 73 20 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c  s really a .[Tcl
11cb0 20 65 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74   extension] that
11cc0 20 68 61 73 20 65 73 63 61 70 65 64 20 69 6e 74   has escaped int
11cd0 6f 20 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e  o the wild.</td>
11ce0 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
11cf0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
11d00 70 3e 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68  p>^Parameters th
11d10 61 74 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67  at are not assig
11d20 6e 65 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67  ned values using
11d30 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  .[sqlite3_bind_b
11d40 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f  lob() | sqlite3_
11d50 62 69 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61  bind()] are trea
11d60 74 65 64 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e  ted.as NULL.</p>
11d70 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
11d80 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  m parameter numb
11d90 65 72 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d  er is set at com
11da0 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65  pile-time by.the
11db0 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
11dc0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61  IABLE_NUMBER] ma
11dd0 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76  cro.  ^(An indiv
11de0 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20  idual [database 
11df0 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 0a 44 20 63  connections].D c
11e00 61 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d 61  an reduce its ma
11e10 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20  ximum parameter 
11e20 6e 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68 65  number below the
11e30 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61   compile-time ma
11e40 78 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65 20  ximum.using the 
11e50 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28  [sqlite3_limit](
11e60 44 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  D, [SQLITE_LIMIT
11e70 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
11e80 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  ],...) interface
11e90 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  .)^.</p>..<tcl>h
11ea0 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20  d_fragment like 
11eb0 4c 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c  LIKE ESCAPE</tcl
11ec0 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 20 61  >.<h3>The LIKE a
11ed0 6e 64 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72  nd GLOB operator
11ee0 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c  s</h3>.<p>^The L
11ef0 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65  IKE operator doe
11f00 73 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63  s a pattern matc
11f10 68 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  hing comparison.
11f20 20 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f   ^The operand.to
11f30 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68   the right of th
11f40 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
11f50 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74  contains the pat
11f60 74 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66  tern and the lef
11f70 74 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63  t hand.operand c
11f80 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72 69  ontains the stri
11f90 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69  ng to match agai
11fa0 6e 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e  nst the pattern.
11fb0 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22  ..<tcl>hd_puts "
11fc0 5e 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f  ^A percent symbo
11fd0 6c 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65  l (\"%\") in the
11fe0 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61   LIKE pattern ma
11ff0 74 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e  tches any.sequen
12000 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f  ce of zero or mo
12010 72 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  re characters in
12020 20 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41   the string.  ^A
12030 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22  n underscore.(\"
12040 5f 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45  _\") in the LIKE
12050 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73   pattern matches
12060 20 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72   any single char
12070 61 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72  acter in the.str
12080 69 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65  ing.  ^(Any othe
12090 72 20 63 68 61 72 61 63 74 65 72 20 6d 61 74 63  r character matc
120a0 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74  hes itself or it
120b0 73 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61  s lower/upper ca
120c0 73 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69  se.equivalent (i
120d0 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69  .e. case-insensi
120e0 74 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29  tive matching).)
120f0 5e 20 20 28 41 20 62 75 67 3a 20 5e 53 51 4c 69  ^  (A bug: ^SQLi
12100 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61  te only.understa
12110 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20  nds upper/lower 
12120 63 61 73 65 20 66 6f 72 20 41 53 43 49 49 20 63  case for ASCII c
12130 68 61 72 61 63 74 65 72 73 20 62 79 20 64 65 66  haracters by def
12140 61 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45  ault.  ^The.LIKE
12150 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73   operator is cas
12160 65 20 73 65 6e 73 69 74 69 76 65 20 62 79 20 64  e sensitive by d
12170 65 66 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f  efault for unico
12180 64 65 20 63 68 61 72 61 63 74 65 72 73 20 74 68  de characters th
12190 61 74 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68  at are.beyond th
121a0 65 20 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20  e ASCII range.  
121b0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68  For example,.^th
121c0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e  e expression <b>
121d0 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  'a'&nbsp;LIKE&nb
121e0 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52  sp;'A'</b>.is TR
121f0 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69  UE but <b>'&aeli
12200 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  g;'&nbsp;LIKE&nb
12210 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e  sp;'&AElig;'</b>
12220 20 69 73 20 46 41 4c 53 45 2e 29 3c 70 3e 22 3c   is FALSE.)<p>"<
12230 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  /tcl>..<p>^If th
12240 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50  e optional ESCAP
12250 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  E clause is pres
12260 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78  ent, then the ex
12270 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69  pression.followi
12280 6e 67 20 74 68 65 20 45 53 43 41 50 45 20 6b 65  ng the ESCAPE ke
12290 79 77 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75  yword must evalu
122a0 61 74 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20  ate to a string 
122b0 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20  consisting of.a 
122c0 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
122d0 2e 20 5e 54 68 69 73 20 63 68 61 72 61 63 74 65  . ^This characte
122e0 72 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e  r may be used in
122f0 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72   the LIKE patter
12300 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74  n.to include lit
12310 65 72 61 6c 20 70 65 72 63 65 6e 74 20 6f 72 20  eral percent or 
12320 75 6e 64 65 72 73 63 6f 72 65 20 63 68 61 72 61  underscore chara
12330 63 74 65 72 73 2e 20 5e 54 68 65 20 65 73 63 61  cters. ^The esca
12340 70 65 0a 63 68 61 72 61 63 74 65 72 20 66 6f 6c  pe.character fol
12350 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72 63 65  lowed by a perce
12360 6e 74 20 73 79 6d 62 6f 6c 20 28 25 29 2c 20 75  nt symbol (%), u
12370 6e 64 65 72 73 63 6f 72 65 20 28 5f 29 2c 20 6f  nderscore (_), o
12380 72 20 61 20 73 65 63 6f 6e 64 0a 69 6e 73 74 61  r a second.insta
12390 6e 63 65 20 6f 66 20 74 68 65 20 65 73 63 61 70  nce of the escap
123a0 65 20 63 68 61 72 61 63 74 65 72 20 69 74 73 65  e character itse
123b0 6c 66 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74  lf matches a.lit
123c0 65 72 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d  eral percent sym
123d0 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 2c  bol, underscore,
123e0 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 65 73 63   or a single esc
123f0 61 70 65 20 63 68 61 72 61 63 74 65 72 2c 0a 72  ape character,.r
12400 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70  espectively...<p
12410 3e 5e 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45  >^The infix LIKE
12420 20 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70   operator is imp
12430 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c  lemented by call
12440 69 6e 67 20 74 68 65 0a 61 70 70 6c 69 63 61 74  ing the.applicat
12450 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20  ion-defined SQL 
12460 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28  functions [like(
12470 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69  <i>Y</i>,<i>X</i
12480 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e  >)] or.[like(<i>
12490 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c  Y</i>,<i>X</i>,<
124a0 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f  i>Z</i>)]</a>.</
124b0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45  p>..<p>^The LIKE
124c0 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65   operator can be
124d0 20 6d 61 64 65 20 63 61 73 65 20 73 65 6e 73 69   made case sensi
124e0 74 69 76 65 20 75 73 69 6e 67 20 74 68 65 0a 5b  tive using the.[
124f0 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c  case_sensitive_l
12500 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e  ike pragma].</p>
12510 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
12520 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63  nt glob GLOB</tc
12530 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20  l>.<p>^The GLOB 
12540 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69  operator is simi
12550 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20  lar to LIKE but 
12560 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69  uses the Unix.fi
12570 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74  le globbing synt
12580 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63  ax for its wildc
12590 61 72 64 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c  ards.  ^Also, GL
125a0 4f 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69  OB is case.sensi
125b0 74 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b  tive, unlike LIK
125c0 45 2e 20 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61  E.  ^Both GLOB a
125d0 6e 64 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70  nd LIKE may be p
125e0 72 65 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e  receded by.the N
125f0 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e  OT keyword to in
12600 76 65 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f  vert the sense o
12610 66 20 74 68 65 20 74 65 73 74 2e 20 20 5e 54 68  f the test.  ^Th
12620 65 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70  e infix GLOB .op
12630 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d  erator is implem
12640 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
12650 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67   the function.[g
12660 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  lob(<i>Y</i>,<i>
12670 58 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20  X</i>)] and can 
12680 62 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 6f  be modified by o
12690 76 65 72 72 69 64 69 6e 67 0a 74 68 61 74 20 66  verriding.that f
126a0 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  unction.</p>..<t
126b0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
126c0 65 67 65 78 70 20 52 45 47 45 58 50 3c 2f 74 63  egexp REGEXP</tc
126d0 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52 45 47 45 58  l>.<p>^The REGEX
126e0 50 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  P operator is a 
126f0 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66  special syntax f
12700 6f 72 20 74 68 65 20 72 65 67 65 78 70 28 29 0a  or the regexp().
12710 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20  user function.  
12720 5e 4e 6f 20 72 65 67 65 78 70 28 29 20 75 73 65  ^No regexp() use
12730 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  r function is de
12740 66 69 6e 65 64 20 62 79 20 64 65 66 61 75 6c 74  fined by default
12750 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66 20 74  .and so use of t
12760 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74  he REGEXP operat
12770 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79  or will normally
12780 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72   result in an.er
12790 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20 5e 49  ror message.  ^I
127a0 66 20 61 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e  f a [application
127b0 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e  -defined SQL fun
127c0 63 74 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65  ction] named "re
127d0 67 65 78 70 22 0a 69 73 20 61 64 64 65 64 20 61  gexp".is added a
127e0 74 20 72 75 6e 2d 74 69 6d 65 2c 20 74 68 61 74  t run-time, that
127f0 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62   function will b
12800 65 20 63 61 6c 6c 65 64 20 69 6e 20 6f 72 64 65  e called in orde
12810 72 0a 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  r.to implement t
12820 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74  he REGEXP operat
12830 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  or.</p>..<tcl>hd
12840 5f 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20  _fragment match 
12850 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  MATCH</tcl>.<p>^
12860 54 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74  The MATCH operat
12870 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  or is a special 
12880 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d  syntax for the m
12890 61 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69  atch().applicati
128a0 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  on-defined funct
128b0 69 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ion.  ^The defau
128c0 6c 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74  lt match() funct
128d0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
128e0 6f 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63  on.raises an exc
128f0 65 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f  eption and is no
12900 74 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20  t really useful 
12910 66 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42  for anything..^B
12920 75 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61  ut extensions ca
12930 6e 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d  n override the m
12940 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  atch() function 
12950 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75  with more.helpfu
12960 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74  l logic.</p>..<t
12970 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
12980 65 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f  etween BETWEEN</
12990 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54  tcl>.<h3>The BET
129a0 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68  WEEN operator</h
129b0 33 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57  3>.<p>^(The BETW
129c0 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20  EEN operator is 
129d0 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61  logically equiva
129e0 6c 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f  lent to a pair o
129f0 66 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22  f comparisons.."
12a00 3c 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57  <i>x</i> <b>BETW
12a10 45 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e  EEN</b> <i>y</i>
12a20 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a   <b>AND</b> <i>z
12a30 3c 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61  </i>" is .equiva
12a40 6c 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f  lent to ."<i>x</
12a50 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69  i><b>&gt;=</b><i
12a60 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62  >y</i> <b>AND</b
12a70 3e 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74  > <i>x</i><b>&lt
12a80 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20  ;=</b><i>z</i>" 
12a90 65 78 63 65 70 74 0a 74 68 61 74 20 77 69 74 68  except.that with
12aa0 20 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69   BETWEEN, the <i
12ab0 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f  >x</i> expressio
12ac0 6e 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61  n is only evalua
12ad0 74 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65  ted once.)^.^The
12ae0 20 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74   precedence of t
12af0 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
12b00 74 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20  tor is the same 
12b10 61 73 20 74 68 65 20 70 72 65 63 65 64 65 6e 63  as the precedenc
12b20 65 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c  e.as operators <
12b30 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e  b>==</b> and <b>
12b40 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49  !=</b> and <b>LI
12b50 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70  KE</b> and group
12b60 73 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  s left to right.
12b70 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
12b80 6e 74 20 63 61 73 65 20 7b 43 41 53 45 20 65 78  nt case {CASE ex
12b90 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  pression}</tcl>.
12ba0 3c 68 33 3e 54 68 65 20 43 41 53 45 20 65 78 70  <h3>The CASE exp
12bb0 72 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e  ression</h3>.<p>
12bc0 41 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  A CASE expressio
12bd0 6e 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20  n serves a role 
12be0 73 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48  similar to IF-TH
12bf0 45 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72  EN-ELSE in other
12c00 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e  .programming lan
12c10 67 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68  guages.  ..<p>Th
12c20 65 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65  e optional expre
12c30 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72  ssion that occur
12c40 73 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  s in between the
12c50 20 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e   CASE keyword an
12c60 64 20 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e  d the.first WHEN
12c70 20 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c   keyword is call
12c80 65 64 20 74 68 65 20 22 62 61 73 65 22 20 65 78  ed the "base" ex
12c90 70 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65  pression. ^There
12ca0 20 61 72 65 20 74 77 6f 20 62 61 73 69 63 20 66   are two basic f
12cb0 6f 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45  orms.of the CASE
12cc0 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f   expression: tho
12cd0 73 65 20 77 69 74 68 20 61 20 62 61 73 65 20 65  se with a base e
12ce0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
12cf0 6f 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70  ose without...<p
12d00 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68  >^In a CASE with
12d10 6f 75 74 20 61 20 62 61 73 65 20 65 78 70 72 65  out a base expre
12d20 73 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e  ssion, each WHEN
12d30 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
12d40 76 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65  valuated.and the
12d50 20 72 65 73 75 6c 74 20 74 72 65 61 74 65 64 20   result treated 
12d60 61 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74  as a boolean, st
12d70 61 72 74 69 6e 67 20 77 69 74 68 20 74 68 65 20  arting with the 
12d80 6c 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e  leftmost and con
12d90 74 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72  tinuing.to the r
12da0 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c  ight. ^The resul
12db0 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  t of the CASE ex
12dc0 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
12dd0 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68  evaluation of th
12de0 65 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  e THEN.expressio
12df0 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  n that correspon
12e00 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ds to the first 
12e10 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
12e20 74 68 61 74 20 65 76 61 6c 75 61 74 65 73 20 74  that evaluates t
12e30 6f 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20  o.true. ^Or, if 
12e40 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
12e50 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61   expressions eva
12e60 6c 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74  luate to true, t
12e70 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61  he result of.eva
12e80 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45  luating the ELSE
12e90 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20   expression, if 
12ea0 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69  any. ^If there i
12eb0 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73  s no ELSE expres
12ec0 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66  sion and.none of
12ed0 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73   the WHEN expres
12ee0 73 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20  sions are true, 
12ef0 74 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c  then the overall
12f00 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
12f10 0a 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73  ..<p>^A NULL res
12f20 75 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ult is considere
12f30 64 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76  d untrue when ev
12f40 61 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65  aluating WHEN te
12f50 72 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43  rms...<p>^In a C
12f60 41 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20  ASE with a base 
12f70 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
12f80 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
12f90 69 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73  is evaluated jus
12fa0 74 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72  t.once and the r
12fb0 65 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65  esult is compare
12fc0 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 65 76  d against the ev
12fd0 61 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68  aluation of each
12fe0 20 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f   WHEN .expressio
12ff0 6e 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  n from left to r
13000 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c  ight. ^The resul
13010 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  t of the CASE ex
13020 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
13030 0a 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74  .evaluation of t
13040 68 65 20 54 48 45 4e 20 65 78 70 72 65 73 73 69  he THEN expressi
13050 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  on that correspo
13060 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nds to the first
13070 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   WHEN.expression
13080 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 63   for which the c
13090 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
130a0 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20  e. ^Or, if none 
130b0 6f 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72  of the WHEN.expr
130c0 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
130d0 20 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61   to a value equa
130e0 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78  l to the base ex
130f0 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65  pression, the re
13100 73 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69  sult.of evaluati
13110 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72  ng the ELSE expr
13120 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20  ession, if any. 
13130 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
13140 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
13150 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and.none of the 
13160 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
13170 20 70 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c   produce a resul
13180 74 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62  t equal to the b
13190 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a  ase expression,.
131a0 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75  the overall resu
131b0 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  lt is NULL...<p>
131c0 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20  ^When comparing 
131d0 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  a base expressio
131e0 6e 20 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e  n against a WHEN
131f0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65   expression, the
13200 20 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20   same.collating 
13210 73 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69  sequence, affini
13220 74 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e  ty, and NULL-han
13230 64 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c  dling rules appl
13240 79 20 61 73 20 69 66 20 74 68 65 0a 62 61 73 65  y as if the.base
13250 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
13260 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
13270 61 72 65 20 72 65 73 70 65 63 74 69 76 65 6c 79  are respectively
13280 20 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72   the left- and.r
13290 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e  ight-hand operan
132a0 64 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62  ds of an <big><b
132b0 3e 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65  >=</b></big> ope
132c0 72 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74  rator.</p> ^If t
132d0 68 65 20 62 61 73 65 20 0a 65 78 70 72 65 73 73  he base .express
132e0 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  ion is NULL then
132f0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
13300 68 65 20 43 41 53 45 20 69 73 20 61 6c 77 61 79  he CASE is alway
13310 73 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66  s the result .of
13320 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
13330 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
13340 69 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72  if it exists, or
13350 20 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73   NULL if it does
13360 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20   not...<p>^Both 
13370 66 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53  forms of the CAS
13380 45 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65  E expression use
13390 20 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d   lazy, or short-
133a0 63 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61  circuit, .evalua
133b0 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  tion...<p>^(The 
133c0 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20  only difference 
133d0 62 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c  between the foll
133e0 6f 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65  owing two CASE e
133f0 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68  xpressions is th
13400 61 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e  at .the <i>x</i>
13410 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
13420 76 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79  valuated exactly
13430 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72   once in the fir
13440 73 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a  st example but .
13450 6d 69 67 68 74 20 62 65 20 65 76 61 6c 75 61 74  might be evaluat
13460 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65  ed multiple time
13470 73 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a  s in the second:
13480 0a 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e  ..<ul><pre>.<li>
13490 43 41 53 45 20 78 20 57 48 45 4e 20 77 31 20 54  CASE x WHEN w1 T
134a0 48 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54  HEN r1 WHEN w2 T
134b0 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45  HEN r2 ELSE r3 E
134c0 4e 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e  ND.<li>CASE WHEN
134d0 20 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48   x=w1 THEN r1 WH
134e0 45 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20  EN x=w2 THEN r2 
134f0 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72  ELSE r3 END.</pr
13500 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c  e></ul>)^...<tcl
13510 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f  >hd_fragment in_
13520 6f 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d  op {IN operator}
13530 20 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f   {NOT IN operato
13540 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  r}</tcl>.<h3>The
13550 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f   IN and NOT IN o
13560 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70  perators</h3>.<p
13570 3e 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54  >^The IN and NOT
13580 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61   IN operators ta
13590 6b 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c  ke a single scal
135a0 61 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68  ar operand on th
135b0 65 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63  e.left and a vec
135c0 74 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74  tor operand on t
135d0 68 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20  he right.formed 
135e0 62 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c  by an explicit l
135f0 69 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d  ist of zero or m
13600 6f 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62  ore scalars or b
13610 79 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71  y a .single subq
13620 75 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20  uery..^When the 
13630 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66  right operand of
13640 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
13650 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
13660 75 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62  ubquery, the.sub
13670 71 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20  query must have 
13680 61 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20  a single result 
13690 63 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68  column..^When th
136a0 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  e right operand 
136b0 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c  is an empty set,
136c0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49   the result of I
136d0 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74  N is false and t
136e0 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54  he.result of NOT
136f0 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67   IN is true, reg
13700 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c  ardless of the l
13710 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20  eft operand and 
13720 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74  even if the.left
13730 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
13740 2e 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f  ..^(The result o
13750 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
13760 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65  N operator is de
13770 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
13780 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78  following.matrix
13790 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62  :..<center>.<tab
137a0 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  le border=1>.<tr
137b0 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61  >.<th>Left opera
137c0 6e 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c  nd <br>is NULL.<
137d0 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64  th>Right operand
137e0 20 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55   <br>contains NU
137f0 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65  LL.<th>Right ope
13800 72 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65  rand <br>is an e
13810 6d 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66  mpty set.<th>Lef
13820 74 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20  t operand found 
13830 3c 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74  <br>within right
13840 20 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73   operand.<th>Res
13850 75 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70  ult of <br>IN op
13860 65 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c  erator.<th>Resul
13870 74 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20  t of <br>NOT IN 
13880 6f 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74  operator.<tr>.<t
13890 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
138a0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
138b0 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
138c0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
138d0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
138e0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
138f0 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
13900 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13910 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20  ">true.<tr>.<td 
13920 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64  align="center">d
13930 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c  oes not matter.<
13940 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13950 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13960 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
13970 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13980 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13990 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61  ter">false.<td a
139a0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72  lign="center">tr
139b0 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  ue.<tr>.<td alig
139c0 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
139d0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
139e0 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
139f0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13a00 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
13a10 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
13a20 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13a30 3e 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d  >true.<td align=
13a40 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
13a50 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
13a60 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
13a70 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
13a80 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13a90 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
13aa0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
13ab0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13ac0 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  NULL.<td align="
13ad0 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72  center">NULL.<tr
13ae0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
13af0 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69  ter">yes.<td ali
13b00 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73  gn="center">does
13b10 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20   not matter.<td 
13b20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13b30 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13b40 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
13b50 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
13b60 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64  center">NULL.<td
13b70 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13b80 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  NULL.</table>.</
13b90 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e  center>)^..<p>^N
13ba0 6f 74 65 20 74 68 61 74 20 53 51 4c 69 74 65 20  ote that SQLite 
13bb0 61 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e  allows the paren
13bc0 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
13bd0 20 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f   scalar values o
13be0 6e 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  n.the right-hand
13bf0 20 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f   side of an IN o
13c00 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r NOT IN operato
13c10 72 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79  r to be an empty
13c20 20 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f   list but.most o
13c30 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
13c40 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  e database engin
13c50 65 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32  es and the SQL92
13c60 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72   standard requir
13c70 65 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f  e.the list to co
13c80 6e 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f  ntain at least o
13c90 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a  ne element.</p>.
13ca0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
13cb0 74 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20  t in_op {EXISTS 
13cc0 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45  operator} {NOT E
13cd0 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c  XISTS operator}<
13ce0 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58  /tcl>.<h3>The EX
13cf0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68  ISTS operator</h
13d00 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53  3>..<p>^The EXIS
13d10 54 53 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61  TS operator alwa
13d20 79 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  ys evaluates to 
13d30 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  one of the integ
13d40 65 72 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64  er values 0 .and
13d50 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e   1. ^If executin
13d60 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  g the SELECT sta
13d70 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64  tement specified
13d80 20 61 73 20 74 68 65 20 72 69 67 68 74 2d 68 61   as the right-ha
13d90 6e 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74  nd .operand of t
13da0 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
13db0 6f 72 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20  or would return 
13dc0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  one or more rows
13dd0 2c 20 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54  , then the.EXIST
13de0 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  S operator evalu
13df0 61 74 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65  ates to 1. ^If e
13e00 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c  xecuting the SEL
13e10 45 43 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e  ECT would return
13e20 0a 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c  .no rows at all,
13e30 20 74 68 65 6e 20 74 68 65 20 45 58 49 53 54 53   then the EXISTS
13e40 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
13e50 74 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e  tes to 0. ..<p>^
13e60 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
13e70 6c 75 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f  lumns in each ro
13e80 77 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  w returned by th
13e90 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
13ea0 6e 74 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20  nt.(if any) and 
13eb0 74 68 65 20 73 70 65 63 69 66 69 63 20 76 61 6c  the specific val
13ec0 75 65 73 20 72 65 74 75 72 6e 65 64 20 68 61 76  ues returned hav
13ed0 65 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74  e no effect on t
13ee0 68 65 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68  he results.of th
13ef0 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
13f00 72 2e 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61  r. ^In particula
13f10 72 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69  r, rows containi
13f20 6e 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  ng NULL values a
13f30 72 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61  re.not handled a
13f40 6e 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66  ny differently f
13f50 72 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74  rom rows without
13f60 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c   NULL values...<
13f70 68 33 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65  h3>Scalar Subque
13f80 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41  ries</h3>..<p>^A
13f90 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
13fa0 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ent enclosed in 
13fb0 70 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20  parentheses may 
13fc0 61 70 70 65 61 72 20 61 73 20 61 20 73 63 61 6c  appear as a scal
13fd0 61 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20  ar.quantity. ^A 
13fe0 5b 53 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73  [SELECT] used as
13ff0 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69   a scalar quanti
14000 74 79 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61  ty must return a
14010 20 72 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68   result set.with
14020 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
14030 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  . ^The result of
14040 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
14050 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  is the value of 
14060 74 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20  the.only column 
14070 69 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f 77  in the first row
14080 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
14090 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
140a0 74 2e 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43  t. ^If the SELEC
140b0 54 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74  T .yields more t
140c0 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72  han one result r
140d0 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74  ow, all rows aft
140e0 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72 65  er the first are
140f0 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68   ignored. ^If.th
14100 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20  e SELECT yields 
14110 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68  no rows, then th
14120 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65  e value of the e
14130 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c  xpression is NUL
14140 4c 2e 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f  L..^(The LIMIT o
14150 66 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75  f a scalar subqu
14160 65 72 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e  ery is always 1.
14170 0a 41 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54  .Any other LIMIT
14180 20 76 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20   value given in 
14190 74 68 65 20 53 51 4c 20 74 65 78 74 20 69 73 20  the SQL text is 
141a0 69 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e  ignored.)^..<p>^
141b0 41 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45  All types of [SE
141c0 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
141d0 20 69 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65   including aggre
141e0 67 61 74 65 20 61 6e 64 20 63 6f 6d 70 6f 75 6e  gate and compoun
141f0 64 20 53 45 4c 45 43 54 0a 71 75 65 72 69 65 73  d SELECT.queries
14200 20 28 71 75 65 72 69 65 73 20 77 69 74 68 20 6b   (queries with k
14210 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49  eywords like UNI
14220 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20 61 72  ON or EXCEPT) ar
14230 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63 61  e allowed as sca
14240 6c 61 72 0a 73 75 62 71 75 65 72 69 65 73 2e 0a  lar.subqueries..
14250 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d  .<h3>Table Colum
14260 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70  n Names</h3>..<p
14270 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  >^A column name 
14280 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68  can be any of th
14290 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20  e names defined 
142a0 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  in the [CREATE T
142b0 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
142c0 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  or one of the fo
142d0 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20  llowing special 
142e0 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62  identifiers: "<b
142f0 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62  >ROWID</b>",."<b
14300 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c  >OID</b>", or "<
14310 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a  b>_ROWID_</b>"..
14320 5e 54 68 65 73 65 20 73 70 65 63 69 61 6c 20 69  ^These special i
14330 64 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20 64  dentifiers all d
14340 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71  escribe the.uniq
14350 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28  ue integer key (
14360 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73  the [rowid]) ass
14370 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 76 65  ociated with eve
14380 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79  ry .row of every
14390 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65   table..^The spe
143a0 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
143b0 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74   only refer to t
143c0 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68  he row key if th
143d0 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
143e0 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20  .statement does 
143f0 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65 61  not define a rea
14400 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68  l column with th
14410 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68  e same name..^Th
14420 65 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75  e rowid can be u
14430 73 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72  sed anywhere a r
14440 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61  egular.column ca
14450 6e 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  n be used.</p>..
14460 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73  <p>^A [SELECT] s
14470 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73  tatement used as
14480 20 65 69 74 68 65 72 20 61 20 73 63 61 6c 61 72   either a scalar
14490 20 73 75 62 71 75 65 72 79 20 6f 72 20 61 73 20   subquery or as 
144a0 74 68 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20  the .right-hand 
144b0 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
144c0 2c 20 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53  , NOT IN or EXIS
144d0 54 53 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  TS expression ma
144e0 79 20 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72  y contain .refer
144f0 65 6e 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73  ences to columns
14500 20 69 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75   in the outer qu
14510 65 72 79 2e 20 53 75 63 68 20 61 20 73 75 62 71  ery. Such a subq
14520 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73  uery is known as
14530 0a 61 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75  .a correlated su
14540 62 71 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65  bquery. ^A corre
14550 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69  lated subquery i
14560 73 20 72 65 65 76 61 6c 75 61 74 65 64 20 65 61  s reevaluated ea
14570 63 68 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75  ch time.its resu
14580 6c 74 20 69 73 20 72 65 71 75 69 72 65 64 2e 20  lt is required. 
14590 5e 41 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64  ^An uncorrelated
145a0 20 73 75 62 71 75 65 72 79 20 69 73 20 65 76 61   subquery is eva
145b0 6c 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65  luated only once
145c0 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20  .and the result 
145d0 72 65 75 73 65 64 20 61 73 20 6e 65 63 65 73 73  reused as necess
145e0 61 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ary...<tcl>hd_fr
145f0 61 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20  agment castexpr 
14600 7b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  {CAST expression
14610 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54  }</tcl>.<h3>CAST
14620 20 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   expressions</h3
14630 3e 0a 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70  >..<p>A CAST exp
14640 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
14650 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76  to convert the v
14660 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72  alue of &lt;expr
14670 26 67 74 3b 20 74 6f 20 0a 61 20 64 69 66 66 65  &gt; to .a diffe
14680 72 65 6e 74 20 5b 73 74 6f 72 61 67 65 20 63 6c  rent [storage cl
14690 61 73 73 5d 20 69 6e 20 61 20 73 69 6d 69 6c 61  ass] in a simila
146a0 72 20 77 61 79 20 74 6f 20 74 68 65 20 63 6f 6e  r way to the con
146b0 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61 6b  version that tak
146c0 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61 20  es.place when a 
146d0 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79  [column affinity
146e0 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20  ] is applied to 
146f0 61 20 76 61 6c 75 65 2e 20 5e 41 70 70 6c 69 63  a value. ^Applic
14700 61 74 69 6f 6e 20 6f 66 20 61 20 43 41 53 54 0a  ation of a CAST.
14710 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 64 69  expression is di
14720 66 66 65 72 65 6e 74 20 74 6f 20 61 70 70 6c 69  fferent to appli
14730 63 61 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75  cation of a colu
14740 6d 6e 20 61 66 66 69 6e 69 74 79 2c 20 61 73 0a  mn affinity, as.
14750 77 69 74 68 20 61 20 43 41 53 54 20 65 78 70 72  with a CAST expr
14760 65 73 73 69 6f 6e 20 74 68 65 20 73 74 6f 72 61  ession the stora
14770 67 65 20 63 6c 61 73 73 20 63 6f 6e 76 65 72 73  ge class convers
14780 69 6f 6e 20 69 73 20 66 6f 72 63 65 64 20 65 76  ion is forced ev
14790 65 6e 20 0a 69 66 20 69 74 20 69 73 20 6c 6f 73  en .if it is los
147a0 73 79 20 61 6e 64 20 69 72 72 72 65 76 65 72 73  sy and irrrevers
147b0 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ible...<p>^If th
147c0 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65  e value of &lt;e
147d0 78 70 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c  xpr&gt; is NULL,
147e0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
147f0 20 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70   of the CAST.exp
14800 72 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20  ression is also 
14810 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65  NULL. ^Otherwise
14820 2c 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  , the storage cl
14830 61 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ass of the resul
14840 74 20 76 61 6c 75 65 0a 69 73 20 64 65 74 65 72  t value.is deter
14850 6d 69 6e 65 64 20 62 79 20 61 70 70 6c 79 69 6e  mined by applyin
14860 67 20 74 68 65 20 5b 72 75 6c 65 73 20 66 6f 72  g the [rules for
14870 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 63 6f 6c   determining col
14880 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 74 6f  umn affinity] to
14890 0a 74 68 65 20 26 6c 74 3b 74 79 70 65 2d 6e 61  .the &lt;type-na
148a0 6d 65 26 67 74 3b 20 73 70 65 63 69 66 69 65 64  me&gt; specified
148b0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
148c0 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  CAST expression.
148d0 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
148e0 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20 41  1>.<tr>.  <th> A
148f0 66 66 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b 74  ffinity of &lt;t
14900 79 70 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c  ype-name&gt;.  <
14910 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50  th> Conversion P
14920 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20  rocessing.<tr>. 
14930 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74   <td> NONE .  <t
14940 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61  d> ^Casting a va
14950 6c 75 65 20 74 6f 20 61 20 26 6c 74 3b 74 79 70  lue to a &lt;typ
14960 65 2d 6e 61 6d 65 26 67 74 3b 20 77 69 74 68 20  e-name&gt; with 
14970 6e 6f 20 61 66 66 69 6e 69 74 79 20 63 61 75 73  no affinity caus
14980 65 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a  es the value to.
14990 20 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69    be converted i
149a0 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61  nto a BLOB.  ^Ca
149b0 73 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20  sting to a BLOB 
149c0 63 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73  consists of firs
149d0 74 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20  t casting.  the 
149e0 76 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e  value to TEXT in
149f0 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20   the [encoding] 
14a00 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
14a10 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e  connection, then
14a20 0a 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  .  interpreting 
14a30 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79  the resulting by
14a40 74 65 20 73 65 71 75 65 6e 63 65 20 61 73 20 61  te sequence as a
14a50 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66   BLOB instead of
14a60 20 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a   as TEXT...<tr>.
14a70 20 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74    <td> TEXT.  <t
14a80 64 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c  d> ^To cast a BL
14a90 4f 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54  OB value to TEXT
14aa0 2c 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  , the sequence o
14ab0 66 20 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b  f bytes that mak
14ac0 65 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20  e up the.  BLOB 
14ad0 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
14ae0 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75  s text encoded u
14af0 73 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  sing the databas
14b00 65 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70  e encoding..  <p
14b10 3e 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e  >.   ^Casting an
14b20 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
14b30 20 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54   value into TEXT
14b40 20 72 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c   renders the val
14b50 75 65 20 61 73 20 69 66 20 76 69 61 20 0a 20 20  ue as if via .  
14b60 20 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69    [sqlite3_snpri
14b70 6e 74 66 28 29 5d 20 65 78 63 65 70 74 20 74 68  ntf()] except th
14b80 61 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67  at the resulting
14b90 20 54 45 58 54 20 75 73 65 73 20 74 68 65 20 5b   TEXT uses the [
14ba0 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20  encoding] of.   
14bb0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
14bc0 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a  nnection...<tr>.
14bd0 20 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74    <td> REAL.  <t
14be0 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  d> ^When casting
14bf0 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
14c00 20 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c   a REAL, the val
14c10 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76  ue is first conv
14c20 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20  erted to.       
14c30 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70   TEXT..       <p
14c40 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61  >^When casting a
14c50 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52   TEXT value to R
14c60 45 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74  EAL, the longest
14c70 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78   possible prefix
14c80 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20   of.        the 
14c90 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
14ca0 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
14cb0 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69   a real number i
14cc0 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  s extracted from
14cd0 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58  .        the TEX
14ce0 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  T value and the 
14cf0 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65  remainder ignore
14d00 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20  d. ^Any leading 
14d10 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20  spaces in the.  
14d20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65        TEXT value
14d30 20 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65   are ignored whe
14d40 6e 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f  n converging fro
14d50 6d 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20  m TEXT to REAL. 
14d60 5e 28 49 66 20 74 68 65 72 65 20 69 73 0a 20 20  ^(If there is.  
14d70 20 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20        no prefix 
14d80 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65  that can be inte
14d90 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61  rpreted as a rea
14da0 6c 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  l number, the re
14db0 73 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20  sult of the.    
14dc0 20 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69      conversion i
14dd0 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20  s 0.0.)^..<tr>. 
14de0 20 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20   <td> INTEGER.  
14df0 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69  <td> ^When casti
14e00 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20  ng a BLOB value 
14e10 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20  to INTEGER, the 
14e20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74 20 63  value is first c
14e30 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20  onverted to.    
14e40 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20      TEXT..      
14e50 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e   <p>^When castin
14e60 67 20 61 20 54 45 58 54 20 76 61 6c 75 65 20 74  g a TEXT value t
14e70 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c  o INTEGER, the l
14e80 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  ongest possible 
14e90 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20  prefix of.      
14ea0 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74    the value that
14eb0 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
14ec0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
14ed0 72 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72  r number is extr
14ee0 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20  acted from.     
14ef0 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75     the TEXT valu
14f00 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  e and the remain
14f10 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e  der ignored. ^An
14f20 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73  y leading spaces
14f30 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20   in the.        
14f40 54 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20  TEXT value when 
14f50 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20  converting from 
14f60 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20  TEXT to INTEGER 
14f70 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66  are ignored. ^If
14f80 20 74 68 65 72 65 0a 20 20 20 20 20 20 20 20 69   there.        i
14f90 73 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74  s no prefix that
14fa0 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
14fb0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
14fc0 72 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  r number, the re
14fd0 73 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20  sult.        of 
14fe0 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
14ff0 73 20 30 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e  s 0...      <p>^
15000 41 20 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c  A cast of a REAL
15010 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49   value into an I
15020 4e 54 45 47 45 52 20 77 69 6c 6c 20 74 72 75 6e  NTEGER will trun
15030 63 61 74 65 20 74 68 65 20 66 72 61 63 74 69 6f  cate the fractio
15040 6e 61 6c 0a 20 20 20 20 20 20 70 61 72 74 20 6f  nal.      part o
15050 66 20 74 68 65 20 52 45 41 4c 2e 20 20 5e 49 66  f the REAL.  ^If
15060 20 61 20 52 45 41 4c 20 69 73 20 74 6f 6f 20 6c   a REAL is too l
15070 61 72 67 65 20 74 6f 20 62 65 20 72 65 70 72 65  arge to be repre
15080 73 65 6e 74 65 64 20 61 73 20 61 6e 20 0a 20 20  sented as an .  
15090 20 20 20 20 49 4e 54 45 47 45 52 20 74 68 65 6e      INTEGER then
150a0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
150b0 68 65 20 63 61 73 74 20 69 73 20 74 68 65 20 6c  he cast is the l
150c0 61 72 67 65 73 74 20 6e 65 67 61 74 69 76 65 20  argest negative 
150d0 69 6e 74 65 67 65 72 3a 20 0a 20 20 20 20 20 20  integer: .      
150e0 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
150f0 35 38 30 38 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  5808...<tr>.  <t
15100 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64  d> NUMERIC.  <td
15110 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58  > ^Casting a TEX
15120 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20  T or BLOB value 
15130 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72  into NUMERIC fir
15140 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64  st does a forced
15150 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  .   conversion i
15160 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65  nto REAL but the
15170 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72  n further conver
15180 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  ts the result in
15190 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20  to INTEGER if.  
151a0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
151b0 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d   conversion from
151c0 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52   REAL to INTEGER
151d0 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64   is lossless and
151e0 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20   reversible..   
151f0 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
15200 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69   context in SQLi
15210 74 65 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d  te where the NUM
15220 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52  ERIC and INTEGER
15230 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20   [affinities].  
15240 20 62 65 68 61 76 65 20 64 69 66 66 65 72 65 6e   behave differen
15250 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73  tly..   <p> ^Cas
15260 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49  ting a REAL or I
15270 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20  NTEGER value to 
15280 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d  NUMERIC is a no-
15290 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65  op, even if a re
152a0 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c  al.   value coul
152b0 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  d be losslessly 
152c0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
152d0 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a  integer...</tr>.
152e0 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e  .</table>..<p>^N
152f0 6f 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73  ote that the res
15300 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67  ult from casting
15310 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61   any non-BLOB va
15320 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42  lue into a .BLOB
15330 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
15340 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79  from casting any
15350 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f   BLOB value into
15360 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75   a non-BLOB valu
15370 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  e.may be differe
15380 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  nt depending on 
15390 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61  whether the data
153a0 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20  base [encoding] 
153b0 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36  is UTF-8,.UTF-16
153c0 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e  be, or UTF-16le.
153d0 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
153e0 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20  ent booleanexpr 
153f0 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  {boolean express
15400 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42  ion}</tcl>.<h3>B
15410 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f  oolean Expressio
15420 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ns</h3>..<p>The 
15430 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61  SQL language fea
15440 74 75 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f  tures several co
15450 6e 74 65 78 74 73 20 77 68 65 72 65 20 61 6e 20  ntexts where an 
15460 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65  expression is .e
15470 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
15480 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65   result converte
15490 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28  d to a boolean (
154a0 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76  true or false) v
154b0 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74  alue. These.cont
154c0 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c  exts are:..  <ul
154d0 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57  >.    <li> the W
154e0 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61  HERE clause of a
154f0 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20   SELECT, UPDATE 
15500 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  or DELETE statem
15510 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68  ent,.    <li> th
15520 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  e ON or USING cl
15530 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69  ause of a join i
15540 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
15550 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
15560 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
15570 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
15580 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e  tement,.    <li>
15590 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
155a0 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67   of an SQL trigg
155b0 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e  er, and.    <li>
155c0 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
155d0 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73   or clauses of s
155e0 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65 73 73  ome CASE express
155f0 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c  ions..  </ul>..<
15600 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74  p>^(To convert t
15610 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e  he results of an
15620 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20   SQL expression 
15630 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  to a boolean val
15640 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74  ue, SQLite.first
15650 20 63 61 73 74 73 20 74 68 65 20 72 65 73 75 6c   casts the resul
15660 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76  t to a NUMERIC v
15670 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65  alue in the same
15680 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54   way as a .[CAST
15690 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20   expression]. A 
156a0 4e 55 4c 4c 20 6f 72 20 7a 65 72 6f 20 76 61 6c  NULL or zero val
156b0 75 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75  ue (integer valu
156c0 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75  e 0 or real valu
156d0 65 20 30 2e 30 29 20 69 73 0a 63 6f 6e 73 69 64  e 0.0) is.consid
156e0 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65  ered to be false
156f0 2e 20 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  . All other valu
15700 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
15710 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28  d true.)^..<p>^(
15720 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
15730 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e   values NULL, 0.
15740 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20  0, 0, 'english' 
15750 61 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20  and '0' are all 
15760 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65  considered.to be
15770 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75   false.)^ ^(Valu
15780 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20  es 1, 1.0, 0.1, 
15790 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69  -0.1 and '1engli
157a0 73 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72  sh' are consider
157b0 65 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29  ed to .be true.)
157c0 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73  ^..<h3>Functions
157d0 3c 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b  </h3>.<p>^Both [
157e0 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d  corefunc|simple]
157f0 20 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67   and [aggfunc|ag
15800 67 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f  gregate] functio
15810 6e 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ns are supported
15820 2e 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74  ..(For presentat
15830 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69  ion purposes, si
15840 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  mple functions a
15850 72 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69  re further subdi
15860 76 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65  vided into.[core
15870 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63  func | core func
15880 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65  tions] and [date
15890 66 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65  func | date-time
158a0 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41   functions].).^A
158b0 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
158c0 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
158d0 61 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  any expression. 
158e0 20 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f   ^Simple functio
158f0 6e 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75  ns return.a resu
15900 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62  lt immediately b
15910 61 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e  ased on their in
15920 70 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74  puts.  ^Aggregat
15930 65 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20  e functions.may 
15940 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20  only be used in 
15950 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
15960 6e 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  nt.  ^Aggregate 
15970 66 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74  functions comput
15980 65 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61  e.their result a
15990 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f  cross all rows o
159a0 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
159b0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
159c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15a00 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
15a10 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69  ion {Core Functi
15a20 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a  ons} corefunc {*
15a30 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66  corefunc}.proc f
15a40 75 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b  uncdef {syntax k
15a50 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a  eywords desc} {.
15a60 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d    hd_puts {<tr>}
15a70 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
15a80 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69  \s+} [string tri
15a90 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 3e  m $syntax] {<br>
15aa0 3c 2f 62 72 3e 7d 20 73 79 6e 74 61 78 0a 20 20  </br>} syntax.  
15ab0 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28  regsub -all {\((
15ac0 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74  [^*)]+)\)} $synt
15ad0 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d  ax {(<i>\1</i>)}
15ae0 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
15af0 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61   -all {,} $synta
15b00 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e  x {</i>,<i>} syn
15b10 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  tax.  regsub -al
15b20 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e  l {<i>\.\.\.</i>
15b30 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20  } $syntax {...} 
15b40 73 79 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73  syntax.  hd_puts
15b50 20 22 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74   "<td valign=\"t
15b60 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67  op\" align=\"rig
15b70 68 74 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30  ht\" width=\"120
15b80 5c 22 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e  \">".  if {[llen
15b90 67 74 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d  gth $keywords]==
15ba0 30 7d 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20  0} {.    regexp 
15bb0 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61  {[a-z_]+} $synta
15bc0 78 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72  x name.    hd_fr
15bd0 61 67 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e  agment $name *$n
15be0 61 6d 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53  ame "${name}() S
15bf0 51 4c 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d  QL function".  }
15c00 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20   else {.    set 
15c10 66 72 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78  fragname [lindex
15c20 20 24 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20   $keywords 0].  
15c30 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b    regsub -all {[
15c40 5e 61 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65  ^a-z]} $fragname
15c50 20 7b 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20   {} fragname.   
15c60 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72   hd_fragment $fr
15c70 61 67 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20  agname.    eval 
15c80 68 64 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72  hd_keywords [str
15c90 69 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d  ing map {\n { }}
15ca0 20 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a   $keywords].  }.
15cb0 20 20 68 64 5f 70 75 74 73 20 22 24 73 79 6e 74    hd_puts "$synt
15cc0 61 78 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75  ax</td>".  hd_pu
15cd0 74 73 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22  ts {<td valign="
15ce0 74 6f 70 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f  top">}.  hd_reso
15cf0 6c 76 65 20 24 64 65 73 63 0a 20 20 68 64 5f 70  lve $desc.  hd_p
15d00 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d  uts {</td></tr>}
15d10 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  .}.</tcl>..<p>Th
15d20 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73  e core functions
15d30 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65   shown below are
15d40 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65   available by de
15d50 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e  fault. .[datefun
15d60 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54  c | Date &amp; T
15d70 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61  ime functions] a
15d80 6e 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67  nd.[aggfunc | ag
15d90 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
15da0 73 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e 74 65  s] are documente
15db0 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41  d separately.  A
15dc0 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61  n.application ma
15dd0 79 20 64 65 66 69 6e 65 20 61 64 64 69 74 69 6f  y define additio
15de0 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72  nal.functions wr
15df0 69 74 74 65 6e 20 69 6e 20 43 20 61 6e 64 20 61  itten in C and a
15e00 64 64 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  dded to the data
15e10 62 61 73 65 20 65 6e 67 69 6e 65 20 75 73 69 6e  base engine usin
15e20 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  g.the [sqlite3_c
15e30 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
15e40 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62  ] API.</p>..<tab
15e50 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
15e60 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c  padding=10>.<tcl
15e70 3e 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58  >.funcdef {abs(X
15e80 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61  )} {} {.  ^The a
15e90 62 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  bs(X) function r
15ea0 65 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c  eturns the absol
15eb0 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ute value of the
15ec0 20 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d   numeric.  argum
15ed0 65 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20  ent X.  ^Abs(X) 
15ee0 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20  returns NULL if 
15ef0 58 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28  X is NULL. .  ^(
15f00 41 62 73 28 58 29 20 72 65 74 75 72 6e 20 30 2e  Abs(X) return 0.
15f10 30 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69  0 if X is a stri
15f20 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61  ng or blob.  tha
15f30 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  t cannot be conv
15f40 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72  erted to a numer
15f50 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66  ic value.)^  ^If
15f60 20 58 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74   X is the .  int
15f70 65 67 65 72 20 2d 39 32 32 33 33 37 32 30 33 36  eger -9223372036
15f80 38 35 34 37 37 35 38 30 37 20 74 68 65 6e 20 61  854775807 then a
15f90 62 73 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20  bs(X) throws an 
15fa0 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
15fb0 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74  .  error since t
15fc0 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76  here is no equiv
15fd0 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36  alent positive 6
15fe0 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65  4-bit two comple
15ff0 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66  ment value..}..f
16000 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28  uncdef {changes(
16010 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63  )} {} {.  ^The c
16020 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
16030 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
16040 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65  mber of database
16050 20 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20   rows that were 
16060 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73  changed.  or ins
16070 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  erted or deleted
16080 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
16090 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20  ently completed 
160a0 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a  INSERT, DELETE,.
160b0 20 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74    or UPDATE stat
160c0 65 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65  ement, exclusive
160d0 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69   of statements i
160e0 6e 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72  n lower-level tr
160f0 69 67 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63  iggers..  ^The c
16100 68 61 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e  hanges() SQL fun
16110 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
16120 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
16130 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
16140 5d 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69  ].  C/C++ functi
16150 6f 6e 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c  on and hence fol
16160 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20 72 75  lows the same ru
16170 6c 65 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67  les for counting
16180 20 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e   changes..}..fun
16190 63 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58  cdef {coalesce(X
161a0 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20  ,Y,...)} {} {.  
161b0 5e 54 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20  ^The coalesce() 
161c0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
161d0 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66   a copy of its f
161e0 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  irst non-NULL ar
161f0 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c  gument, or.  NUL
16200 4c 20 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e  L if all argumen
16210 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43  ts are NULL.  ^C
16220 6f 61 6c 65 73 63 65 28 29 20 6d 75 73 74 20 62  oalesce() must b
16230 65 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32 20  e at least .  2 
16240 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75  arguments..}..fu
16250 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29  ncdef {glob(X,Y)
16260 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67 6c  } {} {.  ^The gl
16270 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  ob(X,Y) function
16280 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74   is equivalent t
16290 6f 20 74 68 65 0a 20 20 65 78 70 72 65 73 73 69  o the.  expressi
162a0 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c  on "<b>Y GLOB X<
162b0 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68 61  /b>"..  Note tha
162c0 74 20 74 68 65 20 58 20 61 6e 64 20 59 20 61 72  t the X and Y ar
162d0 67 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76 65  guments are reve
162e0 72 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62  rsed in the glob
162f0 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  () function.  re
16300 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e  lative to the in
16310 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61  fix [GLOB] opera
16320 74 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65 20 5b  tor..  ^If the [
16330 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
16340 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72  unction()] inter
16350 66 61 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a  face is used to.
16360 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 67    override the g
16370 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lob(X,Y) functio
16380 6e 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e  n with an altern
16390 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61  ative implementa
163a0 74 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20  tion then.  the 
163b0 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20  [GLOB] operator 
163c0 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20  will invoke the 
163d0 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c  alternative impl
163e0 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66  ementation..}..f
163f0 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58  uncdef {ifnull(X
16400 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
16410 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69   ifnull() functi
16420 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
16430 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e  y of its first n
16440 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74  on-NULL argument
16450 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62  , or.  NULL if b
16460 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72  oth arguments ar
16470 65 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c  e NULL.  ^Ifnull
16480 28 29 20 6d 75 73 74 20 68 61 76 65 20 65 78 61  () must have exa
16490 63 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73  ctly 2 arguments
164a0 2e 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28  ..  ^The ifnull(
164b0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71  ) function is eq
164c0 75 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61  uivalent to [coa
164d0 6c 65 73 63 65 28 29 5d 20 77 69 74 68 20 74 77  lesce()] with tw
164e0 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a  o arguments..}..
164f0 66 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28 58  funcdef {instr(X
16500 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
16510 20 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e 63   instr(X,Y) func
16520 74 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20 66  tion finds the f
16530 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20  irst occurrence 
16540 6f 66 20 73 74 72 69 6e 67 20 59 20 77 69 74 68  of string Y with
16550 69 6e 20 0a 20 20 73 74 72 69 6e 67 20 58 20 61  in .  string X a
16560 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  nd returns the n
16570 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63  umber of prior c
16580 68 61 72 61 63 74 65 72 73 20 70 6c 75 73 20 31  haracters plus 1
16590 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20 69 73  , or 0 if.  Y is
165a0 20 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20 77   nowhere found w
165b0 69 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20  ithin X..  ^Or, 
165c0 69 66 20 58 20 61 6e 64 20 59 20 61 72 65 20 62  if X and Y are b
165d0 6f 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20  oth BLOBs, then 
165e0 69 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75 72  instr(X,Y) retur
165f0 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68  ns one.  more th
16600 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62 79  an the number by
16610 74 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65  tes prior to the
16620 20 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63   first occurrenc
16630 65 20 6f 66 20 59 2c 20 6f 72 20 30 20 69 66 0a  e of Y, or 0 if.
16640 20 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63    Y does not occ
16650 75 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68  ur anywhere with
16660 69 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74 68  in X..  ^If both
16670 20 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e 64   arguments X and
16680 20 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59 29   Y to instr(X,Y)
16690 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e   are non-NULL an
166a0 64 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73 0a  d are not BLOBs.
166b0 20 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65 20    then both are 
166c0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 73  interpreted as s
166d0 74 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65 69  trings..  ^If ei
166e0 74 68 65 72 20 58 20 6f 72 20 59 20 61 72 65 20  ther X or Y are 
166f0 4e 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58 2c  NULL in instr(X,
16700 59 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  Y) then the resu
16710 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66  lt is NULL..}..f
16720 75 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20  uncdef {hex(X)} 
16730 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78 28  {} {.  ^The hex(
16740 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72  ) function inter
16750 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65  prets its argume
16760 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e 64  nt as a BLOB and
16770 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72   returns.  a str
16780 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65  ing which is the
16790 20 75 70 70 65 72 2d 63 61 73 65 20 68 65 78 61   upper-case hexa
167a0 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e  decimal renderin
167b0 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  g of the content
167c0 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e   of.  that blob.
167d0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73  .}..funcdef {las
167e0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
167f0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61  } {} {.  ^The la
16800 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
16810 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
16820 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20  ns the [ROWID]. 
16830 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77   of the last row
16840 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 65   insert from the
16850 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
16860 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b  tion which invok
16870 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69 6f  ed the.  functio
16880 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69  n..  ^The last_i
16890 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53 51  nsert_rowid() SQ
168a0 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
168b0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
168c0 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61  he.  [sqlite3_la
168d0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
168e0 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  )] C/C++ interfa
168f0 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a  ce function..}..
16900 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28  funcdef {length(
16910 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20  X)} {} {.  ^For 
16920 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 58  a string value X
16930 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20  , the length(X) 
16940 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
16950 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a   the number of .
16960 20 20 63 68 61 72 61 63 74 65 72 73 20 28 6e 6f    characters (no
16970 74 20 62 79 74 65 73 29 20 69 6e 20 58 20 70 72  t bytes) in X pr
16980 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ior to the first
16990 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e 0a   NUL character..
169a0 20 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20 73    Since SQLite s
169b0 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e 6f  trings do not no
169c0 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 4e  rmally contain N
169d0 55 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20 74  UL characters, t
169e0 68 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20 66  he length(X).  f
169f0 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73 75  unction will usu
16a00 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  ally return the 
16a10 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
16a20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
16a30 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 46  e string X..  ^F
16a40 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20  or a blob value 
16a50 58 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74  X, length(X) ret
16a60 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
16a70 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
16a80 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73  blob..  ^If X is
16a90 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74   NULL then lengt
16aa0 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20  h(X) is NULL..  
16ab0 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63  ^If X is numeric
16ac0 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20   then length(X) 
16ad0 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67  returns the leng
16ae0 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20  th of a string. 
16af0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
16b00 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
16b10 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65   {like(X,Y) like
16b20 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20  (X,Y,Z)} {} {.  
16b30 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63  ^The like() func
16b40 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
16b50 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20  implement the.  
16b60 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39  "<b>Y LIKE X &#9
16b70 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c  1;ESCAPE Z&#93;<
16b80 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e  /b>" expression.
16b90 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69   .  ^If the opti
16ba0 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75  onal ESCAPE clau
16bb0 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74  se is present, t
16bc0 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29  hen the.  like()
16bd0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76   function is inv
16be0 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20  oked with three 
16bf0 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68  arguments.  ^Oth
16c00 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20  erwise, it is.  
16c10 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f  invoked with two
16c20 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e   arguments only.
16c30 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58   Note that the X
16c40 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72   and Y parameter
16c50 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64  s are.  reversed
16c60 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66   in the like() f
16c70 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65  unction relative
16c80 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c   to the infix [L
16c90 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20  IKE] operator.. 
16ca0 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63   ^The [sqlite3_c
16cb0 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
16cc0 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20  ] interface can 
16cd0 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72  be used to overr
16ce0 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28 29  ide the.  like()
16cf0 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68   function and th
16d00 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65  ereby change the
16d10 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68   operation of th
16d20 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  e.  [LIKE] opera
16d30 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72 72  tor.  When overr
16d40 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28 29  iding the like()
16d50 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61   function, it ma
16d60 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20  y be important. 
16d70 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74   to override bot
16d80 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68  h the two and th
16d90 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72  ree argument ver
16da0 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b  sions of the lik
16db0 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e  e() .  function.
16dc0 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66 66   Otherwise, diff
16dd0 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62  erent code may b
16de0 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c  e called to impl
16df0 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b  ement the.  [LIK
16e00 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65  E] operator depe
16e10 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
16e20 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50   or not an ESCAP
16e30 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20 20  E clause was .  
16e40 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 66 75  specified..}..fu
16e50 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65  ncdef {load_exte
16e60 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78  nsion(X) load_ex
16e70 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d  tension(X,Y)} {}
16e80 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65   {.  ^The load_e
16e90 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75  xtension(X,Y) fu
16ea0 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20 53 51 4c  nction loads SQL
16eb0 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 20 6f  ite extensions o
16ec0 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65 64  ut of the shared
16ed0 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20  .  library file 
16ee0 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74 68  named X using th
16ef0 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e  e entry point Y.
16f00 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
16f10 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
16f20 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61 20  ).  is always a 
16f30 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73 20  NULL.  ^If Y is 
16f40 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68 65  omitted then the
16f50 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20 70   default entry p
16f60 6f 69 6e 74 0a 20 20 6f 66 20 3c 62 3e 73 71 6c  oint.  of <b>sql
16f70 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69  ite3_extension_i
16f80 6e 69 74 3c 2f 62 3e 20 69 73 20 75 73 65 64 2e  nit</b> is used.
16f90 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65    ^The load_exte
16fa0 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e  nsion() function
16fb0 0a 20 20 72 61 69 73 65 73 20 61 6e 20 65 78 63  .  raises an exc
16fc0 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78  eption if the ex
16fd0 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f  tension fails to
16fe0 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c   load or initial
16ff0 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a  ize correctly...
17000 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65    <p>^The load_e
17010 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74  xtension() funct
17020 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ion will fail if
17030 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61   the extension a
17040 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f  ttempts to .  mo
17050 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61  dify or delete a
17060 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f  n SQL function o
17070 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
17080 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78  ence.  ^The.  ex
17090 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20  tension can add 
170a0 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  new functions or
170b0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
170c0 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74  nces, but cannot
170d0 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c  .  modify or del
170e0 65 74 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e  ete existing fun
170f0 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74  ctions or collat
17100 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62 65  ing sequences be
17110 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75  cause.  those fu
17120 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63  nctions and/or c
17130 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
17140 65 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64  es might be used
17150 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20   elsewhere.  in 
17160 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75  the currently ru
17170 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d  nning SQL statem
17180 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e  ent.  To load an
17190 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a   extension that.
171a0 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c    changes or del
171b0 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f  etes functions o
171c0 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
171d0 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20  ences, use the. 
171e0 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65   [sqlite3_load_e
171f0 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61  xtension()] C-la
17200 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a  nguage API.</p>.
17210 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77 65  }..funcdef {lowe
17220 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  r(X)} {} {.  ^Th
17230 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63 74  e lower(X) funct
17240 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f  ion returns a co
17250 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20 77  py of string X w
17260 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63 68  ith all ASCII ch
17270 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76 65  aracters.  conve
17280 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63 61  rted to lower ca
17290 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c  se.  ^The defaul
172a0 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72  t built-in lower
172b0 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b  () function work
172c0 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63 68  s.  for ASCII ch
172d0 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20  aracters only.  
172e0 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76 65  To do case conve
172f0 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53  rsions on non-AS
17300 43 49 49 0a 20 20 63 68 61 72 61 63 74 65 72 73  CII.  characters
17310 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20 65  , load the ICU e
17320 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e  xtension..}..fun
17330 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c  cdef {ltrim(X) l
17340 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
17350 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c 59    ^The ltrim(X,Y
17360 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
17370 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
17380 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61  ed by removing a
17390 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61  ny and all.  cha
173a0 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70  racters that app
173b0 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68  ear in Y from th
173c0 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20 58  e left side of X
173d0 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72  ..  ^If the Y ar
173e0 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
173f0 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d 6f  d, ltrim(X) remo
17400 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20  ves spaces from 
17410 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20 20  the left side.  
17420 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
17430 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20   {max(X,Y,...)} 
17440 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a 6d  {*maxCoreFunc *m
17450 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66 75  ax {max() SQL fu
17460 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
17470 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
17480 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20   max() function 
17490 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
174a0 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a 20  ment with the . 
174b0 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20   maximum value, 
174c0 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69  or return NULL i
174d0 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 69  f any argument i
174e0 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65 20  s NULL. .  ^The 
174f0 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d  multi-argument m
17500 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65  ax() function se
17510 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d  arches its argum
17520 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74  ents from left t
17530 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e  o right.  for an
17540 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64   argument that d
17550 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69  efines a collati
17560 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  ng function and 
17570 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74  uses that collat
17580 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66  ing.  function f
17590 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f  or all string co
175a0 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20  mparisons.  ^If 
175b0 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75  none of the argu
175c0 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a 20  ments to max(). 
175d0 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74   define a collat
175e0 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68  ing function, th
175f0 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f  en the BINARY co
17600 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
17610 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74 65   is used..  Note
17620 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f   that <b>max()</
17630 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66  b> is a simple f
17640 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69  unction when.  i
17650 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20  t has 2 or more 
17660 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70  arguments but op
17670 65 72 61 74 65 73 20 61 73 20 61 6e 0a 20 20 5b  erates as an.  [
17680 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20 61 67 67  minAggFunc | agg
17690 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d  regate function]
176a0 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20 61   if given only a
176b0 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
176c0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69  ..}..funcdef {mi
176d0 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69  n(X,Y,...)} {*mi
176e0 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20 7b  nCoreFunc *min {
176f0 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e 63 74 69  min() SQL functi
17700 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75  on}} {.  ^The mu
17710 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e  lti-argument min
17720 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
17730 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74  rns the argument
17740 20 77 69 74 68 20 74 68 65 0a 20 20 6d 69 6e 69   with the.  mini
17750 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68  mum value..  ^Th
17760 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
17770 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20   min() function 
17780 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67  searches its arg
17790 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74  uments from left
177a0 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20   to right.  for 
177b0 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74  an argument that
177c0 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61   defines a colla
177d0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ting function an
177e0 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c  d uses that coll
177f0 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e  ating.  function
17800 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20   for all string 
17810 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
17820 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72  f none of the ar
17830 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28 29  guments to min()
17840 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c  .  define a coll
17850 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20  ating function, 
17860 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20  then the BINARY 
17870 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
17880 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f  on is used..  No
17890 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29  te that <b>min()
178a0 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65  </b> is a simple
178b0 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20   function when. 
178c0 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72   it has 2 or mor
178d0 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20  e arguments but 
178e0 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 20 0a  operates as an .
178f0 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20    [maxAggFunc | 
17900 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17910 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20 6f  on] if given.  o
17920 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67  nly a single arg
17930 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ument..}..funcde
17940 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20  f {nullif(X,Y)} 
17950 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c 6c  {} {.  ^The null
17960 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  if(X,Y) function
17970 20 72 65 74 75 72 6e 73 20 69 74 73 20 66 69 72   returns its fir
17980 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74  st argument if t
17990 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  he arguments are
179a0 0a 20 20 64 69 66 66 65 72 65 6e 74 20 61 6e 64  .  different and
179b0 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 61 72 67   NULL if the arg
179c0 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 73  uments are the s
179d0 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c 69  ame.  ^The nulli
179e0 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 0a  f(X,Y) function.
179f0 20 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61    searches its a
17a00 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65  rguments from le
17a10 66 74 20 74 6f 20 72 69 67 68 74 20 66 6f 72 20  ft to right for 
17a20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74  an argument that
17a30 20 64 65 66 69 6e 65 73 20 61 0a 20 20 63 6f 6c   defines a.  col
17a40 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
17a50 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f  and uses that co
17a60 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
17a70 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 0a   for all string.
17a80 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20    comparisons.  
17a90 5e 49 66 20 6e 65 69 74 68 65 72 20 61 72 67 75  ^If neither argu
17aa0 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28 29  ment to nullif()
17ab0 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61   defines a colla
17ac0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20 20  ting function.  
17ad0 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20  then the BINARY 
17ae0 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e 63  is used..}..func
17af0 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b  def {quote(X)} {
17b00 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74 65  } {.  ^The quote
17b10 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
17b20 75 72 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66  urns the text of
17b30 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
17b40 77 68 69 63 68 0a 20 20 69 73 20 74 68 65 20 76  which.  is the v
17b50 61 6c 75 65 20 6f 66 20 69 74 73 20 61 72 67 75  alue of its argu
17b60 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f  ment suitable fo
17b70 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f  r inclusion into
17b80 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
17b90 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 61 72  t..  ^Strings ar
17ba0 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20  e surrounded by 
17bb0 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69  single-quotes wi
17bc0 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e  th escapes on in
17bd0 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 20 20  terior quotes.  
17be0 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c 4f  as needed.  ^BLO
17bf0 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61  Bs are encoded a
17c00 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6c 69  s hexadecimal li
17c10 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74 72 69 6e  terals..  ^Strin
17c20 67 73 20 77 69 74 68 20 65 6d 62 65 64 64 65 64  gs with embedded
17c30 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 20   NUL characters 
17c40 63 61 6e 6e 6f 74 20 62 65 20 72 65 70 72 65 73  cannot be repres
17c50 65 6e 74 65 64 20 61 73 20 73 74 72 69 6e 67 0a  ented as string.
17c60 20 20 6c 69 74 65 72 61 6c 73 20 69 6e 20 53 51    literals in SQ
17c70 4c 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20  L and hence the 
17c80 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e 67 20  returned string 
17c90 6c 69 74 65 72 61 6c 20 69 73 20 74 72 75 6e 63  literal is trunc
17ca0 61 74 65 64 20 70 72 69 6f 72 0a 20 20 74 6f 20  ated prior.  to 
17cb0 74 68 65 20 66 69 72 73 74 20 4e 55 4c 2e 0a 7d  the first NUL..}
17cc0 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f  ..funcdef {rando
17cd0 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  m()} {} {.  ^The
17ce0 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69   random() functi
17cf0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 70 73 65  on returns a pse
17d00 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65 67  udo-random integ
17d10 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d 39 32  er.  between -92
17d20 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
17d30 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30 33  8 and +922337203
17d40 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a 66  6854775807..}..f
17d50 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62 6c  uncdef {randombl
17d60 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ob(N)} {} {.  ^T
17d70 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29  he randomblob(N)
17d80 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
17d90 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62 20   an N-byte blob 
17da0 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65 75 64  containing pseud
17db0 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65 73  o-random.  bytes
17dc0 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65 73 73 20  . ^If N is less 
17dd0 74 68 61 6e 20 31 20 74 68 65 6e 20 61 20 31 2d  than 1 then a 1-
17de0 62 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f 62  byte random blob
17df0 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 20   is returned... 
17e00 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69   <p>Hint:  appli
17e10 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65  cations can gene
17e20 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e  rate globally un
17e30 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 73  ique identifiers
17e40 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20 66 75  .  using this fu
17e50 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65 72 20  nction together 
17e60 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61 6e 64  with [hex()] and
17e70 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20  /or.  [lower()] 
17e80 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a  like this:</p>..
17e90 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20    <blockquote>. 
17ea0 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28   hex(randomblob(
17eb0 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20  16))<br></br>.  
17ec0 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f 6d  lower(hex(random
17ed0 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f 62  blob(16))).  </b
17ee0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75  lockquote>.}..fu
17ef0 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65 28 58  ncdef {replace(X
17f00 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ,Y,Z)} {} {.  ^T
17f10 68 65 20 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a  he replace(X,Y,Z
17f20 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
17f30 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
17f40 65 64 20 62 79 20 73 75 62 73 74 69 74 75 74 69  ed by substituti
17f50 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a 20 66 6f  ng.  string Z fo
17f60 72 20 65 76 65 72 79 20 6f 63 63 75 72 72 65 6e  r every occurren
17f70 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20 69  ce of string Y i
17f80 6e 20 73 74 72 69 6e 67 20 58 2e 20 20 5e 54 68  n string X.  ^Th
17f90 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f 6c  e [BINARY].  col
17fa0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
17fb0 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f 6d 70  is used for comp
17fc0 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59 20  arisons.  ^If Y 
17fd0 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20 73 74  is an empty.  st
17fe0 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75 72 6e  ring then return
17ff0 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 20 20 5e   X unchanged.  ^
18000 49 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69 74  If Z is not init
18010 69 61 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e 67  ially.  a string
18020 2c 20 69 74 20 69 73 20 63 61 73 74 20 74 6f 20  , it is cast to 
18030 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70  a UTF-8 string p
18040 72 69 6f 72 20 74 6f 20 70 72 6f 63 65 73 73 69  rior to processi
18050 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ng..}..funcdef {
18060 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64 28 58  round(X) round(X
18070 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
18080 20 72 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e 63   round(X,Y) func
18090 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 66  tion returns a f
180a0 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20 20  loating-point.  
180b0 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65 64 20  value X rounded 
180c0 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f 20 74  to Y digits to t
180d0 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65 20  he right of the 
180e0 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a 20  decimal point.. 
180f0 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
18100 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
18110 69 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  it is assumed to
18120 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63 64 65   be 0..}..funcde
18130 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74 72 69  f {rtrim(X) rtri
18140 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  m(X,Y)} {} {.  ^
18150 54 68 65 20 72 74 72 69 6d 28 58 2c 59 29 20 66  The rtrim(X,Y) f
18160 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
18170 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20  a string formed 
18180 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20  by removing any 
18190 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63  and all.  charac
181a0 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61 72  ters that appear
181b0 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65 20 72   in Y from the r
181c0 69 67 68 74 20 73 69 64 65 20 6f 66 20 58 2e 0a  ight side of X..
181d0 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
181e0 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
181f0 20 72 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65   rtrim(X) remove
18200 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74 68  s spaces from th
18210 65 20 72 69 67 68 74 0a 20 20 73 69 64 65 20 6f  e right.  side o
18220 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
18230 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b 7d 20  {soundex(X)} {} 
18240 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e 64 65 78  {.  ^The soundex
18250 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
18260 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68  urns a string th
18270 61 74 20 69 73 20 74 68 65 20 73 6f 75 6e 64 65  at is the sounde
18280 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20 20 6f 66  x encoding .  of
18290 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20   the string X.. 
182a0 20 5e 54 68 65 20 73 74 72 69 6e 67 20 22 3f 30   ^The string "?0
182b0 30 30 22 20 69 73 20 72 65 74 75 72 6e 65 64 20  00" is returned 
182c0 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
182d0 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74 61  is NULL or conta
182e0 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49 49 20 61  ins.  no ASCII a
182f0 6c 70 68 61 62 65 74 69 63 20 63 68 61 72 61 63  lphabetic charac
18300 74 65 72 73 2e 0a 20 20 5e 28 54 68 69 73 20 66  ters..  ^(This f
18310 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74  unction is omitt
18320 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 62  ed from SQLite b
18330 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49 74 20  y default..  It 
18340 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c  is only availabl
18350 65 20 69 66 20 74 68 65 20 5b 53 51 4c 49 54 45  e if the [SQLITE
18360 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d 70 69 6c  _SOUNDEX] compil
18370 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20  e-time option.  
18380 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51 4c  is used when SQL
18390 69 74 65 20 69 73 20 62 75 69 6c 74 2e 29 5e 0a  ite is built.)^.
183a0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
183b0 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
183c0 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20  _get(N)} {} {.  
183d0 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70  ^The sqlite_comp
183e0 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29 20  ileoption_get() 
183f0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
18400 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
18410 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
18420 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
18430 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74  t()] C/C++ funct
18440 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20 72 6f 75  ion..  ^This rou
18450 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65  tine returns the
18460 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d 74 69   N-th compile-ti
18470 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74  me option used t
18480 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 0a 20  o build SQLite. 
18490 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e 20 69 73   or NULL if N is
184a0 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 20 20   out of range.  
184b0 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b 63 6f  See also the [co
184c0 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70 72  mpile_options pr
184d0 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65  agma]..}..funcde
184e0 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  f {sqlite_compil
184f0 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 7d  eoption_used(X)}
18500 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c   {} {.  ^The sql
18510 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
18520 6e 5f 75 73 65 64 28 29 20 53 51 4c 20 66 75 6e  n_used() SQL fun
18530 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
18540 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20  er around the.  
18550 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65  [sqlite3_compile
18560 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d 20 43  option_used()] C
18570 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  /C++ function.. 
18580 20 5e 57 68 65 6e 20 74 68 65 20 61 72 67 75 6d   ^When the argum
18590 65 6e 74 20 58 20 74 6f 20 73 71 6c 69 74 65 5f  ent X to sqlite_
185a0 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
185b0 65 64 28 58 29 20 69 73 20 61 20 73 74 72 69 6e  ed(X) is a strin
185c0 67 20 77 68 69 63 68 0a 20 20 69 73 20 74 68 65  g which.  is the
185d0 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6d 70 69   name of a compi
185e0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20  le-time option, 
185f0 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  this routine ret
18600 75 72 6e 73 20 74 72 75 65 20 28 31 29 20 6f 72  urns true (1) or
18610 0a 20 20 66 61 6c 73 65 20 28 30 29 20 64 65 70  .  false (0) dep
18620 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
18630 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 6f 70  r or not that op
18640 74 69 6f 6e 20 77 61 73 20 75 73 65 64 20 64 75  tion was used du
18650 72 69 6e 67 20 74 68 65 0a 20 20 62 75 69 6c 64  ring the.  build
18660 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
18670 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29  lite_source_id()
18680 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
18690 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29  lite_source_id()
186a0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
186b0 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
186c0 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 0a 20  identifies the. 
186d0 20 73 70 65 63 69 66 69 63 20 76 65 72 73 69 6f   specific versio
186e0 6e 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20  n of the source 
186f0 63 6f 64 65 20 74 68 61 74 20 77 61 73 20 75 73  code that was us
18700 65 64 20 74 6f 20 62 75 69 6c 64 20 74 68 65 20  ed to build the 
18710 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61 72 79  SQLite.  library
18720 2e 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20 72  .  ^The string r
18730 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
18740 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 62 65  e_source_id() be
18750 67 69 6e 73 20 77 69 74 68 0a 20 20 74 68 65 20  gins with.  the 
18760 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 74 68  date and time th
18770 61 74 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f  at the source co
18780 64 65 20 77 61 73 20 63 68 65 63 6b 65 64 20 69  de was checked i
18790 6e 20 61 6e 64 20 69 73 20 66 6f 6c 6c 6f 77 73  n and is follows
187a0 20 62 79 0a 20 20 61 6e 20 53 48 41 31 20 68 61   by.  an SHA1 ha
187b0 73 68 20 74 68 61 74 20 75 6e 69 71 75 65 6c 79  sh that uniquely
187c0 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 20   identifies the 
187d0 73 6f 75 72 63 65 20 74 72 65 65 2e 20 20 5e 54  source tree.  ^T
187e0 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a  his function is.
187f0 20 20 61 6e 20 53 51 4c 20 77 72 61 70 70 65 72    an SQL wrapper
18800 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c   around the [sql
18810 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 5d  ite3_sourceid()]
18820 20 43 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a   C interface..}.
18830 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65  .funcdef {sqlite
18840 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b 7d 20 7b  _version()} {} {
18850 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 76  .  ^The sqlite_v
18860 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f  ersion() functio
18870 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 76 65  n returns the ve
18880 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66 6f 72  rsion string for
18890 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69   the SQLite.  li
188a0 62 72 61 72 79 20 74 68 61 74 20 69 73 20 72 75  brary that is ru
188b0 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73 20 66 75  nning.  ^This fu
188c0 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  nction is an SQL
188d0 0a 20 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e  .  wrapper aroun
188e0 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c  d the [sqlite3_l
188f0 69 62 76 65 72 73 69 6f 6e 28 29 5d 20 43 2d 69  ibversion()] C-i
18900 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e  nterface..}..fun
18910 63 64 65 66 20 7b 73 75 62 73 74 72 28 58 2c 59  cdef {substr(X,Y
18920 2c 5a 29 20 73 75 62 73 74 72 28 58 2c 59 29 7d  ,Z) substr(X,Y)}
18930 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 62   {} {.  ^The sub
18940 73 74 72 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74  str(X,Y,Z) funct
18950 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 75  ion returns a su
18960 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75 74  bstring of input
18970 20 73 74 72 69 6e 67 20 58 20 74 68 61 74 20 62   string X that b
18980 65 67 69 6e 73 0a 20 20 77 69 74 68 20 74 68 65  egins.  with the
18990 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20   Y-th character 
189a0 61 6e 64 20 77 68 69 63 68 20 69 73 20 5a 20 63  and which is Z c
189b0 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a  haracters long..
189c0 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d 69 74 74    ^If Z is omitt
189d0 65 64 20 74 68 65 6e 20 73 75 62 73 74 72 28 58  ed then substr(X
189e0 2c 59 29 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  ,Y) returns all 
189f0 63 68 61 72 61 63 74 65 72 73 20 74 68 72 6f 75  characters throu
18a00 67 68 20 74 68 65 20 65 6e 64 0a 20 20 6f 66 20  gh the end.  of 
18a10 74 68 65 20 73 74 72 69 6e 67 20 58 20 62 65 67  the string X beg
18a20 69 6e 6e 69 6e 67 20 77 69 74 68 20 74 68 65 20  inning with the 
18a30 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20 6c 65 66  Y-th..  ^The lef
18a40 74 2d 6d 6f 73 74 20 63 68 61 72 61 63 74 65 72  t-most character
18a50 20 6f 66 20 58 20 69 73 20 6e 75 6d 62 65 72 20   of X is number 
18a60 31 2e 20 20 5e 49 66 20 59 20 69 73 20 6e 65 67  1.  ^If Y is neg
18a70 61 74 69 76 65 0a 20 20 74 68 65 6e 20 74 68 65  ative.  then the
18a80 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72   first character
18a90 20 6f 66 20 74 68 65 20 73 75 62 73 74 72 69 6e   of the substrin
18aa0 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63 6f  g is found by co
18ab0 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a  unting from the.
18ac0 20 20 72 69 67 68 74 20 72 61 74 68 65 72 20 74    right rather t
18ad0 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20 20 5e  han the left.  ^
18ae0 49 66 20 5a 20 69 73 20 6e 65 67 61 74 69 76 65  If Z is negative
18af0 20 74 68 65 6e 0a 20 20 74 68 65 20 61 62 73 28   then.  the abs(
18b00 5a 29 20 63 68 61 72 61 63 74 65 72 73 20 70 72  Z) characters pr
18b10 65 63 65 64 69 6e 67 20 74 68 65 20 59 2d 74 68  eceding the Y-th
18b20 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20 72   character are r
18b30 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49 66 20 58  eturned..  ^If X
18b40 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 65   is a string the
18b50 6e 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 64  n characters ind
18b60 69 63 65 73 20 72 65 66 65 72 20 74 6f 20 61 63  ices refer to ac
18b70 74 75 61 6c 20 55 54 46 2d 38 20 0a 20 20 63 68  tual UTF-8 .  ch
18b80 61 72 61 63 74 65 72 73 2e 20 20 5e 49 66 20 58  aracters.  ^If X
18b90 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65 6e 20   is a BLOB then 
18ba0 74 68 65 20 69 6e 64 69 63 65 73 20 72 65 66 65  the indices refe
18bb0 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66  r to bytes..}..f
18bc0 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f 63 68  uncdef {total_ch
18bd0 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20  anges()} {} {.  
18be0 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68 61 6e 67  ^The total_chang
18bf0 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  es() function re
18c00 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
18c10 20 6f 66 20 72 6f 77 20 63 68 61 6e 67 65 73 0a   of row changes.
18c20 20 20 63 61 75 73 65 64 20 62 79 20 49 4e 53 45    caused by INSE
18c30 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
18c40 4c 45 54 45 0a 20 20 73 74 61 74 65 6d 65 6e 74  LETE.  statement
18c50 73 20 73 69 6e 63 65 20 74 68 65 20 63 75 72 72  s since the curr
18c60 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ent database con
18c70 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e  nection was open
18c80 65 64 2e 0a 20 20 5e 54 68 69 73 20 66 75 6e 63  ed..  ^This func
18c90 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65  tion is a wrappe
18ca0 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
18cb0 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
18cc0 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 69  ges()].  C/C++ i
18cd0 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e  nterface..}..fun
18ce0 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20 74 72  cdef {trim(X) tr
18cf0 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  im(X,Y)} {} {.  
18d00 5e 54 68 65 20 74 72 69 6d 28 58 2c 59 29 20 66  ^The trim(X,Y) f
18d10 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
18d20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20  a string formed 
18d30 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20  by removing any 
18d40 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63  and all.  charac
18d50 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61 72  ters that appear
18d60 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f 74 68 20   in Y from both 
18d70 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20 5e 49 66  ends of X..  ^If
18d80 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20   the Y argument 
18d90 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 72 69 6d  is omitted, trim
18da0 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63  (X) removes spac
18db0 65 73 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64  es from both end
18dc0 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64  s of X..}..funcd
18dd0 65 66 20 7b 74 79 70 65 6f 66 28 58 29 7d 20 7b  ef {typeof(X)} {
18de0 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79 70 65 6f  } {.  ^The typeo
18df0 66 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  f(X) function re
18e00 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
18e10 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68  hat indicates th
18e20 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f 66 0a  e [datatype] of.
18e30 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e    the expression
18e40 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74   X: "null", "int
18e50 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c 20 22  eger", "real", "
18e60 74 65 78 74 22 2c 20 6f 72 20 22 62 6c 6f 62 22  text", or "blob"
18e70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 70  ..}..funcdef {up
18e80 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  per(X)} {} {.  ^
18e90 54 68 65 20 75 70 70 65 72 28 58 29 20 66 75 6e  The upper(X) fun
18ea0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
18eb0 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20 73 74  copy of input st
18ec0 72 69 6e 67 20 58 20 69 6e 20 77 68 69 63 68 20  ring X in which 
18ed0 61 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d 63 61 73  all .  lower-cas
18ee0 65 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  e ASCII characte
18ef0 72 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64  rs are converted
18f00 20 74 6f 20 74 68 65 69 72 20 75 70 70 65 72 2d   to their upper-
18f10 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74 2e  case equivalent.
18f20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72  .}..funcdef {zer
18f30 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20  oblob(N)} {} {. 
18f40 20 5e 54 68 65 20 7a 65 72 6f 62 6c 6f 62 28 4e   ^The zeroblob(N
18f50 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
18f60 6e 73 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73  ns a BLOB consis
18f70 74 69 6e 67 20 6f 66 20 4e 20 62 79 74 65 73 20  ting of N bytes 
18f80 6f 66 20 30 78 30 30 2e 0a 20 20 53 51 4c 69 74  of 0x00..  SQLit
18f90 65 20 6d 61 6e 61 67 65 73 20 74 68 65 73 65 20  e manages these 
18fa0 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72 79 20 65  zeroblobs very e
18fb0 66 66 69 63 69 65 6e 74 6c 79 2e 20 20 5a 65 72  fficiently.  Zer
18fc0 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65 20 75 73  oblobs can be us
18fd0 65 64 20 74 6f 0a 20 20 72 65 73 65 72 76 65 20  ed to.  reserve 
18fe0 73 70 61 63 65 20 66 6f 72 20 61 20 42 4c 4f 42  space for a BLOB
18ff0 20 74 68 61 74 20 69 73 20 6c 61 74 65 72 20 77   that is later w
19000 72 69 74 74 65 6e 20 75 73 69 6e 67 20 0a 20 20  ritten using .  
19010 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f 70  [sqlite3_blob_op
19020 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d 65 6e 74  en() | increment
19030 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 20 20  al BLOB I/O]..  
19040 5e 54 68 69 73 20 53 51 4c 20 66 75 6e 63 74 69  ^This SQL functi
19050 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  on is implemente
19060 64 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  d using the [sql
19070 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f  ite3_result_zero
19080 62 6c 6f 62 28 29 5d 0a 20 20 72 6f 75 74 69 6e  blob()].  routin
19090 65 20 66 72 6f 6d 20 74 68 65 20 43 2f 43 2b 2b  e from the C/C++
190a0 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 3c 2f   interface..}.</
190b0 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  tcl>.</table>..<
190c0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
190d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
190e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
190f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19110 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 61 74  ###.Section {Dat
19120 65 20 41 6e 64 20 54 69 6d 65 20 46 75 6e 63 74  e And Time Funct
19130 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 7b  ions} datefunc {
19140 2a 64 61 74 65 66 75 6e 63 7d 0a 68 64 5f 6b 65  *datefunc}.hd_ke
19150 79 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20 53  ywords {date() S
19160 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74 69  QL function} {ti
19170 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  me() SQL functio
19180 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  n}.hd_keywords {
19190 64 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20 66  datetime() SQL f
191a0 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e  unction} {julian
191b0 64 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74 69  day() SQL functi
191c0 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  on}.hd_keywords 
191d0 7b 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c 20  {strftime() SQL 
191e0 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e  function}.</tcl>
191f0 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75 70  ..<p>.SQLite sup
19200 70 6f 72 74 73 20 66 69 76 65 20 64 61 74 65 20  ports five date 
19210 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
19220 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c  ns as follows:.<
19230 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c  /p>..<p>.<ol>.<l
19240 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f 62  i> ^(<b>date(</b
19250 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
19260 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
19270 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
19280 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
19290 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c   ^(<b>time(</b><
192a0 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f  i>timestring, mo
192b0 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72  difier, modifier
192c0 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62  , ...</i><b>)</b
192d0 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e  >)^ </li>.<li> ^
192e0 28 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f 62  (<b>datetime(</b
192f0 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
19300 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
19310 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
19320 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
19330 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28   ^(<b>julianday(
19340 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
19350 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
19360 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
19370 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
19380 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69 6d  li> ^(<b>strftim
19390 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c  e(</b><i>format,
193a0 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64   timestring, mod
193b0 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
193c0 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
193d0 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a  )^ </li>.</ol>..
193e0 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64 61  <p>.^All five da
193f0 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
19400 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69 6d  tions take a tim
19410 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20 61  e string as an a
19420 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20 74  rgument. .^The t
19430 69 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66 6f  ime string is fo
19440 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
19450 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73  r more modifiers
19460 2e 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65  . .^The strftime
19470 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f  () function also
19480 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74 20   takes a format 
19490 73 74 72 69 6e 67 20 61 73 20 69 74 73 20 66 69  string as its fi
194a0 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f  rst argument..</
194b0 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65  p>..<p>.The date
194c0 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
194d0 6f 6e 73 20 75 73 65 20 61 20 73 75 62 73 65 74  ons use a subset
194e0 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77   of.[http://en.w
194f0 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
19500 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53 30  i/ISO_8601 | IS0
19510 2d 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64 20  -8601] date and 
19520 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54  time.formats..^T
19530 68 65 20 64 61 74 65 28 29 20 66 75 6e 63 74 69  he date() functi
19540 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  on returns the d
19550 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72 6d  ate in this form
19560 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20  at: YYYY-MM-DD. 
19570 0a 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75 6e  .^The time() fun
19580 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
19590 65 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a  e time as HH:MM:
195a0 53 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74 69  SS. .^The dateti
195b0 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  me() function re
195c0 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44  turns "YYYY-MM-D
195d0 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28  D HH:MM:SS". .^(
195e0 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29 20  The julianday() 
195f0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19600 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e   the .[http://en
19610 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
19620 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c  iki/Julian_day |
19630 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20 74   Julian day] - t
19640 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61 79  he.number of day
19650 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20  s since noon in 
19660 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f 76  Greenwich on Nov
19670 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20 42  ember 24, 4714 B
19680 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e  .C. .([http://en
19690 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
196a0 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47 72  iki/Proleptic_Gr
196b0 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72  egorian_calendar
196c0 20 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72 65   | Proleptic Gre
196d0 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d  gorian calendar]
196e0 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74 69  ).)^.^The strfti
196f0 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 74  me() routine ret
19700 75 72 6e 73 20 74 68 65 20 64 61 74 65 20 66 6f  urns the date fo
19710 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69 6e  rmatted accordin
19720 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61 74  g to .the format
19730 20 73 74 72 69 6e 67 20 73 70 65 63 69 66 69 65   string specifie
19740 64 20 61 73 20 74 68 65 20 66 69 72 73 74 20 61  d as the first a
19750 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66 6f  rgument..^The fo
19760 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70 70  rmat string supp
19770 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63 6f  orts the most co
19780 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69 6f  mmon substitutio
19790 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  ns found in the 
197a0 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f  .[http://opengro
197b0 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75 62  up.org/onlinepub
197c0 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68 2f  s/007908799/xsh/
197d0 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c 20  strftime.html | 
197e0 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74  strftime() funct
197f0 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73 74  ion].from the st
19800 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
19810 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73 75   plus two new su
19820 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66 20  bstitutions, %f 
19830 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66 6f  and %J..^(The fo
19840 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f 6d  llowing is a com
19850 70 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76 61  plete list of va
19860 6c 69 64 20 73 74 72 66 74 69 6d 65 28 29 20 73  lid strftime() s
19870 75 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f  ubstitutions:.</
19880 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
19890 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
198a0 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  0" cellpadding="
198b0 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  0" cellspacing="
198c0 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20  0">.<tr><td><td 
198d0 77 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c  width="10"><td><
198e0 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25  /tr>..<tr><td> %
198f0 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  d <td><td> day o
19900 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e  f month: 00.<tr>
19910 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e  <td> %f <td><td>
19920 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f   fractional seco
19930 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e  nds: SS.SSS.<tr>
19940 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e  <td> %H <td><td>
19950 20 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74   hour: 00-24 .<t
19960 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74  r><td> %j <td><t
19970 64 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a 20  d> day of year: 
19980 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e  001-366.<tr><td>
19990 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c   %J <td><td> Jul
199a0 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c  ian day number.<
199b0 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c  tr><td> %m <td><
199c0 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32  td> month: 01-12
199d0 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64  .<tr><td> %M <td
199e0 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30  ><td> minute: 00
199f0 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20  -59.<tr><td> %s 
19a00 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73  <td><td> seconds
19a10 20 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d 30   since 1970-01-0
19a20 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74  1.<tr><td> %S <t
19a30 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20  d><td> seconds: 
19a40 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25  00-59.<tr><td> %
19a50 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  w <td><td> day o
19a60 66 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68 20  f week 0-6 with 
19a70 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74  Sunday==0.<tr><t
19a80 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77  d> %W <td><td> w
19a90 65 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30 2d  eek of year: 00-
19aa0 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c  53.<tr><td> %Y <
19ab0 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30 30  td><td> year: 00
19ac0 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e  00-9999.<tr><td>
19ad0 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c   %% <td><td> %.<
19ae0 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
19af0 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e  uote>)^..<p>.^(N
19b00 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20 6f  otice that all o
19b10 74 68 65 72 20 64 61 74 65 20 61 6e 64 20 74 69  ther date and ti
19b20 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e  me functions can
19b30 20 62 65 20 65 78 70 72 65 73 73 65 64 0a 69 6e   be expressed.in
19b40 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74 69   terms of strfti
19b50 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  me():.</p>..<blo
19b60 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
19b70 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70  border="0" cellp
19b80 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73  adding="0" cells
19b90 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e  pacing="0">.<tr>
19ba0 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c  <td><b>Function<
19bb0 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33 30  /b><td width="30
19bc0 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61 6c  "><td><b>Equival
19bd0 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c 2f  ent strftime()</
19be0 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61  b>.<tr><td>   da
19bf0 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64  te(...)      <td
19c00 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
19c10 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29  '%Y-%m-%d', ...)
19c20 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d 65  .<tr><td>   time
19c30 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c  (...)      <td><
19c40 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25  td>  strftime('%
19c50 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c  H:%M:%S', ...).<
19c60 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74 69  tr><td>   dateti
19c70 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74 64  me(...)  <td><td
19c80 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59 2d  >  strftime('%Y-
19c90 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27 2c  %m-%d %H:%M:%S',
19ca0 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20   ...).<tr><td>  
19cb0 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29 20   julianday(...) 
19cc0 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
19cd0 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f  me('%J', ...).</
19ce0 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
19cf0 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20  ote>)^..<p>.The 
19d00 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f 72  only reasons for
19d10 20 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63 74   providing funct
19d20 69 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e 20  ions other than 
19d30 73 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66 6f  strftime() is.fo
19d40 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e  r convenience an
19d50 64 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63 79  d for efficiency
19d60 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65  ..</p>..<h3>Time
19d70 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c   Strings</h3>..<
19d80 70 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69 6e  p>^(A time strin
19d90 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79 20  g can be in any 
19da0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
19db0 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c   formats:</p>..<
19dc0 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  ol>.<li> <i>YYYY
19dd0 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20  -MM-DD</i>.<li> 
19de0 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  <i>YYYY-MM-DD HH
19df0 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
19e00 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
19e10 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :SS</i>.<li> <i>
19e20 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
19e30 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  :SS.SSS</i>.<li>
19e40 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
19e50 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a  i><b>T</b><i>HH:
19e60 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  MM</i>.<li> <i>Y
19e70 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e  YYY-MM-DD</i><b>
19e80 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53  T</b><i>HH:MM:SS
19e90 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
19ea0 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c  Y-MM-DD</i><b>T<
19eb0 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53  /b><i>HH:MM:SS.S
19ec0 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48  SS</i>.<li> <i>H
19ed0 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
19ee0 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c  >HH:MM:SS</i>.<l
19ef0 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53  i> <i>HH:MM:SS.S
19f00 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e  SS</i>.<li> <b>n
19f10 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44  ow</b>.<li> <i>D
19f20 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f  DDDDDDDDD</i>.</
19f30 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66  ol>)^..<p>.^In f
19f40 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67 68  ormats 5 through
19f50 20 37 2c 20 74 68 65 20 22 54 22 20 69 73 20 61   7, the "T" is a
19f60 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63 74   literal charact
19f70 65 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a 74  er separating .t
19f80 68 65 20 64 61 74 65 20 61 6e 64 20 74 68 65 20  he date and the 
19f90 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72 65  time, as require
19fa0 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77 77  d by .[http://ww
19fb0 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54  w.w3c.org/TR/NOT
19fc0 45 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53 4f  E-datetime | ISO
19fd0 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74  -8601]. .^Format
19fe0 73 20 38 20 74 68 72 6f 75 67 68 20 31 30 20 74  s 8 through 10 t
19ff0 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c 79  hat specify only
1a000 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20 61   a time assume a
1a010 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d 30   date of .2000-0
1a020 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31 2c  1-01. Format 11,
1a030 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f 77   the string 'now
1a040 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  ', is converted 
1a050 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65 6e  into the .curren
1a060 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  t date and time 
1a070 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  as obtained from
1a080 20 74 68 65 20 78 43 75 72 72 65 6e 74 54 69 6d   the xCurrentTim
1a090 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65 20  e method.of the 
1a0a0 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f 62  [sqlite3_vfs] ob
1a0b0 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 5b 68  ject in use..^[h
1a0c0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1a0d0 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f 72  ia.org/wiki/Coor
1a0e0 64 69 6e 61 74 65 64 5f 55 6e 69 76 65 72 73 61  dinated_Universa
1a0f0 6c 5f 54 69 6d 65 20 7c 20 55 6e 69 76 65 72 73  l_Time | Univers
1a100 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54  al Coordinated T
1a110 69 6d 65 20 28 55 54 43 29 5d 20 69 73 20 75 73  ime (UTC)] is us
1a120 65 64 2e 20 0a 5e 46 6f 72 6d 61 74 20 31 32 20  ed. .^Format 12 
1a130 69 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f  is the .[http://
1a140 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1a150 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79  /wiki/Julian_day
1a160 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75   | Julian day nu
1a170 6d 62 65 72 5d 0a 65 78 70 72 65 73 73 65 64 20  mber].expressed 
1a180 61 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  as a floating po
1a190 69 6e 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a  int value..</p>.
1a1a0 0a 3c 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61 74  .<p>.^(In format
1a1b0 73 20 34 2c 20 37 2c 20 61 6e 64 20 31 30 2c 20  s 4, 7, and 10, 
1a1c0 74 68 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 73  the fractional s
1a1d0 65 63 6f 6e 64 73 20 76 61 6c 75 65 20 53 53 2e  econds value SS.
1a1e0 53 53 53 20 63 61 6e 20 68 61 76 65 0a 6f 6e 65  SSS can have.one
1a1f0 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74 73 20   or more digits 
1a200 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 65  following the de
1a210 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 45 78  cimal point.  Ex
1a220 61 63 74 6c 79 20 74 68 72 65 65 20 64 69 67 69  actly three digi
1a230 74 73 20 61 72 65 0a 73 68 6f 77 6e 20 69 6e 20  ts are.shown in 
1a240 74 68 65 20 65 78 61 6d 70 6c 65 73 20 62 65 63  the examples bec
1a250 61 75 73 65 20 6f 6e 6c 79 20 74 68 65 20 66 69  ause only the fi
1a260 72 73 74 20 74 68 72 65 65 20 64 69 67 69 74 73  rst three digits
1a270 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74   are significant
1a280 0a 74 6f 20 74 68 65 20 72 65 73 75 6c 74 2c 20  .to the result, 
1a290 62 75 74 20 74 68 65 20 69 6e 70 75 74 20 73 74  but the input st
1a2a0 72 69 6e 67 20 63 61 6e 20 68 61 76 65 20 66 65  ring can have fe
1a2b0 77 65 72 20 6f 72 20 6d 6f 72 65 20 74 68 61 6e  wer or more than
1a2c0 20 74 68 72 65 65 20 64 69 67 69 74 73 0a 61 6e   three digits.an
1a2d0 64 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65 20  d the date/time 
1a2e0 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73  functions will s
1a2f0 74 69 6c 6c 20 6f 70 65 72 61 74 65 20 63 6f 72  till operate cor
1a300 72 65 63 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61  rectly.)^.Simila
1a310 72 6c 79 2c 20 66 6f 72 6d 61 74 20 31 32 20 69  rly, format 12 i
1a320 73 20 73 68 6f 77 6e 20 77 69 74 68 20 31 30 20  s shown with 10 
1a330 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69  significant digi
1a340 74 73 2c 20 62 75 74 20 74 68 65 20 64 61 74 65  ts, but the date
1a350 2f 74 69 6d 65 0a 66 75 6e 63 74 69 6f 6e 73 20  /time.functions 
1a360 77 69 6c 6c 20 72 65 61 6c 6c 79 20 61 63 63 65  will really acce
1a370 70 74 20 61 73 20 6d 61 6e 79 20 6f 72 20 61 73  pt as many or as
1a380 20 66 65 77 20 64 69 67 69 74 73 20 61 73 20 61   few digits as a
1a390 72 65 20 6e 65 63 65 73 73 61 72 79 20 74 6f 0a  re necessary to.
1a3a0 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 4a 75  represent the Ju
1a3b0 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 2e  lian day number.
1a3c0 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66  .</p>..<h3>Modif
1a3d0 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  iers</h3>..<p>^T
1a3e0 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63  he time string c
1a3f0 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  an be followed b
1a400 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d  y zero or more m
1a410 6f 64 69 66 69 65 72 73 20 74 68 61 74 20 0a 61  odifiers that .a
1a420 6c 74 65 72 20 64 61 74 65 20 61 6e 64 2f 6f 72  lter date and/or
1a430 20 74 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64   time. ^Each mod
1a440 69 66 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73  ifier.is a trans
1a450 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
1a460 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65  s applied to the
1a470 20 74 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69   time value to i
1a480 74 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69  ts left..^Modifi
1a490 65 72 73 20 61 72 65 20 61 70 70 6c 69 65 64 20  ers are applied 
1a4a0 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
1a4b0 68 74 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70  ht; order is imp
1a4c0 6f 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76  ortant..^(The av
1a4d0 61 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72  ailable modifier
1a4e0 73 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73  s are as follows
1a4f0 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  .</p>..<ol>.<li>
1a500 20 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e   NNN days.<li> N
1a510 4e 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e  NN hours.<li> NN
1a520 4e 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e  N minutes.<li> N
1a530 4e 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a  NN.NNNN seconds.
1a540 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a  <li> NNN months.
1a550 3c 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c  <li> NNN years.<
1a560 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e  li> start of mon
1a570 74 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66  th.<li> start of
1a580 20 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74   year.<li> start
1a590 20 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65   of day.<li> wee
1a5a0 6b 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78  kday N.<li> unix
1a5b0 65 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c  epoch.<li> local
1a5c0 74 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c  time.<li> utc .<
1a5d0 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20  /ol>)^..<p>^The 
1a5e0 66 69 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69  first six modifi
1a5f0 65 72 73 20 28 31 20 74 68 72 6f 75 67 68 20 36  ers (1 through 6
1a600 29 20 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68  ) .simply add th
1a610 65 20 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75  e specified amou
1a620 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68  nt of time to th
1a630 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1a640 0a 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68  .specified by th
1a650 65 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65  e preceding time
1a660 73 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66  string and modif
1a670 69 65 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61 74  iers..^Note that
1a680 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f   "&plusmn;NNN mo
1a690 6e 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72  nths" works by r
1a6a0 65 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69  endering the ori
1a6b0 67 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a  ginal date into.
1a6c0 74 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66  the YYYY-MM-DD f
1a6d0 6f 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68  ormat, adding th
1a6e0 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f  e &plusmn;NNN to
1a6f0 20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61   the MM month va
1a700 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c  lue, then.normal
1a710 69 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  izing the result
1a720 2e 20 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78  .  ^Thus, for ex
1a730 61 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20  ample, the data 
1a740 32 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66  2001-03-31 modif
1a750 69 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68  ied.by '+1 month
1a760 27 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c  ' initially yiel
1a770 64 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62  ds 2001-04-31, b
1a780 75 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61  ut April only ha
1a790 73 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65  s 30 days.so the
1a7a0 20 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69   date is normali
1a7b0 7a 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30  zed to 2001-05-0
1a7c0 31 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65  1.  ^A similar e
1a7d0 66 66 65 63 74 20 6f 63 63 75 72 73 20 77 68 65  ffect occurs whe
1a7e0 6e 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64  n.the original d
1a7f0 61 74 65 20 69 73 20 46 65 62 72 75 61 72 79 20  ate is February 
1a800 32 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72  29 of a leapyear
1a810 20 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65   and the modifie
1a820 72 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79  r is.&plusmn;N y
1a830 65 61 72 73 20 77 68 65 72 65 20 4e 20 69 73 20  ears where N is 
1a840 6e 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f  not a multiple o
1a850 66 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  f four.</p>..<p>
1a860 5e 54 68 65 20 22 73 74 61 72 74 20 6f 66 22 20  ^The "start of" 
1a870 6d 6f 64 69 66 69 65 72 73 20 28 37 20 74 68 72  modifiers (7 thr
1a880 6f 75 67 68 20 39 29 20 73 68 69 66 74 20 74 68  ough 9) shift th
1a890 65 20 64 61 74 65 20 62 61 63 6b 77 61 72 64 73  e date backwards
1a8a0 20 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69   .to the beginni
1a8b0 6e 67 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ng of the curren
1a8c0 74 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72  t month, year or
1a8d0 20 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54   day.</p>..<p>^T
1a8e0 68 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64  he "weekday" mod
1a8f0 69 66 69 65 72 20 61 64 76 61 6e 63 65 73 20 74  ifier advances t
1a900 68 65 20 64 61 74 65 20 66 6f 72 77 61 72 64 20  he date forward 
1a910 74 6f 20 74 68 65 20 6e 65 78 74 20 64 61 74 65  to the next date
1a920 20 0a 77 68 65 72 65 20 74 68 65 20 77 65 65 6b   .where the week
1a930 64 61 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e  day number is N.
1a940 20 53 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f   Sunday is 0, Mo
1a950 6e 64 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73  nday is 1, and s
1a960 6f 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70  o forth.</p>..<p
1a970 3e 5e 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68  >^The "unixepoch
1a980 22 20 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20  " modifier (11) 
1a990 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74  only works if it
1a9a0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
1a9b0 6c 6f 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69  lows .a timestri
1a9c0 6e 67 20 69 6e 20 74 68 65 20 44 44 44 44 44 44  ng in the DDDDDD
1a9d0 44 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54  DDDD format. .^T
1a9e0 68 69 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75  his modifier cau
1a9f0 73 65 73 20 74 68 65 20 44 44 44 44 44 44 44 44  ses the DDDDDDDD
1aa00 44 44 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72  DD to be interpr
1aa10 65 74 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a  eted not .as a J
1aa20 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  ulian day number
1aa30 20 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20   as it normally 
1aa40 77 6f 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73  would be, but as
1aa50 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
1aa60 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55  pedia.org/wiki/U
1aa70 6e 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20  nix_time | Unix 
1aa80 54 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d  Time] - the .num
1aa90 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber of seconds s
1aaa0 69 6e 63 65 20 31 39 37 30 2e 20 20 49 66 20 74  ince 1970.  If t
1aab0 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d  he "unixepoch" m
1aac0 6f 64 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74  odifier does not
1aad0 0a 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74  .follow a timest
1aae0 72 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d  ring of the form
1aaf0 20 44 44 44 44 44 44 44 44 44 44 20 77 68 69 63   DDDDDDDDDD whic
1ab00 68 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  h expresses the 
1ab10 6e 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64  number.of second
1ab20 73 20 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20  s since 1970 or 
1ab30 69 66 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65  if other modifie
1ab40 72 73 0a 73 65 70 61 72 61 74 65 20 74 68 65 20  rs.separate the 
1ab50 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69  "unixepoch" modi
1ab60 66 69 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20  fier from prior 
1ab70 44 44 44 44 44 44 44 44 44 44 20 74 68 65 6e 20  DDDDDDDDDD then 
1ab80 74 68 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20  the.behavior is 
1ab90 75 6e 64 65 66 69 6e 65 64 2e 0a 44 75 65 20 74  undefined..Due t
1aba0 6f 20 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d 69  o precision limi
1abb0 74 61 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64 20  tations imposed 
1abc0 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  by the implement
1abd0 61 74 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36 34  ations use.of 64
1abe0 2d 62 69 74 20 69 6e 74 65 67 65 72 73 2c 20 74  -bit integers, t
1abf0 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d  he "unixepoch" m
1ac00 6f 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72  odifier only wor
1ac10 6b 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74  ks for.dates bet
1ac20 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20  ween 0000-01-01 
1ac30 30 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35  00:00:00 and 535
1ac40 32 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37  2-11-01 10:52:47
1ac50 20 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20   (unix times.of 
1ac60 2d 36 32 31 36 37 32 31 39 32 30 30 20 74 68 72  -62167219200 thr
1ac70 6f 75 67 68 20 31 30 36 37 35 31 39 39 31 36 37  ough 10675199167
1ac80 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  ).</p>..<p>^The 
1ac90 22 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69  "localtime" modi
1aca0 66 69 65 72 20 28 31 32 29 20 61 73 73 75 6d 65  fier (12) assume
1acb0 73 20 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e  s the time strin
1acc0 67 20 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73  g to its left is
1acd0 20 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f   in.Universal Co
1ace0 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28  ordinated Time (
1acf0 55 54 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73  UTC) and adjusts
1ad00 20 74 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67   the time.string
1ad10 20 73 6f 20 74 68 61 74 20 69 74 20 64 69 73 70   so that it disp
1ad20 6c 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20  lays localtime. 
1ad30 20 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a   If "localtime".
1ad40 66 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74  follows a time t
1ad50 68 61 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20  hat is not UTC, 
1ad60 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
1ad70 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  r is undefined..
1ad80 5e 28 54 68 65 20 22 75 74 63 22 20 69 73 20 74  ^(The "utc" is t
1ad90 68 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22  he opposite of "
1ada0 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22 75 74  localtime".  "ut
1adb0 63 22 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  c" assumes that 
1adc0 74 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74  the string.to it
1add0 73 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65  s left is in the
1ade0 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20   local timezone 
1adf0 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61 74  and adjusts that
1ae00 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e   string to be in
1ae10 20 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70   UTC.)^.If the p
1ae20 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e  rior string is n
1ae30 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c  ot in localtime,
1ae40 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
1ae50 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64   of "utc" is.und
1ae60 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33  efined.</p>..<h3
1ae70 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a  >Examples</h3>..
1ae80 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1ae90 20 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70   current date.<p
1aea0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53  >..<blockquote>S
1aeb0 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27  ELECT date('now'
1aec0 29 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  );</blockquote>)
1aed0 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1aee0 74 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20  the last day of 
1aef0 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74  the current mont
1af00 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  h.</p>..<blockqu
1af10 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28  ote>SELECT date(
1af20 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20  'now','start of 
1af30 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68  month','+1 month
1af40 27 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62  ','-1 day');.</b
1af50 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1af60 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64  <p>Compute the d
1af70 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76  ate and time giv
1af80 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74  en a unix timest
1af90 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c  amp 1092941466.<
1afa0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1afb0 3e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61 74  >.    SELECT dat
1afc0 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36  etime(1092941466
1afd0 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a  , 'unixepoch');.
1afe0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1aff0 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1b000 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1b010 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d  given a unix tim
1b020 65 73 74 61 6d 70 20 31 30 39 32 39 34 31 34 36  estamp 109294146
1b030 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61  6, and .compensa
1b040 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61  te for your loca
1b050 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a  l timezone.</p>.
1b060 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1b070 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28  SELECT datetime(
1b080 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69  1092941466, 'uni
1b090 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74  xepoch', 'localt
1b0a0 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  ime');.</blockqu
1b0b0 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1b0c0 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  pute the current
1b0d0 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e   unix timestamp.
1b0e0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1b0f0 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66  e>.  SELECT strf
1b100 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29  time('%s','now')
1b110 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1b120 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1b130 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61  the number of da
1b140 79 73 20 73 69 6e 63 65 20 74 68 65 20 73 69 67  ys since the sig
1b150 6e 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44  ning of the US D
1b160 65 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e  eclaration.of In
1b170 64 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a  dependence.</p>.
1b180 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1b190 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79  SELECT julianday
1b1a0 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e  ('now') - julian
1b1b0 64 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27  day('1776-07-04'
1b1c0 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1b1d0 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1b1e0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
1b1f0 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70  econds since a p
1b200 61 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74  articular moment
1b210 20 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c   in 2004:</p>..<
1b220 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1b230 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25  LECT strftime('%
1b240 73 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66  s','now') - strf
1b250 74 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d  time('%s','2004-
1b260 30 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29  01-01 02:34:56')
1b270 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1b280 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65  ^..^(<p>.Compute
1b290 20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68 65   the date of the
1b2a0 20 66 69 72 73 74 20 54 75 65 73 64 61 79 20 69   first Tuesday i
1b2b0 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68  n October.for th
1b2c0 65 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a  e current year..
1b2d0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1b2e0 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65  e>.  SELECT date
1b2f0 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66  ('now','start of
1b300 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68   year','+9 month
1b310 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b  s','weekday 2');
1b320 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1b330 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1b340 68 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68  he time since th
1b350 65 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20  e unix epoch in 
1b360 73 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73  seconds .(like s
1b370 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f  trftime('%s','no
1b380 77 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75  w') except inclu
1b390 64 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70  des fractional p
1b3a0 61 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  art):</p>..<bloc
1b3b0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1b3c0 20 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77   (julianday('now
1b3d0 27 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a  ') - 2440587.5)*
1b3e0 38 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b  86400.0;.</block
1b3f0 71 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61  quote>)^..<h3>Ca
1b400 76 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f  veats And Bugs</
1b410 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70  h3>..<p>The comp
1b420 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c  utation of local
1b430 20 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65   time depends he
1b440 61 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69  avily on the whi
1b450 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e  m .of politician
1b460 73 20 61 6e 64 20 69 73 20 74 68 75 73 20 64 69  s and is thus di
1b470 66 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63  fficult to get c
1b480 6f 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20  orrect for .all 
1b490 6c 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69  locales. ^In thi
1b4a0 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  s implementation
1b4b0 2c 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  , the standard C
1b4c0 20 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69   library .functi
1b4d0 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29  on localtime_r()
1b4e0 20 69 73 20 75 73 65 64 20 74 6f 20 61 73 73 69   is used to assi
1b4f0 73 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c  st in the calcul
1b500 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20  ation of .local 
1b510 74 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f  time.  ^(The .lo
1b520 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75  caltime_r() C fu
1b530 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20  nction normally 
1b540 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79  only works for y
1b550 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37  ears.between 197
1b560 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20  0 and 2037. For 
1b570 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68  dates outside th
1b580 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65  is range, SQLite
1b590 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61   .attempts to ma
1b5a0 70 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20  p the year into 
1b5b0 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65  an equivalent ye
1b5c0 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20  ar within .this 
1b5d0 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61  range, do the ca
1b5e0 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20  lculation, then 
1b5f0 6d 61 70 20 74 68 65 20 79 65 61 72 20 62 61 63  map the year bac
1b600 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28  k.)^</p>...<p>^(
1b610 54 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20  These functions 
1b620 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61  only work for da
1b630 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30  tes between 0000
1b640 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a  -01-01 00:00:00.
1b650 61 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32  and 9999-12-31 2
1b660 33 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e  3:59:59 (julidan
1b670 20 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32   day numbers 172
1b680 31 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35  1059.5 through 5
1b690 33 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72  373484.5).)^.For
1b6a0 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74   dates outside t
1b6b0 68 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72  hat range, the r
1b6c0 65 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a  esults of these.
1b6d0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e  functions are un
1b6e0 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  defined.</p>..<p
1b6f0 3e 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f  >Non-Vista Windo
1b700 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c  ws platforms onl
1b710 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65  y support one se
1b720 74 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20  t of DST rules. 
1b730 0a 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70  .Vista only supp
1b740 6f 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66  orts two. Theref
1b750 6f 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c  ore, on these pl
1b760 61 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72  atforms, .histor
1b770 69 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61  ical DST calcula
1b780 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e  tions will be in
1b790 63 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78  correct. .For ex
1b7a0 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53  ample, in the US
1b7b0 2c 20 69 6e 20 32 30 30 37 20 74 68 65 20 44 53  , in 2007 the DS
1b7c0 54 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e  T rules changed.
1b7d0 20 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64   .Non-Vista Wind
1b7e0 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70  ows platforms ap
1b7f0 70 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30 37  ply the new 2007
1b800 20 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61   DST rules .to a
1b810 6c 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61 72  ll previous year
1b820 73 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61  s as well. Vista
1b830 20 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62   does somewhat b
1b840 65 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65  etter.getting re
1b850 73 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61  sults correct ba
1b860 63 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e  ck to 1986, when
1b870 20 74 68 65 20 72 75 6c 65 73 20 77 65 72 65 20   the rules were 
1b880 61 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70  also changed.</p
1b890 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e  >..<p>All intern
1b8a0 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20  al computations 
1b8b0 61 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74  assume the .[htt
1b8c0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1b8d0 2e 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72  .org/wiki/Gregor
1b8e0 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47  ian_calendar | G
1b8f0 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61  regorian calenda
1b900 72 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69  r].system.  It i
1b910 73 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74  s also assumed t
1b920 68 61 74 20 65 76 65 72 79 0a 64 61 79 20 69 73  hat every.day is
1b930 20 65 78 61 63 74 6c 79 20 38 36 34 30 30 20 73   exactly 86400 s
1b940 65 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69  econds in durati
1b950 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  on.</p>..<tcl>.#
1b960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b9a0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1b9b0 63 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65  ction {Aggregate
1b9c0 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66   Functions} aggf
1b9d0 75 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c  unc {*aggfunc}.<
1b9e0 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61  /tcl>..<p>.The a
1b9f0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1ba00 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61  ns shown below a
1ba10 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20  re available by 
1ba20 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69  default.  Additi
1ba30 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66  onal.aggregate f
1ba40 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e  unctions written
1ba50 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64   in C may be add
1ba60 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73  ed using the .[s
1ba70 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
1ba80 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50  nction()]</a>.AP
1ba90 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20  I.</p>..<p>.^In 
1baa0 61 6e 79 20 61 67 67 72 65 67 61 74 65 20 66 75  any aggregate fu
1bab0 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65  nction that take
1bac0 73 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  s a single argum
1bad0 65 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65  ent, that argume
1bae0 6e 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64  nt.can be preced
1baf0 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72  ed by the keywor
1bb00 64 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e  d DISTINCT.  ^In
1bb10 20 73 75 63 68 20 63 61 73 65 73 2c 20 64 75 70   such cases, dup
1bb20 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20  licate.elements 
1bb30 61 72 65 20 66 69 6c 74 65 72 65 64 20 62 65 66  are filtered bef
1bb40 6f 72 65 20 62 65 69 6e 67 20 70 61 73 73 65 64  ore being passed
1bb50 20 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67   into the aggreg
1bb60 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46  ate function..^F
1bb70 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
1bb80 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28  function "count(
1bb90 64 69 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c  distinct X)" wil
1bba0 6c 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  l return the num
1bbb0 62 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20  ber.of distinct 
1bbc0 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e  values of column
1bbd0 20 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68   X instead of th
1bbe0 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
1bbf0 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65  f non-null.value
1bc00 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c  s in column X..<
1bc10 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64  /p>..<table bord
1bc20 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67  er=0 cellpadding
1bc30 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64  =10>.<tcl>.funcd
1bc40 65 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76  ef {avg(X)} {*av
1bc50 67 20 7b 61 76 67 28 29 20 61 67 67 72 65 67 61  g {avg() aggrega
1bc60 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
1bc70 20 20 5e 54 68 65 20 61 76 67 28 29 20 66 75 6e    ^The avg() fun
1bc80 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20  ction.  returns 
1bc90 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c 75  the average valu
1bca0 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  e of all non-NUL
1bcb0 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69  L <i>X</i> withi
1bcc0 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53  n a.  group.  ^S
1bcd0 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76  tring and BLOB v
1bce0 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f  alues that do no
1bcf0 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62  t look like numb
1bd00 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70  ers are.  interp
1bd10 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e 54  reted as 0..  ^T
1bd20 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67  he result of avg
1bd30 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  () is always a f
1bd40 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
1bd50 6c 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20  lue as long as. 
1bd60 20 61 74 20 74 68 65 72 65 20 69 73 20 61 74 20   at there is at 
1bd70 6c 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55  least one non-NU
1bd80 4c 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69 66  LL input even if
1bd90 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72   all.  inputs ar
1bda0 65 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54 68  e integers.  ^Th
1bdb0 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28  e result of avg(
1bdc0 29 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64  ) is NULL if and
1bdd0 20 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65   only if.  there
1bde0 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
1bdf0 20 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75   inputs.  .}..fu
1be00 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20  ncdef {count(X) 
1be10 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e  count(*)} {*coun
1be20 74 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72 65  t {count() aggre
1be30 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20  gate function}} 
1be40 7b 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 58  {.  ^The count(X
1be50 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1be60 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20  ns.  a count of 
1be70 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69  the number of ti
1be80 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c  mes.  that <i>X<
1be90 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20  /i> is not NULL 
1bea0 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54 68  in a group.  ^Th
1beb0 65 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74  e count(*) funct
1bec0 69 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61  ion.  (with no a
1bed0 72 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e  rguments) return
1bee0 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
1bef0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
1bf00 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63  e group..}..func
1bf10 64 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61  def {group_conca
1bf20 74 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61  t(X) group_conca
1bf30 74 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f  t(X,Y)} {.  *gro
1bf40 75 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70  up_concat {group
1bf50 5f 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65 67  _concat() aggreg
1bf60 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20  ate function}.} 
1bf70 7b 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f 63  {.  ^The group_c
1bf80 6f 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f 6e  oncat() function
1bf90 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72   returns.  a str
1bfa0 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65  ing which is the
1bfb0 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f   concatenation o
1bfc0 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c  f.  all non-NULL
1bfd0 20 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c   values of <i>X<
1bfe0 2f 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d 65  /i>.  ^If parame
1bff0 74 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20  ter <i>Y</i> is 
1c000 70 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20 69  present then.  i
1c010 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  t is used as the
1c020 20 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74   separator.  bet
1c030 77 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f  ween instances o
1c040 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20  f <i>X</i>.  ^A 
1c050 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75  comma (",") is u
1c060 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72  sed as the separ
1c070 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f  ator.  if <i>Y</
1c080 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20 20  i> is omitted.  
1c090 54 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65  The order of the
1c0a0 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65 6c   concatenated el
1c0b0 65 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62 69  ements is.  arbi
1c0c0 74 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65  trary..}..funcde
1c0d0 66 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78  f {max(X)} {*max
1c0e0 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78  AggFunc *agg_max
1c0f0 20 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61 74   {max() aggregat
1c100 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
1c110 20 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67 72   ^The max() aggr
1c120 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20  egate function. 
1c130 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78   returns the max
1c140 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c  imum value of al
1c150 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  l values in the 
1c160 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61  group..  ^The ma
1c170 78 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74  ximum value is t
1c180 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f  he value that wo
1c190 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20  uld be returned 
1c1a0 6c 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44  last in an.  ORD
1c1b0 45 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61 6d  ER BY on the sam
1c1c0 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72  e column.  ^Aggr
1c1d0 65 67 61 74 65 20 6d 61 78 28 29 20 72 65 74 75  egate max() retu
1c1e0 72 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61  rns NULL .  if a
1c1f0 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65  nd only if there
1c200 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
1c210 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
1c220 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  roup..}..funcdef
1c230 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41   {min(X)} {*minA
1c240 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20  ggFunc *agg_min 
1c250 7b 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65  {min() aggregate
1c260 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1c270 5e 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72 65  ^The min() aggre
1c280 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20  gate function.  
1c290 72 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e 69  returns the mini
1c2a0 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  mum non-NULL val
1c2b0 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73  ue of all values
1c2c0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
1c2d0 20 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61   ^The minimum va
1c2e0 6c 75 65 20 69 73 20 74 68 65 20 66 69 72 73 74  lue is the first
1c2f0 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20   non-NULL value 
1c300 74 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61  that would appea
1c310 72 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20  r.  in an ORDER 
1c320 42 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  BY of the column
1c330 2e 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d  ..  ^Aggregate m
1c340 69 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c  in() returns NUL
1c350 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  L if and only if
1c360 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
1c370 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20  n-NULL.  values 
1c380 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
1c390 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29  .funcdef {sum(X)
1c3a0 20 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a   total(X)} {.  *
1c3b0 73 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f  sumFunc *sum *to
1c3c0 74 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67  tal.  {sum() agg
1c3d0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
1c3e0 0a 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72  .  {total() aggr
1c3f0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a  egate function}.
1c400 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28 29  } {.  ^The sum()
1c410 20 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67 67   and total() agg
1c420 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1c430 0a 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f 66  .  return sum of
1c440 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61   all non-NULL va
1c450 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
1c460 70 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20 61  p..  ^If there a
1c470 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  re no non-NULL i
1c480 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73  nput rows then s
1c490 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20 4e  um() returns.  N
1c4a0 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20  ULL but total() 
1c4b0 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e  returns 0.0..  N
1c4c0 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61  ULL is not norma
1c4d0 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65  lly a helpful re
1c4e0 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d  sult for the sum
1c4f0 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75   of no rows.  bu
1c500 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61  t the SQL standa
1c510 72 64 20 72 65 71 75 69 72 65 73 20 69 74 20 61  rd requires it a
1c520 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20  nd most other.  
1c530 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
1c540 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73  ines implement s
1c550 75 6d 28 29 20 74 68 61 74 20 77 61 79 20 73 6f  um() that way so
1c560 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20   SQLite does it 
1c570 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77 61  in the.  same wa
1c580 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65  y in order to be
1c590 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54   compatible.   T
1c5a0 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20  he non-standard 
1c5b0 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e  total() function
1c5c0 0a 20 20 69 73 20 70 72 6f 76 69 64 65 64 20 61  .  is provided a
1c5d0 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77  s a convenient w
1c5e0 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e  ay to work aroun
1c5f0 64 20 74 68 69 73 20 64 65 73 69 67 6e 20 70 72  d this design pr
1c600 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20 53  oblem.  in the S
1c610 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e  QL language.</p>
1c620 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73 75  ..  <p>^The resu
1c630 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73  lt of total() is
1c640 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
1c650 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
1c660 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
1c670 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74   sum() is an int
1c680 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c  eger value if al
1c690 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  l non-NULL input
1c6a0 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a  s are integers..
1c6b0 20 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74 20    ^If any input 
1c6c0 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74  to sum() is neit
1c6d0 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  her an integer o
1c6e0 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20  r a NULL.  then 
1c6f0 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20  sum() returns a 
1c700 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
1c710 61 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67  alue.  which mig
1c720 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69  ht be an approxi
1c730 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72  mation to the tr
1c740 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c  ue sum.</p>..  <
1c750 70 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68  p>^Sum() will th
1c760 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20  row an "integer 
1c770 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74  overflow" except
1c780 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74  ion if all input
1c790 73 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72 73  s.  are integers
1c7a0 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61   or NULL.  and a
1c7b0 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
1c7c0 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79  ow occurs at any
1c7d0 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68   point during th
1c7e0 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20  e computation.. 
1c7f0 20 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20   ^Total() never 
1c800 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65  throws an intege
1c810 72 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f  r overflow..}.</
1c820 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  tcl>.</table>..<
1c830 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
1c840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c880 23 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45  ###.Section INSE
1c890 52 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52  RT insert {INSER
1c8a0 54 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 42 75 62  T *INSERTs}..Bub
1c8b0 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72  bleDiagram inser
1c8c0 74 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  t-stmt 1.</tcl>.
1c8d0 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73  .<p>The INSERT s
1c8e0 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69  tatement comes i
1c8f0 6e 20 74 68 72 65 65 20 62 61 73 69 63 20 66 6f  n three basic fo
1c900 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e  rms.  .<ul>.<li>
1c910 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 66 6f  <p>^The first fo
1c920 72 6d 20 28 77 69 74 68 20 74 68 65 20 22 56 41  rm (with the "VA
1c930 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63  LUES" keyword) c
1c940 72 65 61 74 65 73 20 6f 6e 65 20 6f 72 20 6d 6f  reates one or mo
1c950 72 65 0a 6e 65 77 20 72 6f 77 73 20 69 6e 0a 61  re.new rows in.a
1c960 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
1c970 2e 20 5e 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d  . ^If no column-
1c980 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65  list is specifie
1c990 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  d then the numbe
1c9a0 72 0a 6f 66 20 76 61 6c 75 65 73 20 69 6e 73 65  r.of values inse
1c9b0 72 74 65 64 20 69 6e 74 6f 20 65 61 63 68 20 72  rted into each r
1c9c0 6f 77 0a 6d 75 73 74 20 62 65 20 74 68 65 20 73  ow.must be the s
1c9d0 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65  ame as the numbe
1c9e0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1c9f0 74 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20 74  the table. ^In t
1ca00 68 69 73 20 63 61 73 65 0a 74 68 65 20 72 65 73  his case.the res
1ca10 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
1ca20 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  g the left-most 
1ca30 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 65 61  expression in ea
1ca40 63 68 20 74 65 72 6d 20 6f 66 0a 74 68 65 20 56  ch term of.the V
1ca50 41 4c 55 45 53 20 6c 69 73 74 20 69 73 20 69 6e  ALUES list is in
1ca60 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
1ca70 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
1ca80 20 6f 66 20 74 68 65 20 65 61 63 68 20 6e 65 77   of the each new
1ca90 20 72 6f 77 2c 0a 61 6e 64 20 66 6f 72 74 68 20   row,.and forth 
1caa0 66 6f 72 20 65 61 63 68 20 73 75 62 73 65 71 75  for each subsequ
1cab0 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ent expression. 
1cac0 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d 6c 69 73  ^If a.column-lis
1cad0 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
1cae0 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
1caf0 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 65 61 63  of values in eac
1cb00 68 20 74 65 72 6d 20 6f 66 20 74 68 65 0a 56 41  h term of the.VA
1cb10 4c 55 53 20 6c 69 73 74 20 6d 75 73 74 20 6d 61  LUS list must ma
1cb20 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  tch the number o
1cb30 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75  f.specified colu
1cb40 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20 74 68  mns. ^Each of th
1cb50 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20  e named columns 
1cb60 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69  of the new row i
1cb70 73 20 70 6f 70 75 6c 61 74 65 64 0a 77 69 74 68  s populated.with
1cb80 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
1cb90 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 63  evaluating the c
1cba0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 56 41 4c  orresponding VAL
1cbb0 55 45 53 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  UES expression. 
1cbc0 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73 20 74  ^Table.columns t
1cbd0 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65 61  hat do not appea
1cbe0 72 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  r in the column 
1cbf0 6c 69 73 74 20 61 72 65 20 70 6f 70 75 6c 61 74  list are populat
1cc00 65 64 20 77 69 74 68 20 74 68 65 20 64 65 66 61  ed with the defa
1cc10 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  ult.column value
1cc20 20 28 73 70 65 63 69 66 69 65 64 20 61 73 20 70   (specified as p
1cc30 61 72 74 20 6f 66 20 74 68 65 20 43 52 45 41 54  art of the CREAT
1cc40 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
1cc50 74 29 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c 4c  t), or with NULL
1cc60 20 69 66 0a 6e 6f 20 64 65 66 61 75 6c 74 20 76   if.no default v
1cc70 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69 65  alue is specifie
1cc80 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73  d...<li><p>The s
1cc90 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68  econd form of th
1cca0 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  e INSERT stateme
1ccb0 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 53 45  nt contains a SE
1ccc0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69  LECT statement.i
1ccd0 6e 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c 55  nstead of a VALU
1cce0 45 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e 65  ES clause. ^A ne
1ccf0 77 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65 72  w entry is inser
1cd00 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62  ted into the tab
1cd10 6c 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77 20  le for each.row 
1cd20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  of data returned
1cd30 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68   by executing th
1cd40 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1cd50 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d 6e  nt. ^If a column
1cd60 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66 69  -list is.specifi
1cd70 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ed, the number o
1cd80 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1cd90 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53   result of the S
1cda0 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74 68  ELECT must be th
1cdb0 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75  e same.as the nu
1cdc0 6d 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69 6e  mber of items in
1cdd0 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74   the column-list
1cde0 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  . ^Otherwise, if
1cdf0 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20   no column-list 
1ce00 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68  is.specified, th
1ce10 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1ce20 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
1ce30 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  t of the SELECT 
1ce40 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
1ce50 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .as the number o
1ce60 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1ce70 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45 4c   table. ^Any SEL
1ce80 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 69  ECT statement, i
1ce90 6e 63 6c 75 64 69 6e 67 0a 63 6f 6d 70 6f 75 6e  ncluding.compoun
1cea0 64 20 53 45 4c 45 43 54 73 20 61 6e 64 20 53 45  d SELECTs and SE
1ceb0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
1cec0 77 69 74 68 20 4f 52 44 45 52 20 42 59 20 61 6e  with ORDER BY an
1ced0 64 2f 6f 72 20 4c 49 4d 49 54 20 63 6c 61 75 73  d/or LIMIT claus
1cee0 65 73 2c 20 0a 6d 61 79 20 62 65 20 75 73 65 64  es, .may be used
1cef0 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
1cf00 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 69 73 20  atement of this 
1cf10 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68  form...<li><p>Th
1cf20 65 20 74 68 69 72 64 20 66 6f 72 6d 20 6f 66 20  e third form of 
1cf30 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
1cf40 65 6e 74 20 69 73 20 77 69 74 68 20 44 45 46 41  ent is with DEFA
1cf50 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e 28 54 68  ULT VALUES..^(Th
1cf60 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46  e INSERT ... DEF
1cf70 41 55 4c 54 20 56 41 4c 55 45 53 20 73 74 61 74  AULT VALUES stat
1cf80 65 6d 65 6e 74 20 69 6e 73 65 72 74 73 20 61 20  ement inserts a 
1cf90 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 69  single new row i
1cfa0 6e 74 6f 20 74 68 65 0a 6e 61 6d 65 64 20 74 61  nto the.named ta
1cfb0 62 6c 65 2e 29 5e 20 5e 45 61 63 68 20 63 6f 6c  ble.)^ ^Each col
1cfc0 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 72  umn of the new r
1cfd0 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 20  ow is populated 
1cfe0 77 69 74 68 20 69 74 73 20 64 65 66 61 75 6c 74  with its default
1cff0 20 76 61 6c 75 65 2c 0a 6f 72 20 77 69 74 68 20   value,.or with 
1d000 61 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 64 65 66  a NULL if no def
1d010 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70  ault value is sp
1d020 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
1d030 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 64 65  of the column.de
1d040 66 69 6e 69 74 69 6f 6e 20 69 6e 20 74 68 65 20  finition in the 
1d050 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
1d060 74 65 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a  tement...</ul>..
1d070 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  <p>^The optional
1d080 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65   conflict-clause
1d090 20 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63   allows the spec
1d0a0 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20  ification of an 
1d0b0 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73  alternative.cons
1d0c0 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
1d0d0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
1d0e0 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69  ithm to use duri
1d0f0 6e 67 20 74 68 69 73 20 6f 6e 65 20 49 4e 53 45  ng this one INSE
1d100 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20  RT command..See 
1d110 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
1d120 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed.[ON CONFLICT]
1d130 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
1d140 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72  information..For
1d150 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
1d160 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74 68 65 20  ith MySQL, ^the 
1d170 70 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68  parser allows th
1d180 65 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e  e use of the.sin
1d190 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68  gle keyword <a h
1d1a0 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63  ref="lang_replac
1d1b0 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c  e.html">REPLACE<
1d1c0 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61 73  /a> as an .alias
1d1d0 20 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20   for "INSERT OR 
1d1e0 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e 28  REPLACE"...<p>^(
1d1f0 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 3c 69  The optional "<i
1d200 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
1d210 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66  i><b>.</b>" pref
1d220 69 78 20 6f 6e 20 74 68 65 20 3c 69 3e 74 61 62  ix on the <i>tab
1d230 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 69 73 20 73  le-name</i>.is s
1d240 75 70 70 6f 72 74 20 66 6f 72 20 74 6f 70 2d 6c  upport for top-l
1d250 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
1d260 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29 5e 20 20  ements only.)^  
1d270 5e 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20  ^The table name 
1d280 6d 75 73 74 20 62 65 0a 75 6e 71 75 61 6c 69 66  must be.unqualif
1d290 69 65 64 20 66 6f 72 20 49 4e 53 45 52 54 20 73  ied for INSERT s
1d2a0 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f  tatements that o
1d2b0 63 63 75 72 20 77 69 74 68 69 6e 20 5b 43 52 45  ccur within [CRE
1d2c0 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
1d2d0 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61  tements..^Simila
1d2e0 72 6c 79 2c 20 74 68 65 20 22 44 45 46 41 55 4c  rly, the "DEFAUL
1d2f0 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f  T VALUES" form o
1d300 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61  f the INSERT sta
1d310 74 65 6d 65 6e 74 20 69 73 20 73 75 70 70 6f 72  tement is suppor
1d320 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c 65 76 65  ted for.top-leve
1d330 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  l INSERT stateme
1d340 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74  nts only and not
1d350 20 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74   for INSERT stat
1d360 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 0a 74 72  ements within.tr
1d370 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a 3c 74 63  iggers..<p>..<tc
1d380 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
1d390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d3a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d3b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d3c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d3d0 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f  #.Section {ON CO
1d3e0 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
1d3f0 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c 69  onflict {{confli
1d400 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f 4e 20 43  ct clause} {ON C
1d410 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42 75 62 62 6c  ONFLICT}}..Bubbl
1d420 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63  eDiagram conflic
1d430 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a  t-clause.</tcl>.
1d440 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c  .<p>The ON CONFL
1d450 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  ICT clause is no
1d460 74 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c  t a separate SQL
1d470 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73   command.  It is
1d480 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20   a.non-standard 
1d490 63 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20  clause that can 
1d4a0 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f  appear in many o
1d4b0 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ther SQL command
1d4c0 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69  s..It is given i
1d4d0 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69  ts own section i
1d4e0 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  n this document 
1d4f0 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f  because it is no
1d500 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61  t.part of standa
1d510 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65  rd SQL and there
1d520 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62  fore might not b
1d530 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a  e familiar.</p>.
1d540 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78 20  .<p>^The syntax 
1d550 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  for the ON CONFL
1d560 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73  ICT clause is as
1d570 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72   shown above for
1d580 0a 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c  .the CREATE TABL
1d590 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72  E command.  ^For
1d5a0 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a   the INSERT and.
1d5b0 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c  UPDATE commands,
1d5c0 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f   the keywords "O
1d5d0 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20  N CONFLICT" are 
1d5e0 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22  replaced by "OR"
1d5f0 20 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79 6e   so that.the syn
1d600 74 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20 6e  tax reads more n
1d610 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20 65  aturally.  For e
1d620 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20  xample, instead 
1d630 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f  of."INSERT ON CO
1d640 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77  NFLICT IGNORE" w
1d650 65 20 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f  e have "INSERT O
1d660 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b  R IGNORE"..The k
1d670 65 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62  eywords change b
1d680 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f  ut the meaning o
1d690 66 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20  f the clause is 
1d6a0 74 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20  the same.either 
1d6b0 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  way.</p>..<p>The
1d6c0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1d6d0 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20 55  use applies to U
1d6e0 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
1d6f0 4c 4c 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  LL.constraints (
1d700 61 6e 64 20 74 6f 20 50 52 49 4d 41 52 59 20 4b  and to PRIMARY K
1d710 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  EY constraints w
1d720 68 69 63 68 20 66 6f 72 20 74 68 65 20 70 75 72  hich for the pur
1d730 70 6f 73 65 73 20 0a 6f 66 20 74 68 69 73 20 73  poses .of this s
1d740 65 63 74 69 6f 6e 20 61 72 65 20 74 68 65 20 73  ection are the s
1d750 61 6d 65 20 74 68 69 6e 67 20 61 73 20 55 4e 49  ame thing as UNI
1d760 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  QUE constraints)
1d770 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  ..The ON CONFLIC
1d780 54 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65 73  T algorithm does
1d790 20 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b 46   not.apply to [F
1d7a0 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
1d7b0 72 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20 61  raints]..There a
1d7c0 72 65 20 66 69 76 65 20 63 6f 6e 66 6c 69 63 74  re five conflict
1d7d0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1d7e0 72 69 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a 52  rithm choices:.R
1d7f0 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 20  OLLBACK, ABORT, 
1d800 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e  FAIL, IGNORE, an
1d810 64 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65 20  d REPLACE..^The 
1d820 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74  default conflict
1d830 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1d840 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20  rithm is ABORT. 
1d850 20 54 68 69 73 0a 69 73 20 77 68 61 74 20 74 68   This.is what th
1d860 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64  ey mean:</p>..<d
1d870 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41  l>.<dt><b>ROLLBA
1d880 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  CK</b></dt>.<dd>
1d890 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
1d8a0 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
1d8b0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1d8c0 75 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43  urs, the ROLLBAC
1d8d0 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  K.resolution alg
1d8e0 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68  orithm aborts th
1d8f0 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74  e current SQL st
1d900 61 74 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e 20  atement with.an 
1d910 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
1d920 54 20 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c 6c  T error and roll
1d930 73 20 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  s back the curre
1d940 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  nt transaction..
1d950 5e 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  ^If no transacti
1d960 6f 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74  on is.active (ot
1d970 68 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70  her than the imp
1d980 6c 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  lied transaction
1d990 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
1d9a0 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e   on every.comman
1d9b0 64 29 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  d) then the ROLL
1d9c0 42 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e 20  BACK resolution 
1d9d0 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20  algorithm works 
1d9e0 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 0a  the same as the.
1d9f0 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 2e  ABORT algorithm.
1da00 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
1da10 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e  b>ABORT</b></dt>
1da20 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61  .<dd><p> ^When a
1da30 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e  n applicable con
1da40 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
1da50 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 41 42  n occurs, the AB
1da60 4f 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ORT.resolution a
1da70 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20  lgorithm aborts 
1da80 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20  the current SQL 
1da90 73 74 61 74 65 6d 65 6e 74 0a 77 69 74 68 20 61  statement.with a
1daa0 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  n SQLITE_CONSTRA
1dab0 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 62 61  INT error and ba
1dac0 63 6b 73 20 6f 75 74 20 61 6e 79 20 63 68 61 6e  cks out any chan
1dad0 67 65 73 0a 6d 61 64 65 20 62 79 20 74 68 65 20  ges.made by the 
1dae0 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
1daf0 65 6d 65 6e 74 3b 20 62 75 74 20 63 68 61 6e 67  ement; but chang
1db00 65 73 20 63 61 75 73 65 64 0a 62 79 20 70 72 69  es caused.by pri
1db10 6f 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  or SQL statement
1db20 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
1db30 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 72  e transaction ar
1db40 65 20 70 72 65 73 65 72 76 65 64 20 61 6e 64 20  e preserved and 
1db50 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  the.transaction 
1db60 72 65 6d 61 69 6e 73 20 61 63 74 69 76 65 2e 0a  remains active..
1db70 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  This is the defa
1db80 75 6c 74 20 62 65 68 61 76 69 6f 72 20 61 6e 64  ult behavior and
1db90 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 73 70   the behavior sp
1dba0 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 53  ecified by the S
1dbb0 51 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e  QL.standard.</p>
1dbc0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41  </dd>..<dt><b>FA
1dbd0 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  IL</b></dt>.<dd>
1dbe0 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
1dbf0 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
1dc00 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1dc10 75 72 73 2c 20 74 68 65 20 46 41 49 4c 0a 72 65  urs, the FAIL.re
1dc20 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
1dc30 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
1dc40 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
1dc50 65 6e 74 20 77 69 74 68 20 61 6e 0a 53 51 4c 49  ent with an.SQLI
1dc60 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
1dc70 72 6f 72 2e 20 20 5e 42 75 74 20 74 68 65 20 46  ror.  ^But the F
1dc80 41 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20 64  AIL resolution d
1dc90 6f 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75 74  oes not.back out
1dca0 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 6f   prior changes o
1dcb0 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  f the SQL statem
1dcc0 65 6e 74 20 74 68 61 74 20 66 61 69 6c 65 64 20  ent that failed 
1dcd0 6e 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e 64 20  nor does.it end 
1dce0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
1dcf0 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69  .^For example, i
1dd00 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61 74  f an UPDATE.stat
1dd10 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65  ement encountere
1dd20 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  d a constraint v
1dd30 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20  iolation on the 
1dd40 31 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a 69  100th row that.i
1dd50 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 70  t attempts to up
1dd60 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20 66  date, then the f
1dd70 69 72 73 74 20 39 39 20 72 6f 77 20 63 68 61 6e  irst 99 row chan
1dd80 67 65 73 20 61 72 65 20 70 72 65 73 65 72 76 65  ges are preserve
1dd90 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74 6f  d.but changes to
1dda0 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62 65   rows 100 and be
1ddb0 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75 72  yond never occur
1ddc0 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  .</p></dd>..<dt>
1ddd0 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64  <b>IGNORE</b></d
1dde0 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
1ddf0 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63   an applicable c
1de00 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
1de10 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65  ion occurs, .the
1de20 20 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74 69   IGNORE resoluti
1de30 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b 69  on algorithm ski
1de40 70 73 20 74 68 65 20 6f 6e 65 20 72 6f 77 20 74  ps the one row t
1de50 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65  hat contains.the
1de60 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1de70 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69 6e  ation and contin
1de80 75 65 73 20 70 72 6f 63 65 73 73 69 6e 67 20 73  ues processing s
1de90 75 62 73 65 71 75 65 6e 74 20 72 6f 77 73 0a 6f  ubsequent rows.o
1dea0 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  f the SQL statem
1deb0 65 6e 74 20 61 73 20 69 66 20 6e 6f 74 68 69 6e  ent as if nothin
1dec0 67 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74  g went wrong..Ot
1ded0 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20  her rows before 
1dee0 61 6e 64 20 61 66 74 65 72 20 74 68 65 20 72 6f  and after the ro
1def0 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64  w that.contained
1df00 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1df10 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69 6e  violation are in
1df20 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
1df30 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20  d.normally. ^No 
1df40 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
1df50 64 20 77 68 65 6e 20 74 68 65 20 49 47 4e 4f 52  d when the IGNOR
1df60 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  E conflict resol
1df70 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20  ution.algorithm 
1df80 69 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64  is used.</p></dd
1df90 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43  >..<dt><b>REPLAC
1dfa0 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  E</b></dt>.<dd><
1dfb0 70 3e 20 5e 57 68 65 6e 20 61 20 55 4e 49 51 55  p> ^When a UNIQU
1dfc0 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
1dfd0 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
1dfe0 68 65 20 52 45 50 4c 41 43 45 20 61 6c 67 6f 72  he REPLACE algor
1dff0 69 74 68 6d 0a 64 65 6c 65 74 65 73 20 70 72 65  ithm.deletes pre
1e000 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20 74  -existing rows t
1e010 68 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20  hat are causing 
1e020 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
1e030 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20 74  iolation.prior t
1e040 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 75  o inserting or u
1e050 70 64 61 74 69 6e 67 20 74 68 65 20 63 75 72 72  pdating the curr
1e060 65 6e 74 20 72 6f 77 20 61 6e 64 20 74 68 65 20  ent row and the 
1e070 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65  command continue
1e080 73 20 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f 72  s .executing nor
1e090 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20 4e 4f 54  mally..^If a NOT
1e0a0 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
1e0b0 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
1e0c0 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20 63  s, the REPLACE c
1e0d0 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69  onflict.resoluti
1e0e0 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65 20  on replaces the 
1e0f0 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69 74 68 0a  NULL value with.
1e100 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
1e110 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e   for that column
1e120 2c 20 6f 72 20 69 66 20 74 68 65 20 63 6f 6c 75  , or if the colu
1e130 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61 75 6c  mn has no defaul
1e140 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68  t.value, then th
1e150 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68  e ABORT algorith
1e160 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49 66 20 61  m is used..^If a
1e170 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
1e180 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
1e190 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20  rs, the REPLACE 
1e1a0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
1e1b0 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 61 6c  ion.algorithm al
1e1c0 77 61 79 73 20 77 6f 72 6b 73 20 6c 69 6b 65 20  ways works like 
1e1d0 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ABORT.</p>..<p>^
1e1e0 57 68 65 6e 20 74 68 65 20 52 45 50 4c 41 43 45  When the REPLACE
1e1f0 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
1e200 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64 65  tion strategy de
1e210 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f 72  letes rows in or
1e220 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20 61  der to.satisfy a
1e230 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43 52   constraint, [CR
1e240 45 41 54 45 20 54 52 49 47 47 45 52 20 7c 20 64  EATE TRIGGER | d
1e250 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 5d 20  elete triggers] 
1e260 66 69 72 65 20 69 66 20 61 6e 64 20 6f 6e 6c 79  fire if and only
1e270 20 69 66 0a 5b 72 65 63 75 72 73 69 76 65 5f 74   if.[recursive_t
1e280 72 69 67 67 65 72 73 20 70 72 61 67 6d 61 20 7c  riggers pragma |
1e290 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
1e2a0 65 72 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64  ers] are enabled
1e2b0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b  .</p>..<p>^The [
1e2c0 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68  sqlite3_update_h
1e2d0 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20 68 6f 6f  ook | update hoo
1e2e0 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65  k] is not invoke
1e2f0 64 20 66 6f 72 20 72 6f 77 73 20 74 68 61 74 0a  d for rows that.
1e300 61 72 65 20 64 65 6c 65 74 65 64 20 62 79 20 74  are deleted by t
1e310 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
1e320 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73  ict resolution s
1e330 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f 72 20 64  trategy.  ^Nor d
1e340 6f 65 73 0a 52 45 50 4c 41 43 45 20 69 6e 63 72  oes.REPLACE incr
1e350 65 6d 65 6e 74 20 74 68 65 20 5b 73 71 6c 69 74  ement the [sqlit
1e360 65 33 5f 63 68 61 6e 67 65 73 20 7c 20 63 68 61  e3_changes | cha
1e370 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e 0a 54 68  nge counter]..Th
1e380 65 20 65 78 63 65 70 74 69 6f 6e 61 6c 20 62 65  e exceptional be
1e390 68 61 76 69 6f 72 73 20 64 65 66 69 6e 65 64 20  haviors defined 
1e3a0 69 6e 20 74 68 69 73 20 70 61 72 61 67 72 61 70  in this paragrap
1e3b0 68 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 0a  h might change .
1e3c0 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c 65  in a future rele
1e3d0 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a  ase.</p>.</dl>..
1e3e0 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74 68  <p>^The algorith
1e3f0 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  m specified in t
1e400 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f 66 20  he OR clause of 
1e410 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  an INSERT or UPD
1e420 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61 6e  ATE.overrides an
1e430 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63  y algorithm spec
1e440 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41 54  ified in a CREAT
1e450 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20  E TABLE..^If no 
1e460 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
1e470 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65 2c  cified anywhere,
1e480 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
1e490 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70  ithm is used.</p
1e4a0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1e4b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e4c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e4d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e4e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e4f0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1e500 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78 20  REINDEX reindex 
1e510 52 45 49 4e 44 45 58 0a 0a 42 75 62 62 6c 65 44  REINDEX..BubbleD
1e520 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d 73  iagram reindex-s
1e530 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
1e540 3e 5e 54 68 65 20 52 45 49 4e 44 45 58 20 63 6f  >^The REINDEX co
1e550 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  mmand is used to
1e560 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63 72   delete and recr
1e570 65 61 74 65 20 69 6e 64 69 63 65 73 20 66 72 6f  eate indices fro
1e580 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73 20  m scratch..This 
1e590 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20 74  is useful when t
1e5a0 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  he definition of
1e5b0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
1e5c0 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67 65  uence has change
1e5d0 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  d..</p>..<p>^If 
1e5e0 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77  the REINDEX keyw
1e5f0 6f 72 64 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f  ord is not follo
1e600 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69  wed by a collati
1e610 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6f 72 20 64  on-sequence or d
1e620 61 74 61 62 61 73 65 20 0a 6f 62 6a 65 63 74 20  atabase .object 
1e630 69 64 65 6e 74 69 66 69 65 72 2c 20 74 68 65 6e  identifier, then
1e640 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20   all indices in 
1e650 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1e660 61 62 61 73 65 73 20 61 72 65 20 72 65 62 75 69  abases are rebui
1e670 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  lt...<p>^If the 
1e680 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20  REINDEX keyword 
1e690 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
1e6a0 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65   collation-seque
1e6b0 6e 63 65 20 6e 61 6d 65 2c 20 74 68 65 6e 0a 61  nce name, then.a
1e6c0 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c  ll indices in al
1e6d0 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
1e6e0 61 73 65 73 20 74 68 61 74 20 75 73 65 20 74 68  ases that use th
1e6f0 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f  e named collatio
1e700 6e 20 73 65 71 75 65 6e 63 65 73 0a 61 72 65 20  n sequences.are 
1e710 72 65 63 72 65 61 74 65 64 2e 20 0a 0a 3c 70 3e  recreated. ..<p>
1e720 5e 4f 72 2c 20 69 66 20 74 68 65 20 61 72 67 75  ^Or, if the argu
1e730 6d 65 6e 74 20 61 74 74 61 63 68 65 64 20 74 6f  ment attached to
1e740 20 74 68 65 20 52 45 49 4e 44 45 58 20 69 64 65   the REINDEX ide
1e750 6e 74 69 66 69 65 73 20 61 20 73 70 65 63 69 66  ntifies a specif
1e760 69 63 20 0a 64 61 74 61 62 61 73 65 20 74 61 62  ic .database tab
1e770 6c 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  le, then all ind
1e780 69 63 65 73 20 61 74 74 61 63 68 65 64 20 74 6f  ices attached to
1e790 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
1e7a0 62 6c 65 20 61 72 65 20 72 65 62 75 69 6c 74 2e  ble are rebuilt.
1e7b0 20 0a 5e 49 66 20 69 74 20 69 64 65 6e 74 69 66   .^If it identif
1e7c0 69 65 73 20 61 20 73 70 65 63 69 66 69 63 20 64  ies a specific d
1e7d0 61 74 61 62 61 73 65 20 69 6e 64 65 78 2c 20 74  atabase index, t
1e7e0 68 65 6e 20 6a 75 73 74 20 74 68 61 74 20 69 6e  hen just that in
1e7f0 64 65 78 20 69 73 20 72 65 63 72 65 61 74 65 64  dex is recreated
1e800 2e 0a 0a 3c 70 3e 5e 49 66 20 6e 6f 20 3c 69 3e  ...<p>^If no <i>
1e810 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69  database-name</i
1e820 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  > is specified a
1e830 6e 64 20 74 68 65 72 65 20 65 78 69 73 74 73 20  nd there exists 
1e840 62 6f 74 68 20 61 20 74 61 62 6c 65 20 6f 72 0a  both a table or.
1e850 69 6e 64 65 78 20 61 6e 64 20 61 20 63 6f 6c 6c  index and a coll
1e860 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f  ation sequence o
1e870 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  f the specified 
1e880 6e 61 6d 65 2c 20 53 51 4c 69 74 65 20 69 6e 74  name, SQLite int
1e890 65 72 70 72 65 74 73 0a 74 68 69 73 20 61 73 20  erprets.this as 
1e8a0 61 20 72 65 71 75 65 73 74 20 74 6f 20 72 65 62  a request to reb
1e8b0 75 69 6c 64 20 74 68 65 20 69 6e 64 69 63 65 73  uild the indices
1e8c0 20 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 61   that use the na
1e8d0 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  med collation se
1e8e0 71 75 65 6e 63 65 2e 0a 54 68 69 73 20 61 6d 62  quence..This amb
1e8f0 69 67 75 69 74 79 20 69 6e 20 74 68 65 20 73 79  iguity in the sy
1e900 6e 74 61 78 20 6d 61 79 20 62 65 20 61 76 6f 69  ntax may be avoi
1e910 64 65 64 20 62 79 20 61 6c 77 61 79 73 20 73 70  ded by always sp
1e920 65 63 69 66 79 69 6e 67 20 61 0a 3c 69 3e 64 61  ecifying a.<i>da
1e930 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20  tabase-name</i> 
1e940 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67 20  when reindexing 
1e950 61 20 73 70 65 63 69 66 69 63 20 74 61 62 6c 65  a specific table
1e960 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c   or index...<tcl
1e970 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
1e980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e9a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e9b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e9c0 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41 43  #.Section REPLAC
1e9d0 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c 41 43  E replace REPLAC
1e9e0 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  E..</tcl>..<p>^T
1e9f0 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d 61  he REPLACE comma
1ea00 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  nd is an alias f
1ea10 6f 72 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e 46  or the "[ON CONF
1ea20 4c 49 43 54 20 7c 20 49 4e 53 45 52 54 20 4f 52  LICT | INSERT OR
1ea30 20 52 45 50 4c 41 43 45 5d 22 0a 76 61 72 69 61   REPLACE]".varia
1ea40 6e 74 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52  nt of the [INSER
1ea50 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68  T] command.  .Th
1ea60 69 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f 76  is alias is prov
1ea70 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69  ided for compati
1ea80 62 69 6c 69 74 79 20 6f 74 68 65 72 20 53 51 4c  bility other SQL
1ea90 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
1eaa0 73 2e 20 20 53 65 65 20 74 68 65 20 0a 5b 49 4e  s.  See the .[IN
1eab0 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f  SERT] command do
1eac0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
1ead0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1eae0 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c  mation.</p>  ..<
1eaf0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
1eb00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb40 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c  ####.Section SEL
1eb50 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c 45  ECT select {SELE
1eb60 43 54 20 71 75 65 72 79 7d 0a 0a 42 75 62 62 6c  CT query}..Bubbl
1eb70 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d  eDiagram select-
1eb80 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61  stmt 1.BubbleDia
1eb90 67 72 61 6d 20 73 65 6c 65 63 74 2d 63 6f 72 65  gram select-core
1eba0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
1ebb0 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 0a 42 75 62  esult-column.Bub
1ebc0 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d  bleDiagram join-
1ebd0 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69 61  source.BubbleDia
1ebe0 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75 72  gram single-sour
1ebf0 63 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  ce.BubbleDiagram
1ec00 20 6a 6f 69 6e 2d 6f 70 0a 42 75 62 62 6c 65 44   join-op.BubbleD
1ec10 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 63 6f 6e 73  iagram join-cons
1ec20 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61  traint.BubbleDia
1ec30 67 72 61 6d 20 6f 72 64 65 72 69 6e 67 2d 74 65  gram ordering-te
1ec40 72 6d 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  rm.BubbleDiagram
1ec50 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74   compound-operat
1ec60 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 54  or.</tcl>...<p>T
1ec70 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
1ec80 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 71  ent is used to q
1ec90 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61 73  uery the databas
1eca0 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74 20 6f  e.  The.result o
1ecb0 66 20 61 20 53 45 4c 45 43 54 20 69 73 20 7a 65  f a SELECT is ze
1ecc0 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  ro or more rows 
1ecd0 6f 66 20 64 61 74 61 20 77 68 65 72 65 20 65 61  of data where ea
1ece0 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66 69 78  ch row.has a fix
1ecf0 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ed number of col
1ed00 75 6d 6e 73 2e 20 20 0a 0a 3c 70 3e 54 68 65 20  umns.  ..<p>The 
1ed10 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1ed20 20 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d   is the most com
1ed30 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e 64  plicated command
1ed40 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67   in the SQL lang
1ed50 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74 68  uage..To make th
1ed60 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65 61  e description ea
1ed70 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c 20  sier to follow, 
1ed80 73 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73 73  some of the pass
1ed90 61 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63 72  ages below descr
1eda0 69 62 65 0a 74 68 65 20 77 61 79 20 74 68 65 20  ibe.the way the 
1edb0 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
1edc0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1edd0 65 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ent is determine
1ede0 64 20 61 73 20 61 20 73 65 72 69 65 73 20 6f 66  d as a series of
1edf0 0a 73 74 65 70 73 2e 20 49 74 20 69 73 20 69 6d  .steps. It is im
1ee00 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70 20  portant to keep 
1ee10 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68 69  in mind that thi
1ee20 73 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c 75  s is purely illu
1ee30 73 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70 72  strative -.in pr
1ee40 61 63 74 69 63 65 20 6e 65 69 74 68 65 72 20 53  actice neither S
1ee50 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f 74  QLite nor any ot
1ee60 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20 69  her SQL engine i
1ee70 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 66 6f  s required to fo
1ee80 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61 6e  llow .this or an
1ee90 79 20 6f 74 68 65 72 20 73 70 65 63 69 66 69 63  y other specific
1eea0 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 68 33 3e 53   process...<h3>S
1eeb0 69 6d 70 6c 65 20 53 65 6c 65 63 74 20 50 72 6f  imple Select Pro
1eec0 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70  cessing</h3>..<p
1eed0 3e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20  >The syntax for 
1eee0 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
1eef0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64 65 70  statement is dep
1ef00 69 63 74 65 64 20 69 6e 20 74 68 65 20 0a 5b 73  icted in the .[s
1ef10 65 6c 65 63 74 2d 63 6f 72 65 20 73 79 6e 74 61  elect-core synta
1ef20 78 20 64 69 61 67 72 61 6d 5d 2e 20 47 65 6e 65  x diagram]. Gene
1ef30 72 61 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c  rating the resul
1ef40 74 73 20 6f 66 20 61 20 73 69 6d 70 6c 65 20 53  ts of a simple S
1ef50 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20  ELECT.statement 
1ef60 69 73 20 70 72 65 73 65 6e 74 65 64 20 61 73 20  is presented as 
1ef70 61 20 66 6f 75 72 20 73 74 65 70 20 70 72 6f 63  a four step proc
1ef80 65 73 73 20 69 6e 20 74 68 65 20 64 65 73 63 72  ess in the descr
1ef90 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a 0a 0a 3c  iption below:..<
1efa0 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 46  ol>.  <li> <p>[F
1efb0 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70 72 6f 63  ROM clause] proc
1efc0 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70 75  essing: The inpu
1efd0 74 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 73  t data for the s
1efe0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 0a  imple SELECT is.
1eff0 20 20 20 20 20 20 20 64 65 74 65 72 6d 69 6e 65         determine
1f000 64 2e 20 54 68 65 20 69 6e 70 75 74 20 64 61 74  d. The input dat
1f010 61 20 69 73 20 65 69 74 68 65 72 20 69 6d 70 6c  a is either impl
1f020 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65 20  icitly a single 
1f030 72 6f 77 20 77 69 74 68 20 30 0a 20 20 20 20 20  row with 0.     
1f040 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66 20 74 68    columns (if th
1f050 65 72 65 20 69 73 20 6e 6f 20 46 52 4f 4d 20 63  ere is no FROM c
1f060 6c 61 75 73 65 29 20 6f 72 20 69 73 20 64 65 74  lause) or is det
1f070 65 72 6d 69 6e 65 64 20 62 79 20 61 6e 61 6c 79  ermined by analy
1f080 7a 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20 20  zing the.       
1f090 5b 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 73 79 6e  [join-source syn
1f0a0 74 61 78 20 64 69 61 67 72 61 6d 7c 6a 6f 69 6e  tax diagram|join
1f0b0 2d 73 6f 75 72 63 65 5d 20 73 70 65 63 69 66 69  -source] specifi
1f0c0 63 61 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c 6c  cation that foll
1f0d0 6f 77 73 20 0a 20 20 20 20 20 20 20 61 6e 20 65  ows .       an e
1f0e0 78 70 6c 69 63 69 74 20 46 52 4f 4d 20 63 6c 61  xplicit FROM cla
1f0f0 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  use..  <li> <p>[
1f100 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70 72  WHERE clause] pr
1f110 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e  ocessing: The in
1f120 70 75 74 20 64 61 74 61 20 69 73 20 66 69 6c 74  put data is filt
1f130 65 72 65 64 20 75 73 69 6e 67 20 74 68 65 20 57  ered using the W
1f140 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61 75  HERE.       clau
1f150 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  se expression.  
1f160 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f 55  .  <li> <p>[GROU
1f170 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20 48  P BY|GROUP BY, H
1f180 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c 74  AVING and result
1f190 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69  -column expressi
1f1a0 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20  on] processing: 
1f1b0 0a 20 20 20 20 20 20 20 54 68 65 20 73 65 74 20  .       The set 
1f1c0 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 69  of result rows i
1f1d0 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61 67  s computed by ag
1f1e0 67 72 65 67 61 74 69 6e 67 20 74 68 65 20 64 61  gregating the da
1f1f0 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a  ta according to.
1f200 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55 50         any GROUP
1f210 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20 63   BY clause and c
1f220 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20 72  alculating the r
1f230 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65 73  esult-set expres
1f240 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20 20  sions for the.  
1f250 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68 65       rows of the
1f260 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20   filtered input 
1f270 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c 69  dataset.  .  <li
1f280 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c 44  > <p>[DISTINCT|D
1f290 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79 77  ISTINCT/ALL keyw
1f2a0 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  ord] processing:
1f2b0 20 49 66 20 74 68 65 20 71 75 65 72 79 20 69 73   If the query is
1f2c0 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20 20   a "SELECT.     
1f2d0 20 20 44 49 53 54 49 4e 43 54 22 20 71 75 65 72    DISTINCT" quer
1f2e0 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  y, duplicate row
1f2f0 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72  s are removed fr
1f300 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72 65  om the set of re
1f310 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c 3e  sult rows..</ol>
1f320 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74  ..<p>There are t
1f330 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d 70  wo types of simp
1f340 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
1f350 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65 20  ent - aggregate 
1f360 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67 61  and .non-aggrega
1f370 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20 73  te queries. ^A s
1f380 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
1f390 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67 67  tement is an agg
1f3a0 72 65 67 61 74 65 20 71 75 65 72 79 20 69 66 0a  regate query if.
1f3b0 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74 68  it contains eith
1f3c0 65 72 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c  er a GROUP BY cl
1f3d0 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20 6d  ause or one or m
1f3e0 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
1f3f0 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20 72  nctions.in the r
1f400 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68 65  esult-set. ^Othe
1f410 72 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d 70  rwise, if a simp
1f420 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61 69  le SELECT contai
1f430 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65 0a  ns no aggregate.
1f440 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47  functions or a G
1f450 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c 20  ROUP BY clause, 
1f460 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72  it is a non-aggr
1f470 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c 70  egate query...<p
1f480 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e 61  ><b>1. Determina
1f490 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64 61  tion of input da
1f4a0 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65 20  ta (FROM clause 
1f4b0 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e  processing).</b>
1f4c0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
1f4d0 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74 63  t fromclause</tc
1f4e0 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
1f4f0 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73 65  rds {FROM clause
1f500 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  }</tcl>..<p>The 
1f510 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64 20  input data used 
1f520 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  by a simple SELE
1f530 43 54 20 71 75 65 72 79 20 69 73 20 61 20 73 65  CT query is a se
1f540 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f  t of <i>N</i> ro
1f550 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f 69  ws .each <i>M</i
1f560 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e 0a  > columns wide..
1f570 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52 4f  .<p>^(If the FRO
1f580 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74  M clause is omit
1f590 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70 6c  ted from a simpl
1f5a0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1f5b0 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69 6e  nt, then the .in
1f5c0 70 75 74 20 64 61 74 61 20 69 73 20 69 6d 70 6c  put data is impl
1f5d0 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65 20  icitly a single 
1f5e0 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e 73  row zero columns
1f5f0 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c 69   wide)^ (i.e. <i
1f600 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69 3e  >N</i>=1 and.<i>
1f610 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49 66  M</i>=0)...<p>If
1f620 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69   a FROM clause i
1f630 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
1f640 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20 61   data on which a
1f650 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 71   simple SELECT q
1f660 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63 6f  uery.operates co
1f670 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e 65  mes from the one
1f680 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
1f690 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 28 53  or subqueries (S
1f6a0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
1f6b0 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73 29  .in parenthesis)
1f6c0 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c 6f   specified follo
1f6d0 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b 65  wing the FROM ke
1f6e0 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 2d 73 65  yword. ^A sub-se
1f6f0 6c 65 63 74 20 73 70 65 63 69 66 69 65 64 0a 69  lect specified.i
1f700 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f 75 72 63  n the join-sourc
1f710 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  e following the 
1f720 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 6e 20 61  FROM clause in a
1f730 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
1f740 74 61 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e 64  tatement is.hand
1f750 6c 65 64 20 61 73 20 69 66 20 69 74 20 77 61 73  led as if it was
1f760 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e   a table contain
1f770 69 6e 67 20 74 68 65 20 64 61 74 61 20 72 65 74  ing the data ret
1f780 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69  urned by executi
1f790 6e 67 20 74 68 65 0a 73 75 62 2d 73 65 6c 65 63  ng the.sub-selec
1f7a0 74 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 45 61  t statement. ^Ea
1f7b0 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
1f7c0 20 73 75 62 2d 73 65 6c 65 63 74 20 64 61 74 61   sub-select data
1f7d0 73 65 74 20 69 6e 68 65 72 69 74 73 20 74 68 65  set inherits the
1f7e0 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c 6c  .[collation|coll
1f7f0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20  ation sequence] 
1f800 61 6e 64 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f  and [affinity] o
1f810 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
1f820 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 0a 69  ing expression.i
1f830 6e 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74  n the sub-select
1f840 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e   statement...<p>
1f850 5e 49 66 20 74 68 65 72 65 20 69 73 20 6f 6e 6c  ^If there is onl
1f860 79 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  y a single table
1f870 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f 75   in the join-sou
1f880 72 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  rce following th
1f890 65 20 46 52 4f 4d 0a 63 6c 61 75 73 65 2c 20 74  e FROM.clause, t
1f8a0 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61  hen the input da
1f8b0 74 61 20 75 73 65 64 20 62 79 20 74 68 65 20 53  ta used by the S
1f8c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1f8d0 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  is the contents 
1f8e0 6f 66 20 74 68 65 0a 6e 61 6d 65 64 20 74 61 62  of the.named tab
1f8f0 6c 65 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73  le. ^If there is
1f900 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74   more than one t
1f910 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 61  able specified a
1f920 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 6a 6f  s part of the.jo
1f930 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f 77  in-source follow
1f940 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b 65 79  ing the FROM key
1f950 77 6f 72 64 2c 20 74 68 65 6e 20 74 68 65 20 63  word, then the c
1f960 6f 6e 74 65 6e 74 73 20 6f 66 20 65 61 63 68 20  ontents of each 
1f970 6e 61 6d 65 64 20 74 61 62 6c 65 0a 61 72 65 20  named table.are 
1f980 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69  joined into a si
1f990 6e 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f 72  ngle dataset for
1f9a0 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45   the simple SELE
1f9b0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  CT statement to 
1f9c0 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61 63  operate on..Exac
1f9d0 74 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74 61  tly how the data
1f9e0 20 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65 70   is combined dep
1f9f0 65 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65 63  ends on the spec
1fa00 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 5d 20 61  ific [join-op] a
1fa10 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61  nd.[join-constra
1fa20 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f 6e  int] used to con
1fa30 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65 73 20  nect the tables 
1fa40 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 74 6f  or subqueries to
1fa50 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c 20  gether...<p>All 
1fa60 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65 20  joins in SQLite 
1fa70 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65  are based on the
1fa80 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
1fa90 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61  ct of the left a
1faa0 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64 61  nd.right-hand da
1fab0 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f 6c  tasets. ^The col
1fac0 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72 74  umns of the cart
1fad0 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64 61  esian product da
1fae0 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a 6f  taset are, in .o
1faf0 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63 6f  rder, all the co
1fb00 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66  lumns of the lef
1fb10 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 66  t-hand dataset f
1fb20 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 74  ollowed by all t
1fb30 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68  he columns.of th
1fb40 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
1fb50 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73 20  aset. ^There is 
1fb60 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61 72  a row in the car
1fb70 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64  tesian product d
1fb80 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62 79  ataset.formed by
1fb90 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68 20   combining each 
1fba0 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69  unique combinati
1fbb0 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f 6d  on of a row from
1fbc0 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 0a   the left-hand .
1fbd0 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64  and right-hand d
1fbe0 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f 74  atasets. ^(In ot
1fbf0 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
1fc00 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61  e left-hand data
1fc10 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a  set consists of.
1fc20 3c 69 3e 4e 6c 68 73 3c 2f 69 3e 20 72 6f 77 73  <i>Nlhs</i> rows
1fc30 20 6f 66 20 3c 69 3e 4d 6c 68 73 3c 2f 69 3e 20   of <i>Mlhs</i> 
1fc40 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74 68 65  columns, and the
1fc50 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
1fc60 73 65 74 20 6f 66 0a 3c 69 3e 4e 72 68 73 3c 2f  set of.<i>Nrhs</
1fc70 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e 4d 72  i> rows of <i>Mr
1fc80 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20  hs</i> columns, 
1fc90 74 68 65 6e 20 74 68 65 20 63 61 72 74 65 73 69  then the cartesi
1fca0 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61 0a  an product is a.
1fcb0 64 61 74 61 73 65 74 20 6f 66 20 3c 69 3e 4e 6c  dataset of <i>Nl
1fcc0 68 73 2e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77 73  hs.Nrhs</i> rows
1fcd0 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e  , each containin
1fce0 67 20 3c 69 3e 4d 6c 68 73 2b 4d 72 68 73 3c 2f  g <i>Mlhs+Mrhs</
1fcf0 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c  i> columns.)^..<
1fd00 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f  p>^If the join-o
1fd10 70 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49 4e  p is "CROSS JOIN
1fd20 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c  ", "INNER JOIN",
1fd30 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f 6d   "JOIN" or a com
1fd40 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68 65  ma.(",") and the
1fd50 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20 55  re is no ON or U
1fd60 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65  SING clause, the
1fd70 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
1fd80 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d 70  the join is.simp
1fd90 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  ly the cartesian
1fda0 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20   product of the 
1fdb0 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
1fdc0 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a 5e  and datasets. .^
1fdd0 54 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66 66  There is no diff
1fde0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74  erence between t
1fdf0 68 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c  he "INNER JOIN",
1fe00 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20   "JOIN" and "," 
1fe10 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73 2e 20  join.operators. 
1fe20 5e 28 54 68 65 20 22 43 52 4f 53 53 20 4a 4f 49  ^(The "CROSS JOI
1fe30 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f 72  N" join operator
1fe40 20 70 72 6f 64 75 63 65 73 20 74 68 65 20 73 61   produces the sa
1fe50 6d 65 20 64 61 74 61 20 61 73 20 74 68 65 20 0a  me data as the .
1fe60 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a  "INNER JOIN", "J
1fe70 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f 70 65  OIN" and "," ope
1fe80 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20 69 73  rators)^, but is
1fe90 20 0a 3c 61 20 68 72 65 66 3d 6f 70 74 6f 76 65   .<a href=optove
1fea0 72 76 69 65 77 2e 68 74 6d 6c 23 6d 61 6e 63 74  rview.html#manct
1feb0 72 6c 3e 68 61 6e 64 6c 65 64 20 73 6c 69 67 68  rl>handled sligh
1fec0 74 6c 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20  tly differently 
1fed0 62 79 20 74 68 65 20 71 75 65 72 79 0a 6f 70 74  by the query.opt
1fee0 69 6d 69 7a 65 72 3c 2f 61 3e 2e 20 4f 74 68 65  imizer</a>. Othe
1fef0 72 77 69 73 65 2c 20 69 74 20 69 73 20 74 68 65  rwise, it is the
1ff00 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
1ff10 63 74 20 6d 6f 64 69 66 69 65 64 20 0a 61 63 63  ct modified .acc
1ff20 6f 72 64 69 6e 67 20 74 6f 20 6f 6e 65 20 6f 72  ording to one or
1ff30 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c   more of the fol
1ff40 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70 6f  lowing bullet po
1ff50 69 6e 74 73 3a 20 0a 0a 3c 75 6c 3e 0a 20 20 3c  ints: ..<ul>.  <
1ff60 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 72  li> <p>^(If ther
1ff70 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75 73  e is an ON claus
1ff80 65 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  e specified, the
1ff90 6e 20 74 68 65 20 4f 4e 20 65 78 70 72 65 73 73  n the ON express
1ffa0 69 6f 6e 20 69 73 0a 20 20 20 20 20 20 20 65 76  ion is.       ev
1ffb0 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68  aluated for each
1ffc0 20 72 6f 77 20 6f 66 20 74 68 65 20 63 61 72 74   row of the cart
1ffd0 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61 73  esian product as
1ffe0 20 61 20 0a 20 20 20 20 20 20 20 5b 62 6f 6f 6c   a .       [bool
1fff0 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  ean expression].
20000 20 41 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77 68   All rows for wh
20010 69 63 68 20 74 68 65 20 65 78 70 72 65 73 73 69  ich the expressi
20020 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
20030 0a 20 20 20 20 20 20 20 66 61 6c 73 65 20 61 72  .       false ar
20040 65 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20  e excluded from 
20050 74 68 65 20 64 61 74 61 73 65 74 2e 29 5e 0a 0a  the dataset.)^..
20060 20 20 3c 6c 69 3e 20 3c 70 3e 5e 49 66 20 74 68    <li> <p>^If th
20070 65 72 65 20 69 73 20 61 20 55 53 49 4e 47 20 63  ere is a USING c
20080 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 64 20  lause specified 
20090 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 6a  as part of the j
200a0 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 2c 0a  oin-constraint,.
200b0 20 20 20 20 20 20 20 74 68 65 6e 20 65 61 63 68         then each
200c0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   of the column n
200d0 61 6d 65 73 20 73 70 65 63 69 66 69 65 64 20 6d  ames specified m
200e0 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68 65  ust exist in the
200f0 20 64 61 74 61 73 65 74 73 20 74 6f 20 0a 20 20   datasets to .  
20100 20 20 20 20 20 62 6f 74 68 20 74 68 65 20 6c 65       both the le
20110 66 74 20 61 6e 64 20 72 69 67 68 74 20 6f 66 20  ft and right of 
20120 74 68 65 20 6a 6f 69 6e 2d 6f 70 2e 20 5e 28 46  the join-op. ^(F
20130 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66 20  or each pair of 
20140 6e 61 6d 65 73 61 6b 65 0a 20 20 20 20 20 20 20  namesake.       
20150 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78 70  columns, the exp
20160 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d  ression "lhs.X =
20170 20 72 68 73 2e 58 22 20 69 73 20 65 76 61 6c 75   rhs.X" is evalu
20180 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
20190 77 20 6f 66 0a 20 20 20 20 20 20 20 74 68 65 20  w of.       the 
201a0 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
201b0 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20  t as a [boolean 
201c0 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 6c 6c  expression]. All
201d0 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
201e0 6f 6e 65 0a 20 20 20 20 20 20 20 6f 72 20 6d 6f  one.       or mo
201f0 72 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  re of the expres
20200 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 73 20  sions evaluates 
20210 74 6f 20 66 61 6c 73 65 20 61 72 65 20 65 78 63  to false are exc
20220 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 0a 20  luded from the. 
20230 20 20 20 20 20 20 72 65 73 75 6c 74 20 73 65 74        result set
20240 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d 70 61 72  .)^ ^When compar
20250 69 6e 67 20 76 61 6c 75 65 73 20 61 73 20 61 20  ing values as a 
20260 72 65 73 75 6c 74 20 6f 66 20 61 20 55 53 49 4e  result of a USIN
20270 47 20 63 6c 61 75 73 65 2c 20 74 68 65 0a 20 20  G clause, the.  
20280 20 20 20 20 20 6e 6f 72 6d 61 6c 20 72 75 6c 65       normal rule
20290 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61  s for handling a
202a0 66 66 69 6e 69 74 69 65 73 2c 20 63 6f 6c 6c 61  ffinities, colla
202b0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 20 61  tion sequences a
202c0 6e 64 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 76  nd NULL.       v
202d0 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70 61 72 69  alues in compari
202e0 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e 54 68 65  sons apply. ^The
202f0 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65   column from the
20300 20 64 61 74 61 73 65 74 20 6f 6e 20 74 68 65 0a   dataset on the.
20310 20 20 20 20 20 20 20 6c 65 66 74 2d 68 61 6e 64         left-hand
20320 20 73 69 64 65 20 6f 66 20 74 68 65 20 6a 6f 69   side of the joi
20330 6e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 6f  n operator is co
20340 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 6f  nsidered to be o
20350 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 0a  n the left-hand.
20360 20 20 20 20 20 20 20 73 69 64 65 20 6f 66 20 74         side of t
20370 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  he comparison op
20380 65 72 61 74 6f 72 20 28 3d 29 20 66 6f 72 20 74  erator (=) for t
20390 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 63  he purposes of c
203a0 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 20 20 20 20  ollation .      
203b0 20 73 65 71 75 65 6e 63 65 20 61 6e 64 20 61 66   sequence and af
203c0 66 69 6e 69 74 79 20 70 72 65 63 65 64 65 6e 63  finity precedenc
203d0 65 2e 0a 0a 20 20 20 20 20 20 20 3c 70 3e 5e 46  e...       <p>^F
203e0 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66 20  or each pair of 
203f0 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69  columns identifi
20400 65 64 20 62 79 20 61 20 55 53 49 4e 47 20 63 6c  ed by a USING cl
20410 61 75 73 65 2c 20 74 68 65 20 63 6f 6c 75 6d 6e  ause, the column
20420 0a 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65  .       from the
20430 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
20440 73 65 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  set is omitted f
20450 72 6f 6d 20 74 68 65 20 6a 6f 69 6e 65 64 20 64  rom the joined d
20460 61 74 61 73 65 74 2e 20 5e 54 68 69 73 20 0a 20  ataset. ^This . 
20470 20 20 20 20 20 20 69 73 20 74 68 65 20 6f 6e 6c        is the onl
20480 79 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  y difference bet
20490 77 65 65 6e 20 61 20 55 53 49 4e 47 20 63 6c 61  ween a USING cla
204a0 75 73 65 20 61 6e 64 20 69 74 73 20 65 71 75 69  use and its equi
204b0 76 61 6c 65 6e 74 20 4f 4e 0a 20 20 20 20 20 20  valent ON.      
204c0 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 20 20   constraint...  
204d0 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65  <li> <p>^(If the
204e0 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64   NATURAL keyword
204f0 20 69 73 20 61 64 64 65 64 20 74 6f 20 61 6e 79   is added to any
20500 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 73   of the join-ops
20510 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20 20  , then an.      
20520 20 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47 20   implicit USING 
20530 63 6c 61 75 73 65 20 69 73 20 61 64 64 65 64 20  clause is added 
20540 74 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73  to the join-cons
20550 74 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d 70  traints. The imp
20560 6c 69 63 69 74 0a 20 20 20 20 20 20 20 55 53 49  licit.       USI
20570 4e 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69  NG clause contai
20580 6e 73 20 65 61 63 68 20 6f 66 20 74 68 65 20 63  ns each of the c
20590 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
205a0 20 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68 0a   appear in both.
205b0 20 20 20 20 20 20 20 74 68 65 20 6c 65 66 74 20         the left 
205c0 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 69  and right-hand i
205d0 6e 70 75 74 20 64 61 74 61 73 65 74 73 2e 29 5e  nput datasets.)^
205e0 20 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61 6e   ^If the left an
205f0 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20 20  d right-hand.   
20600 20 20 20 20 69 6e 70 75 74 20 64 61 74 61 73 65      input datase
20610 74 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63 6f  ts feature no co
20620 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  mmon column name
20630 73 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54 55  s, then the NATU
20640 52 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20 20  RAL keyword.    
20650 20 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74     has no effect
20660 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20   on the results 
20670 6f 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20  of the join. ^A 
20680 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75  USING or ON clau
20690 73 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f  se may.       no
206a0 74 20 62 65 20 61 64 64 65 64 20 74 6f 20 61 20  t be added to a 
206b0 6a 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69 66  join that specif
206c0 69 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c 20  ies the NATURAL 
206d0 6b 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e  keyword...  <li>
206e0 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69   <p>^(If the joi
206f0 6e 2d 6f 70 20 69 73 20 61 20 22 4c 45 46 54 20  n-op is a "LEFT 
20700 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20 4f  JOIN" or "LEFT O
20710 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65 6e  UTER JOIN", then
20720 20 61 66 74 65 72 0a 20 20 20 20 20 20 20 74 68   after.       th
20730 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 66 69  e ON or USING fi
20740 6c 74 65 72 69 6e 67 20 63 6c 61 75 73 65 73 20  ltering clauses 
20750 68 61 76 65 20 62 65 65 6e 20 61 70 70 6c 69 65  have been applie
20760 64 2c 20 61 6e 20 65 78 74 72 61 20 72 6f 77 20  d, an extra row 
20770 69 73 20 0a 20 20 20 20 20 20 20 61 64 64 65 64  is .       added
20780 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 66   to the output f
20790 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
207a0 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65 66 74  he original left
207b0 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a 20 20 20  -hand input .   
207c0 20 20 20 20 64 61 74 61 73 65 74 20 74 68 61 74      dataset that
207d0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
207e0 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 20 69  no rows at all i
207f0 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69 74 65 0a  n the composite.
20800 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20 28         dataset (
20810 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68 65 20  if any).)^ ^The 
20820 61 64 64 65 64 20 72 6f 77 73 20 63 6f 6e 74 61  added rows conta
20830 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  in NULL values i
20840 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 20 20  n the columns.  
20850 20 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64 20       that would 
20860 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e  normally contain
20870 20 76 61 6c 75 65 73 20 63 6f 70 69 65 64 20 66   values copied f
20880 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61  rom the right-ha
20890 6e 64 20 69 6e 70 75 74 0a 20 20 20 20 20 20 20  nd input.       
208a0 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e  dataset.  .</ul>
208b0 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f 72 65  ..<p>^(When more
208c0 20 74 68 61 6e 20 74 77 6f 20 74 61 62 6c 65 73   than two tables
208d0 20 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f 67 65   are joined toge
208e0 74 68 65 72 20 61 73 20 70 61 72 74 20 6f 66 20  ther as part of 
208f0 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c 0a 74  a FROM clause,.t
20900 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 69 6f  he join operatio
20910 6e 73 20 61 72 65 20 70 72 6f 63 65 73 73 65 64  ns are processed
20920 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c   in order from l
20930 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e  eft to right. In
20940 20 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c 20 74   other .words, t
20950 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 28  he FROM clause (
20960 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f  A join-op-1 B jo
20970 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20 63 6f  in-op-2 C) is co
20980 6d 70 75 74 65 64 20 61 73 20 0a 28 28 41 20 6a  mputed as .((A j
20990 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f 69 6e  oin-op-1 B) join
209a0 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 20 20 20 20  -op-2 C).)^.    
209b0 20 20 20 0a 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48     ..<p><b>2. WH
209c0 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74 65  ERE clause filte
209d0 72 69 6e 67 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68  ring.</b>.<tcl>h
209e0 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65 72 65  d_fragment where
209f0 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63  clause</tcl>.<tc
20a00 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57  l>hd_keywords {W
20a10 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63  HERE clause}</tc
20a20 6c 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61 20 57 48  l>..<p>^(If a WH
20a30 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 73 70  ERE clause is sp
20a40 65 63 69 66 69 65 64 2c 20 74 68 65 20 57 48 45  ecified, the WHE
20a50 52 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  RE expression is
20a60 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 0a   evaluated for .
20a70 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
20a80 69 6e 70 75 74 20 64 61 74 61 20 61 73 20 61 20  input data as a 
20a90 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
20aa0 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20 66  ion]. All rows f
20ab0 6f 72 20 77 68 69 63 68 20 74 68 65 0a 57 48 45  or which the.WHE
20ac0 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73  RE clause expres
20ad0 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
20ae0 6f 20 66 61 6c 73 65 20 61 72 65 20 65 78 63 6c  o false are excl
20af0 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  uded from the da
20b00 74 61 73 65 74 20 62 65 66 6f 72 65 0a 63 6f 6e  taset before.con
20b10 74 69 6e 75 69 6e 67 2e 29 5e 0a 0a 3c 70 3e 3c  tinuing.)^..<p><
20b20 62 3e 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e 20  b>3. Generation 
20b30 6f 66 20 74 68 65 20 73 65 74 20 6f 66 20 72 65  of the set of re
20b40 73 75 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c  sult rows.</b>.<
20b50 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
20b60 72 65 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a  resultset</tcl>.
20b70 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
20b80 20 7b 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70   {result-set exp
20b90 72 65 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55 50  ressions} {GROUP
20ba0 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f   BY}</tcl>..<p>O
20bb0 6e 63 65 20 74 68 65 20 69 6e 70 75 74 20 64 61  nce the input da
20bc0 74 61 20 66 72 6f 6d 20 74 68 65 20 46 52 4f 4d  ta from the FROM
20bd0 20 63 6c 61 75 73 65 20 68 61 73 20 62 65 65 6e   clause has been
20be0 20 66 69 6c 74 65 72 65 64 20 62 79 20 74 68 65   filtered by the
20bf0 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78  .WHERE clause ex
20c00 70 72 65 73 73 69 6f 6e 20 28 69 66 20 61 6e 79  pression (if any
20c10 29 2c 20 74 68 65 20 73 65 74 20 6f 66 20 72 65  ), the set of re
20c20 73 75 6c 74 20 72 6f 77 73 20 66 6f 72 20 74 68  sult rows for th
20c30 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54  e simple .SELECT
20c40 20 61 72 65 20 63 61 6c 63 75 6c 61 74 65 64 2e   are calculated.
20c50 20 45 78 61 63 74 6c 79 20 68 6f 77 20 74 68 69   Exactly how thi
20c60 73 20 69 73 20 64 6f 6e 65 20 64 65 70 65 6e 64  s is done depend
20c70 73 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65  s on whether the
20c80 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20   simple .SELECT 
20c90 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  is an aggregate 
20ca0 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65  or non-aggregate
20cb0 20 71 75 65 72 79 2c 20 61 6e 64 20 77 68 65 74   query, and whet
20cc0 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 47 52 4f  her or not a GRO
20cd0 55 50 0a 42 59 20 63 6c 61 75 73 65 20 77 61 73  UP.BY clause was
20ce0 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e   specified...<p>
20cf0 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70   The list of exp
20d00 72 65 73 73 69 6f 6e 73 20 62 65 74 77 65 65 6e  ressions between
20d10 20 74 68 65 20 53 45 4c 45 43 54 20 61 6e 64 20   the SELECT and 
20d20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69 73  FROM keywords is
20d30 20 6b 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72 65   known as.the re
20d40 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
20d50 6c 69 73 74 2e 20 20 5e 49 66 20 61 20 72 65 73  list.  ^If a res
20d60 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ult expression i
20d70 73 20 74 68 65 20 73 70 65 63 69 61 6c 20 65 78  s the special ex
20d80 70 72 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68 65  pression."*" the
20d90 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e  n all columns in
20da0 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   the input data 
20db0 61 72 65 20 73 75 62 73 74 69 74 75 74 65 64 20  are substituted 
20dc0 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70  for that one exp
20dd0 72 65 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74 68  ression..^(If th
20de0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
20df0 74 68 65 20 61 6c 69 61 73 20 6f 66 20 61 20 74  the alias of a t
20e00 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
20e10 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
20e20 75 73 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  use.followed by 
20e30 22 2e 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f  ".*" then all co
20e40 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20 6e  lumns from the n
20e50 61 6d 65 64 20 74 61 62 6c 65 20 6f 72 20 73 75  amed table or su
20e60 62 71 75 65 72 79 20 61 72 65 0a 73 75 62 73 74  bquery are.subst
20e70 69 74 75 74 65 64 20 66 6f 72 20 74 68 65 20 73  ituted for the s
20e80 69 6e 67 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  ingle expression
20e90 2e 29 5e 20 5e 28 49 74 20 69 73 20 61 6e 20 65  .)^ ^(It is an e
20ea0 72 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a  rror to use a "*
20eb0 22 20 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20 65  " or."alias.*" e
20ec0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e 79  xpression in any
20ed0 20 63 6f 6e 74 65 78 74 20 6f 74 68 65 72 20 74   context other t
20ee0 68 61 6e 20 74 68 61 6e 20 61 20 72 65 73 75 6c  han than a resul
20ef0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  t expression lis
20f00 74 2e 29 5e 0a 5e 28 49 74 20 69 73 20 61 6c 73  t.)^.^(It is als
20f10 6f 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 75 73  o an error to us
20f20 65 20 61 20 22 2a 22 20 6f 72 20 22 61 6c 69 61  e a "*" or "alia
20f30 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f 6e 20  s.*" expression 
20f40 69 6e 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  in a simple SELE
20f50 43 54 0a 71 75 65 72 79 20 74 68 61 74 20 64 6f  CT.query that do
20f60 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20 46 52  es not have a FR
20f70 4f 4d 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 70  OM clause.)^..<p
20f80 3e 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f  > ^(The number o
20f90 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
20fa0 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
20fb0 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  y a simple SELEC
20fc0 54 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 65  T statement.is e
20fd0 71 75 61 6c 20 74 6f 20 74 68 65 20 6e 75 6d 62  qual to the numb
20fe0 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  er of expression
20ff0 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  s in the result 
21000 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
21010 61 66 74 65 72 0a 73 75 62 73 74 69 74 75 74 69  after.substituti
21020 6f 6e 20 6f 66 20 2a 20 61 6e 64 20 61 6c 69 61  on of * and alia
21030 73 2e 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 2e  s.* expressions.
21040 29 5e 20 45 61 63 68 20 72 65 73 75 6c 74 20 72  )^ Each result r
21050 6f 77 20 69 73 20 63 61 6c 63 75 6c 61 74 65 64  ow is calculated
21060 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   by.evaluating t
21070 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  he expressions i
21080 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78 70  n the result exp
21090 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 77 69 74  ression list wit
210a0 68 20 72 65 73 70 65 63 74 20 74 6f 20 61 0a 73  h respect to a.s
210b0 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 69 6e 70  ingle row of inp
210c0 75 74 20 64 61 74 61 20 6f 72 2c 20 66 6f 72 20  ut data or, for 
210d0 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69 65  aggregate querie
210e0 73 2c 20 77 69 74 68 20 72 65 73 70 65 63 74 20  s, with respect 
210f0 74 6f 20 61 20 67 72 6f 75 70 0a 6f 66 20 72 6f  to a group.of ro
21100 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  ws...<ul>.  <li>
21110 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43  <p>^If the SELEC
21120 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
21130 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74  b>a non-aggregat
21140 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20 74 68 65  e query</b>, the
21150 6e 20 0a 20 20 20 20 65 61 63 68 20 65 78 70 72  n .    each expr
21160 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
21170 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
21180 6c 69 73 74 20 69 73 20 65 76 61 6c 75 61 74 65  list is evaluate
21190 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  d for each row i
211a0 6e 0a 20 20 20 20 74 68 65 20 64 61 74 61 73 65  n.    the datase
211b0 74 20 66 69 6c 74 65 72 65 64 20 62 79 20 74 68  t filtered by th
211c0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 0a  e WHERE clause..
211d0 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  .  <li><p>^If th
211e0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
211f0 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67 67 72  nt is <b>an aggr
21200 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68  egate query with
21210 6f 75 74 20 61 20 47 52 4f 55 50 0a 20 20 20 20  out a GROUP.    
21220 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74  BY</b> clause, t
21230 68 65 6e 20 65 61 63 68 20 61 67 67 72 65 67 61  hen each aggrega
21240 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  te expression in
21250 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20   the result-set 
21260 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65  is .    evaluate
21270 64 20 6f 6e 63 65 20 61 63 72 6f 73 73 20 74 68  d once across th
21280 65 20 65 6e 74 69 72 65 20 64 61 74 61 73 65 74  e entire dataset
21290 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d 61 67 67 72  . ^Each non-aggr
212a0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
212b0 0a 20 20 20 20 69 6e 20 74 68 65 20 72 65 73 75  .    in the resu
212c0 6c 74 2d 73 65 74 20 69 73 20 65 76 61 6c 75 61  lt-set is evalua
212d0 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 61 6e 20  ted once for an 
212e0 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65  arbitrarily sele
212f0 63 74 65 64 20 72 6f 77 20 6f 66 0a 20 20 20 20  cted row of.    
21300 74 68 65 20 64 61 74 61 73 65 74 2e 20 5e 54 68  the dataset. ^Th
21310 65 20 73 61 6d 65 20 61 72 62 69 74 72 61 72 69  e same arbitrari
21320 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20  ly selected row 
21330 69 73 20 75 73 65 64 20 66 6f 72 20 65 61 63 68  is used for each
21340 0a 20 20 20 20 6e 6f 6e 2d 61 67 67 72 65 67 61  .    non-aggrega
21350 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e  te expression. ^
21360 4f 72 2c 20 69 66 20 74 68 65 20 64 61 74 61 73  Or, if the datas
21370 65 74 20 63 6f 6e 74 61 69 6e 73 20 7a 65 72 6f  et contains zero
21380 20 72 6f 77 73 2c 20 74 68 65 6e 20 0a 20 20 20   rows, then .   
21390 20 65 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67   each non-aggreg
213a0 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ate expression i
213b0 73 20 65 76 61 6c 75 61 74 65 64 20 61 67 61 69  s evaluated agai
213c0 6e 73 74 20 61 20 72 6f 77 20 63 6f 6e 73 69 73  nst a row consis
213d0 74 69 6e 67 0a 20 20 20 20 65 6e 74 69 72 65 6c  ting.    entirel
213e0 79 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75 65 73  y of NULL values
213f0 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68 65 20 73 69  ...   <p>^The si
21400 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75  ngle row of resu
21410 6c 74 2d 73 65 74 20 64 61 74 61 20 63 72 65 61  lt-set data crea
21420 74 65 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e  ted by evaluatin
21430 67 20 74 68 65 20 61 67 67 72 65 67 61 74 65 0a  g the aggregate.
21440 20 20 20 20 61 6e 64 20 6e 6f 6e 2d 61 67 67 72      and non-aggr
21450 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
21460 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  s in the result-
21470 73 65 74 20 66 6f 72 6d 73 20 74 68 65 20 72 65  set forms the re
21480 73 75 6c 74 20 6f 66 20 61 6e 0a 20 20 20 20 61  sult of an.    a
21490 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
214a0 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50 20 42  ithout a GROUP B
214b0 59 20 63 6c 61 75 73 65 2e 20 5e 41 6e 20 61 67  Y clause. ^An ag
214c0 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69  gregate query wi
214d0 74 68 6f 75 74 20 61 0a 20 20 20 20 47 52 4f 55  thout a.    GROU
214e0 50 20 42 59 20 63 6c 61 75 73 65 20 61 6c 77 61  P BY clause alwa
214f0 79 73 20 72 65 74 75 72 6e 73 20 65 78 61 63 74  ys returns exact
21500 6c 79 20 6f 6e 65 20 72 6f 77 20 6f 66 20 64 61  ly one row of da
21510 74 61 2c 20 65 76 65 6e 20 69 66 20 74 68 65 72  ta, even if ther
21520 65 20 61 72 65 0a 20 20 20 20 7a 65 72 6f 20 72  e are.    zero r
21530 6f 77 73 20 6f 66 20 69 6e 70 75 74 20 64 61 74  ows of input dat
21540 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28 49  a...  <li><p>^(I
21550 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f the SELECT sta
21560 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20  tement is <b>an 
21570 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
21580 77 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20  with a GROUP.   
21590 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20   BY</b> clause, 
215a0 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65  then each of the
215b0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 70 65   expressions spe
215c0 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
215d0 66 20 74 68 65 0a 20 20 20 20 47 52 4f 55 50 20  f the.    GROUP 
215e0 42 59 20 63 6c 61 75 73 65 20 69 73 20 65 76 61  BY clause is eva
215f0 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
21600 72 6f 77 20 6f 66 20 74 68 65 20 64 61 74 61 73  row of the datas
21610 65 74 2e 20 45 61 63 68 20 72 6f 77 0a 20 20 20  et. Each row.   
21620 20 69 73 20 74 68 65 6e 20 61 73 73 69 67 6e 65   is then assigne
21630 64 20 74 6f 20 61 20 22 67 72 6f 75 70 22 20 62  d to a "group" b
21640 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75  ased on the resu
21650 6c 74 73 3b 20 72 6f 77 73 20 66 6f 72 20 77 68  lts; rows for wh
21660 69 63 68 0a 20 20 20 20 74 68 65 20 72 65 73 75  ich.    the resu
21670 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  lts of evaluatin
21680 67 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 65  g the GROUP BY e
21690 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74  xpressions are t
216a0 68 65 20 73 61 6d 65 20 61 72 65 0a 20 20 20 20  he same are.    
216b0 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20  assigned to the 
216c0 73 61 6d 65 20 67 72 6f 75 70 2e 29 5e 20 5e 46  same group.)^ ^F
216d0 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
216e0 6f 66 20 67 72 6f 75 70 69 6e 67 20 72 6f 77 73  of grouping rows
216f0 2c 20 4e 55 4c 4c 20 0a 20 20 20 20 76 61 6c 75  , NULL .    valu
21700 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
21710 64 20 65 71 75 61 6c 2e 20 5e 54 68 65 20 75 73  d equal. ^The us
21720 75 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 5b 63  ual rules for [c
21730 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65 63 74 69  ollation|selecti
21740 6e 67 20 61 0a 20 20 20 20 63 6f 6c 6c 61 74 69  ng a.    collati
21750 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 77 69 74  on sequence] wit
21760 68 20 77 68 69 63 68 20 74 6f 20 63 6f 6d 70 61  h which to compa
21770 72 65 20 74 65 78 74 20 76 61 6c 75 65 73 20 61  re text values a
21780 70 70 6c 79 20 77 68 65 6e 20 65 76 61 6c 75 61  pply when evalua
21790 74 69 6e 67 0a 20 20 20 20 65 78 70 72 65 73 73  ting.    express
217a0 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20  ions in a GROUP 
217b0 42 59 20 63 6c 61 75 73 65 2e 20 20 5e 54 68 65  BY clause.  ^The
217c0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
217d0 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  the GROUP BY cla
217e0 75 73 65 0a 20 20 20 20 64 6f 20 3c 65 6d 3e 6e  use.    do <em>n
217f0 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20  ot</em> have to 
21800 62 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  be expressions t
21810 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  hat appear in th
21820 65 20 72 65 73 75 6c 74 2e 20 5e 54 68 65 0a 20  e result. ^The. 
21830 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69     expressions i
21840 6e 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61  n a GROUP BY cla
21850 75 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 61  use may not be a
21860 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
21870 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e 28  ions...    <p>^(
21880 49 66 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75  If a HAVING clau
21890 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  se is specified,
218a0 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64   it is evaluated
218b0 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20 67   once for each g
218c0 72 6f 75 70 20 0a 20 20 20 20 6f 66 20 72 6f 77  roup .    of row
218d0 73 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20  s as a [boolean 
218e0 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20  expression]. If 
218f0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76  the result of ev
21900 61 6c 75 61 74 69 6e 67 20 74 68 65 0a 20 20 20  aluating the.   
21910 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69   HAVING clause i
21920 73 20 66 61 6c 73 65 2c 20 74 68 65 20 67 72 6f  s false, the gro
21930 75 70 20 69 73 20 64 69 73 63 61 72 64 65 64 2e  up is discarded.
21940 29 5e 20 5e 49 66 20 74 68 65 20 48 41 56 49 4e  )^ ^If the HAVIN
21950 47 20 63 6c 61 75 73 65 20 69 73 0a 20 20 20 20  G clause is.    
21960 61 6e 20 61 67 67 72 65 67 61 74 65 20 65 78 70  an aggregate exp
21970 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65  ression, it is e
21980 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20  valuated across 
21990 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20  all rows in the 
219a0 67 72 6f 75 70 2e 20 5e 49 66 0a 20 20 20 20 61  group. ^If.    a
219b0 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69   HAVING clause i
219c0 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74  s a non-aggregat
219d0 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74  e expression, it
219e0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 77 69   is evaluated wi
219f0 74 68 20 72 65 73 70 65 63 74 0a 20 20 20 20 74  th respect.    t
21a00 6f 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79  o an arbitrarily
21a10 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 66 72   selected row fr
21a20 6f 6d 20 74 68 65 20 67 72 6f 75 70 2e 20 20 5e  om the group.  ^
21a30 54 68 65 20 48 41 56 49 4e 47 20 65 78 70 72 65  The HAVING expre
21a40 73 73 69 6f 6e 20 6d 61 79 0a 20 20 20 20 72 65  ssion may.    re
21a50 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20 65  fer to values, e
21a60 76 65 6e 20 61 67 67 72 65 67 61 74 65 20 66 75  ven aggregate fu
21a70 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20 61 72  nctions, that ar
21a80 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72 65 73  e not in the res
21a90 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c 70  ult.</p>..    <p
21aa0 3e 5e 45 61 63 68 20 65 78 70 72 65 73 73 69 6f  >^Each expressio
21ab0 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  n in the result-
21ac0 73 65 74 20 69 73 20 74 68 65 6e 20 65 76 61 6c  set is then eval
21ad0 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65  uated once for e
21ae0 61 63 68 0a 20 20 20 20 67 72 6f 75 70 20 6f 66  ach.    group of
21af0 20 72 6f 77 73 2e 20 5e 49 66 20 74 68 65 20 65   rows. ^If the e
21b00 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
21b10 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
21b20 73 69 6f 6e 2c 20 69 74 20 69 73 20 0a 20 20 20  sion, it is .   
21b30 20 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73   evaluated acros
21b40 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68  s all rows in th
21b50 65 20 67 72 6f 75 70 2e 20 5e 4f 74 68 65 72 77  e group. ^Otherw
21b60 69 73 65 2c 20 69 74 20 69 73 20 65 76 61 6c 75  ise, it is evalu
21b70 61 74 65 64 20 61 67 61 69 6e 73 74 0a 20 20 20  ated against.   
21b80 20 61 20 73 69 6e 67 6c 65 20 61 72 62 69 74 72   a single arbitr
21b90 61 72 69 6c 79 20 63 68 6f 73 65 6e 20 72 6f 77  arily chosen row
21ba0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74 68 65   from within the
21bb0 20 67 72 6f 75 70 2e 20 5e 49 66 20 74 68 65 72   group. ^If ther
21bc0 65 20 69 73 20 6d 6f 72 65 0a 20 20 20 20 74 68  e is more.    th
21bd0 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72 65  an one non-aggre
21be0 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20  gate expression 
21bf0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
21c00 74 2c 20 74 68 65 6e 20 61 6c 6c 20 73 75 63 68  t, then all such
21c10 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73  .    expressions
21c20 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 66   are evaluated f
21c30 6f 72 20 74 68 65 20 73 61 6d 65 20 72 6f 77 2e  or the same row.
21c40 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 67  ..    <p>^Each g
21c50 72 6f 75 70 20 6f 66 20 69 6e 70 75 74 20 64 61  roup of input da
21c60 74 61 73 65 74 20 72 6f 77 73 20 63 6f 6e 74 72  taset rows contr
21c70 69 62 75 74 65 73 20 61 20 73 69 6e 67 6c 65 20  ibutes a single 
21c80 72 6f 77 20 74 6f 20 74 68 65 20 0a 20 20 20 20  row to the .    
21c90 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
21ca0 77 73 2e 20 5e 53 75 62 6a 65 63 74 20 74 6f 20  ws. ^Subject to 
21cb0 66 69 6c 74 65 72 69 6e 67 20 61 73 73 6f 63 69  filtering associ
21cc0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 44 49  ated with the DI
21cd0 53 54 49 4e 43 54 0a 20 20 20 20 6b 65 79 77 6f  STINCT.    keywo
21ce0 72 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rd, the number o
21cf0 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  f rows returned 
21d00 62 79 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  by an aggregate 
21d10 71 75 65 72 79 20 77 69 74 68 20 61 20 47 52 4f  query with a GRO
21d20 55 50 0a 20 20 20 20 42 59 20 63 6c 61 75 73 65  UP.    BY clause
21d30 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
21d40 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 67 72  the number of gr
21d50 6f 75 70 73 20 6f 66 20 72 6f 77 73 20 70 72 6f  oups of rows pro
21d60 64 75 63 65 64 20 62 79 20 61 70 70 6c 79 69 6e  duced by applyin
21d70 67 0a 20 20 20 20 74 68 65 20 47 52 4f 55 50 20  g.    the GROUP 
21d80 42 59 20 61 6e 64 20 48 41 56 49 4e 47 20 63 6c  BY and HAVING cl
21d90 61 75 73 65 73 20 74 6f 20 74 68 65 20 66 69 6c  auses to the fil
21da0 74 65 72 65 64 20 69 6e 70 75 74 20 64 61 74 61  tered input data
21db0 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 3c  set..</ul>..<p><
21dc0 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66 20  b>4. Removal of 
21dd0 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 28  duplicate rows (
21de0 44 49 53 54 49 4e 43 54 20 70 72 6f 63 65 73 73  DISTINCT process
21df0 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68  ing).</b>.<tcl>h
21e00 64 5f 66 72 61 67 6d 65 6e 74 20 64 69 73 74 69  d_fragment disti
21e10 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68  nct</tcl>.<tcl>h
21e20 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49 53 54  d_keywords {DIST
21e30 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  INCT}</tcl>..<p>
21e40 5e 4f 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c 20  ^One of the ALL 
21e50 6f 72 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  or DISTINCT keyw
21e60 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77 20  ords may follow 
21e70 74 68 65 20 53 45 4c 45 43 54 20 6b 65 79 77 6f  the SELECT keywo
21e80 72 64 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20  rd in a .simple 
21e90 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
21ea0 2e 20 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65  . ^If the simple
21eb0 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c   SELECT is a SEL
21ec0 45 43 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74 68  ECT ALL, then th
21ed0 65 0a 65 6e 74 69 72 65 20 73 65 74 20 6f 66 20  e.entire set of 
21ee0 72 65 73 75 6c 74 20 72 6f 77 73 20 61 72 65 20  result rows are 
21ef0 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
21f00 53 45 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69 74  SELECT. ^If neit
21f10 68 65 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54 49  her ALL or.DISTI
21f20 4e 43 54 20 61 72 65 20 70 72 65 73 65 6e 74 2c  NCT are present,
21f30 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69   then the behavi
21f40 6f 75 72 20 69 73 20 61 73 20 69 66 20 41 4c 4c  our is as if ALL
21f50 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64 2e   were specified.
21f60 20 0a 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65   .^If the simple
21f70 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c   SELECT is a SEL
21f80 45 43 54 20 44 49 53 54 49 4e 43 54 2c 20 74 68  ECT DISTINCT, th
21f90 65 6e 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  en duplicate row
21fa0 73 20 61 72 65 20 72 65 6d 6f 76 65 64 0a 66 72  s are removed.fr
21fb0 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72 65  om the set of re
21fc0 73 75 6c 74 20 72 6f 77 73 20 62 65 66 6f 72 65  sult rows before
21fd0 20 69 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e   it is returned.
21fe0 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
21ff0 65 73 20 6f 66 0a 64 65 74 65 63 74 69 6e 67 20  es of.detecting 
22000 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 2c 20  duplicate rows, 
22010 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  two NULL values 
22020 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74  are considered t
22030 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e 54 68 65  o be equal. ^The
22040 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f  .normal rules fo
22050 72 20 73 65 6c 65 63 74 69 6e 67 20 61 20 63 6f  r selecting a co
22060 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
22070 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
22080 20 76 61 6c 75 65 73 20 77 69 74 68 0a 61 70 70   values with.app
22090 6c 79 2e 0a 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e  ly...<h3>Compoun
220a0 64 20 53 65 6c 65 63 74 20 53 74 61 74 65 6d 65  d Select Stateme
220b0 6e 74 73 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  nts.<tcl>hd_frag
220c0 6d 65 6e 74 20 63 6f 6d 70 6f 75 6e 64 3c 2f 74  ment compound</t
220d0 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
220e0 6f 72 64 73 20 7b 63 6f 6d 70 6f 75 6e 64 20 73  ords {compound s
220f0 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64  elect} {compound
22100 20 71 75 65 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 2f   query}</tcl>.</
22110 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72 20 6d  h3>..<p>Two or m
22120 6f 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  ore simple SELEC
22130 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 79  T statements may
22140 20 62 65 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f   be connected to
22150 67 65 74 68 65 72 20 74 6f 20 66 6f 72 6d 0a 61  gether to form.a
22160 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
22170 20 75 73 69 6e 67 20 74 68 65 20 55 4e 49 4f 4e   using the UNION
22180 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54  , UNION ALL, INT
22190 45 52 53 45 43 54 20 6f 72 20 45 58 43 45 50 54  ERSECT or EXCEPT
221a0 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 49 6e 20 61   operator..^In a
221b0 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
221c0 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69  , all the consti
221d0 74 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d 75  tuent SELECTs mu
221e0 73 74 20 72 65 74 75 72 6e 20 74 68 65 20 73 61  st return the sa
221f0 6d 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 72 65  me .number of re
22200 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 5e 41  sult columns. ^A
22210 73 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73  s the components
22220 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53   of a compound S
22230 45 4c 45 43 54 20 6d 75 73 74 0a 62 65 20 73 69  ELECT must.be si
22240 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
22250 65 6d 65 6e 74 73 2c 20 74 68 65 79 20 6d 61 79  ements, they may
22260 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 4f 52 44   not contain ORD
22270 45 52 20 42 59 20 6f 72 20 4c 49 4d 49 54 20 63  ER BY or LIMIT c
22280 6c 61 75 73 65 73 2e 0a 5e 4f 52 44 45 52 20 42  lauses..^ORDER B
22290 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75  Y and LIMIT clau
222a0 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63  ses may only occ
222b0 75 72 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ur at the end of
222c0 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70   the entire comp
222d0 6f 75 6e 64 0a 53 45 4c 45 43 54 2e 20 20 0a 0a  ound.SELECT.  ..
222e0 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e 64 20 53  <p>^A compound S
222f0 45 4c 45 43 54 20 63 72 65 61 74 65 64 20 75 73  ELECT created us
22300 69 6e 67 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70  ing UNION ALL op
22310 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 61  erator returns a
22320 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d  ll the rows.from
22330 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74   the SELECT to t
22340 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20 55  he left of the U
22350 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f  NION ALL operato
22360 72 2c 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 72  r, and all the r
22370 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c  ows.from the SEL
22380 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68 74  ECT to the right
22390 20 6f 66 20 69 74 2e 20 5e 54 68 65 20 55 4e 49   of it. ^The UNI
223a0 4f 4e 20 6f 70 65 72 61 74 6f 72 20 77 6f 72 6b  ON operator work
223b0 73 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  s the same way a
223c0 73 0a 55 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78 63  s.UNION ALL, exc
223d0 65 70 74 20 74 68 61 74 20 64 75 70 6c 69 63 61  ept that duplica
223e0 74 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f  te rows are remo
223f0 76 65 64 20 66 72 6f 6d 20 74 68 65 20 66 69 6e  ved from the fin
22400 61 6c 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 5e  al result set..^
22410 54 68 65 20 49 4e 54 45 52 53 45 43 54 20 6f 70  The INTERSECT op
22420 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 74  erator returns t
22430 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e 20  he intersection 
22440 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
22450 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 0a 72  f the left and.r
22460 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20 20 5e  ight SELECTs.  ^
22470 54 68 65 20 45 58 43 45 50 54 20 6f 70 65 72 61  The EXCEPT opera
22480 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65 20  tor returns the 
22490 73 75 62 73 65 74 20 6f 66 20 72 6f 77 73 20 72  subset of rows r
224a0 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a 6c  eturned by the.l
224b0 65 66 74 20 53 45 4c 45 43 54 20 74 68 61 74 20  eft SELECT that 
224c0 61 72 65 20 6e 6f 74 20 61 6c 73 6f 20 72 65 74  are not also ret
224d0 75 72 6e 65 64 20 62 79 20 74 68 65 20 72 69 67  urned by the rig
224e0 68 74 2d 68 61 6e 64 20 53 45 4c 45 43 54 2e 20  ht-hand SELECT. 
224f0 5e 44 75 70 6c 69 63 61 74 65 0a 72 6f 77 73 20  ^Duplicate.rows 
22500 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  are removed from
22510 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
22520 49 4e 54 45 52 53 45 43 54 20 61 6e 64 20 45 58  INTERSECT and EX
22530 43 45 50 54 20 6f 70 65 72 61 74 6f 72 73 20 62  CEPT operators b
22540 65 66 6f 72 65 20 74 68 65 0a 72 65 73 75 6c 74  efore the.result
22550 20 73 65 74 20 69 73 20 72 65 74 75 72 6e 65 64   set is returned
22560 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70  ...<p>^For the p
22570 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72  urposes of deter
22580 6d 69 6e 69 6e 67 20 64 75 70 6c 69 63 61 74 65  mining duplicate
22590 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20 72 65   rows for the re
225a0 73 75 6c 74 73 20 6f 66 20 63 6f 6d 70 6f 75 6e  sults of compoun
225b0 64 0a 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f  d.SELECT operato
225c0 72 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  rs, NULL values 
225d0 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 65  are considered e
225e0 71 75 61 6c 20 74 6f 20 6f 74 68 65 72 20 4e 55  qual to other NU
225f0 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 0a 64 69  LL values and.di
22600 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20  stinct from all 
22610 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 2e  non-NULL values.
22620 20 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20   ^The collation 
22630 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 74 6f  sequence used to
22640 20 63 6f 6d 70 61 72 65 20 0a 74 77 6f 20 74 65   compare .two te
22650 78 74 20 76 61 6c 75 65 73 20 69 73 20 64 65 74  xt values is det
22660 65 72 6d 69 6e 65 64 20 61 73 20 69 66 20 74 68  ermined as if th
22670 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
22680 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
22690 68 61 6e 64 0a 53 45 4c 45 43 54 20 73 74 61 74  hand.SELECT stat
226a0 65 6d 65 6e 74 73 20 77 65 72 65 20 74 68 65 20  ements were the 
226b0 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
226c0 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66 20  and operands of 
226d0 74 68 65 20 65 71 75 61 6c 73 20 28 3d 29 0a 6f  the equals (=).o
226e0 70 65 72 61 74 6f 72 2c 20 65 78 63 65 70 74 20  perator, except 
226f0 74 68 61 74 20 67 72 65 61 74 65 72 20 70 72 65  that greater pre
22700 63 65 64 65 6e 63 65 20 69 73 20 6e 6f 74 20 61  cedence is not a
22710 73 73 69 67 6e 65 64 20 74 6f 20 61 20 63 6f 6c  ssigned to a col
22720 6c 61 74 69 6f 6e 20 0a 73 65 71 75 65 6e 63 65  lation .sequence
22730 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20   specified with 
22740 74 68 65 20 70 6f 73 74 66 69 78 20 43 4f 4c 4c  the postfix COLL
22750 41 54 45 20 6f 70 65 72 61 74 6f 72 2e 20 5e 4e  ATE operator. ^N
22760 6f 20 61 66 66 69 6e 69 74 79 0a 74 72 61 6e 73  o affinity.trans
22770 66 6f 72 6d 61 74 69 6f 6e 73 20 61 72 65 20 61  formations are a
22780 70 70 6c 69 65 64 20 74 6f 20 61 6e 79 20 76 61  pplied to any va
22790 6c 75 65 73 20 77 68 65 6e 20 63 6f 6d 70 61 72  lues when compar
227a0 69 6e 67 20 72 6f 77 73 20 61 73 20 70 61 72 74  ing rows as part
227b0 20 6f 66 20 61 0a 63 6f 6d 70 6f 75 6e 64 20 53   of a.compound S
227c0 45 4c 45 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57 68  ELECT. ..<p>^(Wh
227d0 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72 65  en three or more
227e0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73 20   simple SELECTs 
227f0 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e  are connected in
22800 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  to a compound SE
22810 4c 45 43 54 2c 0a 74 68 65 79 20 67 72 6f 75 70  LECT,.they group
22820 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
22830 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f  ght. In other wo
22840 72 64 73 2c 20 69 66 20 22 41 22 2c 20 22 42 22  rds, if "A", "B"
22850 20 61 6e 64 20 22 43 22 20 61 72 65 20 61 6c 6c   and "C" are all
22860 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73  .simple SELECT s
22870 74 61 74 65 6d 65 6e 74 73 2c 20 28 41 20 6f 70  tatements, (A op
22880 20 42 20 6f 70 20 43 29 20 69 73 20 70 72 6f 63   B op C) is proc
22890 65 73 73 65 64 20 61 73 20 28 28 41 20 6f 70 20  essed as ((A op 
228a0 42 29 20 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f 70  B) op C).)^..</p
228b0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
228c0 65 6e 74 20 6f 72 64 65 72 62 79 20 7b 6f 72 64  ent orderby {ord
228d0 65 72 20 62 79 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  er by}</tcl>.<h3
228e0 3e 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49  >ORDER BY and LI
228f0 4d 49 54 2f 4f 46 46 53 45 54 20 43 6c 61 75 73  MIT/OFFSET Claus
22900 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61  es</h3>..<p>If a
22910 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
22920 74 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 6d  t that returns m
22930 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77  ore than one row
22940 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61   does not have a
22950 6e 0a 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  n.ORDER BY claus
22960 65 2c 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  e, the order in 
22970 77 68 69 63 68 20 74 68 65 20 72 6f 77 73 20 61  which the rows a
22980 72 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 75  re returned is u
22990 6e 64 65 66 69 6e 65 64 2e 0a 4f 72 2c 20 69 66  ndefined..Or, if
229a0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
229b0 65 6e 74 20 64 6f 65 73 20 68 61 76 65 20 61 6e  ent does have an
229c0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
229d0 2c 20 74 68 65 6e 20 74 68 65 20 6c 69 73 74 20  , then the list 
229e0 6f 66 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 61  of.expressions a
229f0 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 4f  ttached to the O
22a00 52 44 45 52 20 42 59 20 64 65 74 65 72 6d 69 6e  RDER BY determin
22a10 65 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77  e the order in w
22a20 68 69 63 68 20 72 6f 77 73 0a 61 72 65 20 72 65  hich rows.are re
22a30 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
22a40 65 72 2e 20 5e 52 6f 77 73 20 61 72 65 20 66 69  er. ^Rows are fi
22a50 72 73 74 20 73 6f 72 74 65 64 20 62 61 73 65 64  rst sorted based
22a60 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20   on the results 
22a70 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of.evaluating th
22a80 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72  e left-most expr
22a90 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52  ession in the OR
22aa0 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68 65  DER BY list, the
22ab0 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b 65  n ties are broke
22ac0 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  n.by evaluating 
22ad0 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d  the second left-
22ae0 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
22af0 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f  and so on. The o
22b00 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74 77  rder in which.tw
22b10 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  o rows for which
22b20 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
22b30 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61  pressions evalua
22b40 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c 75  te to equal valu
22b50 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64 20  es are.returned 
22b60 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45  is undefined. ^E
22b70 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70  ach ORDER BY exp
22b80 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f  ression may be o
22b90 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77  ptionally follow
22ba0 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ed.by one of the
22bb0 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28 73   keywords ASC (s
22bc0 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61 72  maller values ar
22bd0 65 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74  e returned first
22be0 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67 65  ) or DESC (large
22bf0 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65 74  r.values are ret
22c00 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e 49  urned first). ^I
22c10 66 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f 72  f neither ASC or
22c20 20 44 45 53 43 20 61 72 65 20 73 70 65 63 69 66   DESC are specif
22c30 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f  ied, rows.are so
22c40 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e  rted in ascendin
22c50 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65  g (smaller value
22c60 73 20 66 69 72 73 74 29 20 6f 72 64 65 72 20 62  s first) order b
22c70 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45  y default...<p>E
22c80 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70  ach ORDER BY exp
22c90 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65  ression is proce
22ca0 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ssed as follows:
22cb0 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  </p>..<ol>.<li><
22cc0 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20  p>^If the ORDER 
22cd0 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
22ce0 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65   a constant inte
22cf0 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 65  ger K then the.e
22d00 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e  xpression is con
22d10 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61 73  sidered an alias
22d20 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63 6f   for the K-th co
22d30 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
22d40 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20  lt set.(columns 
22d50 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72 6f  are numbered fro
22d60 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20  m left to right 
22d70 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 29  starting with 1)
22d80 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  ...<li><p>^If th
22d90 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
22da0 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e  ssion is an iden
22db0 74 69 66 69 65 72 20 74 68 61 74 20 63 6f 72 72  tifier that corr
22dc0 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61  esponds to.the a
22dd0 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74  lias of one of t
22de0 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  he output column
22df0 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72  s, then the expr
22e00 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64  ession is consid
22e10 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f  ered.an alias fo
22e20 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a  r that column...
22e30 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
22e40 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  e, if the ORDER 
22e50 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
22e60 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72 65   any other expre
22e70 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76  ssion, it .is ev
22e80 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20  aluated and the 
22e90 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20 75  returned value u
22ea0 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68 65  sed to order the
22eb0 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e 49   output rows. ^I
22ec0 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f.the SELECT sta
22ed0 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d 70  tement is a simp
22ee0 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  le SELECT, then 
22ef0 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79 20  an ORDER BY may 
22f00 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62 69  contain any.arbi
22f10 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e  trary expression
22f20 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20  s. ^However, if 
22f30 74 68 65 20 53 45 4c 45 43 54 20 69 73 20 61 20  the SELECT is a 
22f40 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
22f50 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20 65   then.ORDER BY e
22f60 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
22f70 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73 20  are not aliases 
22f80 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  to output column
22f90 73 20 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c  s must be exactl
22fa0 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e  y.the same as an
22fb0 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 64   expression used
22fc0 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63 6f   as an output co
22fd0 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  lumn..</ol>..<p>
22fe0 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
22ff0 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f 77  s of sorting row
23000 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  s, values are co
23010 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20 73 61  mpared in the sa
23020 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b 63  me way.as for [c
23030 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65 73  omparison expres
23040 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c  sions]. The coll
23050 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75  ation sequence u
23060 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74  sed to compare.t
23070 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20 69  wo text values i
23080 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20  s determined as 
23090 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20  follows:..<ol>. 
230a0 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
230b0 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
230c0 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64 20  ion is assigned 
230d0 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
230e0 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68 65  ence using.  the
230f0 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54   postfix [COLLAT
23100 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65  E operator], the
23110 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
23120 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
23130 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20 20  ce is.  used..  
23140 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
23150 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  e, if the ORDER 
23160 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
23170 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e 20   an alias to an 
23180 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68 61  expression.  tha
23190 74 20 68 61 73 20 62 65 65 6e 20 61 73 73 69 67  t has been assig
231a0 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ned a collation 
231b0 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20 74  sequence using t
231c0 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43  he postfix .  [C
231d0 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d  OLLATE operator]
231e0 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61  , then the colla
231f0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 73  tion sequence as
23200 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61 6c  signed to the al
23210 69 61 73 65 64 0a 20 20 65 78 70 72 65 73 73 69  iased.  expressi
23220 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c  on is used..  <l
23230 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
23240 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
23250 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
23260 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c   column or an al
23270 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70 72  ias of.  an expr
23280 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 61  ession that is a
23290 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68   column, then th
232a0 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
232b0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ion sequence for
232c0 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  .  the column is
232d0 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70   used. .  <li><p
232e0 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65  >^Otherwise, the
232f0 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74   [BINARY] collat
23300 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20  ion sequence is 
23310 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  used..</ol>..<p>
23320 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  In a compound SE
23330 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20  LECT statement, 
23340 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70  all ORDER BY exp
23350 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61 6e  ressions are han
23360 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73 20  dled.as aliases 
23370 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 72  for one of the r
23380 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66  esult columns of
23390 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 53 45   the compound SE
233a0 4c 45 43 54 2e 0a 5e 28 49 66 20 61 6e 20 4f 52  LECT..^(If an OR
233b0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
233c0 6e 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  n is not an inte
233d0 67 65 72 20 61 6c 69 61 73 2c 20 74 68 65 6e 20  ger alias, then 
233e0 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73 0a  SQLite searches.
233f0 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 53 45  the left-most SE
23400 4c 45 43 54 20 69 6e 20 74 68 65 20 63 6f 6d 70  LECT in the comp
23410 6f 75 6e 64 20 66 6f 72 20 61 20 72 65 73 75 6c  ound for a resul
23420 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 6d 61  t column that ma
23430 74 63 68 65 73 20 65 69 74 68 65 72 0a 74 68 65  tches either.the
23440 20 73 65 63 6f 6e 64 20 6f 72 20 74 68 69 72 64   second or third
23450 20 72 75 6c 65 73 20 61 62 6f 76 65 2e 20 49 66   rules above. If
23460 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
23470 64 2c 20 74 68 65 20 73 65 61 72 63 68 20 73 74  d, the search st
23480 6f 70 73 20 61 6e 64 0a 74 68 65 20 65 78 70 72  ops and.the expr
23490 65 73 73 69 6f 6e 20 69 73 20 68 61 6e 64 6c 65  ession is handle
234a0 64 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  d as an alias fo
234b0 72 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  r the result col
234c0 75 6d 6e 20 74 68 61 74 20 69 74 20 68 61 73 20  umn that it has 
234d0 62 65 65 6e 0a 6d 61 74 63 68 65 64 20 61 67 61  been.matched aga
234e0 69 6e 73 74 2e 20 4f 74 68 65 72 77 69 73 65 2c  inst. Otherwise,
234f0 20 74 68 65 20 6e 65 78 74 20 53 45 4c 45 43 54   the next SELECT
23500 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 69 73   to the right is
23510 20 74 72 69 65 64 2c 20 61 6e 64 20 73 6f 20 6f   tried, and so o
23520 6e 2e 29 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74 63  n.)^.^If no matc
23530 68 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20  hing expression 
23540 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e 20  can be found in 
23550 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
23560 6e 73 20 6f 66 20 61 6e 79 0a 63 6f 6e 73 74 69  ns of any.consti
23570 74 75 65 6e 74 20 53 45 4c 45 43 54 2c 20 69 74  tuent SELECT, it
23580 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 45   is an error. ^E
23590 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
235a0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
235b0 69 73 0a 70 72 6f 63 65 73 73 65 64 20 73 65 70  is.processed sep
235c0 61 72 61 74 65 6c 79 20 61 6e 64 20 6d 61 79 20  arately and may 
235d0 62 65 20 6d 61 74 63 68 65 64 20 61 67 61 69 6e  be matched again
235e0 73 74 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  st result column
235f0 73 20 66 72 6f 6d 20 64 69 66 66 65 72 65 6e 74  s from different
23600 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e  .SELECT statemen
23610 74 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75  ts in the compou
23620 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  nd.</p>..<p>The 
23630 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 69 73 20  LIMIT clause is 
23640 75 73 65 64 20 74 6f 20 70 6c 61 63 65 20 61 6e  used to place an
23650 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20   upper bound on 
23660 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
23670 77 73 0a 72 65 74 75 72 6e 65 64 20 62 79 20 61  ws.returned by a
23680 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
23690 74 2e 20 5e 41 6e 79 20 73 63 61 6c 61 72 20 65  t. ^Any scalar e
236a0 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65  xpression may be
236b0 20 75 73 65 64 20 69 6e 20 74 68 65 20 0a 4c 49   used in the .LI
236c0 4d 49 54 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c  MIT clause, so l
236d0 6f 6e 67 20 61 73 20 69 74 20 65 76 61 6c 75 61  ong as it evalua
236e0 74 65 73 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  tes to an intege
236f0 72 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61  r or a value tha
23700 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73  t can be.lossles
23710 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
23720 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66   an integer. ^If
23730 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
23740 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 4e  evaluates to a N
23750 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e  ULL .value or an
23760 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20 74 68  y other value th
23770 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73  at cannot be los
23780 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
23790 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c  d to an integer,
237a0 20 61 6e 0a 65 72 72 6f 72 20 69 73 20 72 65 74   an.error is ret
237b0 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 20 4c  urned. ^If the L
237c0 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20  IMIT expression 
237d0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e  evaluates to a n
237e0 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 0a 74  egative value,.t
237f0 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20  hen there is no 
23800 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74  upper bound on t
23810 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
23820 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68  s returned. ^Oth
23830 65 72 77 69 73 65 2c 20 74 68 65 0a 53 45 4c 45  erwise, the.SELE
23840 43 54 20 72 65 74 75 72 6e 73 20 74 68 65 20 66  CT returns the f
23850 69 72 73 74 20 4e 20 72 6f 77 73 20 6f 66 20 69  irst N rows of i
23860 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 6f 6e  ts result set on
23870 6c 79 2c 20 77 68 65 72 65 20 4e 20 69 73 20 74  ly, where N is t
23880 68 65 20 76 61 6c 75 65 0a 74 68 61 74 20 74 68  he value.that th
23890 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
238a0 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 2e  on evaluates to.
238b0 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c   ^Or, if the SEL
238c0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  ECT statement wo
238d0 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65 73 73 20  uld.return less 
238e0 74 68 61 6e 20 4e 20 72 6f 77 73 20 77 69 74 68  than N rows with
238f0 6f 75 74 20 61 20 4c 49 4d 49 54 20 63 6c 61 75  out a LIMIT clau
23900 73 65 2c 20 74 68 65 6e 20 74 68 65 20 65 6e 74  se, then the ent
23910 69 72 65 20 72 65 73 75 6c 74 20 73 65 74 20 69  ire result set i
23920 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70  s.returned. ..<p
23930 3e 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  >^The expression
23940 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
23950 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54   optional OFFSET
23960 20 63 6c 61 75 73 65 20 74 68 61 74 20 6d 61 79   clause that may
23970 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20   follow a.LIMIT 
23980 63 6c 61 75 73 65 20 6d 75 73 74 20 61 6c 73 6f  clause must also
23990 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 6e 20   evaluate to an 
239a0 69 6e 74 65 67 65 72 2c 20 6f 72 20 61 20 76 61  integer, or a va
239b0 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a  lue that can be.
239c0 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
239d0 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
239e0 65 72 2e 20 5e 49 66 20 61 6e 20 65 78 70 72 65  er. ^If an expre
239f0 73 73 69 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46  ssion has an OFF
23a00 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e  SET clause,.then
23a10 20 74 68 65 20 66 69 72 73 74 20 4d 20 72 6f 77   the first M row
23a20 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 66 72  s are omitted fr
23a30 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  om the result se
23a40 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  t returned by th
23a50 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65  e SELECT.stateme
23a60 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  nt and the next 
23a70 4e 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  N rows are retur
23a80 6e 65 64 2c 20 77 68 65 72 65 20 4d 20 61 6e 64  ned, where M and
23a90 20 4e 20 61 72 65 20 74 68 65 20 76 61 6c 75 65   N are the value
23aa0 73 20 74 68 61 74 0a 74 68 65 20 4f 46 46 53 45  s that.the OFFSE
23ab0 54 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75  T and LIMIT clau
23ac0 73 65 73 20 65 76 61 6c 75 61 74 65 20 74 6f 2c  ses evaluate to,
23ad0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 5e   respectively. ^
23ae0 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43  Or, if the SELEC
23af0 54 0a 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c  T.would return l
23b00 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77  ess than M+N row
23b10 73 20 69 66 20 69 74 20 64 69 64 20 6e 6f 74 20  s if it did not 
23b20 68 61 76 65 20 61 20 4c 49 4d 49 54 20 63 6c 61  have a LIMIT cla
23b30 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 66 69  use, then the.fi
23b40 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20 73  rst M rows are s
23b50 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20 72  kipped and the r
23b60 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 28 69  emaining rows (i
23b70 66 20 61 6e 79 29 20 61 72 65 20 72 65 74 75 72  f any) are retur
23b80 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46  ned. ^If the.OFF
23b90 53 45 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75  SET clause evalu
23ba0 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69  ates to a negati
23bb0 76 65 20 76 61 6c 75 65 2c 20 74 68 65 20 72 65  ve value, the re
23bc0 73 75 6c 74 73 20 61 72 65 20 74 68 65 20 73 61  sults are the sa
23bd0 6d 65 20 61 73 20 69 66 20 69 74 0a 68 61 64 20  me as if it.had 
23be0 65 76 61 6c 75 61 74 65 64 20 74 6f 20 7a 65 72  evaluated to zer
23bf0 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20  o...<p>^Instead 
23c00 6f 66 20 61 20 73 65 70 61 72 61 74 65 20 4f 46  of a separate OF
23c10 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65  FSET clause, the
23c20 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61   LIMIT clause ma
23c30 79 20 73 70 65 63 69 66 79 20 74 77 6f 0a 73 63  y specify two.sc
23c40 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73  alar expressions
23c50 20 73 65 70 61 72 61 74 65 64 20 62 79 20 61 20   separated by a 
23c60 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20  comma. ^In this 
23c70 63 61 73 65 2c 20 74 68 65 20 66 69 72 73 74 20  case, the first 
23c80 65 78 70 72 65 73 73 69 6f 6e 0a 69 73 20 75 73  expression.is us
23c90 65 64 20 61 73 20 74 68 65 20 4f 46 46 53 45 54  ed as the OFFSET
23ca0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
23cb0 74 68 65 20 73 65 63 6f 6e 64 20 61 73 20 74 68  the second as th
23cc0 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
23cd0 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63 6f 75 6e  on..This is coun
23ce0 74 65 72 2d 69 6e 74 75 69 74 69 76 65 2c 20 61  ter-intuitive, a
23cf0 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65  s when using the
23d00 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 74   OFFSET clause t
23d10 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65  he second of.the
23d20 20 74 77 6f 20 65 78 70 72 65 73 73 69 6f 6e 73   two expressions
23d30 20 69 73 20 74 68 65 20 4f 46 46 53 45 54 20 61   is the OFFSET a
23d40 6e 64 20 74 68 65 20 66 69 72 73 74 20 74 68 65  nd the first the
23d50 20 4c 49 4d 49 54 2e 20 54 68 69 73 20 69 73 20   LIMIT. This is 
23d60 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74  intentional.- it
23d70 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61   maximizes compa
23d80 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74  tibility with ot
23d90 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
23da0 20 73 79 73 74 65 6d 73 2e 0a 0a 3c 74 63 6c 3e   systems...<tcl>
23db0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
23dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23df0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
23e00 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20 75  Section UPDATE u
23e10 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 2a 55  pdate {UPDATE *U
23e20 50 44 41 54 45 73 7d 0a 0a 42 75 62 62 6c 65 44  PDATEs}..BubbleD
23e30 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74  iagram update-st
23e40 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72  mt 1.BubbleDiagr
23e50 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62  am qualified-tab
23e60 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a  le-name.</tcl>..
23e70 3c 70 3e 5e 41 6e 20 55 50 44 41 54 45 20 73 74  <p>^An UPDATE st
23e80 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
23e90 74 6f 20 6d 6f 64 69 66 79 20 61 20 73 75 62 73  to modify a subs
23ea0 65 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  et of the values
23eb0 20 73 74 6f 72 65 64 20 69 6e 20 0a 7a 65 72 6f   stored in .zero
23ec0 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66   or more rows of
23ed0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
23ee0 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ble identified b
23ef0 79 20 74 68 65 20 0a 3c 69 3e 71 75 61 6c 69 66  y the .<i>qualif
23f00 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  ied-table-name</
23f10 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73 20  i> specified as 
23f20 70 61 72 74 20 6f 66 20 74 68 65 20 55 50 44 41  part of the UPDA
23f30 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  TE statement...<
23f40 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45  p>^If the UPDATE
23f50 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20   statement does 
23f60 6e 6f 74 20 68 61 76 65 20 61 20 57 48 45 52 45  not have a WHERE
23f70 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77   clause, all row
23f80 73 20 69 6e 20 74 68 65 0a 74 61 62 6c 65 20 61  s in the.table a
23f90 72 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74  re modified by t
23fa0 68 65 20 55 50 44 41 54 45 2e 20 5e 4f 74 68 65  he UPDATE. ^Othe
23fb0 72 77 69 73 65 2c 20 74 68 65 20 55 50 44 41 54  rwise, the UPDAT
23fc0 45 20 61 66 66 65 63 74 73 20 6f 6e 6c 79 20 74  E affects only t
23fd0 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20 77 68  hose.rows for wh
23fe0 69 63 68 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ich the result o
23ff0 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
24000 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78   WHERE clause ex
24010 70 72 65 73 73 69 6f 6e 20 61 73 20 61 20 0a 5b  pression as a .[
24020 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
24030 6f 6e 7c 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  on|boolean expre
24040 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d 2e 20  ssion is true]. 
24050 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72  ^It is not an er
24060 72 6f 72 20 69 66 20 74 68 65 0a 57 48 45 52 45  ror if the.WHERE
24070 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74   clause does not
24080 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72 75   evaluate to tru
24090 65 20 66 6f 72 20 61 6e 79 20 72 6f 77 20 69 6e  e for any row in
240a0 20 74 68 65 20 74 61 62 6c 65 20 2d 20 74 68 69   the table - thi
240b0 73 20 6a 75 73 74 0a 6d 65 61 6e 73 20 74 68 61  s just.means tha
240c0 74 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  t the UPDATE sta
240d0 74 65 6d 65 6e 74 20 61 66 66 65 63 74 73 20 7a  tement affects z
240e0 65 72 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68  ero rows...<p>Th
240f0 65 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20  e modifications 
24100 6d 61 64 65 20 74 6f 20 65 61 63 68 20 72 6f 77  made to each row
24110 20 61 66 66 65 63 74 65 64 20 62 79 20 61 6e 20   affected by an 
24120 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
24130 20 61 72 65 0a 64 65 74 65 72 6d 69 6e 65 64 20   are.determined 
24140 62 79 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61  by the list of a
24150 73 73 69 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f  ssignments follo
24160 77 69 6e 67 20 74 68 65 20 53 45 54 20 6b 65 79  wing the SET key
24170 77 6f 72 64 2e 20 45 61 63 68 0a 61 73 73 69 67  word. Each.assig
24180 6e 6d 65 6e 74 20 73 70 65 63 69 66 69 65 73 20  nment specifies 
24190 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f  a column name to
241a0 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65   the left of the
241b0 20 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64   equals sign and
241c0 20 61 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73   a.scalar expres
241d0 73 69 6f 6e 20 74 6f 20 74 68 65 20 72 69 67 68  sion to the righ
241e0 74 2e 20 5e 46 6f 72 20 65 61 63 68 20 61 66 66  t. ^For each aff
241f0 65 63 74 65 64 20 72 6f 77 2c 20 74 68 65 20 6e  ected row, the n
24200 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 0a 61 72 65  amed columns.are
24210 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
24220 65 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c  es found by eval
24230 75 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65  uating the corre
24240 73 70 6f 6e 64 69 6e 67 20 73 63 61 6c 61 72 20  sponding scalar 
24250 0a 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e 49  .expressions. ^I
24260 66 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  f a single colum
24270 6e 2d 6e 61 6d 65 20 61 70 70 65 61 72 73 20 6d  n-name appears m
24280 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 69 6e  ore than once in
24290 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 61 73 73   the list of.ass
242a0 69 67 6e 6d 65 6e 74 20 65 78 70 72 65 73 73 69  ignment expressi
242b0 6f 6e 73 2c 20 61 6c 6c 20 62 75 74 20 74 68 65  ons, all but the
242c0 20 72 69 67 68 74 6d 6f 73 74 20 6f 63 63 75 72   rightmost occur
242d0 72 65 6e 63 65 20 69 73 20 69 67 6e 6f 72 65 64  rence is ignored
242e0 2e 20 5e 43 6f 6c 75 6d 6e 73 0a 74 68 61 74 20  . ^Columns.that 
242f0 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e  do not appear in
24300 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73   the list of ass
24310 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6c 65 66  ignments are lef
24320 74 20 75 6e 6d 6f 64 69 66 69 65 64 2e 20 5e 54  t unmodified. ^T
24330 68 65 20 73 63 61 6c 61 72 0a 65 78 70 72 65 73  he scalar.expres
24340 73 69 6f 6e 73 20 6d 61 79 20 72 65 66 65 72 20  sions may refer 
24350 74 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  to columns of th
24360 65 20 72 6f 77 20 62 65 69 6e 67 20 75 70 64 61  e row being upda
24370 74 65 64 2e 20 5e 49 6e 20 74 68 69 73 20 63 61  ted. ^In this ca
24380 73 65 20 61 6c 6c 0a 73 63 61 6c 61 72 20 65 78  se all.scalar ex
24390 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76  pressions are ev
243a0 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20 61  aluated before a
243b0 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 61  ny assignments a
243c0 72 65 20 6d 61 64 65 2e 0a 0a 3c 70 3e 5e 54 68  re made...<p>^Th
243d0 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c  e optional confl
243e0 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77  ict-clause allow
243f0 73 20 74 68 65 20 75 73 65 72 20 74 6f 20 6e 6f  s the user to no
24400 6d 69 6e 61 74 65 20 61 20 73 70 65 63 69 66 69  minate a specifi
24410 63 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  c.constraint con
24420 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
24430 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
24440 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e  e during this on
24450 65 20 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64  e UPDATE command
24460 2e 0a 52 65 66 65 72 20 74 6f 20 74 68 65 20 73  ..Refer to the s
24470 65 63 74 69 6f 6e 20 65 6e 74 69 74 6c 65 64 20  ection entitled 
24480 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f  [ON CONFLICT] fo
24490 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
244a0 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 52  ormation...<h3>R
244b0 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55  estrictions on U
244c0 50 44 41 54 45 20 53 74 61 74 65 6d 65 6e 74 73  PDATE Statements
244d0 20 57 69 74 68 69 6e 20 43 52 45 41 54 45 20 54   Within CREATE T
244e0 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e  RIGGER</h3>..<p>
244f0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64  The following ad
24500 64 69 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78 20  ditional syntax 
24510 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70  restrictions app
24520 6c 79 20 74 6f 20 55 50 44 41 54 45 20 73 74 61  ly to UPDATE sta
24530 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63 63  tements that.occ
24540 75 72 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  ur within the bo
24550 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20  dy of a [CREATE 
24560 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
24570 6e 74 2e 20 20 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  nt.  ..<ul>.  <l
24580 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e 74 61 62  i><p>^The <i>tab
24590 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63  le-name</i> spec
245a0 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
245b0 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
245c0 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20  ment within.    
245d0 20 20 61 20 74 72 69 67 67 65 72 20 62 6f 64 79    a trigger body
245e0 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69   must be unquali
245f0 66 69 65 64 2e 20 5e 28 49 6e 20 6f 74 68 65 72  fied. ^(In other
24600 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20   words, the.    
24610 20 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61    <i>database-na
24620 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70  me</i><b>.</b> p
24630 72 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61 62  refix on the tab
24640 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 55  le name of the U
24650 50 44 41 54 45 20 69 73 0a 20 20 20 20 20 20 6e  PDATE is.      n
24660 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69 74 68 69  ot allowed withi
24670 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 55  n triggers.)^ ^U
24680 6e 6c 65 73 73 20 74 68 65 20 74 61 62 6c 65 20  nless the table 
24690 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
246a0 67 67 65 72 0a 20 20 20 20 20 20 69 73 20 61 74  gger.      is at
246b0 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65  tached is in the
246c0 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20   TEMP database, 
246d0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
246e0 75 70 64 61 74 65 64 20 62 79 20 74 68 65 0a 20  updated by the. 
246f0 20 20 20 20 20 74 72 69 67 67 65 72 20 70 72 6f       trigger pro
24700 67 72 61 6d 20 6d 75 73 74 20 72 65 73 69 64 65  gram must reside
24710 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74   in the same dat
24720 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66  abase as it. ^If
24730 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 20   the table.     
24740 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
24750 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65  igger is attache
24760 64 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50  d is in the TEMP
24770 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20   database, then 
24780 74 68 65 0a 20 20 20 20 20 20 75 6e 71 75 61 6c  the.      unqual
24790 69 66 69 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  ified name of th
247a0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75 70  e table being up
247b0 64 61 74 65 64 20 69 73 20 72 65 73 6f 6c 76 65  dated is resolve
247c0 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
247d0 79 0a 20 20 20 20 20 20 61 73 20 69 74 20 69 73  y.      as it is
247e0 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c   for a top-level
247f0 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20 73   statement (by s
24800 65 61 72 63 68 69 6e 67 20 66 69 72 73 74 20 74  earching first t
24810 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
24820 2c 0a 20 20 20 20 20 20 74 68 65 6e 20 74 68 65  ,.      then the
24830 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
24840 74 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20 64  then any other d
24850 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 20  atabases in the 
24860 6f 72 64 65 72 20 74 68 65 79 20 77 65 72 65 0a  order they were.
24870 20 20 20 20 20 20 61 74 74 61 63 68 65 64 29 2e        attached).
24880 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20  ..  <li><p>^The 
24890 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e  INDEXED BY and N
248a0 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
248b0 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77  es are not allow
248c0 65 64 20 6f 6e 20 55 50 44 41 54 45 0a 20 20 20  ed on UPDATE.   
248d0 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
248e0 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f  thin triggers.</
248f0 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  p>..  <li><p>^Th
24900 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45  e LIMIT and ORDE
24910 52 20 42 59 20 63 6c 61 75 73 65 73 20 66 6f 72  R BY clauses for
24920 20 55 50 44 41 54 45 20 61 72 65 20 75 6e 73 75   UPDATE are unsu
24930 70 70 6f 72 74 65 64 20 77 69 74 68 69 6e 0a 20  pported within. 
24940 20 20 20 20 20 74 72 69 67 67 65 72 73 2c 20 72       triggers, r
24950 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
24960 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74   compilation opt
24970 69 6f 6e 73 20 75 73 65 64 20 74 6f 20 62 75 69  ions used to bui
24980 6c 64 20 53 51 4c 69 74 65 2e 0a 3c 2f 75 6c 3e  ld SQLite..</ul>
24990 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c  ..<h3>Optional L
249a0 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42  IMIT and ORDER B
249b0 59 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a  Y Clauses</h3>..
249c0 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20 69  <p>^(If SQLite i
249d0 73 20 62 75 69 6c 74 20 77 69 74 68 20 74 68 65  s built with the
249e0 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
249f0 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
24a00 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d  MIT].compile-tim
24a10 65 20 6f 70 74 69 6f 6e 20 74 68 65 6e 20 74 68  e option then th
24a20 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20  e syntax of the 
24a30 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
24a40 20 69 73 20 65 78 74 65 6e 64 65 64 0a 77 69 74   is extended.wit
24a50 68 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52  h optional ORDER
24a60 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c   BY and LIMIT cl
24a70 61 75 73 65 73 29 5e 20 61 73 20 66 6f 6c 6c 6f  auses)^ as follo
24a80 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75  ws:</p>..<tcl>Bu
24a90 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61  bbleDiagram upda
24aa0 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c  te-stmt-limited<
24ab0 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e  /tcl>..<p>^If an
24ac0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
24ad0 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63 6c  t has a LIMIT cl
24ae0 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d 75  ause, the maximu
24af0 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  m number of rows
24b00 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 75 70   that.will be up
24b10 64 61 74 65 64 20 69 73 20 66 6f 75 6e 64 20 62  dated is found b
24b20 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
24b30 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78   accompanying ex
24b40 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61 73  pression and cas
24b50 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e  ting.it to an in
24b60 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 41 20  teger value. ^A 
24b70 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 69  negative value i
24b80 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  s interpreted as
24b90 20 22 6e 6f 20 6c 69 6d 69 74 22 2e 0a 0a 3c 70   "no limit"...<p
24ba0 3e 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20 65  >^If the LIMIT e
24bb0 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
24bc0 74 65 73 20 74 6f 20 6e 6f 6e 2d 6e 65 67 61 74  tes to non-negat
24bd0 69 76 65 20 76 61 6c 75 65 20 3c 69 3e 4e 3c 2f  ive value <i>N</
24be0 69 3e 20 61 6e 64 20 74 68 65 0a 55 50 44 41 54  i> and the.UPDAT
24bf0 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
24c00 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
24c10 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77  se, then all row
24c20 73 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20  s that would be 
24c30 75 70 64 61 74 65 64 20 69 6e 0a 74 68 65 20 61  updated in.the a
24c40 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49  bsence of the LI
24c50 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 73  MIT clause are s
24c60 6f 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20  orted according 
24c70 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  to the ORDER BY 
24c80 61 6e 64 20 74 68 65 0a 66 69 72 73 74 20 3c 69  and the.first <i
24c90 3e 4e 3c 2f 69 3e 20 75 70 64 61 74 65 64 2e 20  >N</i> updated. 
24ca0 5e 28 49 66 20 74 68 65 20 55 50 44 41 54 45 20  ^(If the UPDATE 
24cb0 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 68  statement also h
24cc0 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61  as an OFFSET cla
24cd0 75 73 65 2c 0a 74 68 65 6e 20 69 74 20 69 73 20  use,.then it is 
24ce0 73 69 6d 69 6c 61 72 6c 79 20 65 76 61 6c 75 61  similarly evalua
24cf0 74 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f 20  ted and cast to 
24d00 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
24d10 2e 20 49 66 20 74 68 65 20 4f 46 46 53 45 54 0a  . If the OFFSET.
24d20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
24d30 61 74 65 73 20 74 6f 20 61 20 6e 6f 6e 2d 6e 65  ates to a non-ne
24d40 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c 69 3e  gative value <i>
24d50 4d 3c 2f 69 3e 2c 20 74 68 65 6e 20 74 68 65 20  M</i>, then the 
24d60 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 0a 72  first <i>M</i>.r
24d70 6f 77 73 20 61 72 65 20 73 6b 69 70 70 65 64 20  ows are skipped 
24d80 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  and the followin
24d90 67 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20  g <i>N</i> rows 
24da0 75 70 64 61 74 65 64 20 69 6e 73 74 65 61 64 2e  updated instead.
24db0 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55  )^..<p>^If the U
24dc0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
24dd0 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20  has no ORDER BY 
24de0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c  clause, then all
24df0 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64   rows that.would
24e00 20 62 65 20 75 70 64 61 74 65 64 20 69 6e 20 74   be updated in t
24e10 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
24e20 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
24e30 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20  re assembled in 
24e40 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64  an.arbitrary ord
24e50 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69  er before applyi
24e60 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64  ng the LIMIT and
24e70 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20   OFFSET clauses 
24e80 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 77 68  to determine .wh
24e90 69 63 68 20 61 72 65 20 61 63 74 75 61 6c 6c 79  ich are actually
24ea0 20 75 70 64 61 74 65 64 2e 0a 0a 3c 70 3e 5e 28   updated...<p>^(
24eb0 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
24ec0 75 73 65 20 6f 6e 20 61 6e 20 55 50 44 41 54 45  use on an UPDATE
24ed0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
24ee0 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72  ed only to deter
24ef0 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77 73 20  mine which.rows 
24f00 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20  fall within the 
24f10 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64 65 72  LIMIT. The order
24f20 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61   in which rows a
24f30 72 65 20 6d 6f 64 69 66 69 65 64 20 69 73 20 61  re modified is a
24f40 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20  rbitrary.and is 
24f50 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20 62  not influenced b
24f60 79 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  y the ORDER BY c
24f70 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a  lause.)^..<tcl>.
24f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
24fd0 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20 76 61  ection VACUUM va
24fe0 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a 42 75 62  cuum VACUUM..Bub
24ff0 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75 75  bleDiagram vacuu
25000 6d 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  m-stmt 1.</tcl>.
25010 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55 55  .<p>.  The VACUU
25020 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69 6c  M command rebuil
25030 64 73 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  ds the entire da
25040 74 61 62 61 73 65 2e 20 54 68 65 72 65 20 61 72  tabase. There ar
25050 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65 61  e several .  rea
25060 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61 74  sons an applicat
25070 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68 69  ion might do thi
25080 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20  s:..<ul>.  <li> 
25090 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c 69  <p> ^Unless SQLi
250a0 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69 6e  te is running in
250b0 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46 55   "auto_vacuum=FU
250c0 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20 61  LL" mode, when a
250d0 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f 75   large.     amou
250e0 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20 64 65  nt of data is de
250f0 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64  leted from the d
25100 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74 20  atabase file it 
25110 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65 6d  leaves behind em
25120 70 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c 20  pty.     space, 
25130 6f 72 20 22 66 72 65 65 22 20 64 61 74 61 62 61  or "free" databa
25140 73 65 20 70 61 67 65 73 2e 20 54 68 69 73 20 6d  se pages. This m
25150 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
25160 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20 20  e file might.   
25170 20 20 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e    be larger than
25180 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73 73   strictly necess
25190 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41  ary. ^Running VA
251a0 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64 20  CUUM to rebuild 
251b0 74 68 65 20 0a 20 20 20 20 20 64 61 74 61 62 61  the .     databa
251c0 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69 73  se reclaims this
251d0 20 73 70 61 63 65 20 61 6e 64 20 72 65 64 75 63   space and reduc
251e0 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  es the size of t
251f0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
25200 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46  ...  <li> <p> ^F
25210 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73 2c  requent inserts,
25220 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64 65   updates, and de
25230 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65 20  letes can cause 
25240 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
25250 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d 65  e.     to become
25260 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77 68   fragmented - wh
25270 65 72 65 20 64 61 74 61 20 66 6f 72 20 61 20 73  ere data for a s
25280 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20 69  ingle table or i
25290 6e 64 65 78 20 69 73 20 73 63 61 74 74 65 72 65  ndex is scattere
252a0 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20 74  d .     around t
252b0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
252c0 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55  . ^Running VACUU
252d0 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74 20 65  M ensures that e
252e0 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20 20  ach table and.  
252f0 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72 67     index is larg
25300 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74 69  ely stored conti
25310 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20 74  guously within t
25320 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
25330 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20 20  . ^In some.     
25340 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d 61  cases, VACUUM ma
25350 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74 68  y also reduce th
25360 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72 74  e number of part
25370 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67  ially filled pag
25380 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20 64  es in.     the d
25390 61 74 61 62 61 73 65 2c 20 72 65 64 75 63 69 6e  atabase, reducin
253a0 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  g the size of th
253b0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
253c0 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e  further...  <li>
253d0 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20   <p> ^Normally, 
253e0 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70 61  the database [pa
253f0 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68 65  ge_size] and whe
25400 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
25410 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73 75  database.     su
25420 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61 63  pports [auto_vac
25430 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f 6e  uum] must be con
25440 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20 74  figured before t
25450 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
25460 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c 6c   is.     actuall
25470 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77 65  y created. ^Howe
25480 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69 6e  ver, when not in
25490 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f   [write-ahead lo
254a0 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20 20  g] mode, the .  
254b0 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61     [page_size] a
254c0 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75  nd/or [auto_vacu
254d0 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20 6f  um] properties o
254e0 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61  f an existing da
254f0 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20 20  tabase may be.  
25500 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75 73     changed by us
25510 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69  ing the [page_si
25520 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f 73  ze pragma|page_s
25530 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20 20  ize]  and/or .  
25540 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 7c     [auto_vacuum|
25550 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75  pragma auto_vacu
25560 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64 20  um] pragmas and 
25570 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  then immediately
25580 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20 20   VACUUMing.     
25590 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e 57  the database. ^W
255a0 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61 68  hen in [write-ah
255b0 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f  ead log] mode, o
255c0 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76 61  nly the [auto_va
255d0 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70 6f  cuum].     suppo
255e0 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e 20  rt property can 
255f0 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67  be changed using
25600 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a   VACUUM..</ul>..
25610 3c 70 3e 5e 28 56 41 43 55 55 4d 20 6f 6e 6c 79  <p>^(VACUUM only
25620 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d 61   works on the ma
25630 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 74 20  in database. It 
25640 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
25650 74 6f 20 56 41 43 55 55 4d 20 61 6e 0a 61 74 74  to VACUUM an.att
25660 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 66  ached database f
25670 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20  ile.)^..<p>^The 
25680 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77  VACUUM command w
25690 6f 72 6b 73 20 62 79 20 63 6f 70 79 69 6e 67 20  orks by copying 
256a0 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
256b0 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 74  the database int
256c0 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 64 61  o.a temporary da
256d0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
256e0 74 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e 67  then overwriting
256f0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
25700 74 68 20 74 68 65 20 0a 63 6f 6e 74 65 6e 74 73  th the .contents
25710 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
25720 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e 20 6f 76  y file. ^When ov
25730 65 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72  erwriting the or
25740 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62 61  iginal, a rollba
25750 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b 77  ck.journal or [w
25760 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20  rite-ahead log] 
25770 57 41 4c 20 66 69 6c 65 20 69 73 20 75 73 65 64  WAL file is used
25780 20 6a 75 73 74 20 61 73 20 69 74 20 77 6f 75 6c   just as it woul
25790 64 20 62 65 20 66 6f 72 20 61 6e 79 0a 6f 74 68  d be for any.oth
257a0 65 72 20 64 61 74 61 62 61 73 65 20 74 72 61 6e  er database tran
257b0 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69 73 20 6d  saction. ^This m
257c0 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20 56  eans that when V
257d0 41 43 55 55 4d 69 6e 67 20 61 20 64 61 74 61 62  ACUUMing a datab
257e0 61 73 65 2c 20 0a 61 73 20 6d 75 63 68 20 61 73  ase, .as much as
257f0 20 74 77 69 63 65 20 74 68 65 20 73 69 7a 65 20   twice the size 
25800 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  of the original 
25810 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
25820 20 72 65 71 75 69 72 65 64 20 69 6e 20 66 72 65   required in fre
25830 65 0a 64 69 73 6b 20 73 70 61 63 65 2e 0a 0a 3c  e.disk space...<
25840 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f  p>^The VACUUM co
25850 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e 67 65  mmand may change
25860 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20 52 4f   the [ROWID | RO
25870 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69 65 73  WIDs] of entries
25880 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73 20 74   in any.tables t
25890 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  hat do not have 
258a0 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49 4e 54  an explicit [INT
258b0 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
258c0 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 56  ]..</p>..<p>^A V
258d0 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69 6c 20  ACUUM will fail 
258e0 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 6f  if there is an o
258f0 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
25900 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65   or if there are
25910 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20 61 63 74   one or.more act
25920 69 76 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ive SQL statemen
25930 74 73 20 77 68 65 6e 20 69 74 20 69 73 20 72 75  ts when it is ru
25940 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20 53  n...<p>^(As of S
25950 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
25960 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  1, an alternativ
25970 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56  e to using the V
25980 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f  ACUUM command to
25990 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65 20 61  .reclaim space a
259a0 66 74 65 72 20 64 61 74 61 20 68 61 73 20 62 65  fter data has be
259b0 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20 61 75  en deleted is au
259c0 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20  to-vacuum mode, 
259d0 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a 74 68  enabled using.th
259e0 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  e [auto_vacuum] 
259f0 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e 20  pragma.)^ ^When 
25a00 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73  [auto_vacuum] is
25a10 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64   enabled for a d
25a20 61 74 61 62 61 73 65 0a 66 72 65 65 20 70 61 67  atabase.free pag
25a30 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c 61 69  es may be reclai
25a40 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65 74 69  med after deleti
25a50 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69 6e 67  ng data, causing
25a60 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73 68 72   the file to shr
25a70 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65 62  ink,.without reb
25a80 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e 74 69  uilding the enti
25a90 72 65 20 64 61 74 61 62 61 73 65 20 75 73 69 6e  re database usin
25aa0 67 20 56 41 43 55 55 4d 2e 20 20 48 6f 77 65 76  g VACUUM.  Howev
25ab0 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f 5f  er, using.[auto_
25ac0 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61 64  vacuum] can lead
25ad0 20 74 6f 20 65 78 74 72 61 20 64 61 74 61 62 61   to extra databa
25ae0 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e 74  se file fragment
25af0 61 74 69 6f 6e 2e 20 20 41 6e 64 20 5b 61 75 74  ation.  And [aut
25b00 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e  o_vacuum].does n
25b10 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74 69  ot compact parti
25b20 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65  ally filled page
25b30 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
25b40 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f 65 73  e as VACUUM does
25b50 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a  ...</p>...<tcl>.
25b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
25bb0 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20  ection {INDEXED 
25bc0 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b 7b  BY} indexedby {{
25bd0 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54  INDEXED BY} {NOT
25be0 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63   INDEXED}}..</tc
25bf0 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  l>.<p>^The INDEX
25c00 45 44 20 42 59 20 70 68 72 61 73 65 20 69 73 20  ED BY phrase is 
25c10 61 6e 20 53 51 4c 20 65 78 74 65 6e 73 69 6f 6e  an SQL extension
25c20 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 69 6e 20 53   found only in S
25c30 51 4c 69 74 65 20 77 68 69 63 68 20 63 61 6e 0a  QLite which can.
25c40 62 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  be used to verif
25c50 79 20 74 68 61 74 20 74 68 65 20 63 6f 72 72 65  y that the corre
25c60 63 74 20 69 6e 64 69 63 65 73 20 61 72 65 20 62  ct indices are b
25c70 65 69 6e 67 20 75 73 65 64 20 6f 6e 20 61 20 5b  eing used on a [
25c80 44 45 4c 45 54 45 5d 2c 0a 5b 53 45 4c 45 43 54  DELETE],.[SELECT
25c90 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73  ], or [UPDATE] s
25ca0 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 49  tatement..^The I
25cb0 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65  NDEXED BY phrase
25cc0 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20   always follows 
25cd0 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 61  the name of a ta
25ce0 62 6c 65 20 74 68 61 74 20 53 51 4c 69 74 65 20  ble that SQLite 
25cf0 77 69 6c 6c 0a 62 65 20 72 65 61 64 69 6e 67 2e  will.be reading.
25d00 20 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59    The INDEXED BY
25d10 20 70 68 72 61 73 65 20 63 61 6e 20 62 65 20 73   phrase can be s
25d20 65 65 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  een in the follo
25d30 77 69 6e 67 20 73 79 6e 74 61 78 0a 64 69 61 67  wing syntax.diag
25d40 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  rams:</p>..<tcl>
25d50 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71  .BubbleDiagram q
25d60 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
25d70 61 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  ame.BubbleDiagra
25d80 6d 20 73 69 6e 67 6c 65 2d 73 6f 75 72 63 65 0a  m single-source.
25d90 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
25da0 22 49 4e 44 45 58 45 44 20 42 59 20 69 6e 64 65  "INDEXED BY inde
25db0 78 2d 6e 61 6d 65 22 20 63 6c 61 75 73 65 20 73  x-name" clause s
25dc0 70 65 63 69 66 69 65 73 20 74 68 61 74 20 74 68  pecifies that th
25dd0 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75  e named index.mu
25de0 73 74 20 62 65 20 75 73 65 64 20 69 6e 20 6f 72  st be used in or
25df0 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76  der to look up v
25e00 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70 72 65  alues on the pre
25e10 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49  ceding table..^I
25e20 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f 65  f index-name doe
25e30 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72 20 63  s not exist or c
25e40 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 66 6f  annot be used fo
25e50 72 20 74 68 65 20 71 75 65 72 79 2c 20 74 68 65  r the query, the
25e60 6e 0a 74 68 65 20 70 72 65 70 61 72 61 74 69 6f  n.the preparatio
25e70 6e 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61  n of the SQL sta
25e80 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e 28  tement fails..^(
25e90 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58 45 44  The "NOT INDEXED
25ea0 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  " clause specifi
25eb0 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64 65 78  es that no index
25ec0 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64 20 77   shall be used w
25ed0 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20 74 68  hen.accessing th
25ee0 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c  e preceding tabl
25ef0 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70  e, including imp
25f00 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63 72 65  lied indices cre
25f10 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20 61 6e  ate by.UNIQUE an
25f20 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  d PRIMARY KEY co
25f30 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f 77 65  nstraints.  Howe
25f40 76 65 72 2c 20 74 68 65 20 49 4e 54 45 47 45 52  ver, the INTEGER
25f50 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 63 61 6e   PRIMARY KEY.can
25f60 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74   still be used t
25f70 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65  o look up entrie
25f80 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54  s even when "NOT
25f90 20 49 4e 44 45 58 45 44 22 20 69 73 20 73 70 65   INDEXED" is spe
25fa0 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c  cified.)^</p>..<
25fb0 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62  p>Some SQL datab
25fc0 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76  ase engines prov
25fd0 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  ide non-standard
25fe0 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73   "hint" mechanis
25ff0 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20  ms which.can be 
26000 75 73 65 64 20 74 6f 20 67 69 76 65 20 74 68 65  used to give the
26010 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
26020 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61   clues about wha
26030 74 20 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f  t indices it sho
26040 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61  uld.use for a pa
26050 72 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65  rticular stateme
26060 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42  nt.  The INDEX B
26070 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69  Y clause of SQLi
26080 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f  te is .<em>not</
26090 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65  em> a hinting me
260a0 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73  chanism and it s
260b0 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65  hould not be use
260c0 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20  d as such..^The 
260d0 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
260e0 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20  e does not give 
260f0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69  the optimizer hi
26100 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63 68 20  nts about which 
26110 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74  index.to use; it
26120 20 67 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d   gives the optim
26130 69 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d 65  izer a requireme
26140 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65  nt of which inde
26150 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68  x to use..^If th
26160 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
26170 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75  r is unable to u
26180 73 65 20 74 68 65 20 69 6e 64 65 78 20 73 70 65  se the index spe
26190 63 69 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e  cified by the.IN
261a0 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DEX BY clause, t
261b0 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 77 69  hen the query wi
261c0 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
261d0 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  error.</p>..<p>T
261e0 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
261f0 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c  ause is <em>not<
26200 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f  /em> intended fo
26210 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a  r use in tuning.
26220 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  the performance 
26230 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68 65  of a query.  The
26240 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49   intent of the I
26250 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
26260 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72   is.to raise a r
26270 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66  un-time error if
26280 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65   a schema change
26290 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70 70 69  , such as droppi
262a0 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61  ng or.creating a
262b0 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20  n index, causes 
262c0 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66  the query plan f
262d0 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74  or a time-sensit
262e0 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61  ive query.to cha
262f0 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45  nge.  The INDEXE
26300 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 64  D BY clause is d
26310 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20  esigned to help 
26320 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62  detect.undesirab
26330 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68  le query plan ch
26340 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65 67  anges during reg
26350 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e  ression testing.
26360 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20  .Developers are 
26370 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d  admonished to om
26380 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e  it all use of IN
26390 44 45 58 45 44 20 42 59 20 64 75 72 69 6e 67 0a  DEXED BY during.
263a0 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 69  application desi
263b0 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  gn, implementati
263c0 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e 64  on, testing, and
263d0 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44   tuning.  If.IND
263e0 45 58 45 44 20 42 59 20 69 73 20 74 6f 20 62 65  EXED BY is to be
263f0 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69 74   used at all, it
26400 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65 72   should be inser
26410 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 0a  ted at the very.
26420 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65 6c  end of the devel
26430 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20 77  opment process w
26440 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77  hen "locking dow
26450 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e  n" a design.</p>
26460 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c  ..<h3>See Also:<
26470 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 5b 73 71  /h3>..<p>The [sq
26480 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75  lite3_stmt_statu
26490 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72  s()] C/C++ inter
264a0 66 61 63 65 20 74 6f 67 65 74 68 65 72 20 77 69  face together wi
264b0 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53  th the.[SQLITE_S
264c0 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43  TMTSTATUS_FULLSC
264d0 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53 51  AN_STEP] and [SQ
264e0 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
264f0 53 4f 52 54 5d 20 76 65 72 62 73 0a 63 61 6e 20  SORT] verbs.can 
26500 62 65 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  be used to detec
26510 74 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 77 68  t at run-time wh
26520 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  en an SQL statem
26530 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e  ent is not.makin
26540 67 20 65 66 66 65 63 74 69 76 65 20 75 73 65 20  g effective use 
26550 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e  of indices.  Man
26560 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d  y applications m
26570 61 79 20 70 72 65 66 65 72 20 74 6f 0a 75 73 65  ay prefer to.use
26580 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74   the [sqlite3_st
26590 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74  mt_status()] int
265a0 65 72 66 61 63 65 20 74 6f 20 64 65 74 65 63 74  erface to detect
265b0 20 69 6e 64 65 78 20 6d 69 73 75 73 65 0a 72 61   index misuse.ra
265c0 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 49 4e  ther than the IN
265d0 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
265e0 64 65 73 63 72 69 62 65 64 20 68 65 72 65 2e 3c  described here.<
265f0 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
26600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 23 20 41 20 6c 69 73  ########.# A lis
26650 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20  t of keywords.  
26660 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72  A asterisk occur
26670 73 20 61 66 74 65 72 20 74 68 65 20 6b 65 79 77  s after the keyw
26680 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a  ord if it is on.
26690 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c  # the fallback l
266a0 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f  ist..#.set keywo
266b0 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b  rd_list [lsort {
266c0 0a 20 20 20 41 42 4f 52 54 0a 20 20 20 41 43 54  .   ABORT.   ACT
266d0 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20 41 46  ION.   ADD.   AF
266e0 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c  TER.   ALL.   AL
266f0 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a 20  TER.   ANALYZE. 
26700 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41    AND.   AS.   A
26710 53 43 0a 20 20 20 41 54 54 41 43 48 0a 20 20 20  SC.   ATTACH.   
26720 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
26730 20 42 45 46 4f 52 45 0a 20 20 20 42 45 47 49 4e   BEFORE.   BEGIN
26740 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20 42  .   BETWEEN.   B
26750 59 0a 20 20 20 43 41 53 43 41 44 45 0a 20 20 20  Y.   CASCADE.   
26760 43 41 53 45 0a 20 20 20 43 41 53 54 0a 20 20 20  CASE.   CAST.   
26770 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45  CHECK.   COLLATE
26780 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f  .   COLUMN.   CO
26790 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54  MMIT.   CONFLICT
267a0 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20  .   CONSTRAINT. 
267b0 20 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53    CREATE.   CROS
267c0 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41 54  S.   CURRENT_DAT
267d0 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  E.   CURRENT_TIM
267e0 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  E.   CURRENT_TIM
267f0 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41 42 41  ESTAMP.   DATABA
26800 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a 20 20  SE.   DEFAULT.  
26810 20 44 45 46 45 52 52 45 44 0a 20 20 20 44 45 46   DEFERRED.   DEF
26820 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45 54  ERRABLE.   DELET
26830 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44 45 54  E.   DESC.   DET
26840 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43 54 0a  ACH.   DISTINCT.
26850 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20     DROP.   END. 
26860 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45 0a 20    EACH.   ELSE. 
26870 20 20 45 53 43 41 50 45 0a 20 20 20 45 58 43 45    ESCAPE.   EXCE
26880 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45 0a  PT.   EXCLUSIVE.
26890 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58 50     EXISTS.   EXP
268a0 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20 20  LAIN.   FAIL.   
268b0 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20  FOR.   FOREIGN. 
268c0 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20    FROM.   FULL. 
268d0 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50 0a    GLOB.   GROUP.
268e0 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46 0a     HAVING.   IF.
268f0 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d 4d     IGNORE.   IMM
26900 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20 20 20  EDIATE.   IN.   
26910 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45 44  INDEX.   INDEXED
26920 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20 20  .   INITIALLY.  
26930 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52 54   INNER.   INSERT
26940 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20 20 49  .   INSTEAD.   I
26950 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54 4f  NTERSECT.   INTO
26960 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c  .   IS.   ISNULL
26970 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a  .   JOIN.   KEY.
26980 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45 0a     LEFT.   LIKE.
26990 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43     LIMIT.   MATC
269a0 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20 20  H.   NATURAL.   
269b0 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54  NO.   NOT.   NOT
269c0 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20  NULL.   NULL.   
269d0 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20 20  OF.   OFFSET.   
269e0 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45  ON.   OR.   ORDE
269f0 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50 4c  R.   OUTER.   PL
26a00 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20 20 20  AN.   PRAGMA.   
26a10 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52 59  PRIMARY.   QUERY
26a20 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52 45 46  .   RAISE.   REF
26a30 45 52 45 4e 43 45 53 0a 20 20 20 52 45 47 45 58  ERENCES.   REGEX
26a40 50 0a 20 20 20 52 45 49 4e 44 45 58 0a 20 20 20  P.   REINDEX.   
26a50 52 45 4c 45 41 53 45 0a 20 20 20 52 45 4e 41 4d  RELEASE.   RENAM
26a60 45 0a 20 20 20 52 45 50 4c 41 43 45 0a 20 20 20  E.   REPLACE.   
26a70 52 45 53 54 52 49 43 54 0a 20 20 20 52 49 47 48  RESTRICT.   RIGH
26a80 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20  T.   ROLLBACK.  
26a90 20 52 4f 57 0a 20 20 20 53 41 56 45 50 4f 49 4e   ROW.   SAVEPOIN
26aa0 54 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53  T.   SELECT.   S
26ab0 45 54 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54  ET.   TABLE.   T
26ac0 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41 52 59  EMP.   TEMPORARY
26ad0 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20  .   THEN.   TO. 
26ae0 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20    TRANSACTION.  
26af0 20 54 52 49 47 47 45 52 0a 20 20 20 55 4e 49 4f   TRIGGER.   UNIO
26b00 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20 55  N.   UNIQUE.   U
26b10 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a 20  PDATE.   USING. 
26b20 20 20 56 41 43 55 55 4d 0a 20 20 20 56 41 4c 55    VACUUM.   VALU
26b30 45 53 0a 20 20 20 56 49 45 57 0a 20 20 20 56 49  ES.   VIEW.   VI
26b40 52 54 55 41 4c 0a 20 20 20 57 48 45 4e 0a 20 20  RTUAL.   WHEN.  
26b50 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75   WHERE.}]..hd_pu
26b60 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22  ts {<DIV class="
26b70 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53  pdf_section">}.S
26b80 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b  ection {SQLite K
26b90 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64  eywords} keyword
26ba0 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72 64  s {{*SQL keyword
26bb0 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d  } {SQL keywords}
26bc0 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49 56  }.hd_puts {</DIV
26bd0 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  >}.</tcl>..<p>Th
26be0 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 73  e SQL standard s
26bf0 70 65 63 69 66 69 65 73 20 61 20 68 75 67 65 20  pecifies a huge 
26c00 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f 72  number of keywor
26c10 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f 74  ds which may not
26c20 0a 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20  .be used as the 
26c30 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73 2c  names of tables,
26c40 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d 6e   indices, column
26c50 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75 73  s, databases, us
26c60 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63 74  er-defined.funct
26c70 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73  ions, collations
26c80 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  , virtual table 
26c90 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79 20  modules, or any 
26ca0 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a 65  other named obje
26cb0 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66 20  ct..The list of 
26cc0 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20 6c  keywords is so l
26cd0 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70 65 6f  ong that few peo
26ce0 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65 72  ple can remember
26cf0 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d   them all..For m
26d00 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79 6f  ost SQL code, yo
26d10 75 72 20 73 61 66 65 73 74 20 62 65 74 20 69 73  ur safest bet is
26d20 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61 6e   to never use an
26d30 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  y English langua
26d40 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20 6e  ge.word as the n
26d50 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64 65  ame of a user-de
26d60 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70  fined object.</p
26d70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e  >..<p>If you wan
26d80 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77 6f  t to use a keywo
26d90 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f  rd as a name, yo
26da0 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65 20  u need to quote 
26db0 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20 66  it.  There.are f
26dc0 6f 75 72 20 77 61 79 73 20 6f 66 20 71 75 6f 74  our ways of quot
26dd0 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  ing keywords in 
26de0 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e  SQLite:</p>..<p>
26df0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
26e00 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76  able>.<tr>.<td v
26e10 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27  align="top"><b>'
26e20 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64  keyword'</b></td
26e30 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
26e40 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
26e50 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 20  yword in single 
26e60 71 75 6f 74 65 73 20 69 73 20 61 20 73 74 72 69  quotes is a stri
26e70 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e  ng literal.</td>
26e80 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20  </tr>..<tr>.<td 
26e90 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
26ea0 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74  "keyword"</b></t
26eb0 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64  d><td></td>..<td
26ec0 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 64  >^A keyword in d
26ed0 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73 20  ouble-quotes is 
26ee0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f  an identifier.</
26ef0 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c  td></tr>..<tr>.<
26f00 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
26f10 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64 26  <b>&#91;keyword&
26f20 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  #93;</b></td><td
26f30 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
26f40 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20  eyword enclosed 
26f50 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65  in square bracke
26f60 74 73 20 69 73 20 0a 20 20 20 20 20 20 20 20 61  ts is .        a
26f70 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54  n identifier.  T
26f80 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64  his is not stand
26f90 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71  ard SQL.  This q
26fa0 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  uoting mechanism
26fb0 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64  .        is used
26fc0 20 62 79 20 4d 53 20 41 63 63 65 73 73 20 61 6e   by MS Access an
26fd0 64 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e 64  d SQL Server and
26fe0 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
26ff0 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20  SQLite for.     
27000 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79     compatibility
27010 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  .</td></tr>..<tr
27020 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
27030 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f  p"><b>&#96;keywo
27040 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e  rd&#96;</b></td>
27050 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e  <td></td>..<td>^
27060 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73  A keyword enclos
27070 65 64 20 69 6e 20 67 72 61 76 65 20 61 63 63 65  ed in grave acce
27080 6e 74 73 20 28 41 53 43 49 49 20 63 6f 64 65 20  nts (ASCII code 
27090 39 36 29 20 69 73 20 0a 20 20 20 20 20 20 20 20  96) is .        
270a0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20  an identifier.  
270b0 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e  This is not stan
270c0 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20  dard SQL.  This 
270d0 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73  quoting mechanis
270e0 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65  m.        is use
270f0 64 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20 69  d by MySQL and i
27100 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51  s included in SQ
27110 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20  Lite for.       
27120 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c   compatibility.<
27130 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  /td></tr>.</tabl
27140 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
27150 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65  .</p>..<p>For re
27160 73 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63 6f  silience when co
27170 6e 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68 69  nfronted with hi
27180 73 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74 61  storical SQL sta
27190 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a  tements, SQLite.
271a0 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62  will sometimes b
271b0 65 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67 20  end the quoting 
271c0 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e  rules above:</p>
271d0 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49  ..<ul>.<li><p>^I
271e0 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 73  f a keyword in s
271f0 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28 65 78  ingle.quotes (ex
27200 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f  : <b>'key'</b> o
27210 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29  r <b>'glob'</b>)
27220 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f   is used in a co
27230 6e 74 65 78 74 20 77 68 65 72 65 0a 61 6e 20 69  ntext where.an i
27240 64 65 6e 74 69 66 69 65 72 20 69 73 20 61 6c 6c  dentifier is all
27250 6f 77 65 64 20 62 75 74 20 77 68 65 72 65 20 61  owed but where a
27260 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
27270 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20  is not allowed, 
27280 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69  then.the token i
27290 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20  s understood to 
272a0 62 65 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  be an identifier
272b0 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73 74   instead of a st
272c0 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f  ring literal..</
272d0 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
272e0 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e  ^If a keyword in
272f0 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20 28   double.quotes (
27300 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e  ex: <b>"key"</b>
27310 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62   or <b>"glob"</b
27320 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20  >) is used in a 
27330 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 69 74  context where.it
27340 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c   cannot be resol
27350 76 65 64 20 74 6f 20 61 6e 20 69 64 65 6e 74 69  ved to an identi
27360 66 69 65 72 20 62 75 74 20 77 68 65 72 65 20 61  fier but where a
27370 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a   string literal.
27380 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e  is allowed, then
27390 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e   the token is un
273a0 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61  derstood to be a
273b0 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
273c0 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20 69 64  instead.of an id
273d0 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c  entifier.</p></l
273e0 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f  i>.</ul>..<p>Pro
273f0 67 72 61 6d 6d 65 72 73 20 61 72 65 20 63 61 75  grammers are cau
27400 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75 73  tioned not to us
27410 65 20 74 68 65 20 74 77 6f 20 65 78 63 65 70 74  e the two except
27420 69 6f 6e 73 20 64 65 73 63 72 69 62 65 64 20 69  ions described i
27430 6e 0a 74 68 65 20 70 72 65 76 69 6f 75 73 20 62  n.the previous b
27440 75 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d 70 68  ullets.  We emph
27450 61 73 69 7a 65 20 74 68 61 74 20 74 68 65 79 20  asize that they 
27460 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74 68  exist only so th
27470 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66  at old.and ill-f
27480 6f 72 6d 65 64 20 53 51 4c 20 73 74 61 74 65 6d  ormed SQL statem
27490 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20 63 6f  ents will run co
274a0 72 72 65 63 74 6c 79 2e 20 20 46 75 74 75 72 65  rrectly.  Future
274b0 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c   versions of.SQL
274c0 69 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65  ite might change
274d0 20 74 6f 20 72 61 69 73 65 20 65 72 72 6f 72 73   to raise errors
274e0 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 63 65   instead of acce
274f0 70 74 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f 72  pting the malfor
27500 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74 73 20 63  med.statements c
27510 6f 76 65 72 65 64 20 62 79 20 74 68 65 20 65 78  overed by the ex
27520 63 65 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e 3c  ceptions above.<
27530 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20  /p>..<p>.SQLite 
27540 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72 64  adds new keyword
27550 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74  s from time to t
27560 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b 65  ime when it take
27570 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72 65  s on new feature
27580 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e 74  s..So to prevent
27590 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d 20   your code from 
275a0 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79 20  being broken by 
275b0 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65  future enhanceme
275c0 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64 0a  nts, you should.
275d0 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20 61  normally quote a
275e0 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74 68  ny identifier th
275f0 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73 68  at is an English
27600 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c 20   language word, 
27610 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20 6e  even if.you do n
27620 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e  ot have to..</p>
27630 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20 62  ..<p>.The list b
27640 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20 70  elow shows all p
27650 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f 72 64 73  ossible keywords
27660 20 75 73 65 64 20 62 79 20 61 6e 79 20 62 75 69   used by any bui
27670 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20 72 65 67  ld of.SQLite reg
27680 61 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d 70  ardless of [comp
27690 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
276a0 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f 6e  ].  .Most reason
276b0 61 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74 69  able configurati
276c0 6f 6e 73 20 75 73 65 20 6d 6f 73 74 20 6f 72 20  ons use most or 
276d0 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b 65 79  all of these key
276e0 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65 20  words,.but some 
276f0 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 62 65 20  keywords may be 
27700 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 53 51 4c  omitted when SQL
27710 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75 72   language featur
27720 65 73 20 61 72 65 0a 64 69 73 61 62 6c 65 64 2e  es are.disabled.
27730 0a 5e 28 52 65 67 61 72 64 6c 65 73 73 20 6f 66  .^(Regardless of
27740 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   the compile-tim
27750 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  e configuration,
27760 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20   any identifier 
27770 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e 0a 74  that is not on.t
27780 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63  he following <tc
27790 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65 6e 67  l>hd_puts [lleng
277a0 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74  th $keyword_list
277b0 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a  ]</tcl> element.
277c0 6c 69 73 74 20 69 73 20 6e 6f 74 20 61 20 6b 65  list is not a ke
277d0 79 77 6f 72 64 20 74 6f 20 74 68 65 20 53 51 4c  yword to the SQL
277e0 20 70 61 72 73 65 72 20 69 6e 20 53 51 4c 69 74   parser in SQLit
277f0 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  e:.</p>..<blockq
27800 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 77 69 64  uote>.<table wid
27810 74 68 3d 22 31 30 30 25 22 3e 3c 74 72 3e 0a 3c  th="100%"><tr>.<
27820 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22 20  td align="left" 
27830 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77 69 64  valign="top" wid
27840 74 68 3d 22 32 30 25 22 3e 0a 3c 74 63 6c 3e 0a  th="20%">.<tcl>.
27850 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24  set n [llength $
27860 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73 65  keyword_list].se
27870 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52 6f  t nCol 5.set nRo
27880 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e 43  w [expr {($n+$nC
27890 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65  ol-1)/$nCol}].se
278a0 74 20 69 20 30 0a 66 6f 72 65 61 63 68 20 77 6f  t i 0.foreach wo
278b0 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74  rd $keyword_list
278c0 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e 52   {.  if {$i==$nR
278d0 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70 75 74  ow} {.    hd_put
278e0 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c 69  s "</td><td vali
278f0 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e  gn=\"top\" align
27900 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68 3d  =\"left\" width=
27910 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73 65  \"20%\">".    se
27920 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20 7b  t i 1.  } else {
27930 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d 0a  .    incr i.  }.
27940 20 20 68 64 5f 70 75 74 73 20 22 24 77 6f 72 64    hd_puts "$word
27950 3c 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e  <br>\n".}.</tcl>
27960 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62  .</td></tr></tab
27970 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  le></blockquote>
27980 29 5e 0a                                         )^.