Documentation Source Text

Hex Artifact Content
Login

Artifact a2f34e21b5c744b20a718104e99894a5fa26973c:


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 43 48 45 43 4b 20   adding a CHECK 
1700: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20  constraint, the 
1710: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
1720: 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61  .is not tested a
1730: 67 61 69 6e 73 74 20 70 72 65 65 78 69 73 74 69  gainst preexisti
1740: 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74  ng rows of the t
1750: 61 62 6c 65 2e 0a 5e 54 68 69 73 20 63 61 6e 20  able..^This can 
1760: 72 65 73 75 6c 74 20 69 6e 20 61 20 74 61 62 6c  result in a tabl
1770: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1780: 64 61 74 61 20 74 68 61 74 0a 69 73 20 69 6e 20  data that.is in 
1790: 76 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65  violation of the
17a0: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
17b0: 74 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69  t.  Future versi
17c0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69  ons of SQLite mi
17d0: 67 68 74 0a 63 68 61 6e 67 65 20 74 6f 20 76 61  ght.change to va
17e0: 6c 69 64 61 74 65 20 43 48 45 43 4b 20 63 6f 6e  lidate CHECK con
17f0: 73 74 72 61 69 6e 74 73 20 61 73 20 74 68 65 79  straints as they
1800: 20 61 72 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a   are added.</p>.
1810: 0a 3c 70 3e 20 54 68 65 20 65 78 65 63 75 74 69  .<p> The executi
1820: 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65 20 41  on time of the A
1830: 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61  LTER TABLE comma
1840: 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64 65 6e  nd is independen
1850: 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20  t of.the amount 
1860: 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65 20 74  of data in the t
1870: 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54 45 52  able.  The ALTER
1880: 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72   TABLE command r
1890: 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f  uns as quickly.o
18a0: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 31  n a table with 1
18b0: 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61  0 million rows a
18c0: 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61 20 74  s it does on a t
18d0: 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f 77 2e  able with 1 row.
18e0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20  .</p>..<p>After 
18f0: 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62  ADD COLUMN has b
1900: 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64 61 74  een run on a dat
1910: 61 62 61 73 65 2c 20 74 68 61 74 20 64 61 74 61  abase, that data
1920: 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65  base will not.be
1930: 20 72 65 61 64 61 62 6c 65 20 62 79 20 53 51 4c   readable by SQL
1940: 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e  ite version 3.1.
1950: 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f  3 and earlier.</
1960: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 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 0a 53 65 63 74 69 6f 6e  ########.Section
19c0: 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79   {ANALYZE} analy
19d0: 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a 42 75 62 62  ze ANALYZE..Bubb
19e0: 6c 65 44 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a  leDiagram analyz
19f0: 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  e-stmt 1.</tcl>.
1a00: 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c 59 5a  .<p> ^The ANALYZ
1a10: 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68 65 72  E command gather
1a20: 73 20 73 74 61 74 69 73 74 69 63 73 20 61 62 6f  s statistics abo
1a30: 75 74 20 69 6e 64 69 63 65 73 20 61 6e 64 20 73  ut indices and s
1a40: 74 6f 72 65 73 20 74 68 65 6d 0a 69 6e 20 61 20  tores them.in a 
1a50: 73 70 65 63 69 61 6c 20 74 61 62 6c 65 73 20 69  special tables i
1a60: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
1a70: 68 65 72 65 20 74 68 65 20 71 75 65 72 79 20 6f  here the query o
1a80: 70 74 69 6d 69 7a 65 72 20 63 61 6e 20 75 73 65  ptimizer can use
1a90: 0a 74 68 65 6d 20 74 6f 20 68 65 6c 70 20 6d 61  .them to help ma
1aa0: 6b 65 20 62 65 74 74 65 72 20 69 6e 64 65 78 20  ke better index 
1ab0: 63 68 6f 69 63 65 73 2e 0a 5e 49 66 20 6e 6f 20  choices..^If no 
1ac0: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67 69  arguments are gi
1ad0: 76 65 6e 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73  ven, all indices
1ae0: 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   in all attached
1af0: 20 64 61 74 61 62 61 73 65 73 20 61 72 65 0a 61   databases are.a
1b00: 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 61 20  nalyzed.  ^If a 
1b10: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73  database name is
1b20: 20 67 69 76 65 6e 20 61 73 20 74 68 65 20 61 72   given as the ar
1b30: 67 75 6d 65 6e 74 2c 20 61 6c 6c 20 69 6e 64 69  gument, all indi
1b40: 63 65 73 0a 69 6e 20 74 68 61 74 20 6f 6e 65 20  ces.in that one 
1b50: 64 61 74 61 62 61 73 65 20 61 72 65 20 61 6e 61  database are ana
1b60: 6c 79 7a 65 64 2e 20 20 5e 49 66 20 74 68 65 20  lyzed.  ^If the 
1b70: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 74 61  argument is a ta
1b80: 62 6c 65 20 6e 61 6d 65 2c 0a 74 68 65 6e 20 6f  ble name,.then o
1b90: 6e 6c 79 20 69 6e 64 69 63 65 73 20 61 73 73 6f  nly indices asso
1ba0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
1bb0: 20 6f 6e 65 20 74 61 62 6c 65 20 61 72 65 20 61   one table are a
1bc0: 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  nalyzed.</p>..<p
1bd0: 3e 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 69  > ^The default i
1be0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74  mplementation st
1bf0: 6f 72 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74  ores all statist
1c00: 69 63 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a  ics in a single.
1c10: 74 61 62 6c 65 20 6e 61 6d 65 64 20 3c 62 3e 73  table named <b>s
1c20: 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 2e  qlite_stat1</b>.
1c30: 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20    ^If SQLite is 
1c40: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
1c50: 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e.[SQLITE_ENABLE
1c60: 5f 53 54 41 54 32 5d 20 6f 70 74 69 6f 6e 2c 20  _STAT2] option, 
1c70: 74 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20  then additional 
1c80: 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69  histogram data i
1c90: 73 0a 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20  s.collected and 
1ca0: 73 74 6f 72 65 64 20 69 6e 20 3c 62 3e 73 71 6c  stored in <b>sql
1cb0: 69 74 65 5f 73 74 61 74 32 3c 2f 62 3e 2e 0a 46  ite_stat2</b>..F
1cc0: 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e  uture enhancemen
1cd0: 74 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64  ts may create.ad
1ce0: 64 69 74 69 6f 6e 61 6c 20 74 61 62 6c 65 73 20  ditional tables 
1cf0: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61  with the same na
1d00: 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63 65 70  me pattern excep
1d10: 74 20 77 69 74 68 20 74 68 65 20 22 31 22 0a 6f  t with the "1".o
1d20: 72 20 22 32 22 20 63 68 61 6e 67 65 64 20 74 6f  r "2" changed to
1d30: 20 61 20 64 69 66 66 65 72 65 6e 74 20 64 69 67   a different dig
1d40: 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68  it.</p>..<p> ^Th
1d50: 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 63  e [DROP TABLE] c
1d60: 6f 6d 6d 61 6e 64 20 64 6f 65 73 0a 6e 6f 74 20  ommand does.not 
1d70: 77 6f 72 6b 20 6f 6e 20 74 68 65 20 3c 62 3e 73  work on the <b>s
1d80: 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 20  qlite_stat1</b> 
1d90: 6f 72 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61  or <b>sqlite_sta
1da0: 74 32 3c 2f 62 3e 20 74 61 62 6c 65 73 2c 0a 62  t2</b> tables,.b
1db0: 75 74 20 61 6c 6c 20 74 68 65 20 63 6f 6e 74 65  ut all the conte
1dc0: 6e 74 20 6f 66 20 74 68 6f 73 65 20 74 61 62 6c  nt of those tabl
1dd0: 65 73 20 63 61 6e 20 62 65 20 71 75 65 72 69 65  es can be querie
1de0: 64 20 75 73 69 6e 67 20 5b 53 45 4c 45 43 54 5d  d using [SELECT]
1df0: 0a 61 6e 64 20 63 61 6e 20 62 65 20 64 65 6c 65  .and can be dele
1e00: 74 65 64 2c 20 61 75 67 6d 65 6e 74 65 64 2c 20  ted, augmented, 
1e10: 6f 72 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e  or modified usin
1e20: 67 20 74 68 65 20 5b 44 45 4c 45 54 45 5d 2c 0a  g the [DELETE],.
1e30: 5b 49 4e 53 45 52 54 5d 2c 20 61 6e 64 20 5b 55  [INSERT], and [U
1e40: 50 44 41 54 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e  PDATE] commands.
1e50: 0a 41 70 70 72 6f 70 72 69 61 74 65 20 63 61 72  .Appropriate car
1e60: 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  e should be used
1e70: 20 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74   when changing t
1e80: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
1e90: 65 20 73 74 61 74 69 73 74 69 63 73 0a 74 61 62  e statistics.tab
1ea0: 6c 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63  les as invalid c
1eb0: 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65  ontent can cause
1ec0: 20 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63   SQLite to selec
1ed0: 74 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75  t inefficient.qu
1ee0: 65 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65  ery plans.  Gene
1ef0: 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20  rally speaking, 
1f00: 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d  one should not m
1f10: 6f 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e  odify the conten
1f20: 74 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74  t of.the statist
1f30: 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e  ics tables by an
1f40: 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65  y mechanism othe
1f50: 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20  r than invoking 
1f60: 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d  the.ANALYZE comm
1f70: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 53  and.</p>..<p> ^S
1f80: 74 61 74 69 73 74 69 63 73 20 67 61 74 68 65 72  tatistics gather
1f90: 65 64 20 62 79 20 41 4e 41 4c 59 5a 45 20 61 72  ed by ANALYZE ar
1fa0: 65 20 3c 75 3e 6e 6f 74 3c 2f 75 3e 20 61 75 74  e <u>not</u> aut
1fb0: 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74  omatically updat
1fc0: 65 64 20 61 73 0a 74 68 65 20 63 6f 6e 74 65 6e  ed as.the conten
1fd0: 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  t of the databas
1fe0: 65 20 63 68 61 6e 67 65 73 2e 20 20 49 66 20 74  e changes.  If t
1ff0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
2000: 65 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67  e database.chang
2010: 65 73 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79  es significantly
2020: 2c 20 6f 72 20 69 66 20 74 68 65 20 64 61 74 61  , or if the data
2030: 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e  base schema chan
2040: 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65 20 73 68  ges, then one sh
2050: 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20 72 65  ould.consider re
2060: 72 75 6e 6e 69 6e 67 20 74 68 65 20 41 4e 41 4c  running the ANAL
2070: 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f  YZE command in o
2080: 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 20 74  rder to update t
2090: 68 65 20 73 74 61 74 69 73 74 69 63 73 2e 3c 2f  he statistics.</
20a0: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
20b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20f0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
2100: 20 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53   {ATTACH DATABAS
2110: 45 7d 20 61 74 74 61 63 68 20 2a 41 54 54 41 43  E} attach *ATTAC
2120: 48 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  H..BubbleDiagram
2130: 20 61 74 74 61 63 68 2d 73 74 6d 74 20 31 0a 3c   attach-stmt 1.<
2140: 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20  /tcl>..<p> ^The 
2150: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20  ATTACH DATABASE 
2160: 73 74 61 74 65 6d 65 6e 74 20 61 64 64 73 20 61  statement adds a
2170: 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20  nother database 
2180: 0a 66 69 6c 65 20 74 6f 20 74 68 65 20 63 75 72  .file to the cur
2190: 72 65 6e 74 20 5b 64 61 74 61 62 61 73 65 20 63  rent [database c
21a0: 6f 6e 6e 65 63 74 69 6f 6e 5d 2e 20 0a 5e 54 68  onnection]. .^Th
21b0: 65 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 73  e database-names
21c0: 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a 27 74 65   'main' and .'te
21d0: 6d 70 27 20 72 65 66 65 72 20 74 6f 20 74 68 65  mp' refer to the
21e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 61   main database a
21f0: 6e 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  nd the database 
2200: 75 73 65 64 20 66 6f 72 20 0a 74 65 6d 70 6f 72  used for .tempor
2210: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 5e 54 68  ary tables.  ^Th
2220: 65 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20  e main and temp 
2230: 64 61 74 61 62 61 73 65 73 20 63 61 6e 6e 6f 74  databases cannot
2240: 20 62 65 20 61 74 74 61 63 68 65 64 20 6f 72 0a   be attached or.
2250: 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c  detached.</p>..<
2260: 70 3e 20 5e 28 54 61 62 6c 65 73 20 69 6e 20 61  p> ^(Tables in a
2270: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2280: 61 73 65 20 63 61 6e 20 62 65 20 72 65 66 65 72  ase can be refer
2290: 72 65 64 20 74 6f 20 75 73 69 6e 67 20 74 68 65  red to using the
22a0: 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64 61 74 61   syntax .<i>data
22b0: 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d  base-name.table-
22c0: 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e 49 66  name</i>.)^  ^If
22d0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
22e0: 20 74 61 62 6c 65 20 69 73 20 75 6e 69 71 75 65   table is unique
22f0: 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61 74 74 61  .across all atta
2300: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
2310: 6e 64 20 74 68 65 20 6d 61 69 6e 20 61 6e 64 20  nd the main and 
2320: 74 65 6d 70 20 64 61 74 61 62 61 73 65 73 2c 20  temp databases, 
2330: 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64 61 74 61  then the.<i>data
2340: 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72  base-name</i> pr
2350: 65 66 69 78 20 69 73 20 6e 6f 74 20 72 65 71 75  efix is not requ
2360: 69 72 65 64 2e 20 20 5e 49 66 20 74 77 6f 20 6f  ired.  ^If two o
2370: 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 69 6e  r more tables in
2380: 0a 64 69 66 66 65 72 65 6e 74 20 64 61 74 61 62  .different datab
2390: 61 73 65 73 20 68 61 76 65 20 74 68 65 20 73 61  ases have the sa
23a0: 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20  me name and the 
23b0: 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d  .<i>database-nam
23c0: 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20  e</i> prefix is 
23d0: 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61 20 74 61  not used on a ta
23e0: 62 6c 65 20 72 65 66 65 72 65 6e 63 65 2c 20 74  ble reference, t
23f0: 68 65 6e 20 74 68 65 0a 74 61 62 6c 65 20 63 68  hen the.table ch
2400: 6f 73 65 6e 20 69 73 20 74 68 65 20 6f 6e 65 20  osen is the one 
2410: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2420: 74 68 61 74 20 77 61 73 20 6c 65 61 73 74 20 72  that was least r
2430: 65 63 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64  ecently attached
2440: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e  .</p>..<p>.^Tran
2450: 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69  sactions involvi
2460: 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61  ng multiple atta
2470: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
2480: 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d  re atomic,.assum
2490: 69 6e 67 20 74 68 61 74 20 74 68 65 20 6d 61 69  ing that the mai
24a0: 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  n database is no
24b0: 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 61  t "[:memory:]" a
24c0: 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72 6e 61 6c  nd the .[journal
24d0: 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74 20 5b 57  _mode] is not [W
24e0: 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68 65 20 6d  AL].  ^(If the m
24f0: 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20  ain.database is 
2500: 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72 20 69 66  ":memory:" or if
2510: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64   the journal_mod
2520: 65 20 69 73 20 57 41 4c 2c 20 74 68 65 6e 20 0a  e is WAL, then .
2530: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e  transactions con
2540: 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d  tinue to be atom
2550: 69 63 20 77 69 74 68 69 6e 20 65 61 63 68 20 69  ic within each i
2560: 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61  ndividual.databa
2570: 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20  se file. But if 
2580: 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65  the host compute
2590: 72 20 63 72 61 73 68 65 73 20 69 6e 20 74 68 65  r crashes in the
25a0: 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f   middle.of a [CO
25b0: 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20  MMIT] where two 
25c0: 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65  or more database
25d0: 20 66 69 6c 65 73 20 61 72 65 20 75 70 64 61 74   files are updat
25e0: 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73  ed,.some of thos
25f0: 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65  e files might ge
2600: 74 20 74 68 65 20 63 68 61 6e 67 65 73 20 77 68  t the changes wh
2610: 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74  ere others.might
2620: 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70   not.)^.</p>..<p
2630: 3e 20 5e 54 68 65 72 65 20 69 73 20 61 20 6c 69  > ^There is a li
2640: 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67 20 5b  mit, set using [
2650: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d  sqlite3_limit()]
2660: 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c 49   and .[SQLITE_LI
2670: 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c 20 74  MIT_ATTACHED], t
2680: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
2690: 64 61 74 61 62 61 73 65 73 20 74 68 61 74 20 63  databases that c
26a0: 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65 6f  an be.simultaneo
26b0: 75 73 6c 79 20 61 74 74 61 63 68 65 64 20 74 6f  usly attached to
26c0: 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61   a single databa
26d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f  se connection.</
26e0: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
26f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2730: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
2740: 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43  n {BEGIN TRANSAC
2750: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
2760: 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49 54  n {*BEGIN COMMIT
2770: 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 42 75 62 62   ROLLBACK}..Bubb
2780: 6c 65 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d  leDiagram begin-
2790: 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72  stmt.BubbleDiagr
27a0: 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 42  am commit-stmt.B
27b0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c  ubbleDiagram rol
27c0: 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c  lback-stmt.</tcl
27d0: 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67  >..<p>.^No chang
27e0: 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  es can be made t
27f0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65  o the database e
2800: 78 63 65 70 74 20 77 69 74 68 69 6e 20 61 20 74  xcept within a t
2810: 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79  ransaction..^Any
2820: 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68   command that ch
2830: 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62 61  anges the databa
2840: 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61  se (basically, a
2850: 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f  ny SQL command.o
2860: 74 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45 43  ther than [SELEC
2870: 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  T]) will automat
2880: 69 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74  ically start a t
2890: 72 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e  ransaction if.on
28a0: 65 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79  e is not already
28b0: 20 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41 75   in effect.  ^Au
28c0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72  tomatically star
28d0: 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ted transactions
28e0: 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 77  .are committed w
28f0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75 65  hen the last que
2900: 72 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70  ry finishes..</p
2910: 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74  >..<p>.^Transact
2920: 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72  ions can be star
2930: 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69  ted manually usi
2940: 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d  ng the BEGIN.com
2950: 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74 72  mand.  ^(Such tr
2960: 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c  ansactions usual
2970: 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c  ly persist until
2980: 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54   the next.COMMIT
2990: 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d   or ROLLBACK com
29a0: 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61  mand.  But a tra
29b0: 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c  nsaction will al
29c0: 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20  so .ROLLBACK if 
29d0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
29e0: 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20  closed or if an 
29f0: 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64  error occurs.and
2a00: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
2a10: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
2a20: 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73  n algorithm is s
2a30: 70 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65 20  pecified.)^.See 
2a40: 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  the documentatio
2a50: 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e  n on the [ON CON
2a60: 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f  FLICT].clause fo
2a70: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
2a80: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
2a90: 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66  he ROLLBACK.conf
2aa0: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
2ab0: 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a  algorithm..</p>.
2ac0: 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41  .<p>.^END TRANSA
2ad0: 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61  CTION is an alia
2ae0: 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f  s for COMMIT..</
2af0: 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61  p>..<p> ^(Transa
2b00: 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20 75  ctions created u
2b10: 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d  sing BEGIN...COM
2b20: 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e  MIT do not nest.
2b30: 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20 74  )^.^For nested t
2b40: 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65  ransactions, use
2b50: 20 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d   the [SAVEPOINT]
2b60: 20 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63   and [RELEASE] c
2b70: 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f  ommands..The "TO
2b80: 20 53 41 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61   SAVEPOINT <i>na
2b90: 6d 65 3c 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f  me</i>" clause o
2ba0: 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  f the ROLLBACK c
2bb0: 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20  ommand shown.in 
2bc0: 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72  the syntax diagr
2bd0: 61 6d 20 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79  am above is only
2be0: 20 61 70 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b   applicable to [
2bf0: 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73  SAVEPOINT].trans
2c00: 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e 20 61 74  actions.  ^An at
2c10: 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20  tempt to invoke 
2c20: 74 68 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e  the BEGIN comman
2c30: 64 20 77 69 74 68 69 6e 0a 61 20 74 72 61 6e 73  d within.a trans
2c40: 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c  action will fail
2c50: 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2c 20   with an error, 
2c60: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
2c70: 65 74 68 65 72 0a 74 68 65 20 74 72 61 6e 73 61  ether.the transa
2c80: 63 74 69 6f 6e 20 77 61 73 20 73 74 61 72 74 65  ction was starte
2c90: 64 20 62 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d  d by [SAVEPOINT]
2ca0: 20 6f 72 20 61 20 70 72 69 6f 72 20 42 45 47 49   or a prior BEGI
2cb0: 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49 54 20 63  N..^The COMMIT c
2cc0: 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68 65 20 52  ommand and the R
2cd0: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
2ce0: 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f 20 63  without the TO c
2cf0: 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68 65 20 73  lause.work the s
2d00: 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e  ame on [SAVEPOIN
2d10: 54 5d 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  T] transactions 
2d20: 61 73 20 74 68 65 79 20 64 6f 20 77 69 74 68 20  as they do with 
2d30: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61  transactions.sta
2d40: 72 74 65 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f  rted by BEGIN.</
2d50: 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  p>..<p>.^Transac
2d60: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66  tions can be def
2d70: 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65  erred, immediate
2d80: 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20  , or exclusive. 
2d90: 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74   .^The default t
2da0: 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76  ransaction behav
2db0: 69 6f 72 20 69 73 20 64 65 66 65 72 72 65 64 2e  ior is deferred.
2dc0: 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73  .^Deferred means
2dd0: 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61   that no locks a
2de0: 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74  re acquired.on t
2df0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
2e00: 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  l the database i
2e10: 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65 64  s first accessed
2e20: 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a  .  ^Thus with a.
2e30: 64 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63  deferred transac
2e40: 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20  tion, the BEGIN 
2e50: 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66  statement itself
2e60: 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f   does nothing to
2e70: 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e   the.filesystem.
2e80: 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74    ^Locks.are not
2e90: 20 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20   acquired until 
2ea0: 74 68 65 20 66 69 72 73 74 20 72 65 61 64 20 6f  the first read o
2eb0: 72 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f  r write operatio
2ec0: 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 72  n.  ^The first r
2ed0: 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67  ead.operation ag
2ee0: 61 69 6e 73 74 20 61 20 64 61 74 61 62 61 73 65  ainst a database
2ef0: 20 63 72 65 61 74 65 73 20 61 20 5b 53 48 41 52   creates a [SHAR
2f00: 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65  ED] lock and the
2f10: 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65   first.write ope
2f20: 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61  ration creates a
2f30: 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b   [RESERVED] lock
2f40: 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74 68 65  .   ^Because the
2f50: 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a   acquisition of.
2f60: 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72 65  locks is deferre
2f70: 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65  d until they are
2f80: 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20 70   needed, it is p
2f90: 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
2fa0: 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70  ther.thread or p
2fb0: 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65  rocess could cre
2fc0: 61 74 65 20 61 20 73 65 70 61 72 61 74 65 20 74  ate a separate t
2fd0: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77  ransaction and w
2fe0: 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61  rite to.the data
2ff0: 62 61 73 65 20 61 66 74 65 72 20 74 68 65 20 42  base after the B
3000: 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72  EGIN on the curr
3010: 65 6e 74 20 74 68 72 65 61 64 20 68 61 73 20 65  ent thread has e
3020: 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65  xecuted..^If the
3030: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
3040: 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20  immediate, then 
3050: 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73  [RESERVED] locks
3060: 0a 61 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e  .are acquired on
3070: 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61   all databases a
3080: 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45  s soon as the BE
3090: 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65  GIN command is.e
30a0: 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74  xecuted, without
30b0: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65   waiting for the
30c0: 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 20  .database to be 
30d0: 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20  used.  ^After a 
30e0: 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c  BEGIN IMMEDIATE,
30f0: 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61   .no other [data
3100: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
3110: 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f   will be able to
3120: 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 64 61   write to the da
3130: 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42  tabase or.do a B
3140: 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f  EGIN IMMEDIATE o
3150: 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56  r BEGIN EXCLUSIV
3160: 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65  E.  ^Other proce
3170: 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75  sses can continu
3180: 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74  e.to read from t
3190: 68 65 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77  he database, how
31a0: 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75  ever.  ^An exclu
31b0: 73 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  sive transaction
31c0: 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49   causes.[EXCLUSI
31d0: 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20  VE] locks to be 
31e0: 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20  acquired on all 
31f0: 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74  databases.  ^Aft
3200: 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55  er a BEGIN.EXCLU
3210: 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b  SIVE, no other [
3220: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
3230: 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20  ion] except for 
3240: 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65  [read_uncommitte
3250: 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77  d].connections w
3260: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72  ill be able to r
3270: 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
3280: 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f   and no other co
3290: 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74  nnection without
32a0: 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20  .exception will 
32b0: 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65  be able to write
32c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
32d0: 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74  til the transact
32e0: 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e  ion is.complete.
32f0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20  .</p>..<p>.^(An 
3300: 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63  implicit transac
3310: 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74  tion (a transact
3320: 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74 61 72  ion that is star
3330: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
3340: 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63  y,.not a transac
3350: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20  tion started by 
3360: 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74  BEGIN) is commit
3370: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
3380: 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20  y when.the last 
3390: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
33a0: 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74   finishes.  A st
33b0: 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73  atement finishes
33c0: 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72   when its.prepar
33d0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
33e0: 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29  [sqlite3_reset()
33f0: 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71   | reset] or.[sq
3400: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
3410: 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20   | finalized].  
3420: 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33  An open [sqlite3
3430: 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a  _blob] used for.
3440: 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42  incremental BLOB
3450: 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61   I/O counts as a
3460: 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61  n unfinished sta
3470: 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71  tement.  The [sq
3480: 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69  lite3_blob].fini
3490: 73 68 65 73 20 77 68 65 6e 20 69 74 20 69 73 20  shes when it is 
34a0: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c  [sqlite3_blob_cl
34b0: 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e  ose() | closed].
34c0: 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68  )^.</p>..<p>.^Th
34d0: 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49  e explicit COMMI
34e0: 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69  T command runs i
34f0: 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e  mmediately, even
3500: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 70 65   if there are.pe
3510: 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73  nding [SELECT] s
3520: 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77  tatements.  ^How
3530: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
3540: 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65  re pending.write
3550: 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65   operations, the
3560: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a   COMMIT command.
3570: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
3580: 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c   error code [SQL
3590: 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a  ITE_BUSY]..</p>.
35a0: 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74  .<p>.^An attempt
35b0: 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d   to execute COMM
35c0: 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72 65  IT might also re
35d0: 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49  sult in an [SQLI
35e0: 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e 20  TE_BUSY] return 
35f0: 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68  code.if an anoth
3600: 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f  er thread or pro
3610: 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61 72  cess has a [shar
3620: 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20  ed lock] on the 
3630: 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70 72  database.that pr
3640: 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74 61  evented the data
3650: 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20  base from being 
3660: 75 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e 20  updated.  ^When 
3670: 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20  COMMIT fails in 
3680: 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72  this.way, the tr
3690: 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e  ansaction remain
36a0: 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68 65  s active and the
36b0: 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72   COMMIT can be r
36c0: 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74  etried later.aft
36d0: 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68 61  er the reader ha
36e0: 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20 74  s had a chance t
36f0: 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c  o clear..</p>..<
3700: 70 3e 0a 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b  p>.^The ROLLBACK
3710: 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
3720: 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53  an error code [S
3730: 51 4c 49 54 45 5f 42 55 53 59 5d 20 69 66 20 74  QLITE_BUSY] if t
3740: 68 65 72 65 0a 61 72 65 20 61 6e 79 20 70 65 6e  here.are any pen
3750: 64 69 6e 67 20 71 75 65 72 69 65 73 2e 20 20 5e  ding queries.  ^
3760: 42 6f 74 68 20 72 65 61 64 2d 6f 6e 6c 79 20 61  Both read-only a
3770: 6e 64 20 72 65 61 64 2f 77 72 69 74 65 20 71 75  nd read/write qu
3780: 65 72 69 65 73 20 77 69 6c 6c 0a 63 61 75 73 65  eries will.cause
3790: 20 61 20 52 4f 4c 4c 42 41 43 4b 20 74 6f 20 66   a ROLLBACK to f
37a0: 61 69 6c 2e 20 20 41 20 52 4f 4c 4c 42 41 43 4b  ail.  A ROLLBACK
37b0: 20 6d 75 73 74 20 66 61 69 6c 20 69 66 20 74 68   must fail if th
37c0: 65 72 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a  ere are pending.
37d0: 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 20  read operations 
37e0: 28 75 6e 6c 69 6b 65 20 43 4f 4d 4d 49 54 20 77  (unlike COMMIT w
37f0: 68 69 63 68 20 63 61 6e 20 73 75 63 63 65 65 64  hich can succeed
3800: 29 20 62 65 63 61 75 73 65 20 62 61 64 20 74 68  ) because bad th
3810: 69 6e 67 73 0a 77 69 6c 6c 20 68 61 70 70 65 6e  ings.will happen
3820: 20 69 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   if the in-memor
3830: 79 20 69 6d 61 67 65 20 6f 66 20 74 68 65 20 64  y image of the d
3840: 61 74 61 62 61 73 65 20 69 73 20 63 68 61 6e 67  atabase is chang
3850: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
3860: 72 0a 61 6e 20 61 63 74 69 76 65 20 71 75 65 72  r.an active quer
3870: 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20  y..</p>..<p>.If 
3880: 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f  [PRAGMA journal_
3890: 6d 6f 64 65 5d 20 69 73 20 73 65 74 20 74 6f 20  mode] is set to 
38a0: 4f 46 46 20 28 74 68 75 73 20 64 69 73 61 62 6c  OFF (thus disabl
38b0: 69 6e 67 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  ing the rollback
38c0: 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20 74   journal.file) t
38d0: 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
38e0: 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b   of the ROLLBACK
38f0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65   command is unde
3900: 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  fined..</p>..<h3
3910: 3e 52 65 73 70 6f 6e 73 65 20 54 6f 20 45 72 72  >Response To Err
3920: 6f 72 73 20 57 69 74 68 69 6e 20 41 20 54 72 61  ors Within A Tra
3930: 6e 73 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c  nsaction</h3>..<
3940: 70 3e 20 5e 28 49 66 20 63 65 72 74 61 69 6e 20  p> ^(If certain 
3950: 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72 73 20  kinds of errors 
3960: 6f 63 63 75 72 20 77 69 74 68 69 6e 20 61 20 74  occur within a t
3970: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 0a  ransaction, the.
3980: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
3990: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 6f  or may not be ro
39a0: 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61  lled back automa
39b0: 74 69 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65 72  tically.  The.er
39c0: 72 6f 72 73 20 74 68 61 74 20 63 61 75 73 65 20  rors that cause 
39d0: 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 6e 63  the behavior inc
39e0: 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a  lude:</p>..<ul>.
39f0: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55 4c  <li> [SQLITE_FUL
3a00: 4c 5d 3a 20 64 61 74 61 62 61 73 65 20 6f 72 20  L]: database or 
3a10: 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b  disk full.<li> [
3a20: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20 64  SQLITE_IOERR]: d
3a30: 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c  isk I/O error.<l
3a40: 69 3e 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d  i> [SQLITE_BUSY]
3a50: 3a 20 64 61 74 61 62 61 73 65 20 69 6e 20 75 73  : database in us
3a60: 65 20 62 79 20 61 6e 6f 74 68 65 72 20 70 72 6f  e by another pro
3a70: 63 65 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  cess.<li> [SQLIT
3a80: 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72  E_NOMEM]: out or
3a90: 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e 20 5b 53 51   memory.<li> [SQ
3aa0: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 5d 3a  LITE_INTERRUPT]:
3ab0: 20 70 72 6f 63 65 73 73 69 6e 67 20 5b 73 71 6c   processing [sql
3ac0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 7c 69  ite3_interrupt|i
3ad0: 6e 74 65 72 72 75 70 74 65 64 5d 0a 20 20 20 20  nterrupted].    
3ae0: 20 62 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   by application 
3af0: 72 65 71 75 65 73 74 0a 3c 2f 75 6c 3e 29 5e 0a  request.</ul>)^.
3b00: 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20 6f 66  .<p>.^For all of
3b10: 20 74 68 65 73 65 20 65 72 72 6f 72 73 2c 20 53   these errors, S
3b20: 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73 20 74  QLite attempts t
3b30: 6f 20 75 6e 64 6f 20 6a 75 73 74 20 74 68 65 20  o undo just the 
3b40: 6f 6e 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 74  one statement.it
3b50: 20 77 61 73 20 77 6f 72 6b 69 6e 67 20 6f 6e 20   was working on 
3b60: 61 6e 64 20 6c 65 61 76 65 20 63 68 61 6e 67 65  and leave change
3b70: 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 73 74 61  s from prior sta
3b80: 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
3b90: 68 65 0a 73 61 6d 65 20 74 72 61 6e 73 61 63 74  he.same transact
3ba0: 69 6f 6e 20 69 6e 74 61 63 74 20 61 6e 64 20 63  ion intact and c
3bb0: 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74 68 65  ontinue with the
3bc0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
3bd0: 48 6f 77 65 76 65 72 2c 20 0a 64 65 70 65 6e 64  However, .depend
3be0: 69 6e 67 20 6f 6e 20 74 68 65 20 73 74 61 74 65  ing on the state
3bf0: 6d 65 6e 74 20 62 65 69 6e 67 20 65 76 61 6c 75  ment being evalu
3c00: 61 74 65 64 20 61 6e 64 20 74 68 65 20 70 6f 69  ated and the poi
3c10: 6e 74 20 61 74 20 77 68 69 63 68 20 74 68 65 0a  nt at which the.
3c20: 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 69 74  error occurs, it
3c30: 20 6d 69 67 68 74 20 62 65 20 6e 65 63 65 73 73   might be necess
3c40: 61 72 79 20 66 6f 72 20 53 51 4c 69 74 65 20 74  ary for SQLite t
3c50: 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 0a 63  o rollback and.c
3c60: 61 6e 63 65 6c 20 74 68 65 20 65 6e 74 69 72 65  ancel the entire
3c70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
3c80: 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63  An application c
3c90: 61 6e 20 74 65 6c 6c 20 77 68 69 63 68 0a 63 6f  an tell which.co
3ca0: 75 72 73 65 20 6f 66 20 61 63 74 69 6f 6e 20 53  urse of action S
3cb0: 51 4c 69 74 65 20 74 6f 6f 6b 20 62 79 20 75 73  QLite took by us
3cc0: 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33  ing the.[sqlite3
3cd0: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28  _get_autocommit(
3ce0: 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 69 6e  )] C-language in
3cf0: 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70  terface.</p>..<p
3d00: 3e 49 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64  >It is recommend
3d10: 65 64 20 74 68 61 74 20 61 70 70 6c 69 63 61 74  ed that applicat
3d20: 69 6f 6e 73 20 72 65 73 70 6f 6e 64 20 74 6f 20  ions respond to 
3d30: 74 68 65 20 65 72 72 6f 72 73 0a 6c 69 73 74 65  the errors.liste
3d40: 64 20 61 62 6f 76 65 20 62 79 20 65 78 70 6c 69  d above by expli
3d50: 63 69 74 6c 79 20 69 73 73 75 69 6e 67 20 61 20  citly issuing a 
3d60: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
3d70: 2e 20 20 5e 49 66 20 74 68 65 20 0a 74 72 61 6e  .  ^If the .tran
3d80: 73 61 63 74 69 6f 6e 20 68 61 73 20 61 6c 72 65  saction has alre
3d90: 61 64 79 20 62 65 65 6e 20 72 6f 6c 6c 65 64 20  ady been rolled 
3da0: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
3db0: 6c 79 0a 62 79 20 74 68 65 20 65 72 72 6f 72 20  ly.by the error 
3dc0: 72 65 73 70 6f 6e 73 65 2c 20 74 68 65 6e 20 74  response, then t
3dd0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
3de0: 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20 77 69  and will fail wi
3df0: 74 68 20 61 6e 0a 65 72 72 6f 72 2c 20 62 75 74  th an.error, but
3e00: 20 6e 6f 20 68 61 72 6d 20 69 73 20 63 61 75 73   no harm is caus
3e10: 65 64 20 62 79 20 74 68 69 73 2e 3c 2f 70 3e 0a  ed by this.</p>.
3e20: 0a 3c 70 3e 46 75 74 75 72 65 20 76 65 72 73 69  .<p>Future versi
3e30: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 61  ons of SQLite ma
3e40: 79 20 65 78 74 65 6e 64 20 74 68 65 20 6c 69 73  y extend the lis
3e50: 74 20 6f 66 20 65 72 72 6f 72 73 20 77 68 69 63  t of errors whic
3e60: 68 0a 6d 69 67 68 74 20 63 61 75 73 65 20 61 75  h.might cause au
3e70: 74 6f 6d 61 74 69 63 20 74 72 61 6e 73 61 63 74  tomatic transact
3e80: 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20 20 46  ion rollback.  F
3e90: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f  uture versions o
3ea0: 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63  f.SQLite might c
3eb0: 68 61 6e 67 65 20 74 68 65 20 65 72 72 6f 72 20  hange the error 
3ec0: 72 65 73 70 6f 6e 73 65 2e 20 20 49 6e 20 70 61  response.  In pa
3ed0: 72 74 69 63 75 6c 61 72 2c 20 77 65 20 6d 61 79  rticular, we may
3ee0: 0a 63 68 6f 6f 73 65 20 74 6f 20 73 69 6d 70 6c  .choose to simpl
3ef0: 69 66 79 20 74 68 65 20 69 6e 74 65 72 66 61 63  ify the interfac
3f00: 65 20 69 6e 20 66 75 74 75 72 65 20 76 65 72 73  e in future vers
3f10: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62  ions of SQLite b
3f20: 79 0a 63 61 75 73 69 6e 67 20 74 68 65 20 65 72  y.causing the er
3f30: 72 6f 72 73 20 61 62 6f 76 65 20 74 6f 20 66 6f  rors above to fo
3f40: 72 63 65 20 61 6e 20 75 6e 63 6f 6e 64 69 74 69  rce an unconditi
3f50: 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e 3c 2f  onal rollback.</
3f60: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
3f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3fb0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
3fc0: 6e 20 7b 53 41 56 45 50 4f 49 4e 54 7d 20 73 61  n {SAVEPOINT} sa
3fd0: 76 65 70 6f 69 6e 74 20 7b 53 41 56 45 50 4f 49  vepoint {SAVEPOI
3fe0: 4e 54 20 52 45 4c 45 41 53 45 7d 0a 0a 42 75 62  NT RELEASE}..Bub
3ff0: 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65 70  bleDiagram savep
4000: 6f 69 6e 74 2d 73 74 6d 74 0a 42 75 62 62 6c 65  oint-stmt.Bubble
4010: 44 69 61 67 72 61 6d 20 72 65 6c 65 61 73 65 2d  Diagram release-
4020: 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72  stmt.BubbleDiagr
4030: 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74  am rollback-stmt
4040: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41  .</tcl>..<p> ^SA
4050: 56 45 50 4f 49 4e 54 73 20 61 72 65 20 61 20 6d  VEPOINTs are a m
4060: 65 74 68 6f 64 20 6f 66 20 63 72 65 61 74 69 6e  ethod of creatin
4070: 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20  g transactions, 
4080: 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47 49  similar to.[BEGI
4090: 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c  N] and [COMMIT],
40a0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
40b0: 20 53 41 56 45 50 4f 49 4e 54 20 61 6e 64 20 52   SAVEPOINT and R
40c0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73 0a  ELEASE commands.
40d0: 61 72 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d 61  are named and ma
40e0: 79 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70 3e  y be nested.</p>
40f0: 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56 45 50  ..<p> ^The SAVEP
4100: 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74 61  OINT command sta
4110: 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61  rts a new transa
4120: 63 74 69 6f 6e 20 77 69 74 68 20 61 20 6e 61 6d  ction with a nam
4130: 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61 63 74  e..^The transact
4140: 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e  ion names need n
4150: 6f 74 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e 28  ot be unique..^(
4160: 41 20 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20  A SAVEPOINT can 
4170: 62 65 20 73 74 61 72 74 65 64 20 65 69 74 68 65  be started eithe
4180: 72 20 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73  r within or outs
4190: 69 64 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d  ide of.a [BEGIN]
41a0: 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20  ...[COMMIT].)^  
41b0: 5e 28 57 68 65 6e 20 61 20 53 41 56 45 50 4f 49  ^(When a SAVEPOI
41c0: 4e 54 20 69 73 20 74 68 65 20 6f 75 74 65 72 2d  NT is the outer-
41d0: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 0a 61  most savepoint.a
41e0: 6e 64 20 69 74 20 69 73 20 6e 6f 74 20 77 69 74  nd it is not wit
41f0: 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e  hin a [BEGIN]...
4200: 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68  [COMMIT] then th
4210: 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 74 68  e behavior is th
4220: 65 0a 73 61 6d 65 20 61 73 20 42 45 47 49 4e 20  e.same as BEGIN 
4230: 44 45 46 45 52 52 45 44 20 54 52 41 4e 53 41 43  DEFERRED TRANSAC
4240: 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  TION.)^</p>..<p>
4250: 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  ^The ROLLBACK TO
4260: 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74 73   command reverts
4270: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
4280: 65 20 64 61 74 61 62 61 73 65 20 62 61 63 6b 20  e database back 
4290: 74 6f 20 77 68 61 74 0a 69 74 20 77 61 73 20 6a  to what.it was j
42a0: 75 73 74 20 61 66 74 65 72 20 74 68 65 20 63 6f  ust after the co
42b0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 53 41 56 45  rresponding SAVE
42c0: 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74 68  POINT.  ^Note th
42d0: 61 74 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a 70  at unlike that.p
42e0: 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20  lain [ROLLBACK] 
42f0: 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75 74  command (without
4300: 20 74 68 65 20 54 4f 20 6b 65 79 77 6f 72 64 29   the TO keyword)
4310: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f   the ROLLBACK TO
4320: 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f   command.does no
4330: 74 20 63 61 6e 63 65 6c 20 74 68 65 20 74 72 61  t cancel the tra
4340: 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73 74  nsaction.  ^Inst
4350: 65 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69 6e  ead of cancellin
4360: 67 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  g the transactio
4370: 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  n,.the ROLLBACK 
4380: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74 61  TO command resta
4390: 72 74 73 20 74 68 65 20 74 72 61 6e 73 61 63 74  rts the transact
43a0: 69 6f 6e 20 61 67 61 69 6e 20 61 74 20 74 68 65  ion again at the
43b0: 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c   beginning..^All
43c0: 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 53 41 56   intervening SAV
43d0: 45 50 4f 49 4e 54 73 20 61 72 65 20 63 61 6e 63  EPOINTs are canc
43e0: 65 6c 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f  eled, however.</
43f0: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45  p>..<p>^The RELE
4400: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c  ASE command is l
4410: 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66  ike a [COMMIT] f
4420: 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a  or a SAVEPOINT..
4430: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
4440: 6d 61 6e 64 20 63 61 75 73 65 73 20 61 6c 6c 20  mand causes all 
4450: 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 20  savepoints back 
4460: 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  to and including
4470: 20 74 68 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e   the .most recen
4480: 74 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68  t savepoint with
4490: 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65   a matching name
44a0: 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 66   to be removed f
44b0: 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e 73 61 63  rom the .transac
44c0: 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68  tion stack.  ^Th
44d0: 65 20 52 45 4c 45 41 53 45 20 6f 66 20 61 6e 20  e RELEASE of an 
44e0: 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f  inner transactio
44f0: 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75 73 65  n.does not cause
4500: 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20   any changes to 
4510: 62 65 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68  be written to th
4520: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 3b  e database file;
4530: 20 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76   it merely.remov
4540: 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20 66 72  es savepoints fr
4550: 6f 6d 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  om the transacti
4560: 6f 6e 20 73 74 61 63 6b 20 73 75 63 68 20 74 68  on stack such th
4570: 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67  at it is.no long
4580: 65 72 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 52  er possible to R
4590: 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73 65  OLLBACK TO those
45a0: 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66   savepoints..^If
45b0: 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
45c0: 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68 65 20  nd releases the 
45d0: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
45e0: 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74 68 65  int, so.that the
45f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
4600: 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70 74 79  ck becomes empty
4610: 2c 20 74 68 65 6e 20 52 45 4c 45 41 53 45 20 69  , then RELEASE i
4620: 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20 5b 43  s the same.as [C
4630: 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f  OMMIT]..^The [CO
4640: 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61  MMIT] command ma
4650: 79 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 6c  y be used to rel
4660: 65 61 73 65 20 61 6c 6c 20 73 61 76 65 70 6f 69  ease all savepoi
4670: 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74  nts and.commit t
4680: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65  he transaction e
4690: 76 65 6e 20 69 66 20 74 68 65 20 74 72 61 6e 73  ven if the trans
46a0: 61 63 74 69 6f 6e 20 77 61 73 20 6f 72 69 67 69  action was origi
46b0: 6e 61 6c 6c 79 20 73 74 61 72 74 65 64 0a 62 79  nally started.by
46c0: 20 61 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d   a SAVEPOINT com
46d0: 6d 61 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20  mand instead of 
46e0: 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e  a [BEGIN] comman
46f0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  d.</p>..<p>^If t
4700: 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d  he savepoint-nam
4710: 65 20 69 6e 20 61 20 52 45 4c 45 41 53 45 20 63  e in a RELEASE c
4720: 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20  ommand does not 
4730: 6d 61 74 63 68 20 61 6e 79 0a 73 61 76 65 70 6f  match any.savepo
4740: 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  int currently in
4750: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4760: 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20   stack, then no 
4770: 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 0a 72  savepoints are.r
4780: 65 6c 65 61 73 65 64 2c 20 74 68 65 20 64 61 74  eleased, the dat
4790: 61 62 61 73 65 20 69 73 20 75 6e 63 68 61 6e 67  abase is unchang
47a0: 65 64 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45  ed, and the RELE
47b0: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75  ASE command retu
47c0: 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70  rns.an error.</p
47d0: 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  >..<p>^Note that
47e0: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
47f0: 63 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d 6d  ction might comm
4800: 69 74 20 28 75 73 69 6e 67 20 74 68 65 20 52 45  it (using the RE
4810: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a 62  LEASE command).b
4820: 75 74 20 74 68 65 6e 20 6c 61 74 65 72 20 68 61  ut then later ha
4830: 76 65 20 69 74 73 20 77 6f 72 6b 20 75 6e 64 6f  ve its work undo
4840: 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42 41 43 4b  ne by a ROLLBACK
4850: 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61   in an outer tra
4860: 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77  nsaction..^A pow
4870: 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 70 72  er failure or pr
4880: 6f 67 72 61 6d 20 63 72 61 73 68 20 6f 72 20 4f  ogram crash or O
4890: 53 20 63 72 61 73 68 20 77 69 6c 6c 20 63 61 75  S crash will cau
48a0: 73 65 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73  se the outer-mos
48b0: 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f  t.transaction to
48c0: 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69   rollback, undoi
48d0: 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74  ng all changes t
48e0: 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  hat have occurre
48f0: 64 20 77 69 74 68 69 6e 0a 74 68 61 74 20 6f 75  d within.that ou
4900: 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ter transaction,
4910: 20 65 76 65 6e 20 63 68 61 6e 67 65 73 20 74 68   even changes th
4920: 61 74 20 68 61 76 65 20 73 75 70 70 6f 73 65 64  at have supposed
4930: 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74  ly been "committ
4940: 65 64 22 0a 62 79 20 74 68 65 20 52 45 4c 45 41  ed".by the RELEA
4950: 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f  SE command.  ^Co
4960: 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 61 63 74  ntent is not act
4970: 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20  ually committed 
4980: 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a 75 6e 74  on the disk .unt
4990: 69 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  il the outermost
49a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
49b0: 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  mits.</p>..<p>Th
49c0: 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20  ere are several 
49d0: 77 61 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67  ways of thinking
49e0: 20 61 62 6f 75 74 20 74 68 65 20 52 45 4c 45 41   about the RELEA
49f0: 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a  SE command:</p>.
4a00: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f  .<ul>.<li><p>.So
4a10: 6d 65 20 70 65 6f 70 6c 65 20 76 69 65 77 20 52  me people view R
4a20: 45 4c 45 41 53 45 20 61 73 20 74 68 65 20 65 71  ELEASE as the eq
4a30: 75 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d  uivalent of COMM
4a40: 49 54 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49  IT for a SAVEPOI
4a50: 4e 54 2e 0a 54 68 69 73 20 69 73 20 61 6e 20 61  NT..This is an a
4a60: 63 63 65 70 74 61 62 6c 65 20 70 6f 69 6e 74 20  cceptable point 
4a70: 6f 66 20 76 69 65 77 20 61 73 20 6c 6f 6e 67 20  of view as long 
4a80: 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73  as one remembers
4a90: 20 74 68 61 74 20 74 68 65 0a 63 68 61 6e 67 65   that the.change
4aa0: 73 20 63 6f 6d 6d 69 74 74 65 64 20 62 79 20 61  s committed by a
4ab0: 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74  n inner transact
4ac0: 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65 72 20  ion might later 
4ad0: 62 65 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72  be undone by a.r
4ae0: 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75  ollback in an ou
4af0: 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ter transaction.
4b00: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
4b10: 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65 77 20  p>.Another view 
4b20: 6f 66 20 52 45 4c 45 41 53 45 20 69 73 20 74 68  of RELEASE is th
4b30: 61 74 20 69 74 20 6d 65 72 67 65 73 20 61 20 6e  at it merges a n
4b40: 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  amed transaction
4b50: 20 69 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e 74   into its.parent
4b60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f   transaction, so
4b70: 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20   that the named 
4b80: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
4b90: 69 74 73 20 70 61 72 65 6e 74 20 62 65 63 6f 6d  its parent becom
4ba0: 65 0a 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73  e.the same trans
4bb0: 61 63 74 69 6f 6e 2e 20 20 41 66 74 65 72 20 52  action.  After R
4bc0: 45 4c 45 41 53 45 2c 20 74 68 65 20 6e 61 6d 65  ELEASE, the name
4bd0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  d transaction an
4be0: 64 20 69 74 73 20 70 61 72 65 6e 74 0a 77 69 6c  d its parent.wil
4bf0: 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c  l commit or roll
4c00: 62 61 63 6b 20 74 6f 67 65 74 68 65 72 2c 20 77  back together, w
4c10: 68 61 74 65 76 65 72 20 74 68 65 69 72 20 66 61  hatever their fa
4c20: 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c  te may be..</p><
4c30: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e  /li>..<li><p>.On
4c40: 65 20 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b  e can also think
4c50: 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 73 20 61   of savepoints a
4c60: 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74 68 65  s."marks" in the
4c70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d   transaction tim
4c80: 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69 73 20  eline.  In this 
4c90: 76 69 65 77 2c 20 74 68 65 20 53 41 56 45 50 4f  view, the SAVEPO
4ca0: 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61  INT command.crea
4cb0: 74 65 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20  tes a new mark, 
4cc0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  the ROLLBACK TO 
4cd0: 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73 20  command rewinds 
4ce0: 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 62 61 63  the timeline bac
4cf0: 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73  k.to a point jus
4d00: 74 20 61 66 74 65 72 20 74 68 65 20 6e 61 6d 65  t after the name
4d10: 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65 20  d mark, and the 
4d20: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a  RELEASE command.
4d30: 65 72 61 73 65 73 20 6d 61 72 6b 73 20 66 72 6f  erases marks fro
4d40: 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 77  m the timeline w
4d50: 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20  ithout actually 
4d60: 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67  making any.chang
4d70: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
4d80: 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f  se..</p></li>.</
4d90: 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73  ul>....<h3>Trans
4da0: 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52  action Nesting R
4db0: 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  ules</h3>..<p>^T
4dc0: 68 65 20 6c 61 73 74 20 74 72 61 6e 73 61 63 74  he last transact
4dd0: 69 6f 6e 20 73 74 61 72 74 65 64 20 77 69 6c 6c  ion started will
4de0: 20 62 65 20 74 68 65 20 66 69 72 73 74 0a 74 72   be the first.tr
4df0: 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74  ansaction commit
4e00: 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61  ted or rolled ba
4e10: 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ck.</p>..<p>^The
4e20: 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64   [BEGIN] command
4e30: 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 74   only works if t
4e40: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
4e50: 74 61 63 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f  tack is empty, o
4e60: 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  r.in other words
4e70: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
4e80: 20 70 65 6e 64 69 6e 67 20 74 72 61 6e 73 61 63   pending transac
4e90: 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65 20  tions.  ^If the 
4ea0: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61 63  transaction.stac
4eb0: 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 77  k is not empty w
4ec0: 68 65 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d 20  hen the [BEGIN] 
4ed0: 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b  command is invok
4ee0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d  ed, then the com
4ef0: 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69 74 68 20  mand.fails with 
4f00: 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c  an error.</p>..<
4f10: 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20  p>^The [COMMIT] 
4f20: 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20  command commits 
4f30: 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20  all outstanding 
4f40: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64  transactions and
4f50: 20 6c 65 61 76 65 73 0a 74 68 65 20 74 72 61 6e   leaves.the tran
4f60: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d  saction stack em
4f70: 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  pty.</p>..<p>^Th
4f80: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4f90: 64 20 73 74 61 72 74 73 20 77 69 74 68 20 74 68  d starts with th
4fa0: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 64  e most recent ad
4fb0: 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72  dition to the.tr
4fc0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
4fd0: 61 6e 64 20 72 65 6c 65 61 73 65 73 20 73 61 76  and releases sav
4fe0: 65 70 6f 69 6e 74 73 20 62 61 63 6b 77 61 72 64  epoints backward
4ff0: 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c  s .in time until
5000: 20 69 74 20 72 65 6c 65 61 73 65 73 20 61 20 73   it releases a s
5010: 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20  avepoint with a 
5020: 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69  matching savepoi
5030: 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72 20  nt-name..^Prior 
5040: 73 61 76 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e  savepoints, even
5050: 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68   savepoints with
5060: 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f   matching savepo
5070: 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75  int-names, are.u
5080: 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74 68  nchanged..^If th
5090: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
50a0: 64 20 63 61 75 73 65 73 20 74 68 65 0a 74 72 61  d causes the.tra
50b0: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 74  nsaction stack t
50c0: 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74 79 20 28  o become empty (
50d0: 69 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  if the RELEASE c
50e0: 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ommand releases 
50f0: 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72  the.outermost tr
5100: 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74  ansaction from t
5110: 68 65 20 73 74 61 63 6b 29 20 74 68 65 6e 20 74  he stack) then t
5120: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  he transaction c
5130: 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ommits.</p>..<p>
5140: 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20  ^The [ROLLBACK] 
5150: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20  command without 
5160: 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c  a TO clause roll
5170: 73 20 62 61 63 6b 73 20 61 6c 6c 20 74 72 61 6e  s backs all tran
5180: 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65 61  sactions.and lea
5190: 76 65 73 20 74 68 65 20 74 72 61 6e 73 61 63 74  ves the transact
51a0: 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e  ion stack empty.
51b0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f  </p>..<p>^The RO
51c0: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77  LLBACK command w
51d0: 69 74 68 20 61 20 54 4f 20 63 6c 61 75 73 65 20  ith a TO clause 
51e0: 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e 73  rolls back trans
51f0: 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61  actions going.ba
5200: 63 6b 77 61 72 64 73 20 69 6e 20 74 69 6d 65 20  ckwards in time 
5210: 62 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74  back to the most
5220: 20 72 65 63 65 6e 74 20 53 41 56 45 50 4f 49 4e   recent SAVEPOIN
5230: 54 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  T with a matchin
5240: 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41 56  g name..^The SAV
5250: 45 50 4f 49 4e 54 20 77 69 74 68 20 74 68 65 20  EPOINT with the 
5260: 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 72 65  matching name re
5270: 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20 74 72 61  mains on the tra
5280: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a  nsaction stack,.
5290: 62 75 74 20 61 6c 6c 20 64 61 74 61 62 61 73 65  but all database
52a0: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 6f 63   changes that oc
52b0: 63 75 72 72 65 64 20 61 66 74 65 72 20 74 68 61  curred after tha
52c0: 74 20 53 41 56 45 50 4f 49 4e 54 20 77 61 73 20  t SAVEPOINT was 
52d0: 63 72 65 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c  created.are roll
52e0: 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68  ed back.  ^If th
52f0: 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65  e savepoint-name
5300: 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   in a ROLLBACK T
5310: 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  O command does n
5320: 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20 53 41 56  ot.match any SAV
5330: 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73 74  EPOINT on the st
5340: 61 63 6b 2c 20 74 68 65 6e 20 74 68 65 20 52 4f  ack, then the RO
5350: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66  LLBACK command f
5360: 61 69 6c 73 20 77 69 74 68 20 61 6e 0a 65 72 72  ails with an.err
5370: 6f 72 20 61 6e 64 20 6c 65 61 76 65 73 20 74 68  or and leaves th
5380: 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64  e state of the d
5390: 61 74 61 62 61 73 65 20 75 6e 63 68 61 6e 67 65  atabase unchange
53a0: 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
53b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
5400: 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f  ction comment co
5410: 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a  mment {comment *
5420: 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 42 75 62 62 6c  comments}..Bubbl
5430: 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74  eDiagram comment
5440: 2d 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a  -syntax.</tcl>..
5450: 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65  <p>^Comments are
5460: 20 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64   not SQL command
5470: 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75 72  s, but can occur
5480: 20 77 69 74 68 69 6e 20 74 68 65 20 74 65 78 74   within the text
5490: 20 6f 66 0a 53 51 4c 20 71 75 65 72 69 65 73 20   of.SQL queries 
54a0: 70 61 73 73 65 64 20 74 6f 20 5b 73 71 6c 69 74  passed to [sqlit
54b0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d  e3_prepare_v2()]
54c0: 20 61 6e 64 20 72 65 6c 61 74 65 64 20 69 6e 74   and related int
54d0: 65 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e  erfaces..^Commen
54e0: 74 73 20 61 72 65 20 74 72 65 61 74 65 64 20 61  ts are treated a
54f0: 73 20 77 68 69 74 65 73 70 61 63 65 20 62 79 20  s whitespace by 
5500: 74 68 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f 6d  the parser..^Com
5510: 6d 65 6e 74 73 20 63 61 6e 20 62 65 67 69 6e 20  ments can begin 
5520: 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70  anywhere whitesp
5530: 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e  ace .can be foun
5540: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73  d, including ins
5550: 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ide expressions 
5560: 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69 70  that span multip
5570: 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a  le lines..</p>..
5580: 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74 73  <p>^SQL comments
5590: 20 62 65 67 69 6e 20 77 69 74 68 20 74 77 6f 20   begin with two 
55a0: 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d 22 20  consecutive "-" 
55b0: 63 68 61 72 61 63 74 65 72 73 20 28 41 53 43 49  characters (ASCI
55c0: 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78 74 65  I 0x2d).and exte
55d0: 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63  nd up to and inc
55e0: 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20  luding the next 
55f0: 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63 74 65  newline characte
5600: 72 20 28 41 53 43 49 49 20 30 78 30 61 29 0a 6f  r (ASCII 0x0a).o
5610: 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20  r until the end 
5620: 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65  of input, whiche
5630: 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e  ver comes first.
5640: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c  </p>..<p>^C-styl
5650: 65 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e  e comments begin
5660: 0a 77 69 74 68 20 22 2f 2a 22 20 61 6e 64 20 65  .with "/*" and e
5670: 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20  xtend up to and 
5680: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65  including the ne
5690: 78 74 20 22 2a 2f 22 20 63 68 61 72 61 63 74 65  xt "*/" characte
56a0: 72 20 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20  r pair.or until 
56b0: 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
56c0: 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65  , whichever come
56d0: 73 20 66 69 72 73 74 2e 20 20 5e 43 2d 73 74 79  s first.  ^C-sty
56e0: 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20  le comments.can 
56f0: 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69  span multiple li
5700: 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43  nes. </p>..<p>^C
5710: 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65  omments can appe
5720: 61 72 20 61 6e 79 77 68 65 72 65 20 77 68 69 74  ar anywhere whit
5730: 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63 75 72  espace can occur
5740: 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69  ,.including insi
5750: 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  de expressions a
5760: 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  nd in the middle
5770: 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73 74   of other SQL st
5780: 61 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65  atements..^Comme
5790: 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e  nts do not nest.
57a0: 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
57b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57f0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
5800: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44  tion {CREATE IND
5810: 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78 20  EX} createindex 
5820: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 7d  {{CREATE INDEX}}
5830: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
5840: 63 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74 6d  create-index-stm
5850: 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  t 1.BubbleDiagra
5860: 6d 20 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e  m indexed-column
5870: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
5880: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f   CREATE INDEX co
5890: 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f  mmand consists o
58a0: 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  f the keywords "
58b0: 43 52 45 41 54 45 20 49 4e 44 45 58 22 20 66 6f  CREATE INDEX" fo
58c0: 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e 61  llowed.by the na
58d0: 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69 6e  me of the new in
58e0: 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  dex, the keyword
58f0: 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65 20   "ON", the name 
5900: 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79 0a  of a previously.
5910: 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 74 68  created table th
5920: 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64 65  at is to be inde
5930: 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65 6e  xed, and a paren
5940: 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
5950: 20 6e 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e   names of.column
5960: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74  s in the table t
5970: 68 61 74 20 61 72 65 20 75 73 65 64 20 66 6f 72  hat are used for
5980: 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 3c   the index key.<
5990: 2f 70 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 63 6f  /p>..<p>^Each co
59a0: 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65  lumn name can be
59b0: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65   followed by one
59c0: 20 6f 66 20 74 68 65 20 22 41 53 43 22 20 6f 72   of the "ASC" or
59d0: 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72 64 73   "DESC" keywords
59e0: 0a 74 6f 20 69 6e 64 69 63 61 74 65 20 73 6f 72  .to indicate sor
59f0: 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 73  t order.  ^The s
5a00: 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20 6f 72  ort order may or
5a10: 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f   may not be igno
5a20: 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e  red depending.on
5a30: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
5a40: 6c 65 20 66 6f 72 6d 61 74 2e 20 20 5e 54 68 65  le format.  ^The
5a50: 20 22 6c 65 67 61 63 79 22 20 66 69 6c 65 20 66   "legacy" file f
5a60: 6f 72 6d 61 74 20 69 67 6e 6f 72 65 73 20 69 6e  ormat ignores in
5a70: 64 65 78 0a 73 6f 72 74 20 6f 72 64 65 72 2e 20  dex.sort order. 
5a80: 20 5e 54 68 65 20 64 65 73 63 65 6e 64 69 6e 67   ^The descending
5a90: 20 69 6e 64 65 78 20 66 69 6c 65 20 66 6f 72 6d   index file form
5aa0: 61 74 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73  at takes index s
5ab0: 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61  ort order.into a
5ac0: 63 63 6f 75 6e 74 2e 20 20 5e 28 4f 6e 6c 79 20  ccount.  ^(Only 
5ad0: 63 6f 70 69 65 73 20 6f 66 20 53 51 4c 69 74 65  copies of SQLite
5ae0: 20 6e 65 77 65 72 20 74 68 61 6e 20 5b 76 65 72   newer than [ver
5af0: 73 69 6f 6e 20 33 2e 33 2e 30 5d 20 0a 28 72 65  sion 3.3.0] .(re
5b00: 6c 65 61 73 65 64 20 6f 6e 20 32 30 30 36 2d 30  leased on 2006-0
5b10: 31 2d 31 30 29 20 61 72 65 20 61 62 6c 65 20 74  1-10) are able t
5b20: 6f 20 75 6e 64 65 72 73 74 61 6e 64 20 74 68 65  o understand the
5b30: 20 6e 65 77 65 72 20 64 65 73 63 65 6e 64 69 6e   newer descendin
5b40: 67 0a 69 6e 64 65 78 20 66 69 6c 65 20 66 6f 72  g.index file for
5b50: 6d 61 74 20 61 6e 64 20 73 6f 20 66 6f 72 20 63  mat and so for c
5b60: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
5b70: 68 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  h older versions
5b80: 20 6f 66 0a 53 51 4c 69 74 65 2c 20 74 68 65 20   of.SQLite, the 
5b90: 6c 65 67 61 63 79 20 66 69 6c 65 20 66 6f 72 6d  legacy file form
5ba0: 61 74 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  at is generated 
5bb0: 62 79 20 64 65 66 61 75 6c 74 2e 29 5e 20 20 5e  by default.)^  ^
5bc0: 55 73 65 20 74 68 65 0a 5b 6c 65 67 61 63 79 5f  Use the.[legacy_
5bd0: 66 69 6c 65 5f 66 6f 72 6d 61 74 5d 20 70 72 61  file_format] pra
5be0: 67 6d 61 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  gma to modify th
5bf0: 69 73 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20  is behavior and 
5c00: 67 65 6e 65 72 61 74 65 0a 64 61 74 61 62 61 73  generate.databas
5c10: 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20  es that use the 
5c20: 6e 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61  newer file forma
5c30: 74 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69  t.  Future versi
5c40: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 6d 61  ons of SQLite.ma
5c50: 79 20 62 65 67 69 6e 20 74 6f 20 67 65 6e 65 72  y begin to gener
5c60: 61 74 65 20 74 68 65 20 6e 65 77 65 72 20 66 69  ate the newer fi
5c70: 6c 65 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66  le format by def
5c80: 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ault.</p>..<p>^T
5c90: 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73  he COLLATE claus
5ca0: 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c  e optionally fol
5cb0: 6c 6f 77 69 6e 67 20 65 61 63 68 20 63 6f 6c 75  lowing each colu
5cc0: 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e 65 73 20  mn name defines 
5cd0: 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a.collating sequ
5ce0: 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20 74 65  ence used for te
5cf0: 78 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  xt entries in th
5d00: 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68 65 20  at column..^The 
5d10: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
5d20: 67 0a 73 65 71 75 65 6e 63 65 20 69 73 20 74 68  g.sequence is th
5d30: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
5d40: 65 6e 63 65 20 64 65 66 69 6e 65 64 20 66 6f 72  ence defined for
5d50: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 6e 20   that column in 
5d60: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
5d70: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e  E] statement.  ^
5d80: 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61 74 69  Or if no collati
5d90: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 6f  ng sequence is o
5da0: 74 68 65 72 77 69 73 65 20 64 65 66 69 6e 65 64  therwise defined
5db0: 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 42  ,.the built-in B
5dc0: 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
5dd0: 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64  sequence is used
5de0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  .</p>..<p>There 
5df0: 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79  are no arbitrary
5e00: 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e   limits on the n
5e10: 75 6d 62 65 72 20 6f 66 20 69 6e 64 69 63 65 73  umber of indices
5e20: 20 74 68 61 74 20 63 61 6e 20 62 65 0a 61 74 74   that can be.att
5e30: 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c  ached to a singl
5e40: 65 20 74 61 62 6c 65 2e 20 20 5e 28 54 68 65 20  e table.  ^(The 
5e50: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
5e60: 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 69 73  s in an index is
5e70: 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20 74 68 65   .limited to the
5e80: 20 76 61 6c 75 65 20 73 65 74 20 62 79 0a 5b 73   value set by.[s
5e90: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 5b 53  qlite3_limit]([S
5ea0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55  QLITE_LIMIT_COLU
5eb0: 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a  MN],...).)^</p>.
5ec0: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 4e 49 51  .<p>^If the UNIQ
5ed0: 55 45 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61  UE keyword appea
5ee0: 72 73 20 62 65 74 77 65 65 6e 20 43 52 45 41 54  rs between CREAT
5ef0: 45 20 61 6e 64 20 49 4e 44 45 58 20 74 68 65 6e  E and INDEX then
5f00: 20 64 75 70 6c 69 63 61 74 65 0a 69 6e 64 65 78   duplicate.index
5f10: 20 65 6e 74 72 69 65 73 20 61 72 65 20 6e 6f 74   entries are not
5f20: 20 61 6c 6c 6f 77 65 64 2e 20 20 5e 41 6e 79 20   allowed.  ^Any 
5f30: 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 73 65 72  attempt to inser
5f40: 74 20 61 20 64 75 70 6c 69 63 61 74 65 20 65 6e  t a duplicate en
5f50: 74 72 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74 20  try.will result 
5f60: 69 6e 20 61 6e 20 65 72 72 6f 72 2e 20 20 5e 46  in an error.  ^F
5f70: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
5f80: 6f 66 20 75 6e 69 71 75 65 20 69 6e 64 69 63 65  of unique indice
5f90: 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75  s, all NULL valu
5fa0: 65 73 0a 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es.are considere
5fb0: 64 20 74 6f 20 64 69 66 66 65 72 65 6e 74 20 66  d to different f
5fc0: 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 4e 55  rom all other NU
5fd0: 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 20 61 72  LL values and ar
5fe0: 65 20 74 68 75 73 20 75 6e 69 71 75 65 2e 0a 54  e thus unique..T
5ff0: 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 68  his is one of th
6000: 65 20 74 77 6f 20 70 6f 73 73 69 62 6c 65 20 69  e two possible i
6010: 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f  nterpretations o
6020: 66 20 74 68 65 20 53 51 4c 2d 39 32 20 73 74 61  f the SQL-92 sta
6030: 6e 64 61 72 64 0a 28 74 68 65 20 6c 61 6e 67 75  ndard.(the langu
6040: 61 67 65 20 69 6e 20 74 68 65 20 73 74 61 6e 64  age in the stand
6050: 61 72 64 20 69 73 20 61 6d 62 69 67 75 6f 75 73  ard is ambiguous
6060: 29 20 61 6e 64 20 69 73 20 74 68 65 20 69 6e 74  ) and is the int
6070: 65 72 70 72 65 74 61 74 69 6f 6e 0a 66 6f 6c 6c  erpretation.foll
6080: 6f 77 65 64 20 62 79 20 50 6f 73 74 67 72 65 53  owed by PostgreS
6090: 51 4c 2c 20 4d 79 53 51 4c 2c 20 46 69 72 65 62  QL, MySQL, Fireb
60a0: 69 72 64 2c 20 61 6e 64 20 4f 72 61 63 6c 65 2e  ird, and Oracle.
60b0: 20 20 49 6e 66 6f 72 6d 69 78 20 61 6e 64 0a 4d    Informix and.M
60c0: 69 63 72 6f 73 6f 66 74 20 53 51 4c 20 53 65 72  icrosoft SQL Ser
60d0: 76 65 72 20 66 6f 6c 6c 6f 77 20 74 68 65 20 6f  ver follow the o
60e0: 74 68 65 72 20 69 6e 74 65 72 70 72 65 74 61 74  ther interpretat
60f0: 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61 6e 64  ion of the stand
6100: 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ard.</p>..<p>^If
6110: 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46   the optional IF
6120: 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c 61 75   NOT EXISTS clau
6130: 73 65 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e  se is present an
6140: 64 20 61 6e 6f 74 68 65 72 20 69 6e 64 65 78 0a  d another index.
6150: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61  with the same na
6160: 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  me already exist
6170: 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f 6d  s, then this com
6180: 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61 20 6e  mand becomes a n
6190: 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  o-op.</p>..<p>^I
61a0: 6e 64 65 78 65 73 20 61 72 65 20 72 65 6d 6f 76  ndexes are remov
61b0: 65 64 20 77 69 74 68 20 74 68 65 20 5b 44 52 4f  ed with the [DRO
61c0: 50 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64  P INDEX] command
61d0: 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
61e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
61f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6220: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
6230: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 41 42  tion {CREATE TAB
6240: 4c 45 7d 20 7b 63 72 65 61 74 65 74 61 62 6c 65  LE} {createtable
6250: 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  } {{CREATE TABLE
6260: 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
6270: 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73  m create-table-s
6280: 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67  tmt 1.BubbleDiag
6290: 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a 42  ram column-def.B
62a0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 74 79 70  ubbleDiagram typ
62b0: 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69 61  e-name.BubbleDia
62c0: 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63 6f 6e 73  gram column-cons
62d0: 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61  traint.BubbleDia
62e0: 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f 6e 73 74  gram table-const
62f0: 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61 67  raint.BubbleDiag
6300: 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b 65 79 2d  ram foreign-key-
6310: 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  clause.</tcl>..<
6320: 70 3e 54 68 65 20 22 43 52 45 41 54 45 20 54 41  p>The "CREATE TA
6330: 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  BLE" command is 
6340: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  used to create a
6350: 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e   new table in an
6360: 20 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73   SQLite .databas
6370: 65 2e 20 41 20 43 52 45 41 54 45 20 54 41 42 4c  e. A CREATE TABL
6380: 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66  E command specif
6390: 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ies the followin
63a0: 67 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  g attributes of 
63b0: 74 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a  the.new table:..
63c0: 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68  <ul>.  <li><p>Th
63d0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  e name of the ne
63e0: 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e  w table...  <li>
63f0: 3c 70 3e 20 54 68 65 20 64 61 74 61 62 61 73 65  <p> The database
6400: 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65   in which the ne
6410: 77 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  w table is creat
6420: 65 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62  ed. Tables may b
6430: 65 20 0a 20 20 20 20 20 20 63 72 65 61 74 65 64  e .      created
6440: 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
6450: 61 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20  abase, the temp 
6460: 64 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20  database, or in 
6470: 61 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20 20  any attached.   
6480: 20 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20     database...  
6490: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65  <li><p> The name
64a0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
64b0: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20  in the table... 
64c0: 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63   <li><p> The dec
64d0: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61  lared type of ea
64e0: 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
64f0: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
6500: 70 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c  p> A default val
6510: 75 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  ue or expression
6520: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
6530: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a   in the table...
6540: 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61    <li><p> A defa
6550: 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
6560: 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69  quence to use wi
6570: 74 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a  th each column..
6580: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f  .  <li><p> Optio
6590: 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59  nally, a PRIMARY
65a0: 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
65b0: 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20  le. Both single 
65c0: 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20  column and.     
65d0: 20 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c    composite (mul
65e0: 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72  tiple column) pr
65f0: 69 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20 73  imary keys are s
6600: 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69  upported...  <li
6610: 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51  ><p> A set of SQ
6620: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f  L constraints fo
6630: 72 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51  r each table. SQ
6640: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e  Lite supports UN
6650: 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20  IQUE, NOT.      
6660: 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64   NULL, CHECK and
6670: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e   FOREIGN KEY con
6680: 73 74 72 61 69 6e 74 73 2e 0a 3c 2f 75 6c 3e 0a  straints..</ul>.
6690: 0a 3c 70 3e 45 76 65 72 79 20 43 52 45 41 54 45  .<p>Every CREATE
66a0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
66b0: 20 6d 75 73 74 20 73 70 65 63 69 66 79 20 61 20   must specify a 
66c0: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 6e 65 77  name for the new
66d0: 20 74 61 62 6c 65 2e 0a 20 20 5e 28 54 61 62 6c   table..  ^(Tabl
66e0: 65 20 6e 61 6d 65 73 20 74 68 61 74 20 62 65 67  e names that beg
66f0: 69 6e 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f  in with "sqlite_
6700: 22 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66  " are reserved f
6710: 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 2e  or internal use.
6720: 20 49 74 0a 20 20 69 73 20 61 6e 20 65 72 72 6f   It.  is an erro
6730: 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20  r to attempt to 
6740: 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20 77  create a table w
6750: 69 74 68 20 61 20 6e 61 6d 65 20 74 68 61 74 20  ith a name that 
6760: 73 74 61 72 74 73 20 77 69 74 68 0a 20 20 22 73  starts with.  "s
6770: 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a 3c 70 3e 20  qlite_".)^..<p> 
6780: 5e 49 66 20 61 20 26 6c 74 3b 64 61 74 61 62 61  ^If a &lt;databa
6790: 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 73  se-name&gt; is s
67a0: 70 65 63 69 66 69 65 64 2c 20 69 74 20 6d 75 73  pecified, it mus
67b0: 74 20 62 65 20 65 69 74 68 65 72 20 22 6d 61 69  t be either "mai
67c0: 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22 2c 20 6f  n", .  "temp", o
67d0: 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e  r the name of an
67e0: 20 5b 41 54 54 41 43 48 20 44 41 54 41 42 41 53   [ATTACH DATABAS
67f0: 45 7c 61 74 74 61 63 68 65 64 20 64 61 74 61 62  E|attached datab
6800: 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69 73 20 63  ase]. ^In this c
6810: 61 73 65 0a 20 20 74 68 65 20 6e 65 77 20 74 61  ase.  the new ta
6820: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
6830: 6e 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61  n the named data
6840: 62 61 73 65 2e 20 5e 49 66 20 74 68 65 20 22 54  base. ^If the "T
6850: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
6860: 52 59 22 0a 20 20 6b 65 79 77 6f 72 64 20 6f 63  RY".  keyword oc
6870: 63 75 72 73 20 62 65 74 77 65 65 6e 20 74 68 65  curs between the
6880: 20 22 43 52 45 41 54 45 22 20 61 6e 64 20 22 54   "CREATE" and "T
6890: 41 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20 6e  ABLE" then the n
68a0: 65 77 20 74 61 62 6c 65 20 69 73 0a 20 20 63 72  ew table is.  cr
68b0: 65 61 74 65 64 20 69 6e 20 74 68 65 20 74 65 6d  eated in the tem
68c0: 70 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20  p database. ^It 
68d0: 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73  is an error to s
68e0: 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 0a 20  pecify both a . 
68f0: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
6900: 6d 65 26 67 74 3b 20 61 6e 64 20 74 68 65 20 54  me&gt; and the T
6910: 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59  EMP or TEMPORARY
6920: 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73   keyword, unless
6930: 20 74 68 65 0a 20 20 26 6c 74 3b 64 61 74 61 62   the.  &lt;datab
6940: 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20  ase-name&gt; is 
6950: 22 74 65 6d 70 22 2e 20 5e 49 66 20 6e 6f 20 64  "temp". ^If no d
6960: 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20  atabase name is 
6970: 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 68  specified and th
6980: 65 0a 20 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  e.  TEMP keyword
6990: 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20   is not present 
69a0: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
69b0: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
69c0: 20 6d 61 69 6e 0a 20 20 64 61 74 61 62 61 73 65   main.  database
69d0: 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20 69 73 20  ...<p>.  ^It is 
69e0: 75 73 75 61 6c 6c 79 20 61 6e 20 65 72 72 6f 72  usually an error
69f0: 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 63   to attempt to c
6a00: 72 65 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  reate a new tabl
6a10: 65 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  e in a database 
6a20: 74 68 61 74 0a 20 20 61 6c 72 65 61 64 79 20 63  that.  already c
6a30: 6f 6e 74 61 69 6e 73 20 61 20 74 61 62 6c 65 2c  ontains a table,
6a40: 20 69 6e 64 65 78 20 6f 72 20 76 69 65 77 20 6f   index or view o
6a50: 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e  f the same name.
6a60: 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68   ^However, if th
6a70: 65 0a 20 20 22 49 46 20 4e 4f 54 20 45 58 49 53  e.  "IF NOT EXIS
6a80: 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70  TS" clause is sp
6a90: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
6aa0: 6f 66 20 74 68 65 20 43 52 45 41 54 45 20 54 41  of the CREATE TA
6ab0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  BLE statement an
6ac0: 64 0a 20 20 61 20 74 61 62 6c 65 20 6f 72 20 76  d.  a table or v
6ad0: 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20  iew of the same 
6ae0: 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69  name already exi
6af0: 73 74 73 2c 20 74 68 65 20 43 52 45 41 54 45 20  sts, the CREATE 
6b00: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20 20  TABLE command.  
6b10: 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f 20 65 66  simply has no ef
6b20: 66 65 63 74 20 28 61 6e 64 20 6e 6f 20 65 72 72  fect (and no err
6b30: 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 72 65  or message is re
6b40: 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20 65 72 72  turned). ^An err
6b50: 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20 20 72 65  or is still.  re
6b60: 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 74 61  turned if the ta
6b70: 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  ble cannot be cr
6b80: 65 61 74 65 64 20 62 65 63 61 75 73 65 20 6f 66  eated because of
6b90: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 69 6e 64   an existing ind
6ba0: 65 78 2c 20 65 76 65 6e 20 0a 20 20 69 66 20 74  ex, even .  if t
6bb0: 68 65 20 22 49 46 20 4e 4f 54 20 45 58 49 53 54  he "IF NOT EXIST
6bc0: 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  S" clause is spe
6bd0: 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74 20  cified...<p>^It 
6be0: 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20  is not an error 
6bf0: 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c  to create a tabl
6c00: 65 20 74 68 61 74 20 68 61 73 20 74 68 65 20 73  e that has the s
6c10: 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e 20 0a  ame name as an .
6c20: 20 20 65 78 69 73 74 69 6e 67 20 5b 43 52 45 41    existing [CREA
6c30: 54 45 20 54 52 49 47 47 45 52 7c 74 72 69 67 67  TE TRIGGER|trigg
6c40: 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  er]...<p>^Tables
6c50: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
6c60: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42  ng the [DROP TAB
6c70: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
6c80: 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 52 45 41 54 45  </p>..<h3>CREATE
6c90: 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20 53 45   TABLE ... AS SE
6ca0: 4c 45 43 54 20 53 74 61 74 65 6d 65 6e 74 73 3c  LECT Statements<
6cb0: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 22 43 52  /h3>..<p>^(A "CR
6cc0: 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41  EATE TABLE ... A
6cd0: 53 20 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d  S SELECT" statem
6ce0: 65 6e 74 20 63 72 65 61 74 65 73 20 61 6e 64 20  ent creates and 
6cf0: 70 6f 70 75 6c 61 74 65 73 20 61 20 64 61 74 61  populates a data
6d00: 62 61 73 65 0a 74 61 62 6c 65 20 62 61 73 65 64  base.table based
6d10: 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20   on the results 
6d20: 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
6d30: 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65 20 74  ement.)^ ^(The t
6d40: 61 62 6c 65 20 68 61 73 20 74 68 65 20 73 61 6d  able has the sam
6d50: 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e.number of colu
6d60: 6d 6e 73 20 61 73 20 74 68 65 20 72 6f 77 73 20  mns as the rows 
6d70: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
6d80: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
6d90: 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 0a 65 61  . The name of.ea
6da0: 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65  ch column is the
6db0: 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 61 6d   same as the nam
6dc0: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
6dd0: 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 6e  onding column in
6de0: 20 74 68 65 20 72 65 73 75 6c 74 0a 73 65 74 20   the result.set 
6df0: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  of the SELECT st
6e00: 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65  atement.)^ ^(The
6e10: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f   declared type o
6e20: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  f each column is
6e30: 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79 20 74   determined.by t
6e40: 68 65 20 5b 65 78 70 72 65 73 73 69 6f 6e 20 61  he [expression a
6e50: 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20  ffinity] of the 
6e60: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78  corresponding ex
6e70: 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
6e80: 72 65 73 75 6c 74 20 73 65 74 0a 6f 66 20 74 68  result set.of th
6e90: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
6ea0: 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  nt, as follows:.
6eb0: 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 3c 74  </p>..<center><t
6ec0: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 20  able border=1>. 
6ed0: 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72 65 73 73   <tr><th>Express
6ee0: 69 6f 6e 20 41 66 66 69 6e 69 74 79 20 20 20 3c  ion Affinity   <
6ef0: 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63 6c 61 72  th>Column Declar
6f00: 65 64 20 54 79 70 65 0a 20 20 3c 74 72 3e 3c 74  ed Type.  <tr><t
6f10: 64 3e 54 45 58 54 20 20 20 20 20 20 20 20 20 20  d>TEXT          
6f20: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 54 45 58          <td>"TEX
6f30: 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 55 4d  T".  <tr><td>NUM
6f40: 45 52 49 43 20 20 20 20 20 20 20 20 20 20 20 20  ERIC            
6f50: 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a 20 20 3c     <td>"NUM".  <
6f60: 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45 52 20 20  tr><td>INTEGER  
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64               <td
6f80: 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e 3c 74 64  >"INT".  <tr><td
6f90: 3e 52 45 41 4c 20 20 20 20 20 20 20 20 20 20 20  >REAL           
6fa0: 20 20 20 20 20 20 20 3c 74 64 3e 22 52 45 41 4c         <td>"REAL
6fb0: 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 4f 4e 45  ".  <tr><td>NONE
6fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fd0: 20 20 3c 74 64 3e 22 22 20 28 65 6d 70 74 79 20    <td>"" (empty 
6fe0: 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62 6c 65 3e  string).</table>
6ff0: 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e  </center>)^..<p>
7000: 5e 28 41 20 74 61 62 6c 65 20 63 72 65 61 74 65  ^(A table create
7010: 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  d using CREATE T
7020: 41 42 4c 45 20 41 53 20 68 61 73 20 6e 6f 20 50  ABLE AS has no P
7030: 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
7040: 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 66  o.constraints of
7050: 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68 65 20 64   any kind. The d
7060: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
7070: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 4e  each column is N
7080: 55 4c 4c 2e 20 54 68 65 20 64 65 66 61 75 6c 74  ULL. The default
7090: 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65  .collation seque
70a0: 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  nce for each col
70b0: 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 74  umn of the new t
70c0: 61 62 6c 65 20 69 73 20 42 49 4e 41 52 59 2e 29  able is BINARY.)
70d0: 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 63 72  ^..<p>^Tables cr
70e0: 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
70f0: 54 45 20 54 41 42 4c 45 20 41 53 20 61 72 65 20  TE TABLE AS are 
7100: 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70 75 6c 61  initially popula
7110: 74 65 64 20 77 69 74 68 20 74 68 65 0a 72 6f 77  ted with the.row
7120: 73 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e  s of data return
7130: 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54  ed by the SELECT
7140: 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 52 6f 77   statement. ^Row
7150: 73 20 61 72 65 20 61 73 73 69 67 6e 65 64 20 63  s are assigned c
7160: 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61 73 63 65  ontiguously.asce
7170: 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d 20 76 61  nding [rowid] va
7180: 6c 75 65 73 2c 20 73 74 61 72 74 69 6e 67 20 77  lues, starting w
7190: 69 74 68 20 31 2c 20 69 6e 20 74 68 65 20 5b 6f  ith 1, in the [o
71a0: 72 64 65 72 20 62 79 7c 6f 72 64 65 72 5d 20 74  rder by|order] t
71b0: 68 61 74 20 74 68 65 79 0a 61 72 65 20 72 65 74  hat they.are ret
71c0: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
71d0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ECT statement...
71e0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
71f0: 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66 7d 20 7b   {tablecoldef} {
7200: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
7210: 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  n} {column defin
7220: 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  itions}</tcl>.<h
7230: 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69 6e 69 74  3>Column Definit
7240: 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55 6e  ions</h3>..<p>Un
7250: 6c 65 73 73 20 69 74 20 69 73 20 61 20 43 52 45  less it is a CRE
7260: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
7270: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
7280: 74 2c 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  t, a CREATE TABL
7290: 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e 65 20 6f  E includes.one o
72a0: 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d 6e 2d 64  r more [column-d
72b0: 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  ef|column defini
72c0: 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f 6e 61 6c  tions], optional
72d0: 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ly followed by a
72e0: 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62 6c 65 2d   list of.[table-
72f0: 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61 62 6c 65  constraint|table
7300: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 20   constraints].  
7310: 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69  Each column defi
7320: 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73 74 73 20  nition consists 
7330: 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f 66 20 74  of the.name of t
7340: 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70 74 69 6f  he column, optio
7350: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
7360: 79 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74  y the declared t
7370: 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ype of the colum
7380: 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f 72 20 6d  n,.then one or m
7390: 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 5b 63 6f  ore optional [co
73a0: 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 7c  lumn-constraint|
73b0: 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e  column constrain
73c0: 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64 20 69 6e  ts]. Included in
73d0: 0a 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20  .the definition 
73e0: 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74  of "column const
73f0: 72 61 69 6e 74 73 22 20 66 6f 72 20 74 68 65 20  raints" for the 
7400: 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 20  purposes of the 
7410: 70 72 65 76 69 6f 75 73 0a 73 74 61 74 65 6d 65  previous.stateme
7420: 6e 74 20 61 72 65 20 74 68 65 20 43 4f 4c 4c 41  nt are the COLLA
7430: 54 45 20 61 6e 64 20 44 45 46 41 55 4c 54 20 63  TE and DEFAULT c
7440: 6c 61 75 73 65 73 2c 20 65 76 65 6e 20 74 68 6f  lauses, even tho
7450: 75 67 68 20 74 68 65 73 65 20 61 72 65 20 6e 6f  ugh these are no
7460: 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73 74 72 61  t really.constra
7470: 69 6e 74 73 20 69 6e 20 74 68 65 20 73 65 6e 73  ints in the sens
7480: 65 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e  e that they do n
7490: 6f 74 20 72 65 73 74 72 69 63 74 20 74 68 65 20  ot restrict the 
74a0: 64 61 74 61 20 74 68 61 74 20 74 68 65 20 74 61  data that the ta
74b0: 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61 69 6e 2e  ble may.contain.
74c0: 20 54 68 65 20 6f 74 68 65 72 20 63 6f 6e 73 74   The other const
74d0: 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20 4e 55 4c  raints - NOT NUL
74e0: 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49 51 55 45  L, CHECK, UNIQUE
74f0: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  , PRIMARY KEY an
7500: 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f  d.FOREIGN KEY co
7510: 6e 73 74 72 61 69 6e 74 73 20 2d 20 69 6d 70 6f  nstraints - impo
7520: 73 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  se restrictions 
7530: 6f 6e 20 74 68 65 20 74 61 62 6c 65 73 20 64 61  on the tables da
7540: 74 61 2c 20 61 6e 64 20 61 72 65 20 61 72 65 0a  ta, and are are.
7550: 64 65 73 63 72 69 62 65 64 20 75 6e 64 65 72 20  described under 
7560: 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c 53 51 4c  [constraints|SQL
7570: 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74   Data Constraint
7580: 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70 3e 5e 55  s] below...<p>^U
7590: 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c 20 64  nlike most SQL d
75a0: 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74 65  atabases, SQLite
75b0: 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74 72 69   does not restri
75c0: 63 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 64  ct the type of d
75d0: 61 74 61 20 74 68 61 74 0a 6d 61 79 20 62 65 20  ata that.may be 
75e0: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61 20  inserted into a 
75f0: 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f 6e 20  column based on 
7600: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64 65 63 6c  the columns decl
7610: 61 72 65 64 20 74 79 70 65 2e 20 49 6e 73 74 65  ared type. Inste
7620: 61 64 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20  ad,.SQLite uses 
7630: 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e 67 5d  [dynamic typing]
7640: 2e 20 5e 54 68 65 20 64 65 63 6c 61 72 65 64 20  . ^The declared 
7650: 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  type of a column
7660: 20 69 73 20 75 73 65 64 20 74 6f 0a 64 65 74 65   is used to.dete
7670: 72 6d 69 6e 65 20 74 68 65 20 5b 61 66 66 69 6e  rmine the [affin
7680: 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 6c 75  ity] of the colu
7690: 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 70 3e 54 68 65  mn only...<p>The
76a0: 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20   DEFAULT clause 
76b0: 73 70 65 63 69 66 69 65 73 20 61 20 64 65 66 61  specifies a defa
76c0: 75 6c 74 20 76 61 6c 75 65 20 74 6f 20 75 73 65  ult value to use
76d0: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
76e0: 69 66 20 6e 6f 0a 76 61 6c 75 65 20 69 73 20 65  if no.value is e
76f0: 78 70 6c 69 63 69 74 6c 79 20 70 72 6f 76 69 64  xplicitly provid
7700: 65 64 20 62 79 20 74 68 65 20 75 73 65 72 20 77  ed by the user w
7710: 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20 5b 49 4e  hen doing an [IN
7720: 53 45 52 54 5d 2e 20 5e 49 66 20 74 68 65 72 65  SERT]. ^If there
7730: 0a 69 73 20 6e 6f 20 65 78 70 6c 69 63 69 74 20  .is no explicit 
7740: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 61  DEFAULT clause a
7750: 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c  ttached to a col
7760: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20  umn definition, 
7770: 74 68 65 6e 20 74 68 65 20 0a 64 65 66 61 75 6c  then the .defaul
7780: 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  t value of the c
7790: 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 5e  olumn is NULL. ^
77a0: 28 41 6e 20 65 78 70 6c 69 63 69 74 20 44 45 46  (An explicit DEF
77b0: 41 55 4c 54 20 63 6c 61 75 73 65 20 6d 61 79 20  AULT clause may 
77c0: 73 70 65 63 69 66 79 0a 74 68 61 74 20 74 68 65  specify.that the
77d0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69   default value i
77e0: 73 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67  s NULL, a string
77f0: 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20 62 6c 6f   constant, a blo
7800: 62 20 63 6f 6e 73 74 61 6e 74 2c 20 61 0a 73 69  b constant, a.si
7810: 67 6e 65 64 2d 6e 75 6d 62 65 72 2c 20 6f 72 20  gned-number, or 
7820: 61 6e 79 20 63 6f 6e 73 74 61 6e 74 20 65 78 70  any constant exp
7830: 72 65 73 73 69 6f 6e 20 65 6e 63 6c 6f 73 65 64  ression enclosed
7840: 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e   in parentheses.
7850: 20 41 6e 20 65 78 70 6c 69 63 69 74 0a 64 65 66   An explicit.def
7860: 61 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61  ault value may a
7870: 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  lso be one of th
7880: 65 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69  e special case-i
7890: 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f  ndependent keywo
78a0: 72 64 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45  rds.CURRENT_TIME
78b0: 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f  , CURRENT_DATE o
78c0: 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  r CURRENT_TIMEST
78d0: 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20  AMP.)^ ^For the 
78e0: 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a  purposes of the.
78f0: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20  DEFAULT clause, 
7900: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  an expression is
7910: 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73   considered cons
7920: 74 61 6e 74 20 70 72 6f 76 69 64 65 64 20 74 68  tant provided th
7930: 61 74 20 69 74 20 64 6f 65 73 0a 6e 6f 74 20 63  at it does.not c
7940: 6f 6e 74 61 69 6e 20 61 6e 79 20 73 75 62 2d 71  ontain any sub-q
7950: 75 65 72 69 65 73 20 6f 72 20 73 74 72 69 6e 67  ueries or string
7960: 20 63 6f 6e 73 74 61 6e 74 73 20 65 6e 63 6c 6f   constants enclo
7970: 73 65 64 20 69 6e 20 64 6f 75 62 6c 65 20 71 75  sed in double qu
7980: 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45 61 63 68  otes...<p>^(Each
7990: 20 74 69 6d 65 20 61 20 72 6f 77 20 69 73 20 69   time a row is i
79a0: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
79b0: 20 74 61 62 6c 65 20 62 79 20 61 6e 20 49 4e 53   table by an INS
79c0: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68  ERT statement th
79d0: 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20 70 72 6f  at .does not pro
79e0: 76 69 64 65 20 65 78 70 6c 69 63 69 74 20 76 61  vide explicit va
79f0: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 74 61 62  lues for all tab
7a00: 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68 65 20 76  le columns the v
7a10: 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e 0a  alues stored in.
7a20: 74 68 65 20 6e 65 77 20 72 6f 77 20 61 72 65 20  the new row are 
7a30: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
7a40: 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75  eir default valu
7a50: 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c 6f 77 73  es)^, as follows
7a60: 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ul>.  <li><p
7a70: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
7a80: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
7a90: 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e 73 74 61  lumn is a consta
7aa0: 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74 2c 20 62  nt NULL, text, b
7ab0: 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69 67 6e 65  lob or.    signe
7ac0: 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75 65 2c 20  d-number value, 
7ad0: 74 68 65 6e 20 74 68 61 74 20 76 61 6c 75 65 20  then that value 
7ae0: 69 73 20 75 73 65 64 20 64 69 72 65 63 74 6c 79  is used directly
7af0: 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e   in the new row.
7b00: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ..  <li><p>^If t
7b10: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
7b20: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   of a column is 
7b30: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
7b40: 20 70 61 72 65 6e 74 68 65 73 65 73 2c 20 74 68   parentheses, th
7b50: 65 6e 0a 20 20 20 20 74 68 65 20 65 78 70 72 65  en.    the expre
7b60: 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
7b70: 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  ed once for each
7b80: 20 72 6f 77 20 69 6e 73 65 72 74 65 64 20 61 6e   row inserted an
7b90: 64 20 74 68 65 20 72 65 73 75 6c 74 73 0a 20 20  d the results.  
7ba0: 20 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65    used in the ne
7bb0: 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  w row...  <li><p
7bc0: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
7bd0: 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75   value of a colu
7be0: 6d 6e 20 69 73 20 43 55 52 52 45 4e 54 5f 54 49  mn is CURRENT_TI
7bf0: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
7c00: 20 6f 72 0a 20 20 20 20 43 55 52 52 45 4e 54 5f   or.    CURRENT_
7c10: 44 41 54 45 54 49 4d 45 2c 20 74 68 65 6e 20 74  DATETIME, then t
7c20: 68 65 20 76 61 6c 75 65 20 75 73 65 64 20 69 6e  he value used in
7c30: 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20   the new row is 
7c40: 61 20 74 65 78 74 0a 20 20 20 20 72 65 70 72 65  a text.    repre
7c50: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
7c60: 20 63 75 72 72 65 6e 74 20 55 54 43 20 64 61 74   current UTC dat
7c70: 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e  e and/or time. ^
7c80: 46 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  For CURRENT_TIME
7c90: 2c 20 74 68 65 0a 20 20 20 20 66 6f 72 6d 61 74  , the.    format
7ca0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   of the value is
7cb0: 20 22 48 48 3a 4d 4d 3a 53 53 22 2e 20 5e 46 6f   "HH:MM:SS". ^Fo
7cc0: 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20  r CURRENT_DATE, 
7cd0: 22 59 59 59 59 2d 4d 4d 2d 44 44 22 2e 20 5e 54  "YYYY-MM-DD". ^T
7ce0: 68 65 0a 20 20 20 20 66 6f 72 6d 61 74 20 66 6f  he.    format fo
7cf0: 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  r CURRENT_TIMEST
7d00: 41 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d  AMP is "YYYY-MM-
7d10: 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f  DD HH:MM:SS"..</
7d20: 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c  ul>..<p>^The COL
7d30: 4c 41 54 45 20 63 6c 61 75 73 65 20 73 70 65 63  LATE clause spec
7d40: 69 66 69 65 73 20 74 68 65 20 6e 61 6d 65 20 6f  ifies the name o
7d50: 66 20 61 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73  f a [collating s
7d60: 65 71 75 65 6e 63 65 5d 20 74 6f 20 75 73 65 20  equence] to use 
7d70: 61 73 0a 74 68 65 20 64 65 66 61 75 6c 74 20 63  as.the default c
7d80: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
7d90: 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  e for the column
7da0: 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c 4c 41 54 45  . ^If no COLLATE
7db0: 20 63 6c 61 75 73 65 20 69 73 0a 73 70 65 63 69   clause is.speci
7dc0: 66 69 65 64 2c 20 74 68 65 20 64 65 66 61 75 6c  fied, the defaul
7dd0: 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
7de0: 65 6e 63 65 20 69 73 20 5b 42 49 4e 41 52 59 5d  ence is [BINARY]
7df0: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65  ...<p>^The numbe
7e00: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
7e10: 61 20 74 61 62 6c 65 20 69 73 20 6c 69 6d 69 74  a table is limit
7e20: 65 64 20 62 79 20 74 68 65 20 5b 53 51 4c 49 54  ed by the [SQLIT
7e30: 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d 0a 63 6f  E_MAX_COLUMN].co
7e40: 6d 70 69 6c 65 2d 74 69 6d 65 20 70 61 72 61 6d  mpile-time param
7e50: 65 74 65 72 2e 20 5e 41 20 73 69 6e 67 6c 65 20  eter. ^A single 
7e60: 72 6f 77 20 6f 66 20 61 20 74 61 62 6c 65 20 63  row of a table c
7e70: 61 6e 6e 6f 74 20 73 74 6f 72 65 20 6d 6f 72 65  annot store more
7e80: 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41   than.[SQLITE_MA
7e90: 58 5f 4c 45 4e 47 54 48 5d 20 62 79 74 65 73 20  X_LENGTH] bytes 
7ea0: 6f 66 20 64 61 74 61 2e 20 5e 42 6f 74 68 20 6f  of data. ^Both o
7eb0: 66 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20 63  f these limits c
7ec0: 61 6e 20 62 65 20 6c 6f 77 65 72 65 64 20 61 74  an be lowered at
7ed0: 0a 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74  .runtime using t
7ee0: 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69  he [sqlite3_limi
7ef0: 74 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72  t()] C/C++ inter
7f00: 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  face.</p>..<tcl>
7f10: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6f 6e  hd_fragment {con
7f20: 73 74 72 61 69 6e 74 73 7d 20 7b 63 6f 6e 73 74  straints} {const
7f30: 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  raints}</tcl>.<h
7f40: 33 3e 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74  3>SQL Data Const
7f50: 72 61 69 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  raints</h3>..<p>
7f60: 5e 45 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53  ^Each table in S
7f70: 51 4c 69 74 65 20 6d 61 79 20 68 61 76 65 20 61  QLite may have a
7f80: 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52  t most one <b>PR
7f90: 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e  IMARY KEY</b>. ^
7fa0: 49 66 20 74 68 65 0a 20 20 6b 65 79 77 6f 72 64  If the.  keyword
7fb0: 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72  s PRIMARY KEY ar
7fc0: 65 20 61 64 64 65 64 20 74 6f 20 61 20 63 6f 6c  e added to a col
7fd0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20  umn definition, 
7fe0: 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79  then the primary
7ff0: 20 6b 65 79 0a 20 20 66 6f 72 20 74 68 65 20 74   key.  for the t
8000: 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  able consists of
8010: 20 74 68 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c   that single col
8020: 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50  umn. ^Or, if a P
8030: 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73  RIMARY KEY claus
8040: 65 20 0a 20 20 69 73 20 73 70 65 63 69 66 69 65  e .  is specifie
8050: 64 20 61 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f  d as a [table-co
8060: 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20  nstraint], then 
8070: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
8080: 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 63  of the table.  c
8090: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c  onsists of the l
80a0: 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ist of columns s
80b0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
80c0: 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20   of the PRIMARY 
80d0: 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e 49  KEY clause..  ^I
80e0: 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
80f0: 74 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59  than one PRIMARY
8100: 20 4b 45 59 20 63 6c 61 75 73 65 20 69 6e 20 61   KEY clause in a
8110: 20 73 69 6e 67 6c 65 20 43 52 45 41 54 45 20 54   single CREATE T
8120: 41 42 4c 45 0a 20 20 73 74 61 74 65 6d 65 6e 74  ABLE.  statement
8130: 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  , it is an error
8140: 2e 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65  ...<p>If a table
8150: 20 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f   has a single co
8160: 6c 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79  lumn primary key
8170: 2c 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72  , and the declar
8180: 65 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a  ed type of that.
8190: 20 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54    column is "INT
81a0: 45 47 45 52 22 2c 20 74 68 65 6e 20 74 68 65 20  EGER", then the 
81b0: 63 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20  column is known 
81c0: 61 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50  as an [INTEGER P
81d0: 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53  RIMARY KEY]..  S
81e0: 65 65 20 62 65 6c 6f 77 20 66 6f 72 20 61 20 64  ee below for a d
81f0: 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68  escription of th
8200: 65 20 73 70 65 63 69 61 6c 20 70 72 6f 70 65 72  e special proper
8210: 74 69 65 73 20 61 6e 64 20 62 65 68 61 76 69 6f  ties and behavio
8220: 75 72 73 0a 20 20 61 73 73 6f 63 69 61 74 65 64  urs.  associated
8230: 20 77 69 74 68 20 61 6e 20 5b 49 4e 54 45 47 45   with an [INTEGE
8240: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a  R PRIMARY KEY]..
8250: 0a 3c 70 3e 5e 45 61 63 68 20 72 6f 77 20 69 6e  .<p>^Each row in
8260: 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61 20   a table with a 
8270: 70 72 69 6d 61 72 79 20 6b 65 79 20 6d 75 73 74  primary key must
8280: 20 66 65 61 74 75 72 65 20 61 20 75 6e 69 71 75   feature a uniqu
8290: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20  e combination.  
82a0: 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 69 74 73  of values in its
82b0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
82c0: 75 6d 6e 73 2e 20 5e 46 6f 72 20 74 68 65 20 70  umns. ^For the p
82d0: 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72  urposes of deter
82e0: 6d 69 6e 69 6e 67 0a 20 20 74 68 65 20 75 6e 69  mining.  the uni
82f0: 71 75 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61  queness of prima
8300: 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e  ry key values, N
8310: 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
8320: 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e  onsidered distin
8330: 63 74 20 66 72 6f 6d 0a 20 20 61 6c 6c 20 6f 74  ct from.  all ot
8340: 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c  her values, incl
8350: 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c  uding other NULL
8360: 73 2e 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52  s. ^If an [INSER
8370: 54 5d 20 6f 72 20 5b 55 50 44 41 54 45 5d 0a 20  T] or [UPDATE]. 
8380: 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
8390: 70 74 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  pts to modify th
83a0: 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20  e table content 
83b0: 73 6f 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d  so that two or m
83c0: 6f 72 65 20 72 6f 77 73 0a 20 20 66 65 61 74 75  ore rows.  featu
83d0: 72 65 20 69 64 65 6e 74 69 63 61 6c 20 70 72 69  re identical pri
83e0: 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c  mary key values,
83f0: 20 69 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61   it is a constra
8400: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20  int violation.. 
8410: 20 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   According to th
8420: 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20  e SQL standard, 
8430: 50 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75  PRIMARY KEY shou
8440: 6c 64 20 61 6c 77 61 79 73 20 69 6d 70 6c 79 20  ld always imply 
8450: 4e 4f 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e 66 6f  NOT NULL..  Unfo
8460: 72 74 75 6e 61 74 65 6c 79 2c 20 64 75 65 20 74  rtunately, due t
8470: 6f 20 61 20 6c 6f 6e 67 2d 73 74 61 6e 64 69 6e  o a long-standin
8480: 67 20 63 6f 64 69 6e 67 20 6f 76 65 72 73 69 67  g coding oversig
8490: 68 74 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ht, this is not 
84a0: 74 68 65 0a 20 20 63 61 73 65 20 69 6e 20 53 51  the.  case in SQ
84b0: 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73 20 74 68  Lite. ^Unless th
84c0: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 5b  e column is an [
84d0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
84e0: 4b 45 59 5d 20 53 51 4c 69 74 65 0a 20 20 61 6c  KEY] SQLite.  al
84f0: 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73  lows NULL values
8500: 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20 4b 45   in a PRIMARY KE
8510: 59 20 63 6f 6c 75 6d 6e 2e 20 20 57 65 20 63 6f  Y column.  We co
8520: 75 6c 64 20 63 68 61 6e 67 65 20 53 51 4c 69 74  uld change SQLit
8530: 65 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74  e to.  conform t
8540: 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 28  o the standard (
8550: 61 6e 64 20 77 65 20 6d 69 67 68 74 20 64 6f 20  and we might do 
8560: 73 6f 20 69 6e 20 74 68 65 20 66 75 74 75 72 65  so in the future
8570: 29 2c 20 62 75 74 20 62 79 20 74 68 65 20 74 69  ), but by the ti
8580: 6d 65 0a 20 20 74 68 65 20 6f 76 65 72 73 69 67  me.  the oversig
8590: 68 74 20 77 61 73 20 64 69 73 63 6f 76 65 72 65  ht was discovere
85a0: 64 2c 20 53 51 4c 69 74 65 20 77 61 73 20 69 6e  d, SQLite was in
85b0: 20 73 75 63 68 20 77 69 64 65 20 75 73 65 20 74   such wide use t
85c0: 68 61 74 20 77 65 20 66 65 61 72 65 64 0a 20 20  hat we feared.  
85d0: 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79 20  breaking legacy 
85e0: 63 6f 64 65 20 69 66 20 77 65 20 66 69 78 65 64  code if we fixed
85f0: 20 74 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20 53   the problem.  S
8600: 6f 20 66 6f 72 20 6e 6f 77 20 77 65 20 68 61 76  o for now we hav
8610: 65 20 63 68 6f 73 65 6e 20 74 6f 0a 20 20 63 6f  e chosen to.  co
8620: 6e 74 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20  ntinue allowing 
8630: 4e 55 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52 59  NULLs in PRIMARY
8640: 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 20 20 44   KEY columns.  D
8650: 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64  evelopers should
8660: 20 62 65 0a 20 20 61 77 61 72 65 2c 20 68 6f 77   be.  aware, how
8670: 65 76 65 72 2c 20 74 68 61 74 20 77 65 20 6d 61  ever, that we ma
8680: 79 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20  y change SQLite 
8690: 74 6f 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68  to conform to th
86a0: 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 69  e SQL standard i
86b0: 6e 0a 20 20 66 75 74 75 72 65 20 61 6e 64 20 73  n.  future and s
86c0: 68 6f 75 6c 64 20 64 65 73 69 67 6e 20 6e 65 77  hould design new
86d0: 20 70 72 6f 67 72 61 6d 73 20 61 63 63 6f 72 64   programs accord
86e0: 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 5e 41 20 3c 62  ingly...<p>^A <b
86f0: 3e 55 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73  >UNIQUE</b> cons
8700: 74 72 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61  traint is simila
8710: 72 20 74 6f 20 61 20 50 52 49 4d 41 52 59 20 4b  r to a PRIMARY K
8720: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65  EY constraint, e
8730: 78 63 65 70 74 0a 20 20 74 68 61 74 20 61 20 73  xcept.  that a s
8740: 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20  ingle table may 
8750: 68 61 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20  have any number 
8760: 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  of UNIQUE constr
8770: 61 69 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63 68  aints. ^For each
8780: 0a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  .  UNIQUE constr
8790: 61 69 6e 74 20 6f 6e 20 74 68 65 20 74 61 62 6c  aint on the tabl
87a0: 65 2c 20 65 61 63 68 20 72 6f 77 20 6d 75 73 74  e, each row must
87b0: 20 66 65 61 74 75 72 65 20 61 20 75 6e 69 71 75   feature a uniqu
87c0: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20  e combination.  
87d0: 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  of values in the
87e0: 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66   columns identif
87f0: 69 65 64 20 62 79 20 74 68 65 20 55 4e 49 51 55  ied by the UNIQU
8800: 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 5e 41  E constraint. ^A
8810: 73 20 77 69 74 68 0a 20 20 50 52 49 4d 41 52 59  s with.  PRIMARY
8820: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73   KEY constraints
8830: 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73  , for the purpos
8840: 65 73 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e  es of UNIQUE con
8850: 73 74 72 61 69 6e 74 73 20 4e 55 4c 4c 20 76 61  straints NULL va
8860: 6c 75 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69  lues.  are consi
8870: 64 65 72 65 64 20 64 69 73 74 69 6e 63 74 20 66  dered distinct f
8880: 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61  rom all other va
8890: 6c 75 65 73 20 28 69 6e 63 6c 75 64 69 6e 67 20  lues (including 
88a0: 6f 74 68 65 72 20 4e 55 4c 4c 73 29 2e 0a 20 20  other NULLs)..  
88b0: 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d 20  ^If an [INSERT] 
88c0: 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74  or [UPDATE] stat
88d0: 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74  ement attempts t
88e0: 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62  o modify the tab
88f0: 6c 65 20 63 6f 6e 74 65 6e 74 20 73 6f 0a 20 20  le content so.  
8900: 74 68 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65  that two or more
8910: 20 72 6f 77 73 20 66 65 61 74 75 72 65 20 69 64   rows feature id
8920: 65 6e 74 69 63 61 6c 20 76 61 6c 75 65 73 20 69  entical values i
8930: 6e 20 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d  n a set of colum
8940: 6e 73 20 74 68 61 74 0a 20 20 61 72 65 20 73 75  ns that.  are su
8950: 62 6a 65 63 74 20 74 6f 20 61 20 55 4e 49 51 55  bject to a UNIQU
8960: 45 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74  E constraint, it
8970: 20 69 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74   is a constraint
8980: 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e   violation...<p>
8990: 5e 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  ^[INTEGER PRIMAR
89a0: 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 73 20 61  Y KEY] columns a
89b0: 73 69 64 65 2c 20 62 6f 74 68 20 55 4e 49 51 55  side, both UNIQU
89c0: 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45  E and PRIMARY KE
89d0: 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  Y.  constraints 
89e0: 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  are implemented 
89f0: 62 79 20 63 72 65 61 74 69 6e 67 20 61 6e 20 69  by creating an i
8a00: 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61  ndex in the data
8a10: 62 61 73 65 20 28 69 6e 20 74 68 65 20 73 61 6d  base (in the sam
8a20: 65 0a 20 20 77 61 79 20 61 73 20 61 20 5b 43 52  e.  way as a [CR
8a30: 45 41 54 45 20 49 4e 44 45 58 7c 22 43 52 45 41  EATE INDEX|"CREA
8a40: 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 22  TE UNIQUE INDEX"
8a50: 5d 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  ] statement woul
8a60: 64 29 2e 20 5e 53 75 63 68 20 61 6e 20 0a 20 20  d). ^Such an .  
8a70: 69 6e 64 65 78 20 69 73 20 75 73 65 64 20 6c 69  index is used li
8a80: 6b 65 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 64  ke any other ind
8a90: 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ex in the databa
8aa0: 73 65 20 74 6f 20 5b 6f 70 74 69 6d 69 7a 65 72  se to [optimizer
8ab0: 7c 6f 70 74 69 6d 69 7a 65 0a 20 20 71 75 65 72  |optimize.  quer
8ac0: 69 65 73 5d 2e 20 20 41 73 20 61 20 72 65 73 75  ies].  As a resu
8ad0: 6c 74 2c 20 74 68 65 72 65 20 6f 66 74 65 6e 20  lt, there often 
8ae0: 6e 6f 20 61 64 76 61 6e 74 61 67 65 20 28 62 75  no advantage (bu
8af0: 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 6f 76  t significant ov
8b00: 65 72 68 65 61 64 29 0a 20 20 69 6e 20 63 72 65  erhead).  in cre
8b10: 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 20 6f  ating an index o
8b20: 6e 20 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d  n a set of colum
8b30: 6e 73 20 74 68 61 74 20 61 72 65 20 61 6c 72 65  ns that are alre
8b40: 61 64 79 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79  ady collectively
8b50: 0a 20 20 73 75 62 6a 65 63 74 20 74 6f 20 61 20  .  subject to a 
8b60: 55 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52  UNIQUE or PRIMAR
8b70: 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
8b80: 2e 0a 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48 45  ...<p>^(A <b>CHE
8b90: 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e  CK</b> constrain
8ba0: 74 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65  t may be attache
8bb0: 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65  d to a column de
8bc0: 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73 70  finition or.  sp
8bd0: 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61 62  ecified as a tab
8be0: 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 49  le constraint. I
8bf0: 6e 20 70 72 61 63 74 69 63 65 20 69 74 20 6d 61  n practice it ma
8c00: 6b 65 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63  kes no differenc
8c10: 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20 20 74 69  e.)^ ^(Each.  ti
8c20: 6d 65 20 61 20 6e 65 77 20 72 6f 77 20 69 73 20  me a new row is 
8c30: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
8c40: 65 20 74 61 62 6c 65 20 6f 72 20 61 6e 20 65 78  e table or an ex
8c50: 69 73 74 69 6e 67 20 72 6f 77 20 69 73 20 75 70  isting row is up
8c60: 64 61 74 65 64 2c 0a 20 20 74 68 65 20 65 78 70  dated,.  the exp
8c70: 72 65 73 73 69 6f 6e 20 61 73 73 6f 63 69 61 74  ression associat
8c80: 65 64 20 77 69 74 68 20 65 61 63 68 20 43 48 45  ed with each CHE
8c90: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  CK constraint is
8ca0: 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 0a 20   evaluated and. 
8cb0: 20 63 61 73 74 20 74 6f 20 61 20 4e 55 4d 45 52   cast to a NUMER
8cc0: 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  IC value in the 
8cd0: 73 61 6d 65 20 77 61 79 20 61 73 20 61 20 5b 43  same way as a [C
8ce0: 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  AST expression].
8cf0: 20 49 66 20 74 68 65 20 0a 20 20 72 65 73 75 6c   If the .  resul
8d00: 74 20 69 73 20 7a 65 72 6f 20 28 69 6e 74 65 67  t is zero (integ
8d10: 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65  er value 0 or re
8d20: 61 6c 20 76 61 6c 75 65 20 30 2e 30 29 2c 20 74  al value 0.0), t
8d30: 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hen a constraint
8d40: 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61 73  .  violation has
8d50: 20 6f 63 63 75 72 72 65 64 2e 29 5e 20 5e 49 66   occurred.)^ ^If
8d60: 20 74 68 65 20 43 48 45 43 4b 20 65 78 70 72 65   the CHECK expre
8d70: 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
8d80: 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61 6e  to NULL, or.  an
8d90: 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f  y other non-zero
8da0: 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f   value, it is no
8db0: 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
8dc0: 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 43 48  iolation...<p>CH
8dd0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
8de0: 68 61 76 65 20 62 65 65 6e 20 73 75 70 70 6f 72  have been suppor
8df0: 74 65 64 20 73 69 6e 63 65 20 5b 76 65 72 73 69  ted since [versi
8e00: 6f 6e 20 33 2e 33 2e 30 5d 2e 20 50 72 69 6f 72  on 3.3.0]. Prior
8e10: 20 74 6f 0a 20 20 76 65 72 73 69 6f 6e 20 33 2e   to.  version 3.
8e20: 33 2e 30 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74  3.0, CHECK const
8e30: 72 61 69 6e 74 73 20 77 65 72 65 20 70 61 72 73  raints were pars
8e40: 65 64 20 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72  ed but not enfor
8e50: 63 65 64 2e 0a 0a 3c 70 3e 5e 41 20 3c 62 3e 4e  ced...<p>^A <b>N
8e60: 4f 54 20 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73  OT NULL</b> cons
8e70: 74 72 61 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20  traint may only 
8e80: 62 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  be attached to a
8e90: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
8ea0: 6f 6e 2c 0a 20 20 6e 6f 74 20 73 70 65 63 69 66  on,.  not specif
8eb0: 69 65 64 20 61 73 20 61 20 74 61 62 6c 65 20 63  ied as a table c
8ec0: 6f 6e 73 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20  onstraint.  Not 
8ed0: 73 75 72 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28  surprisingly, ^(
8ee0: 61 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e  a NOT NULL.  con
8ef0: 73 74 72 61 69 6e 74 20 64 69 63 74 61 74 65 73  straint dictates
8f00: 20 74 68 61 74 20 74 68 65 20 61 73 73 6f 63 69   that the associ
8f10: 61 74 65 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20  ated column may 
8f20: 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55  not contain a NU
8f30: 4c 4c 20 76 61 6c 75 65 2e 0a 20 20 41 74 74 65  LL value..  Atte
8f40: 6d 70 74 69 6e 67 20 74 6f 20 73 65 74 20 74 68  mpting to set th
8f50: 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74  e column value t
8f60: 6f 20 4e 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65  o NULL when inse
8f70: 72 74 69 6e 67 20 61 20 6e 65 77 20 72 6f 77 20  rting a new row 
8f80: 6f 72 0a 20 20 75 70 64 61 74 69 6e 67 20 61 6e  or.  updating an
8f90: 20 65 78 69 73 74 69 6e 67 20 6f 6e 65 20 63 61   existing one ca
8fa0: 75 73 65 73 20 61 20 63 6f 6e 73 74 72 61 69 6e  uses a constrain
8fb0: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a  t violation.)^..
8fc0: 3c 70 3e 45 78 61 63 74 6c 79 20 68 6f 77 20 61  <p>Exactly how a
8fd0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
8fe0: 61 74 69 6f 6e 20 69 73 20 64 65 61 6c 74 20 77  ation is dealt w
8ff0: 69 74 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ith is determine
9000: 64 20 62 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66  d by the.  [conf
9010: 6c 69 63 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73  lict clause|cons
9020: 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
9030: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
9040: 69 74 68 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50  ithm]. Each .  P
9050: 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51  RIMARY KEY, UNIQ
9060: 55 45 2c 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64  UE, NOT NULL and
9070: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
9080: 74 20 68 61 73 20 61 20 64 65 66 61 75 6c 74 20  t has a default 
9090: 63 6f 6e 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c  conflict.  resol
90a0: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e  ution algorithm.
90b0: 20 5e 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55   ^PRIMARY KEY, U
90c0: 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
90d0: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d  LL constraints m
90e0: 61 79 20 62 65 0a 20 20 65 78 70 6c 69 63 69 74  ay be.  explicit
90f0: 6c 79 20 61 73 73 69 67 6e 65 64 20 61 20 64 65  ly assigned a de
9100: 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72  fault conflict r
9110: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
9120: 74 68 6d 20 62 79 20 69 6e 63 6c 75 64 69 6e 67  thm by including
9130: 0a 20 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63  .  a [conflict-c
9140: 6c 61 75 73 65 5d 20 69 6e 20 74 68 65 69 72 20  lause] in their 
9150: 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72  definitions. ^Or
9160: 2c 20 69 66 20 61 20 63 6f 6e 73 74 72 61 69 6e  , if a constrain
9170: 74 20 64 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64  t definition.  d
9180: 6f 65 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20  oes not include 
9190: 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  a [conflict-clau
91a0: 73 65 5d 20 6f 72 20 69 74 20 69 73 20 61 20 43  se] or it is a C
91b0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c  HECK constraint,
91c0: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 63   the default.  c
91d0: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
91e0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
91f0: 41 42 4f 52 54 2e 20 5e 44 69 66 66 65 72 65 6e  ABORT. ^Differen
9200: 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69  t constraints wi
9210: 74 68 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20  thin the.  same 
9220: 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64  table may have d
9230: 69 66 66 65 72 65 6e 74 20 64 65 66 61 75 6c 74  ifferent default
9240: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
9250: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e  tion algorithms.
9260: 20 53 65 65 0a 20 20 74 68 65 20 73 65 63 74 69   See.  the secti
9270: 6f 6e 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f  on titled [ON CO
9280: 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69  NFLICT] for addi
9290: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
92a0: 6f 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  on...<tcl>hd_fra
92b0: 67 6d 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54  gment rowid {INT
92c0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
92d0: 7d 20 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74  } ROWID rowid</t
92e0: 63 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61  cl>.<h3>ROWIDs a
92f0: 6e 64 20 74 68 65 20 49 4e 54 45 47 45 52 20 50  nd the INTEGER P
9300: 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a  RIMARY KEY</h3>.
9310: 0a 3c 70 3e 5e 45 76 65 72 79 20 72 6f 77 20 6f  .<p>^Every row o
9320: 66 20 65 76 65 72 79 20 53 51 4c 69 74 65 20 74  f every SQLite t
9330: 61 62 6c 65 20 68 61 73 20 61 20 36 34 2d 62 69  able has a 64-bi
9340: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
9350: 20 6b 65 79 20 0a 74 68 61 74 20 75 6e 69 71 75   key .that uniqu
9360: 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20 74  ely identifies t
9370: 68 65 20 72 6f 77 20 77 69 74 68 69 6e 20 69 74  he row within it
9380: 73 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  s table. This in
9390: 74 65 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79  teger is usually
93a0: 0a 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77  .called the "row
93b0: 69 64 22 2e 20 5e 54 68 65 20 72 6f 77 69 64 20  id". ^The rowid 
93c0: 76 61 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63  value can be acc
93d0: 65 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20  essed using one 
93e0: 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 0a 63  of the special.c
93f0: 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20  ase-independent 
9400: 6e 61 6d 65 73 20 22 72 6f 77 69 64 22 2c 20 22  names "rowid", "
9410: 6f 69 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64  oid", or "_rowid
9420: 5f 22 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  _" in place of a
9430: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49   column name..^I
9440: 66 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  f a table contai
9450: 6e 73 20 61 20 75 73 65 72 20 64 65 66 69 6e 65  ns a user define
9460: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22  d column named "
9470: 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72  rowid", "oid" or
9480: 20 22 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e   "_rowid_",.then
9490: 20 74 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79   that name alway
94a0: 73 20 72 65 66 65 72 73 20 74 68 65 20 65 78 70  s refers the exp
94b0: 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64  licitly declared
94c0: 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e   column and cann
94d0: 6f 74 20 62 65 20 75 73 65 64 0a 74 6f 20 72 65  ot be used.to re
94e0: 74 72 69 65 76 65 20 74 68 65 20 69 6e 74 65 67  trieve the integ
94f0: 65 72 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a  er rowid value..
9500: 0a 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72  .<p>The data for
9510: 20 65 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53   each table in S
9520: 51 4c 69 74 65 20 69 73 20 73 74 6f 72 65 64 20  QLite is stored 
9530: 61 73 20 61 20 42 2d 54 72 65 65 20 73 74 72 75  as a B-Tree stru
9540: 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67  cture containing
9550: 0a 61 6e 20 65 6e 74 72 79 20 66 6f 72 20 65 61  .an entry for ea
9560: 63 68 20 74 61 62 6c 65 20 72 6f 77 2c 20 75 73  ch table row, us
9570: 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 76 61  ing the rowid va
9580: 6c 75 65 20 61 73 20 74 68 65 20 6b 65 79 2e 20  lue as the key. 
9590: 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 0a  This means that.
95a0: 72 65 74 72 69 65 76 69 6e 67 20 6f 72 20 73 6f  retrieving or so
95b0: 72 74 69 6e 67 20 72 65 63 6f 72 64 73 20 62 79  rting records by
95c0: 20 72 6f 77 69 64 20 69 73 20 66 61 73 74 2e 20   rowid is fast. 
95d0: 53 65 61 72 63 68 69 6e 67 20 66 6f 72 20 61 20  Searching for a 
95e0: 72 65 63 6f 72 64 20 77 69 74 68 20 61 0a 73 70  record with a.sp
95f0: 65 63 69 66 69 63 20 72 6f 77 69 64 2c 20 6f 72  ecific rowid, or
9600: 20 66 6f 72 20 61 6c 6c 20 72 65 63 6f 72 64 73   for all records
9610: 20 77 69 74 68 20 72 6f 77 69 64 73 20 77 69 74   with rowids wit
9620: 68 69 6e 20 61 20 73 70 65 63 69 66 69 65 64 20  hin a specified 
9630: 72 61 6e 67 65 20 69 73 0a 61 72 6f 75 6e 64 20  range is.around 
9640: 74 77 69 63 65 20 61 73 20 66 61 73 74 20 61 73  twice as fast as
9650: 20 61 20 73 69 6d 69 6c 61 72 20 73 65 61 72 63   a similar searc
9660: 68 20 6d 61 64 65 20 62 79 20 73 70 65 63 69 66  h made by specif
9670: 79 69 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 50  ying any other P
9680: 52 49 4d 41 52 59 0a 4b 45 59 20 6f 72 20 69 6e  RIMARY.KEY or in
9690: 64 65 78 65 64 20 76 61 6c 75 65 2e 0a 0a 3c 70  dexed value...<p
96a0: 3e 20 5e 57 69 74 68 20 6f 6e 65 20 65 78 63 65  > ^With one exce
96b0: 70 74 69 6f 6e 2c 20 69 66 20 61 20 74 61 62 6c  ption, if a tabl
96c0: 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20  e has a primary 
96d0: 6b 65 79 20 74 68 61 74 20 63 6f 6e 73 69 73 74  key that consist
96e0: 73 20 6f 66 20 61 20 73 69 6e 67 6c 65 0a 63 6f  s of a single.co
96f0: 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 64 65  lumn, and the de
9700: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
9710: 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49  hat column is "I
9720: 4e 54 45 47 45 52 22 20 69 6e 20 61 6e 79 20 6d  NTEGER" in any m
9730: 69 78 74 75 72 65 20 6f 66 0a 75 70 70 65 72 20  ixture of.upper 
9740: 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 2c 20  and lower case, 
9750: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
9760: 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
9770: 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 20   for the rowid. 
9780: 53 75 63 68 20 61 0a 63 6f 6c 75 6d 6e 20 69 73  Such a.column is
9790: 20 75 73 75 61 6c 6c 79 20 72 65 66 65 72 72 65   usually referre
97a0: 64 20 74 6f 20 61 73 20 61 6e 20 22 69 6e 74 65  d to as an "inte
97b0: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 22  ger primary key"
97c0: 2e 20 41 20 50 52 49 4d 41 52 59 20 4b 45 59 20  . A PRIMARY KEY 
97d0: 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79 20 62 65 63 6f  column.only beco
97e0: 6d 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70  mes an integer p
97f0: 72 69 6d 61 72 79 20 6b 65 79 20 69 66 20 74 68  rimary key if th
9800: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  e declared type 
9810: 6e 61 6d 65 20 69 73 20 65 78 61 63 74 6c 79 0a  name is exactly.
9820: 22 49 4e 54 45 47 45 52 22 2e 20 20 5e 4f 74 68  "INTEGER".  ^Oth
9830: 65 72 20 69 6e 74 65 67 65 72 20 74 79 70 65 20  er integer type 
9840: 6e 61 6d 65 73 20 6c 69 6b 65 20 22 49 4e 54 22  names like "INT"
9850: 20 6f 72 20 22 42 49 47 49 4e 54 22 20 6f 72 20   or "BIGINT" or 
9860: 22 53 48 4f 52 54 20 49 4e 54 45 47 45 52 22 0a  "SHORT INTEGER".
9870: 6f 72 20 22 55 4e 53 49 47 4e 45 44 20 49 4e 54  or "UNSIGNED INT
9880: 45 47 45 52 22 20 63 61 75 73 65 73 20 74 68 65  EGER" causes the
9890: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
98a0: 75 6d 6e 20 74 6f 20 62 65 68 61 76 65 20 61 73  umn to behave as
98b0: 20 61 6e 20 6f 72 64 69 6e 61 72 79 0a 74 61 62   an ordinary.tab
98c0: 6c 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69  le column with i
98d0: 6e 74 65 67 65 72 20 5b 61 66 66 69 6e 69 74 79  nteger [affinity
98e0: 5d 20 61 6e 64 20 61 20 75 6e 69 71 75 65 20 69  ] and a unique i
98f0: 6e 64 65 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20  ndex, not as an 
9900: 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f  alias for.the ro
9910: 77 69 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 65 78  wid...<p> The ex
9920: 63 65 70 74 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65  ception mentione
9930: 64 20 61 62 6f 76 65 20 69 73 20 74 68 61 74 20  d above is that 
9940: 5e 69 66 20 74 68 65 20 64 65 63 6c 61 72 61 74  ^if the declarat
9950: 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ion of a column 
9960: 77 69 74 68 0a 64 65 63 6c 61 72 65 64 20 74 79  with.declared ty
9970: 70 65 20 22 49 4e 54 45 47 45 52 22 20 69 6e 63  pe "INTEGER" inc
9980: 6c 75 64 65 73 20 61 6e 20 22 50 52 49 4d 41 52  ludes an "PRIMAR
9990: 59 20 4b 45 59 20 44 45 53 43 22 20 63 6c 61 75  Y KEY DESC" clau
99a0: 73 65 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a  se, it does not.
99b0: 62 65 63 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20  become an alias 
99c0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 6e  for the rowid an
99d0: 64 20 69 73 20 6e 6f 74 20 63 6c 61 73 73 69 66  d is not classif
99e0: 69 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ied as an intege
99f0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 54  r primary key..T
9a00: 68 69 73 20 71 75 69 72 6b 20 69 73 20 6e 6f 74  his quirk is not
9a10: 20 62 79 20 64 65 73 69 67 6e 2e 20 49 74 20 69   by design. It i
9a20: 73 20 64 75 65 20 74 6f 20 61 20 62 75 67 20 69  s due to a bug i
9a30: 6e 20 65 61 72 6c 79 20 76 65 72 73 69 6f 6e 73  n early versions
9a40: 20 6f 66 20 53 51 4c 69 74 65 2e 0a 42 75 74 20   of SQLite..But 
9a50: 66 69 78 69 6e 67 20 74 68 65 20 62 75 67 20 63  fixing the bug c
9a60: 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 20 76  ould result in v
9a70: 65 72 79 20 73 65 72 69 6f 75 73 20 62 61 63 6b  ery serious back
9a80: 77 61 72 64 73 20 69 6e 63 6f 6d 70 61 74 69 62  wards incompatib
9a90: 69 6c 69 74 69 65 73 2e 0a 54 68 65 20 53 51 4c  ilities..The SQL
9aa0: 69 74 65 20 64 65 76 65 6c 6f 70 65 72 73 20 66  ite developers f
9ab0: 65 65 6c 20 74 68 61 74 20 67 6f 6f 66 79 20 62  eel that goofy b
9ac0: 65 68 61 76 69 6f 72 20 69 6e 20 61 6e 20 63 6f  ehavior in an co
9ad0: 72 6e 65 72 20 63 61 73 65 20 69 73 20 66 61 72  rner case is far
9ae0: 20 62 65 74 74 65 72 0a 74 68 61 6e 20 61 20 63   better.than a c
9af0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72 65  ompatibility bre
9b00: 61 6b 2c 20 73 6f 20 74 68 65 20 6f 72 69 67 69  ak, so the origi
9b10: 6e 61 6c 20 62 65 68 61 76 69 6f 72 20 69 73 20  nal behavior is 
9b20: 72 65 74 61 69 6e 65 64 2e 20 54 68 69 73 20 6d  retained. This m
9b30: 65 61 6e 73 0a 74 68 61 74 20 5e 28 74 68 65 20  eans.that ^(the 
9b40: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
9b50: 74 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  table declaratio
9b60: 6e 73 20 61 6c 6c 20 63 61 75 73 65 20 74 68 65  ns all cause the
9b70: 20 63 6f 6c 75 6d 6e 20 22 78 22 20 74 6f 20 62   column "x" to b
9b80: 65 20 61 6e 0a 61 6c 69 61 73 20 66 6f 72 20 74  e an.alias for t
9b90: 68 65 20 72 6f 77 69 64 20 28 61 6e 20 69 6e 74  he rowid (an int
9ba0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
9bb0: 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74  ):..<ul>.<li><tt
9bc0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
9bd0: 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  x INTEGER PRIMAR
9be0: 59 20 4b 45 59 20 41 53 43 2c 20 79 2c 20 7a 29  Y KEY ASC, y, z)
9bf0: 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  ;</tt>.<li><tt>C
9c00: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
9c10: 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50  INTEGER, y, z, P
9c20: 52 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43  RIMARY KEY(x ASC
9c30: 29 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74  ));</tt>.<li><tt
9c40: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
9c50: 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c  x INTEGER, y, z,
9c60: 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20 44   PRIMARY KEY(x D
9c70: 45 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c  ESC));</tt>.</ul
9c80: 3e 29 5e 0a 0a 3c 70 3e 42 75 74 20 5e 28 74 68  >)^..<p>But ^(th
9c90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 65 63 6c  e following decl
9ca0: 61 72 61 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  aration does not
9cb0: 20 72 65 73 75 6c 74 20 69 6e 20 22 78 22 20 62   result in "x" b
9cc0: 65 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 66 6f  eing an alias fo
9cd0: 72 0a 74 68 65 20 72 6f 77 69 64 3a 0a 3c 75 6c  r.the rowid:.<ul
9ce0: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
9cf0: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
9d00: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 44  ER PRIMARY KEY D
9d10: 45 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e  ESC, y, z);</tt>
9d20: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 5e 52 6f  .</ul>)^..<p>^Ro
9d30: 77 69 64 20 76 61 6c 75 65 73 20 6d 61 79 20 62  wid values may b
9d40: 65 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67  e modified using
9d50: 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
9d60: 6d 65 6e 74 20 69 6e 20 74 68 65 20 73 61 6d 65  ment in the same
9d70: 0a 77 61 79 20 61 73 20 61 6e 79 20 6f 74 68 65  .way as any othe
9d80: 72 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 63  r column value c
9d90: 61 6e 2c 20 65 69 74 68 65 72 20 75 73 69 6e 67  an, either using
9da0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 62 75 69 6c   one of the buil
9db0: 74 2d 69 6e 20 61 6c 69 61 73 65 73 0a 28 22 72  t-in aliases.("r
9dc0: 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20  owid", "oid" or 
9dd0: 22 5f 72 6f 77 69 64 5f 22 29 20 6f 72 20 62 79  "_rowid_") or by
9de0: 20 75 73 69 6e 67 20 61 6e 20 61 6c 69 61 73 20   using an alias 
9df0: 63 72 65 61 74 65 64 20 62 79 20 61 6e 20 69 6e  created by an in
9e00: 74 65 67 65 72 0a 70 72 69 6d 61 72 79 20 6b 65  teger.primary ke
9e10: 79 2e 20 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 61  y. ^Similarly, a
9e20: 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
9e30: 6e 74 20 6d 61 79 20 70 72 6f 76 69 64 65 20 61  nt may provide a
9e40: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73   value to use as
9e50: 20 74 68 65 0a 72 6f 77 69 64 20 66 6f 72 20 65   the.rowid for e
9e60: 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64  ach row inserted
9e70: 2e 20 5e 28 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61  . ^(Unlike norma
9e80: 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73  l SQLite columns
9e90: 2c 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  , an integer pri
9ea0: 6d 61 72 79 0a 6b 65 79 20 6f 72 20 72 6f 77 69  mary.key or rowi
9eb0: 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 63 6f  d column must co
9ec0: 6e 74 61 69 6e 20 69 6e 74 65 67 65 72 20 76 61  ntain integer va
9ed0: 6c 75 65 73 2e 20 49 6e 74 65 67 65 72 20 70 72  lues. Integer pr
9ee0: 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
9ef0: 69 64 0a 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e  id.columns are n
9f00: 6f 74 20 61 62 6c 65 20 74 6f 20 68 6f 6c 64 20  ot able to hold 
9f10: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
9f20: 61 6c 75 65 73 2c 20 73 74 72 69 6e 67 73 2c 20  alues, strings, 
9f30: 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e  BLOBs, or NULLs.
9f40: 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50  )^..<p>^If an UP
9f50: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
9f60: 74 74 65 6d 70 74 73 20 74 6f 20 73 65 74 20 61  ttempts to set a
9f70: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
9f80: 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63  y key or rowid c
9f90: 6f 6c 75 6d 6e 0a 74 6f 20 61 20 4e 55 4c 4c 20  olumn.to a NULL 
9fa0: 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f  or blob value, o
9fb0: 72 20 74 6f 20 61 20 73 74 72 69 6e 67 20 6f 72  r to a string or
9fc0: 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74   real value that
9fd0: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
9fe0: 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20  essly.converted 
9ff0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  to an integer, a
a000: 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61   "datatype misma
a010: 74 63 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72  tch" error occur
a020: 73 20 61 6e 64 20 74 68 65 20 73 74 61 74 65 6d  s and the statem
a030: 65 6e 74 0a 69 73 20 61 62 6f 72 74 65 64 2e 20  ent.is aborted. 
a040: 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74  ^If an INSERT st
a050: 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73  atement attempts
a060: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 62 6c 6f   to insert a blo
a070: 62 20 76 61 6c 75 65 2c 20 6f 72 20 61 20 73 74  b value, or a st
a080: 72 69 6e 67 0a 6f 72 20 72 65 61 6c 20 76 61 6c  ring.or real val
a090: 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62  ue that cannot b
a0a0: 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e losslessly con
a0b0: 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
a0c0: 65 67 65 72 20 69 6e 74 6f 20 61 6e 0a 69 6e 74  eger into an.int
a0d0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
a0e0: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
a0f0: 2c 20 61 20 22 64 61 74 61 74 79 70 65 20 6d 69  , a "datatype mi
a100: 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20 6f 63  smatch" error oc
a110: 63 75 72 73 20 61 6e 64 20 74 68 65 0a 73 74 61  curs and the.sta
a120: 74 65 6d 65 6e 74 20 69 73 20 61 62 6f 72 74 65  tement is aborte
a130: 64 2e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 49 4e  d...<p>^If an IN
a140: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61  SERT statement a
a150: 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72  ttempts to inser
a160: 74 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  t a NULL value i
a170: 6e 74 6f 20 61 20 72 6f 77 69 64 20 6f 72 0a 69  nto a rowid or.i
a180: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
a190: 65 79 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 20 73  ey column, the s
a1a0: 79 73 74 65 6d 20 63 68 6f 6f 73 65 73 20 61 6e  ystem chooses an
a1b0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 74   integer value t
a1c0: 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77  o use as the.row
a1d0: 69 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  id automatically
a1e0: 2e 20 41 20 64 65 74 61 69 6c 65 64 20 64 65 73  . A detailed des
a1f0: 63 72 69 70 74 69 6f 6e 20 6f 66 20 68 6f 77 20  cription of how 
a200: 74 68 69 73 20 69 73 20 64 6f 6e 65 20 69 73 20  this is done is 
a210: 70 72 6f 76 69 64 65 64 0a 3c 61 20 68 72 65 66  provided.<a href
a220: 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e  ="autoinc.html">
a230: 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c  separately</a>.<
a240: 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 5b 70  /p>..<p>^(The [p
a250: 61 72 65 6e 74 20 6b 65 79 5d 20 6f 66 20 61 20  arent key] of a 
a260: 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e  [foreign key con
a270: 73 74 72 61 69 6e 74 5d 20 69 73 20 6e 6f 74 20  straint] is not 
a280: 61 6c 6c 6f 77 65 64 20 74 6f 0a 75 73 65 20 74  allowed to.use t
a290: 68 65 20 72 6f 77 69 64 2e 20 20 54 68 65 20 70  he rowid.  The p
a2a0: 61 72 65 6e 74 20 6b 65 79 20 6d 75 73 74 20 75  arent key must u
a2b0: 73 65 64 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e  sed named column
a2c0: 73 20 6f 6e 6c 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c  s only.)^</p>..<
a2d0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
a2e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a320: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
a330: 41 54 45 20 54 52 49 47 47 45 52 7d 20 63 72 65  ATE TRIGGER} cre
a340: 61 74 65 74 72 69 67 67 65 72 20 7b 7b 43 52 45  atetrigger {{CRE
a350: 41 54 45 20 54 52 49 47 47 45 52 7d 7d 0a 0a 42  ATE TRIGGER}}..B
a360: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65  ubbleDiagram cre
a370: 61 74 65 2d 74 72 69 67 67 65 72 2d 73 74 6d 74  ate-trigger-stmt
a380: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54   1.</tcl>..<p>^T
a390: 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45  he CREATE TRIGGE
a3a0: 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  R statement is u
a3b0: 73 65 64 20 74 6f 20 61 64 64 20 74 72 69 67 67  sed to add trigg
a3c0: 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74 61  ers to the .data
a3d0: 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 54 72  base schema. ^Tr
a3e0: 69 67 67 65 72 73 20 61 72 65 20 64 61 74 61 62  iggers are datab
a3f0: 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 0a  ase operations .
a400: 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74  that are automat
a410: 69 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64  ically performed
a420: 20 77 68 65 6e 20 61 20 73 70 65 63 69 66 69 65   when a specifie
a430: 64 20 64 61 74 61 62 61 73 65 20 65 76 65 6e 74  d database event
a440: 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a  .occurs.  </p>..
a450: 3c 70 3e 5e 41 20 74 72 69 67 67 65 72 20 6d 61  <p>^A trigger ma
a460: 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20 74  y be specified t
a470: 6f 20 66 69 72 65 20 77 68 65 6e 65 76 65 72 20  o fire whenever 
a480: 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53  a [DELETE], [INS
a490: 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45  ERT],.or [UPDATE
a4a0: 5d 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c 61  ] of a.particula
a4b0: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
a4c0: 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65 6e   occurs, or when
a4d0: 65 76 65 72 20 61 6e 20 5b 55 50 44 41 54 45 5d  ever an [UPDATE]
a4e0: 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e   occurs on.on on
a4f0: 65 20 6f 72 20 6d 6f 72 65 20 73 70 65 63 69 66  e or more specif
a500: 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  ied columns of a
a510: 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e   table.</p>..<p>
a520: 5e 41 74 20 74 68 69 73 20 74 69 6d 65 20 53 51  ^At this time SQ
a530: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f 6e  Lite supports on
a540: 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20  ly FOR EACH ROW 
a550: 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f  triggers, not FO
a560: 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e 54  R EACH.STATEMENT
a570: 20 74 72 69 67 67 65 72 73 2e 20 5e 48 65 6e 63   triggers. ^Henc
a580: 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65  e explicitly spe
a590: 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48  cifying FOR EACH
a5a0: 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c   ROW is optional
a5b0: 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f 57 20  ..^FOR EACH ROW 
a5c0: 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65  implies that the
a5d0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
a5e0: 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
a5f0: 20 74 72 69 67 67 65 72 0a 6d 61 79 20 62 65 20   trigger.may be 
a600: 65 78 65 63 75 74 65 64 20 28 64 65 70 65 6e 64  executed (depend
a610: 69 6e 67 20 6f 6e 20 74 68 65 20 57 48 45 4e 20  ing on the WHEN 
a620: 63 6c 61 75 73 65 29 20 66 6f 72 20 65 61 63 68  clause) for each
a630: 20 64 61 74 61 62 61 73 65 20 72 6f 77 20 62 65   database row be
a640: 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20 75 70  ing.inserted, up
a650: 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  dated or deleted
a660: 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
a670: 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72  t causing the tr
a680: 69 67 67 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f  igger to fire.</
a690: 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20 74 68  p>..<p>^(Both th
a6a0: 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61 6e  e WHEN clause an
a6b0: 64 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63  d the trigger ac
a6c0: 74 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73 73  tions may access
a6d0: 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68   elements of .th
a6e0: 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73 65  e row being inse
a6f0: 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f 72  rted, deleted or
a700: 20 75 70 64 61 74 65 64 20 75 73 69 6e 67 20 72   updated using r
a710: 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68 65  eferences of the
a720: 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63   form ."NEW.<i>c
a730: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20  olumn-name</i>" 
a740: 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75  and "OLD.<i>colu
a750: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68  mn-name</i>", wh
a760: 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  ere.<i>column-na
a770: 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e 61  me</i> is the na
a780: 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66  me of a column f
a790: 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74 68  rom the table th
a7a0: 61 74 20 74 68 65 20 74 72 69 67 67 65 72 0a 69  at the trigger.i
a7b0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
a7c0: 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64 20 4e  h.)^ ^(OLD and N
a7d0: 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 6d 61  EW references ma
a7e0: 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69  y only be used i
a7f0: 6e 20 74 72 69 67 67 65 72 73 20 6f 6e 0a 65 76  n triggers on.ev
a800: 65 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20 74  ents for which t
a810: 68 65 79 20 61 72 65 20 72 65 6c 65 76 61 6e 74  hey are relevant
a820: 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  , as follows:</p
a830: 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  >..<table border
a840: 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31  =0 cellpadding=1
a850: 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  0>.<tr>.<td vali
a860: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
a870: 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30  right" width=120
a880: 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f  ><i>INSERT</i></
a890: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
a8a0: 74 6f 70 22 3e 4e 45 57 20 72 65 66 65 72 65 6e  top">NEW referen
a8b0: 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74  ces are valid</t
a8c0: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
a8d0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
a8e0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
a8f0: 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54 45  th=120><i>UPDATE
a900: 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  </i></td>.<td va
a910: 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61  lign="top">NEW a
a920: 6e 64 20 4f 4c 44 20 72 65 66 65 72 65 6e 63 65  nd OLD reference
a930: 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e  s are valid</td>
a940: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
a950: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
a960: 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68  gn="right" width
a970: 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f  =120><i>DELETE</
a980: 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  i></td>.<td vali
a990: 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66  gn="top">OLD ref
a9a0: 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69  erences are vali
a9b0: 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74  d</td>.</tr>.</t
a9c0: 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70  able>.</p>)^..<p
a9d0: 3e 5e 49 66 20 61 20 57 48 45 4e 20 63 6c 61 75  >^If a WHEN clau
a9e0: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
a9f0: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
aa00: 74 73 20 73 70 65 63 69 66 69 65 64 0a 61 72 65  ts specified.are
aa10: 20 6f 6e 6c 79 20 65 78 65 63 75 74 65 64 20 66   only executed f
aa20: 6f 72 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  or rows for whic
aa30: 68 20 74 68 65 20 57 48 45 4e 0a 63 6c 61 75 73  h the WHEN.claus
aa40: 65 20 69 73 20 74 72 75 65 2e 20 5e 49 66 20 6e  e is true. ^If n
aa50: 6f 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73  o WHEN clause is
aa60: 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53   supplied, the S
aa70: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 61 72  QL statements.ar
aa80: 65 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 61  e executed for a
aa90: 6c 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70  ll rows.</p>..<p
aaa0: 3e 5e 54 68 65 20 42 45 46 4f 52 45 20 6f 72 20  >^The BEFORE or 
aab0: 41 46 54 45 52 20 6b 65 79 77 6f 72 64 20 64 65  AFTER keyword de
aac0: 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74 68  termines when th
aad0: 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e  e trigger action
aae0: 73 0a 77 69 6c 6c 20 62 65 20 65 78 65 63 75 74  s.will be execut
aaf0: 65 64 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  ed relative to t
ab00: 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f  he insertion, mo
ab10: 64 69 66 69 63 61 74 69 6f 6e 20 6f 72 20 72 65  dification or re
ab20: 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61 73 73  moval of the.ass
ab30: 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e  ociated row.</p>
ab40: 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e  ..<p>^An [ON CON
ab50: 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 6d 61  FLICT] clause ma
ab60: 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20 61  y be specified a
ab70: 73 20 70 61 72 74 20 6f 66 20 61 6e 20 5b 55 50  s part of an [UP
ab80: 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54  DATE] or [INSERT
ab90: 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20  ].action within 
aba0: 74 68 65 20 62 6f 64 79 20 6f 66 20 74 68 65 20  the body of the 
abb0: 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65 76 65  trigger..^Howeve
abc0: 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46  r if an [ON CONF
abd0: 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69 73 20  LICT] clause is 
abe0: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
abf0: 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74 65 6d  t of .the statem
ac00: 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20  ent causing the 
ac10: 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2c  trigger to fire,
ac20: 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74 20 68   then conflict h
ac30: 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 6f  andling.policy o
ac40: 66 20 74 68 65 20 6f 75 74 65 72 20 73 74 61 74  f the outer stat
ac50: 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 69 6e  ement is used in
ac60: 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  stead.</p>..<p>^
ac70: 54 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74  Triggers are aut
ac80: 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52 4f 50  omatically [DROP
ac90: 20 54 52 49 47 47 45 52 20 7c 20 64 72 6f 70 70   TRIGGER | dropp
aca0: 65 64 5d 0a 77 68 65 6e 20 74 68 65 20 74 61 62  ed].when the tab
acb0: 6c 65 20 74 68 61 74 20 74 68 65 79 20 61 72 65  le that they are
acc0: 20 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74   .associated wit
acd0: 68 20 28 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d  h (the <i>table-
ace0: 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65 29 20  name</i> table) 
acf0: 69 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c 45 20  is .[DROP TABLE 
ad00: 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e 48 6f  | dropped].  ^Ho
ad10: 77 65 76 65 72 20 69 66 20 74 68 65 20 74 72 69  wever if the tri
ad20: 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65 66  gger actions ref
ad30: 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61 62  erence.other tab
ad40: 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67 65 72  les, the trigger
ad50: 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 20   is not dropped 
ad60: 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20 74  or modified if t
ad70: 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c 65  hose other.table
ad80: 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42 4c  s are [DROP TABL
ad90: 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72 20  E | dropped] or 
ada0: 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 6d  [ALTER TABLE | m
adb0: 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c  odified].</p>..<
adc0: 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65 20  p>^Triggers are 
add0: 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68  removed using th
ade0: 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d  e [DROP TRIGGER]
adf0: 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a   statement.</p>.
ae00: 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73 74  .<h3>Syntax Rest
ae10: 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44 41  rictions On UPDA
ae20: 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64 20  TE, DELETE, and 
ae30: 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e 74  INSERT Statement
ae40: 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72 69  s Within.    Tri
ae50: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ggers</h3>..<p>^
ae60: 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44  The [UPDATE], [D
ae70: 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53  ELETE], and [INS
ae80: 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73 20  ERT].statements 
ae90: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
aea0: 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a 74  do not support.t
aeb0: 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20 66  he full syntax f
aec0: 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45  or [UPDATE], [DE
aed0: 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45  LETE], and [INSE
aee0: 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  RT] statements. 
aef0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72   The following.r
af00: 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c  estrictions appl
af10: 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69  y:</p>..<ul>.<li
af20: 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61 6d  ><p>.  ^(The nam
af30: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
af40: 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69 6e  o be modified in
af50: 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44   an [UPDATE], [D
af60: 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53 45  ELETE], or [INSE
af70: 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20  RT].  statement 
af80: 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75 61  must be an unqua
af90: 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61 6d  lified table nam
afa0: 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  e.  In other wor
afb0: 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20 75  ds, one must.  u
afc0: 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62 6c  se just "<i>tabl
afd0: 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20 22  ename</i>" not "
afe0: 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e 3c  <i>database</i><
aff0: 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e  b>.</b><i>tablen
b000: 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e 20  ame</i>".  when 
b010: 73 70 65 63 69 66 79 69 6e 67 20 74 68 65 20 74  specifying the t
b020: 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74 61  able.)^  ^The ta
b030: 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69  ble to be modifi
b040: 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e  ed must exist in
b050: 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74 61   the.  same data
b060: 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c  base as the tabl
b070: 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
b080: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
b090: 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f  s attached..  </
b0a0: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
b0b0: 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54 20  .  ^The "INSERT 
b0c0: 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69  INTO <i>table</i
b0d0: 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  > DEFAULT VALUES
b0e0: 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49  " form of the [I
b0f0: 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74  NSERT] statement
b100: 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72  .  is not suppor
b110: 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  ted..  </p></li>
b120: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65  ..<li><p>.  ^The
b130: 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20   INDEXED BY and 
b140: 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
b150: 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70  ses are not supp
b160: 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54  orted for [UPDAT
b170: 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45  E] and.  [DELETE
b180: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  ] statements..  
b190: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
b1a0: 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45 52  p>.  ^(The ORDER
b1b0: 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c   BY and LIMIT cl
b1c0: 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54 45  auses on [UPDATE
b1d0: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73  ] and [DELETE] s
b1e0: 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f  tatements are no
b1f0: 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20 20  t.  supported.  
b200: 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
b210: 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61  IT are not norma
b220: 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66 6f  lly supported fo
b230: 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20 20  r [UPDATE] or.  
b240: 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20  [DELETE] in any 
b250: 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e 20  context but can 
b260: 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74  be enabled for t
b270: 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65  op-level stateme
b280: 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65 20  nts.  using the 
b290: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  [SQLITE_ENABLE_U
b2a0: 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
b2b0: 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  IT] compile-time
b2c0: 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65   option.  Howeve
b2d0: 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69 6c  r,.  that compil
b2e0: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e  e-time option on
b2f0: 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74 6f  ly applies to to
b300: 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45 5d  p-level [UPDATE]
b310: 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20   and [DELETE].  
b320: 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20  statements, not 
b330: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
b340: 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  LETE] statements
b350: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
b360: 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  .)^.  </p></li>.
b370: 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </ul>..<tcl>hd_f
b380: 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f  ragment instead_
b390: 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53 54  of_trigger {INST
b3a0: 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44  EAD OF} {INSTEAD
b3b0: 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74 63   OF trigger}</tc
b3c0: 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20 4f  l>.<h3>INSTEAD O
b3d0: 46 20 74 72 69 67 67 65 72 3c 2f 68 33 3e 0a 0a  F trigger</h3>..
b3e0: 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d 61 79  <p>^Triggers may
b3f0: 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20 5b   be created on [
b400: 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c 20  views], as well 
b410: 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  as ordinary tabl
b420: 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79 69 6e  es, by.specifyin
b430: 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69 6e 20  g INSTEAD OF in 
b440: 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  the CREATE TRIGG
b450: 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e  ER statement. .^
b460: 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 4f  If one or more O
b470: 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45 4c  N INSERT, ON DEL
b480: 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54 45  ETE.or ON UPDATE
b490: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 64 65   triggers are de
b4a0: 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65 77 2c  fined on a view,
b4b0: 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f 74 20   then it is not 
b4c0: 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78 65 63  an.error to exec
b4d0: 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c 20 44  ute an INSERT, D
b4e0: 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
b4f0: 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68 65  statement on the
b500: 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63 74 69   view, .respecti
b510: 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61 64 2c  vely.  ^Instead,
b520: 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20 49 4e  .executing an IN
b530: 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20  SERT, DELETE or 
b540: 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20 76 69  UPDATE on the vi
b550: 65 77 20 63 61 75 73 65 73 20 74 68 65 20 61 73  ew causes the as
b560: 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67 65 72  sociated.trigger
b570: 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68 65 20  s to fire. ^The 
b580: 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e 64 65  real tables unde
b590: 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65 77 20  rlying the view 
b5a0: 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65 64  are not modified
b5b0: 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69 62 6c  .(except possibl
b5c0: 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20 62 79  y explicitly, by
b5d0: 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72   a trigger progr
b5e0: 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f  am).</p>..<p>^No
b5f0: 74 65 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c  te that the [sql
b600: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20  ite3_changes()] 
b610: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74  and [sqlite3_tot
b620: 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e  al_changes()] in
b630: 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74 20  terfaces.do not 
b640: 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46  count INSTEAD OF
b650: 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67 73   trigger firings
b660: 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e 74  , but the.[count
b670: 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d  _changes pragma]
b680: 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53 54   does count INST
b690: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20 66  EAD OF trigger f
b6a0: 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  iring.</p>..<h3>
b6b0: 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  Examples</h3>..<
b6c0: 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68 61  p>^(Assuming tha
b6d0: 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f 72  t customer recor
b6e0: 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ds are stored in
b6f0: 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73 22   the "customers"
b700: 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74   table, and.that
b710: 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20 61   order records a
b720: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
b730: 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65 2c   "orders" table,
b740: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
b750: 72 69 67 67 65 72 0a 65 6e 73 75 72 65 73 20 74  rigger.ensures t
b760: 68 61 74 20 61 6c 6c 20 61 73 73 6f 63 69 61 74  hat all associat
b770: 65 64 20 6f 72 64 65 72 73 20 61 72 65 20 72 65  ed orders are re
b780: 64 69 72 65 63 74 65 64 20 77 68 65 6e 20 61 20  directed when a 
b790: 63 75 73 74 6f 6d 65 72 20 63 68 61 6e 67 65 73  customer changes
b7a0: 0a 68 69 73 20 6f 72 20 68 65 72 20 61 64 64 72  .his or her addr
b7b0: 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ess:</p>..<tcl>E
b7c0: 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45 20  xample {.CREATE 
b7d0: 54 52 49 47 47 45 52 20 75 70 64 61 74 65 5f 63  TRIGGER update_c
b7e0: 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20  ustomer_address 
b7f0: 55 50 44 41 54 45 20 4f 46 20 61 64 64 72 65 73  UPDATE OF addres
b800: 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a  s ON customers .
b810: 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50 44 41    BEGIN.    UPDA
b820: 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64  TE orders SET ad
b830: 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64 64 72  dress = new.addr
b840: 65 73 73 20 57 48 45 52 45 20 63 75 73 74 6f 6d  ess WHERE custom
b850: 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61  er_name = old.na
b860: 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63  me;.  END;.}</tc
b870: 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 69 73  l>..<p>With this
b880: 20 74 72 69 67 67 65 72 20 69 6e 73 74 61 6c 6c   trigger install
b890: 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20 74 68  ed, executing th
b8a0: 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e  e statement:</p>
b8b0: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
b8c0: 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72  .UPDATE customer
b8d0: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
b8e0: 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45  '1 Main St.' WHE
b8f0: 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  RE name = 'Jack 
b900: 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a  Jones';.}</tcl>.
b910: 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20 66  .<p>causes the f
b920: 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20 61  ollowing to be a
b930: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 65  utomatically exe
b940: 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  cuted:</p>..<tcl
b950: 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  >Example {.UPDAT
b960: 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64 64  E orders SET add
b970: 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53  ress = '1 Main S
b980: 74 2e 27 20 57 48 45 52 45 20 63 75 73 74 6f 6d  t.' WHERE custom
b990: 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  er_name = 'Jack 
b9a0: 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29  Jones';.}</tcl>)
b9b0: 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
b9c0: 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72 65  ent undef_before
b9d0: 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46 4f   {undefined BEFO
b9e0: 52 45 20 74 72 69 67 67 65 72 20 62 65 68 61 76  RE trigger behav
b9f0: 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43  ior}</tcl>.<h3>C
ba00: 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20 55  autions On The U
ba10: 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72 69  se Of BEFORE tri
ba20: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49  ggers</h3>..<p>I
ba30: 66 20 61 20 42 45 46 4f 52 45 20 55 50 44 41 54  f a BEFORE UPDAT
ba40: 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c 45  E or BEFORE DELE
ba50: 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69 66  TE trigger modif
ba60: 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61  ies or deletes a
ba70: 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74 6f   row.that was to
ba80: 20 68 61 76 65 20 62 65 65 6e 20 75 70 64 61 74   have been updat
ba90: 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20 74  ed or deleted, t
baa0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
bab0: 66 20 74 68 65 20 73 75 62 73 65 71 75 65 6e 74  f the subsequent
bac0: 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65 74  .update or delet
bad0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  e operation is u
bae0: 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74 68  ndefined.  Furth
baf0: 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45 46  ermore, if a BEF
bb00: 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64 69  ORE trigger.modi
bb10: 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  fies or deletes 
bb20: 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20 69  a row, then it i
bb30: 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65 74  s undefined whet
bb40: 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45 52  her or not AFTER
bb50: 20 74 72 69 67 67 65 72 73 0a 74 68 61 74 20 77   triggers.that w
bb60: 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72 77  ould have otherw
bb70: 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73 65  ise run on those
bb80: 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66 61   rows will in fa
bb90: 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ct run..</p>..<p
bba0: 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 45  >The value of NE
bbb0: 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65 66  W.rowid is undef
bbc0: 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52 45  ined in a BEFORE
bbd0: 20 49 4e 53 45 52 54 20 74 72 69 67 67 65 72 20   INSERT trigger 
bbe0: 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f 77  in which.the row
bbf0: 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69 63  id is not explic
bc00: 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20 69  itly set to an i
bc10: 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  nteger.</p>..<p>
bc20: 42 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 62  Because of the b
bc30: 65 68 61 76 69 6f 72 73 20 64 65 73 63 72 69 62  ehaviors describ
bc40: 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72 61  ed above, progra
bc50: 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75 72  mmers are encour
bc60: 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20 41  aged to.prefer A
bc70: 46 54 45 52 20 74 72 69 67 67 65 72 73 20 6f 76  FTER triggers ov
bc80: 65 72 20 42 45 46 4f 52 45 20 74 72 69 67 67 65  er BEFORE trigge
bc90: 72 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 68 65  rs.</p>..<h3>The
bca0: 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f   RAISE() functio
bcb0: 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73  n</h3>..<p>^(A s
bcc0: 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63 74  pecial SQL funct
bcd0: 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79 20  ion RAISE() may 
bce0: 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61  be used within a
bcf0: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
bd00: 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f 6c  ,)^.with the fol
bd10: 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70  lowing syntax</p
bd20: 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  > ..<tcl>BubbleD
bd30: 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e  iagram raise-fun
bd40: 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ction</tcl>..<p>
bd50: 5e 57 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65  ^When one of the
bd60: 20 66 69 72 73 74 20 74 68 72 65 65 20 66 6f 72   first three for
bd70: 6d 73 20 69 73 20 63 61 6c 6c 65 64 20 64 75 72  ms is called dur
bd80: 69 6e 67 20 74 72 69 67 67 65 72 2d 70 72 6f 67  ing trigger-prog
bd90: 72 61 6d 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74  ram.execution, t
bda0: 68 65 20 73 70 65 63 69 66 69 65 64 20 5b 4f 4e  he specified [ON
bdb0: 20 43 4f 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65   CONFLICT] proce
bdc0: 73 73 69 6e 67 20 69 73 20 70 65 72 66 6f 72 6d  ssing is perform
bdd0: 65 64 0a 28 65 69 74 68 65 72 20 41 42 4f 52 54  ed.(either ABORT
bde0: 2c 20 46 41 49 4c 20 6f 72 20 52 4f 4c 4c 42 41  , FAIL or ROLLBA
bdf0: 43 4b 29 20 61 6e 64 20 74 68 65 20 63 75 72 72  CK) and the curr
be00: 65 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e  ent query termin
be10: 61 74 65 73 2e 0a 41 6e 20 65 72 72 6f 72 20 63  ates..An error c
be20: 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43  ode of [SQLITE_C
be30: 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72 65  ONSTRAINT] is re
be40: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61 70  turned to the ap
be50: 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67  plication,.along
be60: 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
be70: 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ied error messag
be80: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  e.</p>..<p>^When
be90: 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20 69   RAISE(IGNORE) i
bea0: 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72 65  s called, the re
beb0: 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 63  mainder of the c
bec0: 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20 70  urrent trigger p
bed0: 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61 74  rogram,.the stat
bee0: 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65  ement that cause
bef0: 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  d the trigger pr
bf00: 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65  ogram to execute
bf10: 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71 75   and any subsequ
bf20: 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72 6f 67  ent.trigger prog
bf30: 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c 64 20  rams that would 
bf40: 6f 66 20 62 65 65 6e 20 65 78 65 63 75 74 65 64  of been executed
bf50: 20 61 72 65 20 61 62 61 6e 64 6f 6e 65 64 2e 20   are abandoned. 
bf60: 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a 63 68 61  ^No database.cha
bf70: 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c 65 64 20  nges are rolled 
bf80: 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20 73  back.  ^If the s
bf90: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61  tatement that ca
bfa0: 75 73 65 64 20 74 68 65 20 74 72 69 67 67 65 72  used the trigger
bfb0: 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65 78 65 63   program.to exec
bfc0: 75 74 65 20 69 73 20 69 74 73 65 6c 66 20 70 61  ute is itself pa
bfd0: 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 20  rt of a trigger 
bfe0: 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e 20 74 68  program, then th
bff0: 61 74 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  at trigger progr
c000: 61 6d 0a 72 65 73 75 6d 65 73 20 65 78 65 63 75  am.resumes execu
c010: 74 69 6f 6e 20 61 74 20 74 68 65 20 62 65 67 69  tion at the begi
c020: 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e 65 78  nning of the nex
c030: 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 0a 3c  t step..</p>...<
c040: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
c050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c090: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52  ####.Section {CR
c0a0: 45 41 54 45 20 56 49 45 57 7d 20 7b 63 72 65 61  EATE VIEW} {crea
c0b0: 74 65 76 69 65 77 7d 20 7b 7b 43 52 45 41 54 45  teview} {{CREATE
c0c0: 20 56 49 45 57 7d 20 76 69 65 77 20 2a 76 69 65   VIEW} view *vie
c0d0: 77 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  ws}..BubbleDiagr
c0e0: 61 6d 20 63 72 65 61 74 65 2d 76 69 65 77 2d 73  am create-view-s
c0f0: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
c100: 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56 49 45  >^The CREATE VIE
c110: 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e  W command assign
c120: 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70 72  s a name to a pr
c130: 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53 45 4c  e-packaged .[SEL
c140: 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT] statement. 
c150: 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65 77 20  .^Once the view 
c160: 69 73 20 63 72 65 61 74 65 64 2c 20 69 74 20 63  is created, it c
c170: 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 74 68  an be used in th
c180: 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66  e FROM clause.of
c190: 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45 43 54   another [SELECT
c1a0: 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  ] in place of a 
c1b0: 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e  table name..</p>
c1c0: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54 45  ..<p>^If the "TE
c1d0: 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52  MP" or "TEMPORAR
c1e0: 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72  Y" keyword occur
c1f0: 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43 52  s in between "CR
c200: 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45 57 22  EATE".and "VIEW"
c210: 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 74   then the view t
c220: 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20 69  hat is created i
c230: 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20 74  s only visible t
c240: 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20 74 68  o the.process th
c250: 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20 64 61  at opened the da
c260: 74 61 62 61 73 65 20 61 6e 64 20 69 73 20 61 75  tabase and is au
c270: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65  tomatically dele
c280: 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61 74  ted when.the dat
c290: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 2e  abase is closed.
c2a0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20  </p>..<p> ^If a 
c2b0: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
c2c0: 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66 69  e&gt; is specifi
c2d0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76 69 65  ed, then the vie
c2e0: 77 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  w is created in 
c2f0: 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62  .the named datab
c300: 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65  ase. ^It is an e
c310: 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20  rror to specify 
c320: 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61 62  both a &lt;datab
c330: 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64  ase-name&gt;.and
c340: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
c350: 64 20 6f 6e 20 61 20 56 49 45 57 2c 20 75 6e 6c  d on a VIEW, unl
c360: 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61 74 61  ess the &lt;data
c370: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73  base-name&gt; is
c380: 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20   "temp"..^If no 
c390: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73  database name is
c3a0: 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20   specified, and 
c3b0: 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  the TEMP keyword
c3c0: 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c   is not present,
c3d0: 0a 74 68 65 20 56 49 45 57 20 69 73 20 63 72 65  .the VIEW is cre
c3e0: 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e  ated in the main
c3f0: 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a   database.</p>..
c400: 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b  <p>^You cannot [
c410: 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54  DELETE], [INSERT
c420: 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 61  ], or [UPDATE] a
c430: 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73 20 61   view.  ^Views a
c440: 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e  re read-only .in
c450: 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77 65 76   SQLite.  ^Howev
c460: 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73 65  er, in many case
c470: 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61 6e  s you can use an
c480: 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  .[INSTEAD OF tri
c490: 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76 69 65  gger] on the vie
c4a0: 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20  w to accomplish 
c4b0: 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e  .the same thing.
c4c0: 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65 6d    ^Views are rem
c4d0: 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65 20 5b  oved .with the [
c4e0: 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61  DROP VIEW] comma
c4f0: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  nd.</p>..<tcl>.#
c500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c540: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
c550: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49  ction {CREATE VI
c560: 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b 63 72  RTUAL TABLE} {cr
c570: 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52 45 41  eatevtab} {{CREA
c580: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
c590: 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
c5a0: 6d 20 63 72 65 61 74 65 2d 76 69 72 74 75 61 6c  m create-virtual
c5b0: 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f  -table-stmt 1.</
c5c0: 74 63 6c 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72 74  tcl>..<p>A [virt
c5d0: 75 61 6c 20 74 61 62 6c 65 5d 20 69 73 20 61 6e  ual table] is an
c5e0: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 61 6e   interface to an
c5f0: 20 65 78 74 65 72 6e 61 6c 20 73 74 6f 72 61 67   external storag
c600: 65 20 6f 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e  e or computation
c610: 0a 65 6e 67 69 6e 65 20 74 68 61 74 20 61 70 70  .engine that app
c620: 65 61 72 73 20 74 6f 20 62 65 20 61 20 74 61 62  ears to be a tab
c630: 6c 65 20 62 75 74 20 64 6f 65 73 20 6e 6f 74 20  le but does not 
c640: 61 63 74 75 61 6c 6c 79 20 73 74 6f 72 65 20 69  actually store i
c650: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20 74 68  nformation.in th
c660: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
c670: 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e 65  </p>..<p>In gene
c680: 72 61 6c 2c 20 79 6f 75 20 63 61 6e 20 64 6f 20  ral, you can do 
c690: 61 6e 79 74 68 69 6e 67 20 77 69 74 68 20 61 20  anything with a 
c6a0: 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20  [virtual table] 
c6b0: 74 68 61 74 20 63 61 6e 20 62 65 20 64 6f 6e 65  that can be done
c6c0: 0a 77 69 74 68 20 61 6e 20 6f 72 64 69 6e 61 72  .with an ordinar
c6d0: 79 20 74 61 62 6c 65 2c 20 65 78 63 65 70 74 20  y table, except 
c6e0: 74 68 61 74 20 5e 79 6f 75 20 63 61 6e 6e 6f 74  that ^you cannot
c6f0: 20 63 72 65 61 74 65 20 69 6e 64 69 63 65 73 20   create indices 
c700: 6f 72 20 74 72 69 67 67 65 72 73 20 6f 6e 20 61  or triggers on a
c710: 0a 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20  .virtual table. 
c720: 20 5e 53 6f 6d 65 20 76 69 72 74 75 61 6c 20 74   ^Some virtual t
c730: 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
c740: 69 6f 6e 73 20 6d 69 67 68 74 20 69 6d 70 6f 73  ions might impos
c750: 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 72 65 73  e additional.res
c760: 74 72 69 63 74 69 6f 6e 73 2e 20 20 46 6f 72 20  trictions.  For 
c770: 65 78 61 6d 70 6c 65 2c 20 6d 61 6e 79 20 76 69  example, many vi
c780: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 61 72 65  rtual tables are
c790: 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a   read-only.</p>.
c7a0: 0a 3c 70 3e 54 68 65 20 26 6c 74 3b 6d 6f 64 75  .<p>The &lt;modu
c7b0: 6c 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 74  le-name&gt; is t
c7c0: 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 6f 62  he name of an ob
c7d0: 6a 65 63 74 20 74 68 61 74 20 69 6d 70 6c 65 6d  ject that implem
c7e0: 65 6e 74 73 0a 74 68 65 20 76 69 72 74 75 61 6c  ents.the virtual
c7f0: 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 26 6c   table.  ^The &l
c800: 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74  t;module-name&gt
c810: 3b 20 6d 75 73 74 20 62 65 20 72 65 67 69 73 74  ; must be regist
c820: 65 72 65 64 20 77 69 74 68 0a 74 68 65 20 53 51  ered with.the SQ
c830: 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 63 6f  Lite database co
c840: 6e 6e 65 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b  nnection using.[
c850: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
c860: 6f 64 75 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c  odule()] or [sql
c870: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
c880: 6c 65 5f 76 32 28 29 5d 0a 70 72 69 6f 72 20 74  le_v2()].prior t
c890: 6f 20 69 73 73 75 69 6e 67 20 74 68 65 20 43 52  o issuing the CR
c8a0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
c8b0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54  LE statement..^T
c8c0: 68 65 20 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20  he module takes 
c8d0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d  zero or more com
c8e0: 6d 61 2d 73 65 70 61 72 61 74 65 64 20 61 72 67  ma-separated arg
c8f0: 75 6d 65 6e 74 73 2e 0a 5e 54 68 65 20 61 72 67  uments..^The arg
c900: 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6a 75  uments can be ju
c910: 73 74 20 61 62 6f 75 74 20 61 6e 79 20 74 65 78  st about any tex
c920: 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  t as long as it 
c930: 68 61 73 20 62 61 6c 61 6e 63 65 64 0a 70 61 72  has balanced.par
c940: 65 6e 74 68 65 73 65 73 2e 20 20 54 68 65 20 61  entheses.  The a
c950: 72 67 75 6d 65 6e 74 20 73 79 6e 74 61 78 20 69  rgument syntax i
c960: 73 20 73 75 66 66 69 63 69 65 6e 74 6c 79 20 67  s sufficiently g
c970: 65 6e 65 72 61 6c 20 74 68 61 74 20 74 68 65 0a  eneral that the.
c980: 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65  arguments can be
c990: 20 6d 61 64 65 20 74 6f 20 61 70 70 65 61 72 20   made to appear 
c9a0: 61 73 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  as [column defin
c9b0: 69 74 69 6f 6e 73 5d 20 69 6e 20 61 20 74 72 61  itions] in a tra
c9c0: 64 69 74 69 6f 6e 61 6c 0a 5b 43 52 45 41 54 45  ditional.[CREATE
c9d0: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
c9e0: 74 2e 20 20 0a 5e 53 51 4c 69 74 65 20 70 61 73  t.  .^SQLite pas
c9f0: 73 65 73 20 74 68 65 20 6d 6f 64 75 6c 65 20 61  ses the module a
ca00: 72 67 75 6d 65 6e 74 73 20 64 69 72 65 63 74 6c  rguments directl
ca10: 79 0a 74 6f 20 74 68 65 20 5b 78 43 72 65 61 74  y.to the [xCreat
ca20: 65 5d 20 61 6e 64 20 5b 78 43 6f 6e 6e 65 63 74  e] and [xConnect
ca30: 5d 20 6d 65 74 68 6f 64 73 20 6f 66 20 74 68 65  ] methods of the
ca40: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
ca50: 74 61 74 69 6f 6e 0a 77 69 74 68 6f 75 74 20 61  tation.without a
ca60: 6e 79 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  ny interpretatio
ca70: 6e 2e 20 20 49 74 20 69 73 20 74 68 65 20 72 65  n.  It is the re
ca80: 73 70 6f 6e 73 69 62 69 6c 69 74 79 0a 6f 66 20  sponsibility.of 
ca90: 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
caa0: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 70 61 72  mentation to par
cab0: 73 65 20 61 6e 64 20 69 6e 74 65 72 70 72 65 74  se and interpret
cac0: 20 69 74 73 20 6f 77 6e 20 61 72 67 75 6d 65 6e   its own argumen
cad0: 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 76  ts.</p>..<p>^A v
cae0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20  irtual table is 
caf0: 64 65 73 74 72 6f 79 65 64 20 75 73 69 6e 67 20  destroyed using 
cb00: 74 68 65 20 6f 72 64 69 6e 61 72 79 0a 5b 44 52  the ordinary.[DR
cb10: 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  OP TABLE] statem
cb20: 65 6e 74 2e 20 20 54 68 65 72 65 20 69 73 20 6e  ent.  There is n
cb30: 6f 0a 44 52 4f 50 20 56 49 52 54 55 41 4c 20 54  o.DROP VIRTUAL T
cb40: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 3c  ABLE statement.<
cb50: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
cb60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cb70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cb80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cb90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cba0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
cbb0: 6e 20 44 45 4c 45 54 45 20 64 65 6c 65 74 65 20  n DELETE delete 
cbc0: 7b 44 45 4c 45 54 45 20 2a 44 45 4c 45 54 45 73  {DELETE *DELETEs
cbd0: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
cbe0: 20 64 65 6c 65 74 65 2d 73 74 6d 74 20 31 0a 42   delete-stmt 1.B
cbf0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61  ubbleDiagram qua
cc00: 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
cc10: 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e.</tcl>..<p>The
cc20: 20 44 45 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20   DELETE command 
cc30: 72 65 6d 6f 76 65 73 20 72 65 63 6f 72 64 73 20  removes records 
cc40: 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 69  from the table i
cc50: 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65  dentified by the
cc60: 0a 20 20 20 3c 69 3e 71 75 61 6c 69 66 69 65 64  .   <i>qualified
cc70: 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e  -table-name</i>.
cc80: 20 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 57 48   ..<p>^If the WH
cc90: 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  ERE clause is no
cca0: 74 20 70 72 65 73 65 6e 74 2c 20 61 6c 6c 20 72  t present, all r
ccb0: 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61  ecords in the ta
ccc0: 62 6c 65 20 61 72 65 20 64 65 6c 65 74 65 64 2e  ble are deleted.
ccd0: 0a 20 20 20 5e 49 66 20 61 20 57 48 45 52 45 20  .   ^If a WHERE 
cce0: 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69  clause is suppli
ccf0: 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  ed, then only th
cd00: 6f 73 65 20 72 6f 77 73 20 66 6f 72 20 77 68 69  ose rows for whi
cd10: 63 68 20 74 68 65 0a 20 20 20 72 65 73 75 6c 74  ch the.   result
cd20: 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74   of evaluating t
cd30: 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
cd40: 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
cd50: 70 72 65 73 73 69 6f 6e 7c 0a 20 20 20 62 6f 6f  pression|.   boo
cd60: 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lean expression 
cd70: 69 73 20 74 72 75 65 5d 20 61 72 65 20 64 65 6c  is true] are del
cd80: 65 74 65 64 2e 0a 0a 3c 68 33 3e 52 65 73 74 72  eted...<h3>Restr
cd90: 69 63 74 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54  ictions on DELET
cda0: 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74  E Statements Wit
cdb0: 68 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47  hin CREATE TRIGG
cdc0: 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ER</h3>..<p>The 
cdd0: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69  following restri
cde0: 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20  ctions apply to 
cdf0: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
ce00: 73 20 74 68 61 74 20 6f 63 63 75 72 20 77 69 74  s that occur wit
ce10: 68 69 6e 20 74 68 65 0a 20 20 20 62 6f 64 79 20  hin the.   body 
ce20: 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54 52 49  of a [CREATE TRI
ce30: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 3a  GGER] statement:
ce40: 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
ce50: 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61  ^The <i>table-na
ce60: 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66 69 65 64  me</i> specified
ce70: 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 44 45   as part of a DE
ce80: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 77  LETE statement w
ce90: 69 74 68 69 6e 0a 20 20 20 20 61 20 74 72 69 67  ithin.    a trig
cea0: 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65  ger body must be
ceb0: 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 20 5e   unqualified.  ^
cec0: 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  (In other words,
ced0: 20 74 68 65 0a 20 20 20 20 3c 69 3e 64 61 74 61   the.    <i>data
cee0: 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  base-name</i><b>
cef0: 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e 20  .</b> prefix on 
cf00: 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  the table name i
cf10: 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 0a 20  s not allowed . 
cf20: 20 20 20 77 69 74 68 69 6e 20 74 72 69 67 67 65     within trigge
cf30: 72 73 2e 29 5e 20 5e 49 66 20 74 68 65 20 74 61  rs.)^ ^If the ta
cf40: 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65  ble to which the
cf50: 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
cf60: 63 68 65 64 20 69 73 0a 20 20 20 20 6e 6f 74 20  ched is.    not 
cf70: 69 6e 20 74 68 65 20 74 65 6d 70 20 64 61 74 61  in the temp data
cf80: 62 61 73 65 2c 20 74 68 65 6e 20 44 45 4c 45 54  base, then DELET
cf90: 45 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  E statements wit
cfa0: 68 69 6e 20 74 68 65 20 74 72 69 67 67 65 72 0a  hin the trigger.
cfb0: 20 20 20 20 62 6f 64 79 20 6d 75 73 74 20 6f 70      body must op
cfc0: 65 72 61 74 65 20 6f 6e 20 74 61 62 6c 65 73 20  erate on tables 
cfd0: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
cfe0: 64 61 74 61 62 61 73 65 20 61 73 20 69 74 2e 20  database as it. 
cff0: 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20  ^If the table.  
d000: 20 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74    to which the t
d010: 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68  rigger is attach
d020: 65 64 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d  ed is in the TEM
d030: 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  P database, then
d040: 20 74 68 65 0a 20 20 20 20 75 6e 71 75 61 6c 69   the.    unquali
d050: 66 69 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  fied name of the
d060: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 6c   table being del
d070: 65 74 65 64 20 69 73 20 72 65 73 6f 6c 76 65 64  eted is resolved
d080: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
d090: 20 61 73 0a 20 20 20 20 69 74 20 69 73 20 66 6f   as.    it is fo
d0a0: 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74  r a top-level st
d0b0: 61 74 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72  atement (by sear
d0c0: 63 68 69 6e 67 20 66 69 72 73 74 20 74 68 65 20  ching first the 
d0d0: 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74  TEMP database, t
d0e0: 68 65 6e 0a 20 20 20 20 74 68 65 20 6d 61 69 6e  hen.    the main
d0f0: 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20   database, then 
d100: 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62 61  any other databa
d110: 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72  ses in the order
d120: 20 74 68 65 79 20 77 65 72 65 0a 20 20 20 20 61   they were.    a
d130: 74 74 61 63 68 65 64 29 2e 0a 20 20 20 20 0a 20  ttached)..    . 
d140: 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44   <li><p>^The IND
d150: 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20  EXED BY and NOT 
d160: 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73 20  INDEXED clauses 
d170: 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  are not allowed 
d180: 6f 6e 20 44 45 4c 45 54 45 0a 20 20 20 20 73 74  on DELETE.    st
d190: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
d1a0: 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20  triggers.</p>.. 
d1b0: 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d   <li><p>^The LIM
d1c0: 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  IT and ORDER BY 
d1d0: 63 6c 61 75 73 65 73 20 28 64 65 73 63 72 69 62  clauses (describ
d1e0: 65 64 20 62 65 6c 6f 77 29 20 61 72 65 20 75 6e  ed below) are un
d1f0: 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 20 20  supported for.  
d200: 20 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65    DELETE stateme
d210: 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
d220: 65 72 73 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a  ers.</p>.</ul>..
d230: 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d  <h3>Optional LIM
d240: 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  IT and ORDER BY 
d250: 63 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70  clauses</h3>..<p
d260: 3e 5e 28 49 66 20 53 51 4c 69 74 65 20 69 73 20  >^(If SQLite is 
d270: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
d280: 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e [SQLITE_ENABLE
d290: 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
d2a0: 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69  IMIT].compile-ti
d2b0: 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20  me option, then 
d2c0: 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68  the syntax of th
d2d0: 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
d2e0: 6e 74 20 69 73 0a 65 78 74 65 6e 64 65 64 20 62  nt is.extended b
d2f0: 79 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  y the addition o
d300: 66 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52  f optional ORDER
d310: 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c   BY and LIMIT cl
d320: 61 75 73 65 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74  auses:)^</p>..<t
d330: 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
d340: 20 64 65 6c 65 74 65 2d 73 74 6d 74 2d 6c 69 6d   delete-stmt-lim
d350: 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  ited</tcl>..<p>^
d360: 49 66 20 61 20 44 45 4c 45 54 45 20 73 74 61 74  If a DELETE stat
d370: 65 6d 65 6e 74 20 68 61 73 20 61 20 4c 49 4d 49  ement has a LIMI
d380: 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6d 61  T clause, the ma
d390: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
d3a0: 72 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c 20 62  rows that.will b
d3b0: 65 20 64 65 6c 65 74 65 64 20 69 73 20 66 6f 75  e deleted is fou
d3c0: 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67  nd by evaluating
d3d0: 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e   the accompanyin
d3e0: 67 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  g expression and
d3f0: 20 63 61 73 74 69 6e 67 0a 69 74 20 74 6f 20 61   casting.it to a
d400: 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  n integer value.
d410: 20 5e 49 66 20 74 68 65 20 72 65 73 75 6c 74 20   ^If the result 
d420: 6f 66 20 74 68 65 20 65 76 61 6c 75 61 74 69 6e  of the evaluatin
d430: 67 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  g the LIMIT clau
d440: 73 65 0a 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73  se.cannot be los
d450: 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
d460: 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  d to an integer 
d470: 76 61 6c 75 65 2c 20 69 74 20 69 73 20 61 6e 20  value, it is an 
d480: 65 72 72 6f 72 2e 20 5e 41 20 0a 6e 65 67 61 74  error. ^A .negat
d490: 69 76 65 20 4c 49 4d 49 54 20 76 61 6c 75 65 20  ive LIMIT value 
d4a0: 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
d4b0: 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e 20 5e 28  s "no limit". ^(
d4c0: 49 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  If the DELETE st
d4d0: 61 74 65 6d 65 6e 74 20 0a 61 6c 73 6f 20 68 61  atement .also ha
d4e0: 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75  s an OFFSET clau
d4f0: 73 65 2c 20 74 68 65 6e 20 69 74 20 69 73 20 73  se, then it is s
d500: 69 6d 69 6c 61 72 6c 79 20 65 76 61 6c 75 61 74  imilarly evaluat
d510: 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61  ed and cast to a
d520: 6e 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  n.integer value.
d530: 20 41 67 61 69 6e 2c 20 69 74 20 69 73 20 61 6e   Again, it is an
d540: 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 76 61   error if the va
d550: 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f  lue cannot be lo
d560: 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74  sslessly.convert
d570: 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
d580: 2e 29 5e 20 5e 49 66 20 74 68 65 72 65 20 69 73  .)^ ^If there is
d590: 20 6e 6f 20 4f 46 46 53 45 54 20 63 6c 61 75 73   no OFFSET claus
d5a0: 65 2c 20 6f 72 20 74 68 65 20 63 61 6c 63 75 6c  e, or the calcul
d5b0: 61 74 65 64 0a 69 6e 74 65 67 65 72 20 76 61 6c  ated.integer val
d5c0: 75 65 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20  ue is negative, 
d5d0: 74 68 65 20 65 66 66 65 63 74 69 76 65 20 4f 46  the effective OF
d5e0: 46 53 45 54 20 76 61 6c 75 65 20 69 73 20 7a 65  FSET value is ze
d5f0: 72 6f 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65  ro...<p>^(If the
d600: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
d610: 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52 20 42  t has an ORDER B
d620: 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61  Y clause, then a
d630: 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77 6f 75  ll rows that wou
d640: 6c 64 20 0a 62 65 20 64 65 6c 65 74 65 64 20 69  ld .be deleted i
d650: 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66  n the absence of
d660: 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
d670: 65 20 61 72 65 20 73 6f 72 74 65 64 20 61 63 63  e are sorted acc
d680: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 0a 4f  ording to the .O
d690: 52 44 45 52 20 42 59 2e 20 54 68 65 20 66 69 72  RDER BY. The fir
d6a0: 73 74 20 3c 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73  st <i>M</i> rows
d6b0: 2c 20 77 68 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e  , where <i>M</i>
d6c0: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 66 6f   is the value fo
d6d0: 75 6e 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e  und by.evaluatin
d6e0: 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61  g the OFFSET cla
d6f0: 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  use expression, 
d700: 61 72 65 20 73 6b 69 70 70 65 64 2c 20 61 6e 64  are skipped, and
d710: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a   the following .
d720: 3c 69 3e 4e 3c 2f 69 3e 2c 20 77 68 65 72 65 20  <i>N</i>, where 
d730: 3c 69 3e 4e 3c 2f 69 3e 20 69 73 20 74 68 65 20  <i>N</i> is the 
d740: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d  value of the LIM
d750: 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 61  IT expression, a
d760: 72 65 20 64 65 6c 65 74 65 64 2e 29 5e 0a 5e 49  re deleted.)^.^I
d770: 66 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73  f there are less
d780: 20 74 68 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72   than <i>N</i> r
d790: 6f 77 73 20 72 65 6d 61 69 6e 69 6e 67 20 61 66  ows remaining af
d7a0: 74 65 72 20 74 61 6b 69 6e 67 20 74 68 65 20 4f  ter taking the O
d7b0: 46 46 53 45 54 20 63 6c 61 75 73 65 0a 69 6e 74  FFSET clause.int
d7c0: 6f 20 61 63 63 6f 75 6e 74 2c 20 6f 72 20 69 66  o account, or if
d7d0: 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
d7e0: 65 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20 61  e evaluated to a
d7f0: 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c   negative value,
d800: 20 74 68 65 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e   then all.remain
d810: 69 6e 67 20 72 6f 77 73 20 61 72 65 20 64 65 6c  ing rows are del
d820: 65 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  eted...<p>^If th
d830: 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
d840: 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45 52 20  nt has no ORDER 
d850: 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
d860: 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a 77 6f  all rows that.wo
d870: 75 6c 64 20 62 65 20 64 65 6c 65 74 65 64 20 69  uld be deleted i
d880: 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66  n the absence of
d890: 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
d8a0: 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65 64 20  e are assembled 
d8b0: 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72 79 20  in an.arbitrary 
d8c0: 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61 70 70  order before app
d8d0: 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  lying the LIMIT 
d8e0: 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61 75 73  and OFFSET claus
d8f0: 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  es to determine 
d900: 0a 74 68 65 20 73 75 62 73 65 74 20 74 68 61 74  .the subset that
d910: 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 64 65   are actually de
d920: 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65  leted...<p>^(The
d930: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
d940: 20 6f 6e 20 61 6e 20 44 45 4c 45 54 45 20 73 74   on an DELETE st
d950: 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
d960: 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e  only to determin
d970: 65 20 77 68 69 63 68 0a 72 6f 77 73 20 66 61 6c  e which.rows fal
d980: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d  l within the LIM
d990: 49 54 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e  IT. The order in
d9a0: 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
d9b0: 64 65 6c 65 74 65 64 20 69 73 20 61 72 62 69 74  deleted is arbit
d9c0: 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20  rary.and is not 
d9d0: 69 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68  influenced by th
d9e0: 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
d9f0: 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  e.)^..<tcl>hd_fr
da00: 61 67 6d 65 6e 74 20 74 72 75 6e 63 61 74 65 6f  agment truncateo
da10: 70 74 20 7b 74 72 75 6e 63 61 74 65 20 6f 70 74  pt {truncate opt
da20: 69 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e  imization}</tcl>
da30: 0a 3c 68 33 3e 54 68 65 20 54 72 75 6e 63 61 74  .<h3>The Truncat
da40: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f  e Optimization</
da50: 68 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68  h3>..<p>^When th
da60: 65 20 57 48 45 52 45 20 69 73 20 6f 6d 69 74 74  e WHERE is omitt
da70: 65 64 20 66 72 6f 6d 20 61 20 44 45 4c 45 54 45  ed from a DELETE
da80: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74   statement and t
da90: 68 65 20 74 61 62 6c 65 0a 62 65 69 6e 67 20 64  he table.being d
daa0: 65 6c 65 74 65 64 20 68 61 73 20 6e 6f 20 74 72  eleted has no tr
dab0: 69 67 67 65 72 73 2c 0a 53 51 4c 69 74 65 20 75  iggers,.SQLite u
dac0: 73 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ses an optimizat
dad0: 69 6f 6e 20 74 6f 20 65 72 61 73 65 20 74 68 65  ion to erase the
dae0: 20 65 6e 74 69 72 65 20 74 61 62 6c 65 20 63 6f   entire table co
daf0: 6e 74 65 6e 74 0a 77 69 74 68 6f 75 74 20 68 61  ntent.without ha
db00: 76 69 6e 67 20 74 6f 20 76 69 73 69 74 20 65 61  ving to visit ea
db10: 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61  ch row of the ta
db20: 62 6c 65 20 69 6e 64 69 76 69 64 75 61 6c 6c 79  ble individually
db30: 2e 0a 54 68 69 73 20 22 74 72 75 6e 63 61 74 65  ..This "truncate
db40: 22 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6d  " optimization m
db50: 61 6b 65 73 20 74 68 65 20 64 65 6c 65 74 65 20  akes the delete 
db60: 72 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72 2e  run much faster.
db70: 0a 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74 65  .Prior to SQLite
db80: 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d   [version 3.6.5]
db90: 2c 20 74 68 65 20 74 72 75 6e 63 61 74 65 20 6f  , the truncate o
dba0: 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f  ptimization.also
dbb0: 20 6d 65 61 6e 74 20 74 68 61 74 20 74 68 65 20   meant that the 
dbc0: 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  [sqlite3_changes
dbd0: 28 29 5d 20 61 6e 64 0a 5b 73 71 6c 69 74 65 33  ()] and.[sqlite3
dbe0: 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
dbf0: 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 61 6e 64  ] interfaces.and
dc00: 20 74 68 65 20 5b 63 6f 75 6e 74 5f 63 68 61 6e   the [count_chan
dc10: 67 65 73 20 70 72 61 67 6d 61 5d 0a 77 69 6c 6c  ges pragma].will
dc20: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 72 65   not actually re
dc30: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
dc40: 6f 66 20 64 65 6c 65 74 65 64 20 72 6f 77 73 2e  of deleted rows.
dc50: 20 20 0a 54 68 61 74 20 70 72 6f 62 6c 65 6d 20    .That problem 
dc60: 68 61 73 20 62 65 65 6e 20 66 69 78 65 64 20 61  has been fixed a
dc70: 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e 20 33 2e  s of [version 3.
dc80: 36 2e 35 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74  6.5]...<p>^The t
dc90: 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
dca0: 74 69 6f 6e 20 63 61 6e 20 62 65 20 70 65 72 6d  tion can be perm
dcb0: 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 64  anently disabled
dcc0: 20 66 6f 72 20 61 6c 6c 20 71 75 65 72 69 65 73   for all queries
dcd0: 0a 62 79 20 72 65 63 6f 6d 70 69 6c 69 6e 67 0a  .by recompiling.
dce0: 53 51 4c 69 74 65 20 77 69 74 68 20 74 68 65 20  SQLite with the 
dcf0: 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 55  [SQLITE_OMIT_TRU
dd00: 4e 43 41 54 45 5f 4f 50 54 49 4d 49 5a 41 54 49  NCATE_OPTIMIZATI
dd10: 4f 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ON] compile-time
dd20: 20 73 77 69 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70   switch.</p>..<p
dd30: 3e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70  >The truncate op
dd40: 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 61  timization can a
dd50: 6c 73 6f 20 62 65 20 64 69 73 61 62 6c 65 64 20  lso be disabled 
dd60: 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67  at runtime using
dd70: 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 65  .the [sqlite3_se
dd80: 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 29 5d 20  t_authorizer()] 
dd90: 69 6e 74 65 72 66 61 63 65 2e 20 20 5e 49 66 20  interface.  ^If 
dda0: 61 6e 20 61 75 74 68 6f 72 69 7a 65 72 20 63 61  an authorizer ca
ddb0: 6c 6c 62 61 63 6b 0a 72 65 74 75 72 6e 73 20 5b  llback.returns [
ddc0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 5d 20 66  SQLITE_IGNORE] f
ddd0: 6f 72 20 61 6e 20 5b 53 51 4c 49 54 45 5f 44 45  or an [SQLITE_DE
dde0: 4c 45 54 45 5d 20 61 63 74 69 6f 6e 20 63 6f 64  LETE] action cod
ddf0: 65 2c 20 74 68 65 6e 0a 74 68 65 20 44 45 4c 45  e, then.the DELE
de00: 54 45 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c  TE operation wil
de10: 6c 20 70 72 6f 63 65 65 64 20 62 75 74 20 74 68  l proceed but th
de20: 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d  e truncate optim
de30: 69 7a 61 74 69 6f 6e 20 77 69 6c 6c 0a 62 65 20  ization will.be 
de40: 62 79 70 61 73 73 65 64 20 61 6e 64 20 72 6f 77  bypassed and row
de50: 73 20 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65  s will be delete
de60: 64 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 3c 2f 70  d one by one.</p
de70: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
de80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
deb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dec0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
ded0: 20 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53   {DETACH DATABAS
dee0: 45 7d 20 64 65 74 61 63 68 20 2a 44 45 54 41 43  E} detach *DETAC
def0: 48 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  H..BubbleDiagram
df00: 20 64 65 74 61 63 68 2d 73 74 6d 74 20 31 0a 3c   detach-stmt 1.<
df10: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20  /tcl>..<p>^This 
df20: 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61 63 68  statement detach
df30: 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c  es an additional
df40: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
df50: 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20  tion previously 
df60: 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e 67 20  .attached using 
df70: 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73 74 61  the [ATTACH] sta
df80: 74 65 6d 65 6e 74 2e 20 20 0a 5e 49 74 20 69 73  tement.  .^It is
df90: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76   possible to hav
dfa0: 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  e the same datab
dfb0: 61 73 65 20 66 69 6c 65 20 61 74 74 61 63 68 65  ase file attache
dfc0: 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
dfd0: 20 75 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e   using .differen
dfe0: 74 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74  t names, and det
dff0: 61 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65  aching one conne
e000: 63 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20  ction to a file 
e010: 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a  will leave the .
e020: 6f 74 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f  others intact.</
e030: 70 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61  p>..<p>^This sta
e040: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c  tement will fail
e050: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e   if SQLite is in
e060: 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61   the middle of a
e070: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70   transaction.</p
e080: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
e090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e0a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e0b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e0d0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
e0e0: 20 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72   {DROP INDEX} dr
e0f0: 6f 70 69 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49  opindex {{DROP I
e100: 4e 44 45 58 7d 7d 0a 0a 42 75 62 62 6c 65 44 69  NDEX}}..BubbleDi
e110: 61 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65 78  agram drop-index
e120: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
e130: 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 49 4e 44  <p>^The DROP IND
e140: 45 58 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d  EX statement rem
e150: 6f 76 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64  oves an index ad
e160: 64 65 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52  ded.with the [CR
e170: 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74  EATE INDEX] stat
e180: 65 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65  ement.  The inde
e190: 78 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  x is completely 
e1a0: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65  removed from.the
e1b0: 20 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79   disk.  The only
e1c0: 20 77 61 79 20 74 6f 20 72 65 63 6f 76 65 72 20   way to recover 
e1d0: 74 68 65 20 69 6e 64 65 78 20 69 73 20 74 6f 20  the index is to 
e1e0: 72 65 65 6e 74 65 72 20 74 68 65 0a 61 70 70 72  reenter the.appr
e1f0: 6f 70 72 69 61 74 65 20 5b 43 52 45 41 54 45 20  opriate [CREATE 
e200: 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c  INDEX] command.<
e210: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
e220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e260: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
e270: 6e 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64  n {DROP TABLE} d
e280: 72 6f 70 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20  roptable {{DROP 
e290: 54 41 42 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44  TABLE}}..BubbleD
e2a0: 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c  iagram drop-tabl
e2b0: 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  e-stmt 1.</tcl>.
e2c0: 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 41  .<p>^The DROP TA
e2d0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 72 65  BLE statement re
e2e0: 6d 6f 76 65 73 20 61 20 74 61 62 6c 65 20 61 64  moves a table ad
e2f0: 64 65 64 20 77 69 74 68 20 74 68 65 0a 5b 43 52  ded with the.[CR
e300: 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
e310: 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e 61 6d 65  ement.  The name
e320: 20 73 70 65 63 69 66 69 65 64 20 69 73 20 74 68   specified is th
e330: 65 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20 5e  e.table name.  ^
e340: 54 68 65 20 64 72 6f 70 70 65 64 20 74 61 62 6c  The dropped tabl
e350: 65 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  e is completely 
e360: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
e370: 20 64 61 74 61 62 61 73 65 20 0a 73 63 68 65 6d   database .schem
e380: 61 20 61 6e 64 20 74 68 65 20 64 69 73 6b 20 66  a and the disk f
e390: 69 6c 65 2e 20 20 54 68 65 20 74 61 62 6c 65 20  ile.  The table 
e3a0: 63 61 6e 20 6e 6f 74 20 62 65 20 72 65 63 6f 76  can not be recov
e3b0: 65 72 65 64 2e 20 20 0a 5e 41 6c 6c 20 69 6e 64  ered.  .^All ind
e3c0: 69 63 65 73 20 61 6e 64 20 74 72 69 67 67 65 72  ices and trigger
e3d0: 73 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s.associated wit
e3e0: 68 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20  h the table are 
e3f0: 61 6c 73 6f 20 64 65 6c 65 74 65 64 2e 3c 2f 70  also deleted.</p
e400: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f  >..<p>^The optio
e410: 6e 61 6c 20 49 46 20 45 58 49 53 54 53 20 63 6c  nal IF EXISTS cl
e420: 61 75 73 65 20 73 75 70 70 72 65 73 73 65 73 20  ause suppresses 
e430: 74 68 65 20 65 72 72 6f 72 20 74 68 61 74 20 77  the error that w
e440: 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65  ould normally.re
e450: 73 75 6c 74 20 69 66 20 74 68 65 20 74 61 62 6c  sult if the tabl
e460: 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
e470: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66  .</p>..<p>^If [f
e480: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
e490: 72 61 69 6e 74 73 5d 20 61 72 65 20 65 6e 61 62  raints] are enab
e4a0: 6c 65 64 2c 20 61 20 44 52 4f 50 20 54 41 42 4c  led, a DROP TABL
e4b0: 45 20 63 6f 6d 6d 61 6e 64 20 70 65 72 66 6f 72  E command perfor
e4c0: 6d 73 20 61 6e 0a 69 6d 70 6c 69 63 69 74 20 5b  ms an.implicit [
e4d0: 44 45 4c 45 54 45 20 7c 20 44 45 4c 45 54 45 20  DELETE | DELETE 
e4e0: 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b  FROM &lt;tbl&gt;
e4f0: 5d 20 63 6f 6d 6d 61 6e 64 20 62 65 66 6f 72 65  ] command before
e500: 20 72 65 6d 6f 76 69 6e 67 20 74 68 65 0a 74 61   removing the.ta
e510: 62 6c 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ble from the dat
e520: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 41  abase schema. ^A
e530: 6e 79 20 74 72 69 67 67 65 72 73 20 61 74 74 61  ny triggers atta
e540: 63 68 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c  ched to the tabl
e550: 65 20 61 72 65 0a 64 72 6f 70 70 65 64 20 66 72  e are.dropped fr
e560: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
e570: 73 63 68 65 6d 61 20 62 65 66 6f 72 65 20 74 68  schema before th
e580: 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54  e implicit DELET
e590: 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67  E FROM &lt;tbl&g
e5a0: 74 3b 20 0a 69 73 20 65 78 65 63 75 74 65 64 2c  t; .is executed,
e5b0: 20 73 6f 20 74 68 69 73 20 63 61 6e 6e 6f 74 20   so this cannot 
e5c0: 63 61 75 73 65 20 61 6e 79 20 74 72 69 67 67 65  cause any trigge
e5d0: 72 73 20 74 6f 20 66 69 72 65 2e 20 42 79 20 63  rs to fire. By c
e5e0: 6f 6e 74 72 61 73 74 2c 20 5e 61 6e 0a 69 6d 70  ontrast, ^an.imp
e5f0: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
e600: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 64 6f  M &lt;tbl&gt; do
e610: 65 73 20 63 61 75 73 65 20 61 6e 79 20 63 6f 6e  es cause any con
e620: 66 69 67 75 72 65 64 0a 5b 66 6f 72 65 69 67 6e  figured.[foreign
e630: 20 6b 65 79 20 61 63 74 69 6f 6e 73 5d 20 74 6f   key actions] to
e640: 20 74 61 6b 65 20 70 6c 61 63 65 2e 20 0a 5e 49   take place. .^I
e650: 66 20 74 68 65 20 69 6d 70 6c 69 63 69 74 20 44  f the implicit D
e660: 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74  ELETE FROM &lt;t
e670: 62 6c 26 67 74 3b 20 65 78 65 63 75 74 65 64 0a  bl&gt; executed.
e680: 61 73 20 70 61 72 74 20 6f 66 20 61 20 44 52 4f  as part of a DRO
e690: 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  P TABLE command 
e6a0: 76 69 6f 6c 61 74 65 73 20 61 6e 79 20 69 6d 6d  violates any imm
e6b0: 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
e6c0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a  ey constraints,.
e6d0: 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  an error is retu
e6e0: 72 6e 65 64 20 61 6e 64 20 74 68 65 20 74 61 62  rned and the tab
e6f0: 6c 65 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65  le is not droppe
e700: 64 2e 20 5e 49 66 20 0a 74 68 65 20 69 6d 70 6c  d. ^If .the impl
e710: 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d  icit DELETE FROM
e720: 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 63 61 75   &lt;tbl&gt; cau
e730: 73 65 73 20 61 6e 79 20 0a 64 65 66 65 72 72 65  ses any .deferre
e740: 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  d foreign key co
e750: 6e 73 74 72 61 69 6e 74 73 20 74 6f 20 62 65 20  nstraints to be 
e760: 76 69 6f 6c 61 74 65 64 2c 20 61 6e 64 20 74 68  violated, and th
e770: 65 20 76 69 6f 6c 61 74 69 6f 6e 73 20 73 74 69  e violations sti
e780: 6c 6c 0a 65 78 69 73 74 20 77 68 65 6e 20 74 68  ll.exist when th
e790: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
e7a0: 20 63 6f 6d 6d 69 74 74 65 64 2c 20 61 6e 20 65   committed, an e
e7b0: 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
e7c0: 20 61 74 20 74 68 65 20 74 69 6d 65 0a 6f 66 20   at the time.of 
e7d0: 63 6f 6d 6d 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23  commit...<tcl>.#
e7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e7f0: 23 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 0a 53 65  #############.Se
e830: 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 52 49 47  ction {DROP TRIG
e840: 47 45 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72  GER} droptrigger
e850: 20 7b 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d   {{DROP TRIGGER}
e860: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
e870: 20 64 72 6f 70 2d 74 72 69 67 67 65 72 2d 73 74   drop-trigger-st
e880: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
e890: 5e 54 68 65 20 44 52 4f 50 20 54 52 49 47 47 45  ^The DROP TRIGGE
e8a0: 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  R statement remo
e8b0: 76 65 73 20 61 20 74 72 69 67 67 65 72 20 63 72  ves a trigger cr
e8c0: 65 61 74 65 64 20 62 79 20 74 68 65 20 0a 5b 43  eated by the .[C
e8d0: 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73  REATE TRIGGER] s
e8e0: 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20  tatement.  ^The 
e8f0: 74 72 69 67 67 65 72 20 69 73 20 0a 64 65 6c 65  trigger is .dele
e900: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ted from the dat
e910: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 4e  abase schema. ^N
e920: 6f 74 65 20 74 68 61 74 20 74 72 69 67 67 65 72  ote that trigger
e930: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
e940: 6c 6c 79 20 0a 64 72 6f 70 70 65 64 20 77 68 65  lly .dropped whe
e950: 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  n the associated
e960: 20 74 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65   table is droppe
e970: 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
e980: 23 23 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 0a 53 65 63  ############.Sec
e9d0: 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d  tion {DROP VIEW}
e9e0: 20 64 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50   dropview {{DROP
e9f0: 20 56 49 45 57 7d 7d 0a 0a 42 75 62 62 6c 65 44   VIEW}}..BubbleD
ea00: 69 61 67 72 61 6d 20 64 72 6f 70 2d 76 69 65 77  iagram drop-view
ea10: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
ea20: 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 56 49 45  <p>^The DROP VIE
ea30: 57 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  W statement remo
ea40: 76 65 73 20 61 20 76 69 65 77 20 63 72 65 61 74  ves a view creat
ea50: 65 64 20 62 79 20 74 68 65 0a 5b 43 52 45 41 54  ed by the.[CREAT
ea60: 45 20 56 49 45 57 5d 20 73 74 61 74 65 6d 65 6e  E VIEW] statemen
ea70: 74 2e 20 20 5e 54 68 65 20 6e 61 6d 65 20 73 70  t.  ^The name sp
ea80: 65 63 69 66 69 65 64 20 69 73 20 74 68 65 20 0a  ecified is the .
ea90: 76 69 65 77 20 6e 61 6d 65 2e 20 20 5e 49 74 20  view name.  ^It 
eaa0: 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
eab0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
eac0: 65 6d 61 2c 20 62 75 74 20 6e 6f 20 61 63 74 75  ema, but no actu
ead0: 61 6c 20 64 61 74 61 20 0a 69 6e 20 74 68 65 20  al data .in the 
eae0: 75 6e 64 65 72 6c 79 69 6e 67 20 62 61 73 65 20  underlying base 
eaf0: 74 61 62 6c 65 73 20 69 73 20 6d 6f 64 69 66 69  tables is modifi
eb00: 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ed.</p>..<tcl>.#
eb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb50: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
eb60: 63 74 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78  ction EXPLAIN ex
eb70: 70 6c 61 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42  plain EXPLAIN..B
eb80: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
eb90: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
eba0: 3e 5e 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  >^An SQL stateme
ebb0: 6e 74 20 63 61 6e 20 62 65 20 70 72 65 63 65 64  nt can be preced
ebc0: 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72  ed by the keywor
ebd0: 64 20 22 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62  d "EXPLAIN" or.b
ebe0: 79 20 74 68 65 20 70 68 72 61 73 65 20 22 45 58  y the phrase "EX
ebf0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
ec00: 22 2e 20 20 5e 45 69 74 68 65 72 20 6d 6f 64 69  ".  ^Either modi
ec10: 66 69 63 61 74 69 6f 6e 20 63 61 75 73 65 73 20  fication causes 
ec20: 74 68 65 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e  the.SQL statemen
ec30: 74 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  t to behave as a
ec40: 20 71 75 65 72 79 20 61 6e 64 20 74 6f 20 72 65   query and to re
ec50: 74 75 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  turn information
ec60: 20 61 62 6f 75 74 0a 68 6f 77 20 74 68 65 20 53   about.how the S
ec70: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  QL statement wou
ec80: 6c 64 20 68 61 76 65 20 6f 70 65 72 61 74 65 64  ld have operated
ec90: 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
eca0: 6b 65 79 77 6f 72 64 20 6f 72 0a 70 68 72 61 73  keyword or.phras
ecb0: 65 20 68 61 64 20 62 65 65 6e 20 6f 6d 69 74 74  e had been omitt
ecc0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ed.</p>..<p>The 
ecd0: 6f 75 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c  output from EXPL
ece0: 41 49 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20  AIN and EXPLAIN 
ecf0: 51 55 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e  QUERY PLAN is in
ed00: 74 65 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72  tended for.inter
ed10: 61 63 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20  active analysis 
ed20: 61 6e 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74  and troubleshoot
ed30: 69 6e 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64  ing only.  The d
ed40: 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f  etails of the .o
ed50: 75 74 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65  utput format are
ed60: 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e   subject to chan
ed70: 67 65 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65  ge from one rele
ed80: 61 73 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  ase of SQLite to
ed90: 20 74 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69   the next..Appli
eda0: 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e  cations should n
edb0: 6f 74 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f  ot use EXPLAIN o
edc0: 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  r EXPLAIN QUERY 
edd0: 50 4c 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72  PLAN since.their
ede0: 20 65 78 61 63 74 20 62 65 68 61 76 69 6f 72 20   exact behavior 
edf0: 69 73 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20  is variable and 
ee00: 6f 6e 6c 79 20 70 61 72 74 69 61 6c 6c 79 20 64  only partially d
ee10: 6f 63 75 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a  ocumented.</p>..
ee20: 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50  <p>^When the EXP
ee30: 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70  LAIN keyword app
ee40: 65 61 72 73 20 62 79 20 69 74 73 65 6c 66 20 69  ears by itself i
ee50: 74 20 63 61 75 73 65 73 20 74 68 65 20 73 74 61  t causes the sta
ee60: 74 65 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65  tement.to behave
ee70: 20 61 73 20 61 20 71 75 65 72 79 20 74 68 61 74   as a query that
ee80: 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 65 71   returns the seq
ee90: 75 65 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75  uence of .[virtu
eea0: 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72  al machine instr
eeb0: 75 63 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c  uctions] it woul
eec0: 64 20 68 61 76 65 20 75 73 65 64 20 74 6f 20 65  d have used to e
eed0: 78 65 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61  xecute the comma
eee0: 6e 64 20 68 61 64 0a 74 68 65 20 45 58 50 4c 41  nd had.the EXPLA
eef0: 49 4e 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62  IN keyword not b
ef00: 65 65 6e 20 70 72 65 73 65 6e 74 2e 20 5e 57 68  een present. ^Wh
ef10: 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
ef20: 55 45 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65  UERY PLAN phrase
ef30: 0a 61 70 70 65 61 72 73 2c 20 74 68 65 20 73 74  .appears, the st
ef40: 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 20  atement returns 
ef50: 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72  high-level infor
ef60: 6d 61 74 69 6f 6e 20 72 65 67 61 72 64 69 6e 67  mation regarding
ef70: 20 74 68 65 20 71 75 65 72 79 0a 70 6c 61 6e 20   the query.plan 
ef80: 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20  that would have 
ef90: 62 65 65 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20  been used...The 
efa0: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
efb0: 41 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65  AN command is de
efc0: 73 63 72 69 62 65 64 20 69 6e 20 0a 5b 65 78 70  scribed in .[exp
efd0: 6c 61 69 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c  lain query plan|
efe0: 6d 6f 72 65 20 64 65 74 61 69 6c 20 68 65 72 65  more detail here
eff0: 5d 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ]...<tcl>.######
f000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f040: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
f050: 20 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72   expression expr
f060: 20 7b 2a 65 78 70 72 65 73 73 69 6f 6e 20 7b 65   {*expression {e
f070: 78 70 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78  xpression syntax
f080: 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
f090: 6d 20 65 78 70 72 20 31 0a 42 75 62 62 6c 65 44  m expr 1.BubbleD
f0a0: 69 61 67 72 61 6d 20 6c 69 74 65 72 61 6c 2d 76  iagram literal-v
f0b0: 61 6c 75 65 0a 42 75 62 62 6c 65 44 69 61 67 72  alue.BubbleDiagr
f0c0: 61 6d 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72  am signed-number
f0d0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
f0e0: 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 0a 3c 2f  aise-function.</
f0f0: 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65  tcl>..<p>This se
f100: 63 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65  ction is differe
f110: 6e 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65  nt from the othe
f120: 72 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20  rs.  Most other 
f130: 73 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73  sections of.this
f140: 20 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20   document talks 
f150: 61 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c  about a particul
f160: 61 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20  ar SQL command. 
f170: 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f   This section do
f180: 65 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75  es.not talk abou
f190: 74 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63  t a standalone c
f1a0: 6f 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74  ommand but about
f1b0: 20 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77   "expressions" w
f1c0: 68 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d  hich are .subcom
f1d0: 70 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20  ponents of most 
f1e0: 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c  other commands.<
f1f0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
f200: 67 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20  gment binaryops 
f210: 7b 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72  {binary operator
f220: 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65  s}</tcl>.<h3>Ope
f230: 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
f240: 28 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61  (SQLite understa
f250: 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nds the followin
f260: 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  g binary operato
f270: 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  rs, in order fro
f280: 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77  m.highest to low
f290: 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c  est precedence:<
f2a0: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
f2b0: 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
f2c0: 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
f2d0: 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25  g>||.*    /    %
f2e0: 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b  .+    -.&lt;&lt;
f2f0: 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61     &gt;&gt;   &a
f300: 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20  mp;    |.&lt;   
f310: 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20   &lt;=   &gt;   
f320: 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20   &gt;=.=    ==  
f330: 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20   !=   &lt;&gt;  
f340: 20 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e   </big>IS   IS N
f350: 4f 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20  OT   IN   LIKE  
f360: 20 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20   GLOB   MATCH   
f370: 52 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52  REGEXP.AND   .OR
f380: 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f  </font>.</pre></
f390: 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
f3a0: 70 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e  p>^(Supported un
f3b0: 61 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61  ary prefix opera
f3c0: 74 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c  tors are these:<
f3d0: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
f3e0: 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
f3f0: 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
f400: 67 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20  g>-    +    ~   
f410: 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74   NOT</big></font
f420: 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  >.</pre></blockq
f430: 75 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  uote>)^..<tcl>hd
f440: 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74  _fragment collat
f450: 65 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65  eop {COLLATE ope
f460: 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  rator}</tcl>.<p>
f470: 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65  ^The COLLATE ope
f480: 72 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79  rator is a unary
f490: 20 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f   postfix.operato
f4a0: 72 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61  r that assigns a
f4b0: 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
f4c0: 65 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72  ence] to an expr
f4d0: 65 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c  ession..^The COL
f4e0: 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61  LATE operator ha
f4f0: 73 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65  s a higher prece
f500: 64 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72  dence (binds mor
f510: 65 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20  e tightly) than 
f520: 61 6e 79 0a 70 72 65 66 69 78 20 75 6e 61 72 79  any.prefix unary
f530: 20 6f 70 65 72 61 74 6f 72 20 6f 72 20 61 6e 79   operator or any
f540: 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
f550: 2e 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e 67  ..^The collating
f560: 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79   sequence set by
f570: 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65   the COLLATE ope
f580: 72 61 74 6f 72 20 6f 76 65 72 72 69 64 65 73 20  rator overrides 
f590: 74 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the.collating se
f5a0: 71 75 65 6e 63 65 20 64 65 74 65 72 6d 69 6e 65  quence determine
f5b0: 64 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45  d by the COLLATE
f5c0: 20 63 6c 61 75 73 65 20 69 6e 20 61 20 74 61 62   clause in a tab
f5d0: 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  le.[column defin
f5e0: 69 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65 20  ition]..See the 
f5f0: 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  [collating seque
f600: 6e 63 65 7c 20 64 65 74 61 69 6c 65 64 20 64 69  nce| detailed di
f610: 73 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c 6c  scussion on coll
f620: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 5d  ating sequences]
f630: 0a 69 6e 20 74 68 65 20 5b 64 61 74 61 74 79 70  .in the [datatyp
f640: 65 20 7c 20 44 61 74 61 74 79 70 65 20 49 6e 20  e | Datatype In 
f650: 53 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65 6e  SQLite3] documen
f660: 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
f670: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c 2f   information..</
f680: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73  p>..<tcl>hd_puts
f690: 20 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72 79   ".<p>^The unary
f6a0: 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61   operator [Opera
f6b0: 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f  tor +] is a no-o
f6c0: 70 2e 20 20 5e 49 74 20 63 61 6e 20 62 65 20 61  p.  ^It can be a
f6d0: 70 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e 67  pplied.to string
f6e0: 73 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f 62  s, numbers, blob
f6f0: 73 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69 74  s or NULL and it
f700: 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20   always returns 
f710: 61 20 72 65 73 75 6c 74 0a 77 69 74 68 20 74 68  a result.with th
f720: 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20  e same value as 
f730: 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e  the operand.</p>
f740: 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65  "</tcl>..<p>Note
f750: 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65 20   that there are 
f760: 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f  two variations o
f770: 66 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e 64  f the equals and
f780: 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65 72   not equals.oper
f790: 61 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73 20  ators.  ^Equals 
f7a0: 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a 3c  can be either..<
f7b0: 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f  tcl>.hd_puts "[O
f7c0: 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f  perator =] or [O
f7d0: 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68  perator ==]..^Th
f7e0: 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65  e non-equals ope
f7f0: 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69 74  rator can be eit
f800: 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d  her.[Operator !=
f810: 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b  ] or [Operator {
f820: 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65  &lt;&gt;}]..^The
f830: 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f   [Operator ||] o
f840: 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e  perator is \"con
f850: 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20  catenate\" - it 
f860: 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74  joins together.t
f870: 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f  he two strings o
f880: 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a  f its operands..
f890: 5e 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f  ^The operator [O
f8a0: 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70 75  perator %] outpu
f8b0: 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ts the value of 
f8c0: 69 74 73 20 6c 65 66 74 20 0a 6f 70 65 72 61 6e  its left .operan
f8d0: 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69 67  d modulo its rig
f8e0: 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 0a  ht operand.</p>.
f8f0: 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20  .<p>^The result 
f900: 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f 70  of any binary op
f910: 65 72 61 74 6f 72 20 69 73 20 65 69 74 68 65 72  erator is either
f920: 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
f930: 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78 63 65 70   or .NULL, excep
f940: 74 20 66 6f 72 20 74 68 65 20 5b 4f 70 65 72 61  t for the [Opera
f950: 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65 6e  tor ||] concaten
f960: 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20 77  ation operator w
f970: 68 69 63 68 20 61 6c 77 61 79 73 20 0a 65 76 61  hich always .eva
f980: 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68 65 72  luates to either
f990: 20 4e 55 4c 4c 20 6f 72 20 61 20 74 65 78 74 20   NULL or a text 
f9a0: 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68 64 5f  value.</p>"..hd_
f9b0: 66 72 61 67 6d 65 6e 74 20 7b 69 73 69 73 6e 6f  fragment {isisno
f9c0: 74 7d 20 7b 49 53 20 6f 70 65 72 61 74 6f 72 7d  t} {IS operator}
f9d0: 20 7b 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f   {IS NOT operato
f9e0: 72 7d 0a 0a 68 64 5f 70 75 74 73 20 22 3c 70 3e  r}..hd_puts "<p>
f9f0: 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 49  ^The [Operator I
fa00: 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72  S] and [Operator
fa10: 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70 65 72 61   {IS NOT}] opera
fa20: 74 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b 65 20 5b  tors work.like [
fa30: 4f 70 65 72 61 74 6f 72 20 3d 5d 20 61 6e 64 20  Operator =] and 
fa40: 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 65 78  [Operator !=] ex
fa50: 63 65 70 74 20 77 68 65 6e 20 6f 6e 65 20 6f 72  cept when one or
fa60: 20 62 6f 74 68 20 6f 66 20 74 68 65 0a 6f 70 65   both of the.ope
fa70: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2e 20  rands are NULL. 
fa80: 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 69  ^In this case, i
fa90: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
faa0: 61 72 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  are NULL, then t
fab0: 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65  he.IS operator e
fac0: 76 61 6c 75 61 74 65 73 20 74 6f 20 31 20 28 74  valuates to 1 (t
fad0: 72 75 65 29 20 61 6e 64 20 74 68 65 20 49 53 20  rue) and the IS 
fae0: 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 65 76 61  NOT operator eva
faf0: 6c 75 61 74 65 73 0a 74 6f 20 30 20 28 66 61 6c  luates.to 0 (fal
fb00: 73 65 29 2e 20 5e 49 66 20 6f 6e 65 20 6f 70 65  se). ^If one ope
fb10: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 61 6e 64  rand is NULL and
fb20: 20 74 68 65 20 6f 74 68 65 72 20 69 73 20 6e 6f   the other is no
fb30: 74 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f  t, then the.IS o
fb40: 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
fb50: 73 20 74 6f 20 30 20 28 66 61 6c 73 65 29 20 61  s to 0 (false) a
fb60: 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70  nd the IS NOT op
fb70: 65 72 61 74 6f 72 20 69 73 20 31 20 28 74 72 75  erator is 1 (tru
fb80: 65 29 2e 0a 5e 49 74 20 69 73 20 6e 6f 74 20 70  e)..^It is not p
fb90: 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 6e 20 49  ossible for an I
fba0: 53 20 6f 72 20 49 53 20 4e 4f 54 20 65 78 70 72  S or IS NOT expr
fbb0: 65 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75 61  ession to evalua
fbc0: 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70 65  te to NULL..^Ope
fbd0: 72 61 74 6f 72 73 20 5b 4f 70 65 72 61 74 6f 72  rators [Operator
fbe0: 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74   IS] and [Operat
fbf0: 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 68 61 76  or {IS NOT}] hav
fc00: 65 20 74 68 65 20 73 61 6d 65 20 0a 70 72 65 63  e the same .prec
fc10: 65 64 65 6e 63 65 20 61 73 20 5b 4f 70 65 72 61  edence as [Opera
fc20: 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e 68  tor =]."..<tcl>h
fc30: 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74 76 61  d_fragment litva
fc40: 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20 76 61 6c  lue {literal val
fc50: 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c 69  ue}</tcl>.<h3>Li
fc60: 74 65 72 61 6c 20 56 61 6c 75 65 73 3c 2f 68 33  teral Values</h3
fc70: 3e 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c  >.<p>.^A literal
fc80: 20 76 61 6c 75 65 20 69 73 20 61 20 63 6f 6e 73   value is a cons
fc90: 74 61 6e 74 20 6f 66 20 73 6f 6d 65 20 6b 69 6e  tant of some kin
fca0: 64 2e 0a 5e 4c 69 74 65 72 61 6c 20 76 61 6c 75  d..^Literal valu
fcb0: 65 73 20 6d 61 79 20 62 65 20 69 6e 74 65 67 65  es may be intege
fcc0: 72 73 2c 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  rs, floating poi
fcd0: 6e 74 20 6e 75 6d 62 65 72 73 2c 20 73 74 72 69  nt numbers, stri
fce0: 6e 67 73 2c 0a 42 4c 4f 42 73 2c 20 6f 72 20 4e  ngs,.BLOBs, or N
fcf0: 55 4c 4c 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ULLs.</p>..<p>Th
fd00: 65 20 73 79 6e 74 61 78 20 66 6f 72 20 69 6e 74  e syntax for int
fd10: 65 67 65 72 20 61 6e 64 20 66 6c 6f 61 74 69 6e  eger and floatin
fd20: 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 73  g point literals
fd30: 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79 0a 22   (collectively."
fd40: 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61 6c 73  numeric literals
fd50: 22 29 20 69 73 20 73 68 6f 77 6e 20 62 79 20 74  ") is shown by t
fd60: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61  he following dia
fd70: 67 72 61 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  gram:</p>..<tcl>
fd80: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6e 75  BubbleDiagram nu
fd90: 6d 65 72 69 63 2d 6c 69 74 65 72 61 6c 3c 2f 74  meric-literal</t
fda0: 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28 49 66 20 61 20  cl>..<p>.^(If a 
fdb0: 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61 6c 20  numeric literal 
fdc0: 68 61 73 20 61 20 64 65 63 69 6d 61 6c 20 70 6f  has a decimal po
fdd0: 69 6e 74 20 6f 72 20 61 6e 20 65 78 70 6f 6e 65  int or an expone
fde0: 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65 2c  ntiation.clause,
fdf0: 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 66 6c   then it is a fl
fe00: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74  oating point lit
fe10: 65 72 61 6c 2e 20 20 4f 74 68 65 72 77 69 73 65  eral.  Otherwise
fe20: 20 69 73 20 69 74 20 69 73 20 61 6e 20 0a 69 6e   is it is an .in
fe30: 74 65 67 65 72 20 6c 69 74 65 72 61 6c 2e 29 5e  teger literal.)^
fe40: 20 20 5e 54 68 65 20 22 45 22 20 63 68 61 72 61    ^The "E" chara
fe50: 63 74 65 72 20 74 68 61 74 20 62 65 67 69 6e 73  cter that begins
fe60: 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 69 61 74   the exponentiat
fe70: 69 6f 6e 0a 63 6c 61 75 73 65 20 6f 66 20 61 20  ion.clause of a 
fe80: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
fe90: 69 74 65 72 61 6c 20 63 61 6e 20 62 65 20 65 69  iteral can be ei
fea0: 74 68 65 72 20 75 70 70 65 72 20 6f 72 20 6c 6f  ther upper or lo
feb0: 77 65 72 20 63 61 73 65 2e 0a 5e 28 54 68 65 20  wer case..^(The 
fec0: 22 2e 22 20 63 68 61 72 61 63 74 65 72 20 69 73  "." character is
fed0: 20 61 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73   always used .as
fee0: 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
fef0: 6e 74 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c  nt even if the l
ff00: 6f 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70  ocale setting sp
ff10: 65 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a  ecifies "," for.
ff20: 74 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20  this role - the 
ff30: 75 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74  use of "," for t
ff40: 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
ff50: 20 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e   would result in
ff60: 0a 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67  .syntactic ambig
ff70: 75 69 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  uity.)^</p>..<p>
ff80: 20 5e 41 20 73 74 72 69 6e 67 20 63 6f 6e 73 74   ^A string const
ff90: 61 6e 74 20 69 73 20 66 6f 72 6d 65 64 20 62 79  ant is formed by
ffa0: 20 65 6e 63 6c 6f 73 69 6e 67 20 74 68 65 0a 73   enclosing the.s
ffb0: 74 72 69 6e 67 20 69 6e 20 73 69 6e 67 6c 65 20  tring in single 
ffc0: 71 75 6f 74 65 73 20 28 27 29 2e 20 20 5e 41 20  quotes (').  ^A 
ffd0: 73 69 6e 67 6c 65 20 71 75 6f 74 65 20 77 69 74  single quote wit
ffe0: 68 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 63  hin the string c
fff0: 61 6e 0a 62 65 20 65 6e 63 6f 64 65 64 20 62 79  an.be encoded by
10000 20 70 75 74 74 69 6e 67 20 74 77 6f 20 73 69 6e   putting two sin
10010 67 6c 65 20 71 75 6f 74 65 73 20 69 6e 20 61 20  gle quotes in a 
10020 72 6f 77 20 2d 20 61 73 20 69 6e 20 50 61 73 63  row - as in Pasc
10030 61 6c 2e 0a 43 2d 73 74 79 6c 65 20 65 73 63 61  al..C-style esca
10040 70 65 73 20 75 73 69 6e 67 20 74 68 65 20 62 61  pes using the ba
10050 63 6b 73 6c 61 73 68 20 63 68 61 72 61 63 74 65  ckslash characte
10060 72 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72  r are not suppor
10070 74 65 64 20 62 65 63 61 75 73 65 0a 74 68 65 79  ted because.they
10080 20 61 72 65 20 6e 6f 74 20 73 74 61 6e 64 61 72   are not standar
10090 64 20 53 51 4c 2e 0a 5e 42 4c 4f 42 20 6c 69 74  d SQL..^BLOB lit
100a0 65 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e 67  erals are string
100b0 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61 69   literals contai
100c0 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61 6c  ning hexadecimal
100d0 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65 64   data and.preced
100e0 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 22  ed by a single "
100f0 78 22 20 6f 72 20 22 58 22 20 63 68 61 72 61 63  x" or "X" charac
10100 74 65 72 2e 20 20 5e 28 46 6f 72 20 65 78 61 6d  ter.  ^(For exam
10110 70 6c 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ple:</p>..<block
10120 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 58 27 35 33  quote><pre>.X'53
10130 35 31 34 43 36 39 37 34 36 35 27 0a 3c 2f 70 72  514C697465'.</pr
10140 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
10150 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61  ^..<p>.^A litera
10160 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f  l value can also
10170 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e   be the token "N
10180 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ULL"..</p>..<tcl
10190 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72  >hd_fragment var
101a0 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65 72 20  param parameter 
101b0 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e  parameters {boun
101c0 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f  d parameter} {bo
101d0 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 7d 3c  und parameters}<
101e0 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65  /tcl>.<h3>Parame
101f0 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20  ters</h3>.<p>.A 
10200 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20 22 70  "variable" or "p
10210 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a  arameter" token.
10220 73 70 65 63 69 66 69 65 73 20 61 20 70 6c 61 63  specifies a plac
10230 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65 20 65  eholder in the e
10240 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 61 20  xpression for a 
10250 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 66  .value that is f
10260 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e 74  illed in at runt
10270 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 73  ime using the.[s
10280 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
10290 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e  () | sqlite3_bin
102a0 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20 43  d()] family of C
102b0 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 73 2e  /C++ interfaces.
102c0 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20  .Parameters can 
102d0 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66 6f 72  take several for
102e0 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ms:.</p>..<block
102f0 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c  quote>.<table>.<
10300 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
10310 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
10320 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e  p"><b>?</b><i>NN
10330 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  N</i></td><td wi
10340 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
10350 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e 20  td>^(A question 
10360 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79  mark followed by
10370 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e   a number <i>NNN
10380 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f  </i> holds a spo
10390 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68  t for the.NNN-th
103a0 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e   parameter.  NNN
103b0 20 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e   must be between
103c0 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 4d   1 and [SQLITE_M
103d0 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
103e0 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74  ER].)^.</td>.</t
103f0 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
10400 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
10410 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c  ="top"><b>?</b><
10420 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
10430 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20  0"></td>.<td>^A 
10440 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68  question mark th
10450 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  at is not follow
10460 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 63  ed by a number c
10470 72 65 61 74 65 73 20 61 20 70 61 72 61 6d 65 74  reates a paramet
10480 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62 65 72  er.with a number
10490 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68 61   one greater tha
104a0 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 61  n the largest pa
104b0 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61  rameter number a
104c0 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e  lready assigned.
104d0 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20  .^If this means 
104e0 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75  the parameter nu
104f0 6d 62 65 72 20 69 73 20 67 72 65 61 74 65 72 20  mber is greater 
10500 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58  than.[SQLITE_MAX
10510 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
10520 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  ], it is an erro
10530 72 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  r..</td>.</tr>.<
10540 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
10550 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
10560 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41 41  p"><b>:</b><i>AA
10570 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  AA</i></td><td w
10580 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
10590 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f 6c  <td>^A colon fol
105a0 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e  lowed by an iden
105b0 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c 64  tifier name hold
105c0 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 0a  s a spot for a .
105d0 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  [sqlite3_bind_pa
105e0 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e 61 6d  rameter_name|nam
105f0 65 64 20 70 61 72 61 6d 65 74 65 72 5d 20 77 69  ed parameter] wi
10600 74 68 20 74 68 65 20 6e 61 6d 65 20 3a 41 41 41  th the name :AAA
10610 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70 61 72  A.  .^(Named par
10620 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73 6f  ameters are also
10630 20 6e 75 6d 62 65 72 65 64 2e 20 54 68 65 20 6e   numbered. The n
10640 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20 69  umber assigned i
10650 73 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68  s one greater th
10660 61 6e 0a 74 68 65 20 6c 61 72 67 65 73 74 20 70  an.the largest p
10670 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
10680 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64  already assigned
10690 2e 29 5e 20 5e 49 66 20 74 68 69 73 20 6d 65 61  .)^ ^If this mea
106a0 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  ns the parameter
106b0 0a 77 6f 75 6c 64 20 62 65 20 61 73 73 69 67 6e  .would be assign
106c0 65 64 20 61 20 6e 75 6d 62 65 72 20 67 72 65 61  ed a number grea
106d0 74 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54 45  ter than [SQLITE
106e0 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
106f0 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a 61 6e 20  MBER], it is.an 
10700 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69 64 20  error. To avoid 
10710 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20 69 73  confusion, it is
10720 20 62 65 73 74 20 74 6f 20 61 76 6f 69 64 20 6d   best to avoid m
10730 69 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64 20  ixing named and 
10740 6e 75 6d 62 65 72 65 64 0a 70 61 72 61 6d 65 74  numbered.paramet
10750 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ers.</td>.</tr>.
10760 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
10770 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
10780 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e 41  op"><b>@</b><i>A
10790 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  AAA</i></td><td 
107a0 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
107b0 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20 73 69  .<td>^An "at" si
107c0 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  gn works exactly
107d0 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20 65   like a colon, e
107e0 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6e  xcept that the n
107f0 61 6d 65 20 6f 66 0a 74 68 65 20 70 61 72 61 6d  ame of.the param
10800 65 74 65 72 20 63 72 65 61 74 65 64 20 69 73 20  eter created is 
10810 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  @AAAA.</td>.</tr
10820 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
10830 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
10840 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69  "top"><b>$</b><i
10850 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74  >AAAA</i></td><t
10860 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
10870 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61 72  d>.<td>^A dollar
10880 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20 62  -sign followed b
10890 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  y an identifier 
108a0 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73 20  name also holds 
108b0 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d  a spot for a nam
108c0 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69 74  ed.parameter wit
108d0 68 20 74 68 65 20 6e 61 6d 65 20 24 41 41 41 41  h the name $AAAA
108e0 2e 20 20 5e 28 54 68 65 20 69 64 65 6e 74 69 66  .  ^(The identif
108f0 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68 69 73  ier name in this
10900 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c 75 64   case can includ
10910 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63  e.one or more oc
10920 63 75 72 72 65 6e 63 65 73 20 6f 66 20 22 3a 3a  currences of "::
10930 22 20 61 6e 64 20 61 20 73 75 66 66 69 78 20 65  " and a suffix e
10940 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e  nclosed in "(...
10950 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e  )" containing.an
10960 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e 29 5e  y text at all.)^
10970 20 20 54 68 69 73 20 73 79 6e 74 61 78 20 69 73    This syntax is
10980 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20 76   the form of a v
10990 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  ariable name in 
109a0 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e  the.[http://www.
109b0 74 63 6c 2e 74 6b 2f 20 7c 20 54 63 6c 20 70 72  tcl.tk/ | Tcl pr
109c0 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61  ogramming langua
109d0 67 65 5d 2e 20 20 54 68 65 20 70 72 65 73 65 6e  ge].  The presen
109e0 63 65 0a 6f 66 20 74 68 69 73 20 73 79 6e 74 61  ce.of this synta
109f0 78 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  x results from t
10a00 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c  he fact that SQL
10a10 69 74 65 20 69 73 20 72 65 61 6c 6c 79 20 61 20  ite is really a 
10a20 0a 5b 54 63 6c 20 65 78 74 65 6e 73 69 6f 6e 5d  .[Tcl extension]
10a30 20 74 68 61 74 20 68 61 73 20 65 73 63 61 70 65   that has escape
10a40 64 20 69 6e 74 6f 20 74 68 65 20 77 69 6c 64 2e  d into the wild.
10a50 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61  </td>.</tr>.</ta
10a60 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ble>.</blockquot
10a70 65 3e 0a 0a 3c 70 3e 5e 50 61 72 61 6d 65 74 65  e>..<p>^Paramete
10a80 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  rs that are not 
10a90 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65 73 20  assigned values 
10aa0 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 62  using.[sqlite3_b
10ab0 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c  ind_blob() | sql
10ac0 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 61 72 65  ite3_bind()] are
10ad0 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55 4c 4c   treated.as NULL
10ae0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d  .</p>..<p>^The m
10af0 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72  aximum parameter
10b00 20 6e 75 6d 62 65 72 20 69 73 20 73 65 74 20 61   number is set a
10b10 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 62  t compile-time b
10b20 79 0a 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41  y.the [SQLITE_MA
10b30 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
10b40 52 5d 20 6d 61 63 72 6f 2e 20 20 5e 28 41 6e 20  R] macro.  ^(An 
10b50 69 6e 64 69 76 69 64 75 61 6c 20 5b 64 61 74 61  individual [data
10b60 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
10b70 5d 0a 44 20 63 61 6e 20 72 65 64 75 63 65 20 69  ].D can reduce i
10b80 74 73 20 6d 61 78 69 6d 75 6d 20 70 61 72 61 6d  ts maximum param
10b90 65 74 65 72 20 6e 75 6d 62 65 72 20 62 65 6c 6f  eter number belo
10ba0 77 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  w the compile-ti
10bb0 6d 65 20 6d 61 78 69 6d 75 6d 0a 75 73 69 6e 67  me maximum.using
10bc0 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69   the [sqlite3_li
10bd0 6d 69 74 5d 28 44 2c 20 5b 53 51 4c 49 54 45 5f  mit](D, [SQLITE_
10be0 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e  LIMIT_VARIABLE_N
10bf0 55 4d 42 45 52 5d 2c 2e 2e 2e 29 20 69 6e 74 65  UMBER],...) inte
10c00 72 66 61 63 65 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c  rface.)^.</p>..<
10c10 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
10c20 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50 45  like LIKE ESCAPE
10c30 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c  </tcl>.<h3>The L
10c40 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f 70 65  IKE and GLOB ope
10c50 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
10c60 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f  The LIKE operato
10c70 72 20 64 6f 65 73 20 61 20 70 61 74 74 65 72 6e  r does a pattern
10c80 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70 61 72   matching compar
10c90 69 73 6f 6e 2e 20 5e 54 68 65 20 6f 70 65 72 61  ison. ^The opera
10ca0 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68 74 20  nd.to the right 
10cb0 6f 66 20 74 68 65 20 4c 49 4b 45 20 6f 70 65 72  of the LIKE oper
10cc0 61 74 6f 72 20 63 6f 6e 74 61 69 6e 73 20 74 68  ator contains th
10cd0 65 20 70 61 74 74 65 72 6e 20 61 6e 64 20 74 68  e pattern and th
10ce0 65 20 6c 65 66 74 20 68 61 6e 64 0a 6f 70 65 72  e left hand.oper
10cf0 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  and contains the
10d00 20 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63 68   string to match
10d10 20 61 67 61 69 6e 73 74 20 74 68 65 20 70 61 74   against the pat
10d20 74 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70  tern...<tcl>hd_p
10d30 75 74 73 20 22 5e 41 20 70 65 72 63 65 6e 74 20  uts "^A percent 
10d40 73 79 6d 62 6f 6c 20 28 5c 22 25 5c 22 29 20 69  symbol (\"%\") i
10d50 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65  n the LIKE patte
10d60 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73  rn matches any.s
10d70 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20  equence of zero 
10d80 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65  or more characte
10d90 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  rs in the string
10da0 2e 20 20 5e 41 6e 20 75 6e 64 65 72 73 63 6f 72  .  ^An underscor
10db0 65 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68 65  e.(\"_\") in the
10dc0 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61   LIKE pattern ma
10dd0 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67 6c 65  tches any single
10de0 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68   character in th
10df0 65 0a 73 74 72 69 6e 67 2e 20 20 5e 28 41 6e 79  e.string.  ^(Any
10e00 20 6f 74 68 65 72 20 63 68 61 72 61 63 74 65 72   other character
10e10 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c 66 20   matches itself 
10e20 6f 72 20 69 74 73 20 6c 6f 77 65 72 2f 75 70 70  or its lower/upp
10e30 65 72 20 63 61 73 65 0a 65 71 75 69 76 61 6c 65  er case.equivale
10e40 6e 74 20 28 69 2e 65 2e 20 63 61 73 65 2d 69 6e  nt (i.e. case-in
10e50 73 65 6e 73 69 74 69 76 65 20 6d 61 74 63 68 69  sensitive matchi
10e60 6e 67 29 2e 29 5e 20 20 28 41 20 62 75 67 3a 20  ng).)^  (A bug: 
10e70 5e 53 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e 64  ^SQLite only.und
10e80 65 72 73 74 61 6e 64 73 20 75 70 70 65 72 2f 6c  erstands upper/l
10e90 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20 41 53  ower case for AS
10ea0 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 62  CII characters b
10eb0 79 20 64 65 66 61 75 6c 74 2e 20 20 5e 54 68 65  y default.  ^The
10ec0 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69  .LIKE operator i
10ed0 73 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  s case sensitive
10ee0 20 62 79 20 64 65 66 61 75 6c 74 20 66 6f 72 20   by default for 
10ef0 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74 65  unicode characte
10f00 72 73 20 74 68 61 74 20 61 72 65 0a 62 65 79 6f  rs that are.beyo
10f10 6e 64 20 74 68 65 20 41 53 43 49 49 20 72 61 6e  nd the ASCII ran
10f20 67 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ge.  For example
10f30 2c 0a 5e 74 68 65 20 65 78 70 72 65 73 73 69 6f  ,.^the expressio
10f40 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49  n <b>'a'&nbsp;LI
10f50 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a  KE&nbsp;'A'</b>.
10f60 69 73 20 54 52 55 45 20 62 75 74 20 3c 62 3e 27  is TRUE but <b>'
10f70 26 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49  &aelig;'&nbsp;LI
10f80 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b  KE&nbsp;'&AElig;
10f90 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e 29  '</b> is FALSE.)
10fa0 3c 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  <p>"</tcl>..<p>^
10fb0 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
10fc0 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73  ESCAPE clause is
10fd0 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
10fe0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f  he expression.fo
10ff0 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41  llowing the ESCA
11000 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20  PE keyword must 
11010 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74  evaluate to a st
11020 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20  ring consisting 
11030 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72  of.a single char
11040 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63 68 61  acter. ^This cha
11050 72 61 63 74 65 72 20 6d 61 79 20 62 65 20 75 73  racter may be us
11060 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70  ed in the LIKE p
11070 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64  attern.to includ
11080 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e  e literal percen
11090 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65 20  t or underscore 
110a0 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54 68 65  characters. ^The
110b0 20 65 73 63 61 70 65 0a 63 68 61 72 61 63 74 65   escape.characte
110c0 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  r followed by a 
110d0 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28  percent symbol (
110e0 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 28  %), underscore (
110f0 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a  _), or a second.
11100 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
11110 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72  escape character
11120 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73 20   itself matches 
11130 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e  a.literal percen
11140 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73  t symbol, unders
11150 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c  core, or a singl
11160 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74  e escape charact
11170 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65 6c 79  er,.respectively
11180 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78  ...<p>^The infix
11190 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69   LIKE operator i
111a0 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
111b0 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70   calling the.app
111c0 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
111d0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b   SQL functions [
111e0 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69  like(<i>Y</i>,<i
111f0 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b  >X</i>)] or.[lik
11200 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  e(<i>Y</i>,<i>X<
11210 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f  /i>,<i>Z</i>)]</
11220 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  a>.</p>..<p>^The
11230 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63   LIKE operator c
11240 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73 65 20  an be made case 
11250 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e 67 20  sensitive using 
11260 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74  the.[case_sensit
11270 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d  ive_like pragma]
11280 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
11290 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f  ragment glob GLO
112a0 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  B</tcl>.<p>^The 
112b0 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69 73  GLOB operator is
112c0 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45   similar to LIKE
112d0 20 62 75 74 20 75 73 65 73 20 74 68 65 20 55 6e   but uses the Un
112e0 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67  ix.file globbing
112f0 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73 20   syntax for its 
11300 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c 73  wildcards.  ^Als
11310 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65 0a  o, GLOB is case.
11320 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b  sensitive, unlik
11330 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47  e LIKE.  ^Both G
11340 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79  LOB and LIKE may
11350 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 0a   be preceded by.
11360 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20  the NOT keyword 
11370 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73 65  to invert the se
11380 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e  nse of the test.
11390 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47 4c 4f    ^The infix GLO
113a0 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69  B .operator is i
113b0 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
113c0 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  lling the functi
113d0 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69  on.[glob(<i>Y</i
113e0 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64  >,<i>X</i>)] and
113f0 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65 64   can be modified
11400 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a 74   by overriding.t
11410 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70  hat function.</p
11420 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
11430 65 6e 74 20 72 65 67 65 78 70 20 52 45 47 45 58  ent regexp REGEX
11440 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  P</tcl>.<p>^The 
11450 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20  REGEXP operator 
11460 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e  is a special syn
11470 74 61 78 20 66 6f 72 20 74 68 65 20 72 65 67 65  tax for the rege
11480 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69  xp().user functi
11490 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70 28  on.  ^No regexp(
114a0 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  ) user function 
114b0 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 64 65  is defined by de
114c0 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65  fault.and so use
114d0 20 6f 66 20 74 68 65 20 52 45 47 45 58 50 20 6f   of the REGEXP o
114e0 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72  perator will nor
114f0 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e 20  mally result in 
11500 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an.error message
11510 2e 20 20 5e 49 66 20 61 20 5b 61 70 70 6c 69 63  .  ^If a [applic
11520 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51  ation-defined SQ
11530 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65  L function] name
11540 64 20 22 72 65 67 65 78 70 22 0a 69 73 20 61 64  d "regexp".is ad
11550 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c  ded at run-time,
11560 20 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 20 77   that function w
11570 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 69 6e  ill be called in
11580 20 6f 72 64 65 72 0a 74 6f 20 69 6d 70 6c 65 6d   order.to implem
11590 65 6e 74 20 74 68 65 20 52 45 47 45 58 50 20 6f  ent the REGEXP o
115a0 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74  perator.</p>..<t
115b0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d  cl>hd_fragment m
115c0 61 74 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c 3e  atch MATCH</tcl>
115d0 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48 20 6f  .<p>^The MATCH o
115e0 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65  perator is a spe
115f0 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  cial syntax for 
11600 74 68 65 20 6d 61 74 63 68 28 29 0a 61 70 70 6c  the match().appl
11610 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
11620 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68 65 20  function.  ^The 
11630 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28 29 20  default match() 
11640 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
11650 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73 20 61  ntation.raises a
11660 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64 20  n exception and 
11670 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75 73  is not really us
11680 65 66 75 6c 20 66 6f 72 20 61 6e 79 74 68 69 6e  eful for anythin
11690 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73 69 6f  g..^But extensio
116a0 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64 65 20  ns can override 
116b0 74 68 65 20 6d 61 74 63 68 28 29 20 66 75 6e 63  the match() func
116c0 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a 68  tion with more.h
116d0 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f 70  elpful logic.</p
116e0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
116f0 65 6e 74 20 62 65 74 77 65 65 6e 20 42 45 54 57  ent between BETW
11700 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  EEN</tcl>.<h3>Th
11710 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
11720 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68 65  or</h3>.<p>^(The
11730 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f   BETWEEN operato
11740 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79 20 65  r is logically e
11750 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61 20 70  quivalent to a p
11760 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  air of compariso
11770 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c 62  ns.."<i>x</i> <b
11780 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69 3e  >BETWEEN</b> <i>
11790 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e  y</i> <b>AND</b>
117a0 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a 65   <i>z</i>" is .e
117b0 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22 3c  quivalent to ."<
117c0 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d 3c  i>x</i><b>&gt;=<
117d0 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41  /b><i>y</i> <b>A
117e0 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e 3c  ND</b> <i>x</i><
117f0 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c  b>&lt;=</b><i>z<
11800 2f 69 3e 22 20 65 78 63 65 70 74 0a 74 68 61 74  /i>" except.that
11810 20 77 69 74 68 20 42 45 54 57 45 45 4e 2c 20 74   with BETWEEN, t
11820 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72  he <i>x</i> expr
11830 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 65  ession is only e
11840 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e 29 5e  valuated once.)^
11850 0a 5e 54 68 65 20 70 72 65 63 65 64 65 6e 63 65  .^The precedence
11860 20 6f 66 20 74 68 65 20 42 45 54 57 45 45 4e 20   of the BETWEEN 
11870 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68 65 20  operator is the 
11880 73 61 6d 65 20 61 73 20 74 68 65 20 70 72 65 63  same as the prec
11890 65 64 65 6e 63 65 0a 61 73 20 6f 70 65 72 61 74  edence.as operat
118a0 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61 6e  ors <b>==</b> an
118b0 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64 20  d <b>!=</b> and 
118c0 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64 20  <b>LIKE</b> and 
118d0 67 72 6f 75 70 73 20 6c 65 66 74 20 74 6f 20 72  groups left to r
118e0 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ight...<tcl>hd_f
118f0 72 61 67 6d 65 6e 74 20 63 61 73 65 20 7b 43 41  ragment case {CA
11900 53 45 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f  SE expression}</
11910 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43 41 53  tcl>.<h3>The CAS
11920 45 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f 68 33  E expression</h3
11930 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65 78 70 72  >.<p>A CASE expr
11940 65 73 73 69 6f 6e 20 73 65 72 76 65 73 20 61 20  ession serves a 
11950 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74 6f 20  role similar to 
11960 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69 6e 20  IF-THEN-ELSE in 
11970 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d 69 6e  other.programmin
11980 67 20 6c 61 6e 67 75 61 67 65 73 2e 20 20 0a 0a  g languages.  ..
11990 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  <p>The optional 
119a0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
119b0 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65  occurs in betwee
119c0 6e 20 74 68 65 20 43 41 53 45 20 6b 65 79 77 6f  n the CASE keywo
119d0 72 64 20 61 6e 64 20 74 68 65 0a 66 69 72 73 74  rd and the.first
119e0 20 57 48 45 4e 20 6b 65 79 77 6f 72 64 20 69 73   WHEN keyword is
119f0 20 63 61 6c 6c 65 64 20 74 68 65 20 22 62 61 73   called the "bas
11a00 65 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e  e" expression. ^
11a10 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 62 61  There are two ba
11a20 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20 74 68 65  sic forms.of the
11a30 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
11a40 3a 20 74 68 6f 73 65 20 77 69 74 68 20 61 20 62  : those with a b
11a50 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ase expression a
11a60 6e 64 20 74 68 6f 73 65 20 77 69 74 68 6f 75 74  nd those without
11a70 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45  ...<p>^In a CASE
11a80 20 77 69 74 68 6f 75 74 20 61 20 62 61 73 65 20   without a base 
11a90 65 78 70 72 65 73 73 69 6f 6e 2c 20 65 61 63 68  expression, each
11aa0 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
11ab0 20 69 73 20 65 76 61 6c 75 61 74 65 64 0a 61 6e   is evaluated.an
11ac0 64 20 74 68 65 20 72 65 73 75 6c 74 20 74 72 65  d the result tre
11ad0 61 74 65 64 20 61 73 20 61 20 62 6f 6f 6c 65 61  ated as a boolea
11ae0 6e 2c 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  n, starting with
11af0 20 74 68 65 20 6c 65 66 74 6d 6f 73 74 20 61 6e   the leftmost an
11b00 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a 74 6f 20  d continuing.to 
11b10 74 68 65 20 72 69 67 68 74 2e 20 5e 54 68 65 20  the right. ^The 
11b20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
11b30 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  SE expression is
11b40 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20   the evaluation 
11b50 6f 66 20 74 68 65 20 54 48 45 4e 0a 65 78 70 72  of the THEN.expr
11b60 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72 72  ession that corr
11b70 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 66  esponds to the f
11b80 69 72 73 74 20 57 48 45 4e 20 65 78 70 72 65 73  irst WHEN expres
11b90 73 69 6f 6e 20 74 68 61 74 20 65 76 61 6c 75 61  sion that evalua
11ba0 74 65 73 20 74 6f 0a 74 72 75 65 2e 20 5e 4f 72  tes to.true. ^Or
11bb0 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  , if none of the
11bc0 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
11bd0 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72  s evaluate to tr
11be0 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ue, the result o
11bf0 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f.evaluating the
11c00 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
11c10 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74 68  , if any. ^If th
11c20 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20 65  ere is no ELSE e
11c30 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f  xpression and.no
11c40 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65  ne of the WHEN e
11c50 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74  xpressions are t
11c60 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6f 76  rue, then the ov
11c70 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20  erall result is 
11c80 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e 55 4c  NULL...<p>^A NUL
11c90 4c 20 72 65 73 75 6c 74 20 69 73 20 63 6f 6e 73  L result is cons
11ca0 69 64 65 72 65 64 20 75 6e 74 72 75 65 20 77 68  idered untrue wh
11cb0 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 57 48  en evaluating WH
11cc0 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70 3e 5e 49  EN terms...<p>^I
11cd0 6e 20 61 20 43 41 53 45 20 77 69 74 68 20 61 20  n a CASE with a 
11ce0 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  base expression,
11cf0 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73   the base expres
11d00 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
11d10 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61 6e 64 20  d just.once and 
11d20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 63 6f  the result is co
11d30 6d 70 61 72 65 64 20 61 67 61 69 6e 73 74 20 74  mpared against t
11d40 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  he evaluation of
11d50 20 65 61 63 68 20 57 48 45 4e 20 0a 65 78 70 72   each WHEN .expr
11d60 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c 65 66 74  ession from left
11d70 20 74 6f 20 72 69 67 68 74 2e 20 5e 54 68 65 20   to right. ^The 
11d80 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
11d90 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  SE expression is
11da0 20 74 68 65 20 0a 65 76 61 6c 75 61 74 69 6f 6e   the .evaluation
11db0 20 6f 66 20 74 68 65 20 54 48 45 4e 20 65 78 70   of the THEN exp
11dc0 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72  ression that cor
11dd0 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
11de0 66 69 72 73 74 20 57 48 45 4e 0a 65 78 70 72 65  first WHEN.expre
11df0 73 73 69 6f 6e 20 66 6f 72 20 77 68 69 63 68 20  ssion for which 
11e00 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  the comparison i
11e10 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20  s true. ^Or, if 
11e20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
11e30 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61  .expressions eva
11e40 6c 75 61 74 65 20 74 6f 20 61 20 76 61 6c 75 65  luate to a value
11e50 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61   equal to the ba
11e60 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74  se expression, t
11e70 68 65 20 72 65 73 75 6c 74 0a 6f 66 20 65 76 61  he result.of eva
11e80 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45  luating the ELSE
11e90 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20   expression, if 
11ea0 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69  any. ^If there i
11eb0 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73  s no ELSE expres
11ec0 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66  sion and.none of
11ed0 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73   the WHEN expres
11ee0 73 69 6f 6e 73 20 70 72 6f 64 75 63 65 20 61 20  sions produce a 
11ef0 72 65 73 75 6c 74 20 65 71 75 61 6c 20 74 6f 20  result equal to 
11f00 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73  the base express
11f10 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72 61 6c 6c  ion,.the overall
11f20 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
11f30 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f 6d 70 61  ..<p>^When compa
11f40 72 69 6e 67 20 61 20 62 61 73 65 20 65 78 70 72  ring a base expr
11f50 65 73 73 69 6f 6e 20 61 67 61 69 6e 73 74 20 61  ession against a
11f60 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
11f70 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c 6c 61  , the same.colla
11f80 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 61  ting sequence, a
11f90 66 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e 55 4c  ffinity, and NUL
11fa0 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c 65 73  L-handling rules
11fb0 20 61 70 70 6c 79 20 61 73 20 69 66 20 74 68 65   apply as if the
11fc0 0a 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e  .base expression
11fd0 20 61 6e 64 20 57 48 45 4e 20 65 78 70 72 65 73   and WHEN expres
11fe0 73 69 6f 6e 20 61 72 65 20 72 65 73 70 65 63 74  sion are respect
11ff0 69 76 65 6c 79 20 74 68 65 20 6c 65 66 74 2d 20  ively the left- 
12000 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f  and.right-hand o
12010 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 20 3c 62  perands of an <b
12020 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62 69 67  ig><b>=</b></big
12030 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 20  > operator.</p> 
12040 5e 49 66 20 74 68 65 20 62 61 73 65 20 0a 65 78  ^If the base .ex
12050 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c  pression is NULL
12060 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
12070 20 6f 66 20 74 68 65 20 43 41 53 45 20 69 73 20   of the CASE is 
12080 61 6c 77 61 79 73 20 74 68 65 20 72 65 73 75 6c  always the resul
12090 74 20 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  t .of evaluating
120a0 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73   the ELSE expres
120b0 73 69 6f 6e 20 69 66 20 69 74 20 65 78 69 73 74  sion if it exist
120c0 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20 69 74  s, or NULL if it
120d0 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e   does not...<p>^
120e0 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66 20 74 68  Both forms of th
120f0 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
12100 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f 72 20 73  n use lazy, or s
12110 68 6f 72 74 2d 63 69 72 63 75 69 74 2c 20 0a 65  hort-circuit, .e
12120 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e  valuation...<p>^
12130 28 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72  (The only differ
12140 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 65  ence between the
12150 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20 43   following two C
12160 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ASE expressions 
12170 69 73 20 74 68 61 74 20 0a 74 68 65 20 3c 69 3e  is that .the <i>
12180 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e  x</i> expression
12190 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 65 78   is evaluated ex
121a0 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68  actly once in th
121b0 65 20 66 69 72 73 74 20 65 78 61 6d 70 6c 65 20  e first example 
121c0 62 75 74 20 0a 6d 69 67 68 74 20 62 65 20 65 76  but .might be ev
121d0 61 6c 75 61 74 65 64 20 6d 75 6c 74 69 70 6c 65  aluated multiple
121e0 20 74 69 6d 65 73 20 69 6e 20 74 68 65 20 73 65   times in the se
121f0 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70 72 65 3e  cond:..<ul><pre>
12200 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57 48 45 4e  .<li>CASE x WHEN
12210 20 77 31 20 54 48 45 4e 20 72 31 20 57 48 45 4e   w1 THEN r1 WHEN
12220 20 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45   w2 THEN r2 ELSE
12230 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41 53 45   r3 END.<li>CASE
12240 20 57 48 45 4e 20 78 3d 77 31 20 54 48 45 4e 20   WHEN x=w1 THEN 
12250 72 31 20 57 48 45 4e 20 78 3d 77 32 20 54 48 45  r1 WHEN x=w2 THE
12260 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e 44  N r2 ELSE r3 END
12270 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a  .</pre></ul>)^..
12280 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
12290 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f 70 65 72  t in_op {IN oper
122a0 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e 20 6f 70  ator} {NOT IN op
122b0 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  erator}</tcl>.<h
122c0 33 3e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54  3>The IN and NOT
122d0 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68   IN operators</h
122e0 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 20 61 6e  3>.<p>^The IN an
122f0 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  d NOT IN operato
12300 72 73 20 74 61 6b 65 20 61 20 73 69 6e 67 6c 65  rs take a single
12310 20 73 63 61 6c 61 72 20 6f 70 65 72 61 6e 64 20   scalar operand 
12320 6f 6e 20 74 68 65 0a 6c 65 66 74 20 61 6e 64 20  on the.left and 
12330 61 20 76 65 63 74 6f 72 20 6f 70 65 72 61 6e 64  a vector operand
12340 20 6f 6e 20 74 68 65 20 72 69 67 68 74 0a 66 6f   on the right.fo
12350 72 6d 65 64 20 62 79 20 61 6e 20 65 78 70 6c 69  rmed by an expli
12360 63 69 74 20 6c 69 73 74 20 6f 66 20 7a 65 72 6f  cit list of zero
12370 20 6f 72 20 6d 6f 72 65 20 73 63 61 6c 61 72 73   or more scalars
12380 20 6f 72 20 62 79 20 61 20 0a 73 69 6e 67 6c 65   or by a .single
12390 20 73 75 62 71 75 65 72 79 2e 0a 5e 57 68 65 6e   subquery..^When
123a0 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61   the right opera
123b0 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e  nd of an IN or N
123c0 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69  OT IN operator i
123d0 73 20 61 20 73 75 62 71 75 65 72 79 2c 20 74 68  s a subquery, th
123e0 65 0a 73 75 62 71 75 65 72 79 20 6d 75 73 74 20  e.subquery must 
123f0 68 61 76 65 20 61 20 73 69 6e 67 6c 65 20 72 65  have a single re
12400 73 75 6c 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 57 68  sult column..^Wh
12410 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70 65  en the right ope
12420 72 61 6e 64 20 69 73 20 61 6e 20 65 6d 70 74 79  rand is an empty
12430 20 73 65 74 2c 20 74 68 65 20 72 65 73 75 6c 74   set, the result
12440 20 6f 66 20 49 4e 20 69 73 20 66 61 6c 73 65 20   of IN is false 
12450 61 6e 64 20 74 68 65 0a 72 65 73 75 6c 74 20 6f  and the.result o
12460 66 20 4e 4f 54 20 49 4e 20 69 73 20 74 72 75 65  f NOT IN is true
12470 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
12480 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61 6e 64  the left operand
12490 20 61 6e 64 20 65 76 65 6e 20 69 66 20 74 68 65   and even if the
124a0 0a 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73  .left operand is
124b0 20 4e 55 4c 4c 2e 0a 5e 28 54 68 65 20 72 65 73   NULL..^(The res
124c0 75 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  ult of an IN or 
124d0 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
124e0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
124f0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d   the following.m
12500 61 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e  atrix:..<center>
12510 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
12520 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74 20  >.<tr>.<th>Left 
12530 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 4e  operand <br>is N
12540 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70  ULL.<th>Right op
12550 65 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61 69  erand <br>contai
12560 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68  ns NULL.<th>Righ
12570 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73  t operand <br>is
12580 20 61 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c 74   an empty set.<t
12590 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 66  h>Left operand f
125a0 6f 75 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e 20  ound <br>within 
125b0 72 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c 74  right operand.<t
125c0 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e  h>Result of <br>
125d0 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68 3e  IN operator.<th>
125e0 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f  Result of <br>NO
125f0 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74  T IN operator.<t
12600 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
12610 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
12620 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
12630 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
12640 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
12650 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
12660 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
12670 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  lse.<td align="c
12680 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e  enter">true.<tr>
12690 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
126a0 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
126b0 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
126c0 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
126d0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
126e0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
126f0 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
12700 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a  ="center">false.
12710 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
12720 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64  r">true.<tr>.<td
12730 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
12740 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
12750 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d  nter">does not m
12760 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d  atter.<td align=
12770 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
12780 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79  align="center">y
12790 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  es.<td align="ce
127a0 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 64 20 61  nter">true.<td a
127b0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
127c0 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  lse.<tr>.<td ali
127d0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
127e0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
127f0 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d  ">yes.<td align=
12800 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
12810 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
12820 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
12830 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c  ter">NULL.<td al
12840 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c  ign="center">NUL
12850 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  L.<tr>.<td align
12860 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
12870 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
12880 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
12890 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
128a0 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
128b0 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
128c0 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
128d0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c  ign="center">NUL
128e0 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  L.<td align="cen
128f0 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c  ter">NULL.</tabl
12900 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  e>.</center>)^..
12910 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53 51  <p>^Note that SQ
12920 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  Lite allows the 
12930 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
12940 73 74 20 6f 66 20 73 63 61 6c 61 72 20 76 61 6c  st of scalar val
12950 75 65 73 20 6f 6e 0a 74 68 65 20 72 69 67 68 74  ues on.the right
12960 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e  -hand side of an
12970 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70   IN or NOT IN op
12980 65 72 61 74 6f 72 20 74 6f 20 62 65 20 61 6e 20  erator to be an 
12990 65 6d 70 74 79 20 6c 69 73 74 20 62 75 74 0a 6d  empty list but.m
129a0 6f 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64 61  ost other SQL da
129b0 74 61 62 61 73 65 20 64 61 74 61 62 61 73 65 20  tabase database 
129c0 65 6e 67 69 6e 65 73 20 61 6e 64 20 74 68 65 20  engines and the 
129d0 53 51 4c 39 32 20 73 74 61 6e 64 61 72 64 20 72  SQL92 standard r
129e0 65 71 75 69 72 65 0a 74 68 65 20 6c 69 73 74 20  equire.the list 
129f0 74 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c 65  to contain at le
12a00 61 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e  ast one element.
12a10 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
12a20 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 45 58  agment in_op {EX
12a30 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b  ISTS operator} {
12a40 4e 4f 54 20 45 58 49 53 54 53 20 6f 70 65 72 61  NOT EXISTS opera
12a50 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  tor}</tcl>.<h3>T
12a60 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
12a70 6f 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  or</h3>..<p>^The
12a80 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
12a90 20 61 6c 77 61 79 73 20 65 76 61 6c 75 61 74 65   always evaluate
12aa0 73 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  s to one of the 
12ab0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 30  integer values 0
12ac0 20 0a 61 6e 64 20 31 2e 20 5e 49 66 20 65 78 65   .and 1. ^If exe
12ad0 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43  cuting the SELEC
12ae0 54 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65 63  T statement spec
12af0 69 66 69 65 64 20 61 73 20 74 68 65 20 72 69 67  ified as the rig
12b00 68 74 2d 68 61 6e 64 20 0a 6f 70 65 72 61 6e 64  ht-hand .operand
12b10 20 6f 66 20 74 68 65 20 45 58 49 53 54 53 20 6f   of the EXISTS o
12b20 70 65 72 61 74 6f 72 20 77 6f 75 6c 64 20 72 65  perator would re
12b30 74 75 72 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  turn one or more
12b40 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 0a   rows, then the.
12b50 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20  EXISTS operator 
12b60 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 2e 20  evaluates to 1. 
12b70 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20 74 68  ^If executing th
12b80 65 20 53 45 4c 45 43 54 20 77 6f 75 6c 64 20 72  e SELECT would r
12b90 65 74 75 72 6e 0a 6e 6f 20 72 6f 77 73 20 61 74  eturn.no rows at
12ba0 20 61 6c 6c 2c 20 74 68 65 6e 20 74 68 65 20 45   all, then the E
12bb0 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 65  XISTS operator e
12bc0 76 61 6c 75 61 74 65 73 20 74 6f 20 30 2e 20 0a  valuates to 0. .
12bd0 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20  .<p>^The number 
12be0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 65 61  of columns in ea
12bf0 63 68 20 72 6f 77 20 72 65 74 75 72 6e 65 64 20  ch row returned 
12c00 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  by the SELECT st
12c10 61 74 65 6d 65 6e 74 0a 28 69 66 20 61 6e 79 29  atement.(if any)
12c20 20 61 6e 64 20 74 68 65 20 73 70 65 63 69 66 69   and the specifi
12c30 63 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  c values returne
12c40 64 20 68 61 76 65 20 6e 6f 20 65 66 66 65 63 74  d have no effect
12c50 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 0a   on the results.
12c60 6f 66 20 74 68 65 20 45 58 49 53 54 53 20 6f 70  of the EXISTS op
12c70 65 72 61 74 6f 72 2e 20 5e 49 6e 20 70 61 72 74  erator. ^In part
12c80 69 63 75 6c 61 72 2c 20 72 6f 77 73 20 63 6f 6e  icular, rows con
12c90 74 61 69 6e 69 6e 67 20 4e 55 4c 4c 20 76 61 6c  taining NULL val
12ca0 75 65 73 20 61 72 65 0a 6e 6f 74 20 68 61 6e 64  ues are.not hand
12cb0 6c 65 64 20 61 6e 79 20 64 69 66 66 65 72 65 6e  led any differen
12cc0 74 6c 79 20 66 72 6f 6d 20 72 6f 77 73 20 77 69  tly from rows wi
12cd0 74 68 6f 75 74 20 4e 55 4c 4c 20 76 61 6c 75 65  thout NULL value
12ce0 73 2e 0a 0a 3c 68 33 3e 53 63 61 6c 61 72 20 53  s...<h3>Scalar S
12cf0 75 62 71 75 65 72 69 65 73 3c 2f 68 33 3e 0a 0a  ubqueries</h3>..
12d00 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73  <p>^A [SELECT] s
12d10 74 61 74 65 6d 65 6e 74 20 65 6e 63 6c 6f 73 65  tatement enclose
12d20 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73  d in parentheses
12d30 20 6d 61 79 20 61 70 70 65 61 72 20 61 73 20 61   may appear as a
12d40 20 73 63 61 6c 61 72 0a 71 75 61 6e 74 69 74 79   scalar.quantity
12d50 2e 20 5e 41 20 5b 53 45 4c 45 43 54 5d 20 75 73  . ^A [SELECT] us
12d60 65 64 20 61 73 20 61 20 73 63 61 6c 61 72 20 71  ed as a scalar q
12d70 75 61 6e 74 69 74 79 20 6d 75 73 74 20 72 65 74  uantity must ret
12d80 75 72 6e 20 61 20 72 65 73 75 6c 74 20 73 65 74  urn a result set
12d90 0a 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 63  .with a single c
12da0 6f 6c 75 6d 6e 2e 20 5e 54 68 65 20 72 65 73 75  olumn. ^The resu
12db0 6c 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  lt of the expres
12dc0 73 69 6f 6e 20 69 73 20 74 68 65 20 76 61 6c 75  sion is the valu
12dd0 65 20 6f 66 20 74 68 65 0a 6f 6e 6c 79 20 63 6f  e of the.only co
12de0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 69 72 73  lumn in the firs
12df0 74 20 72 6f 77 20 72 65 74 75 72 6e 65 64 20 62  t row returned b
12e00 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
12e10 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20  tement. ^If the 
12e20 53 45 4c 45 43 54 20 0a 79 69 65 6c 64 73 20 6d  SELECT .yields m
12e30 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 65 73  ore than one res
12e40 75 6c 74 20 72 6f 77 2c 20 61 6c 6c 20 72 6f 77  ult row, all row
12e50 73 20 61 66 74 65 72 20 74 68 65 20 66 69 72 73  s after the firs
12e60 74 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e  t are ignored. ^
12e70 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 79 69  If.the SELECT yi
12e80 65 6c 64 73 20 6e 6f 20 72 6f 77 73 2c 20 74 68  elds no rows, th
12e90 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  en the value of 
12ea0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
12eb0 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 6c 6c  s NULL...<p>^All
12ec0 20 74 79 70 65 73 20 6f 66 20 5b 53 45 4c 45 43   types of [SELEC
12ed0 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e  T] statement, in
12ee0 63 6c 75 64 69 6e 67 20 61 67 67 72 65 67 61 74  cluding aggregat
12ef0 65 20 61 6e 64 20 63 6f 6d 70 6f 75 6e 64 20 53  e and compound S
12f00 45 4c 45 43 54 0a 71 75 65 72 69 65 73 20 28 71  ELECT.queries (q
12f10 75 65 72 69 65 73 20 77 69 74 68 20 6b 65 79 77  ueries with keyw
12f20 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e 20  ords like UNION 
12f30 6f 72 20 45 58 43 45 50 54 29 20 61 72 65 20 61  or EXCEPT) are a
12f40 6c 6c 6f 77 65 64 20 61 73 20 73 63 61 6c 61 72  llowed as scalar
12f50 0a 73 75 62 71 75 65 72 69 65 73 2e 0a 0a 3c 68  .subqueries...<h
12f60 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 20 4e  3>Table Column N
12f70 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41  ames</h3>..<p>^A
12f80 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e   column name can
12f90 20 62 65 20 61 6e 79 20 6f 66 20 74 68 65 20 6e   be any of the n
12fa0 61 6d 65 73 20 64 65 66 69 6e 65 64 20 69 6e 20  ames defined in 
12fb0 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c  the [CREATE TABL
12fc0 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  E].statement or 
12fd0 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
12fe0 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69 64 65  wing special ide
12ff0 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e 52 4f  ntifiers: "<b>RO
13000 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f 49  WID</b>",."<b>OI
13010 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f  D</b>", or "<b>_
13020 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e 54 68  ROWID_</b>"..^Th
13030 65 73 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e  ese special iden
13040 74 69 66 69 65 72 73 20 61 6c 6c 20 64 65 73 63  tifiers all desc
13050 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75 65 20  ribe the.unique 
13060 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74 68 65  integer key (the
13070 20 5b 72 6f 77 69 64 5d 29 20 61 73 73 6f 63 69   [rowid]) associ
13080 61 74 65 64 20 77 69 74 68 20 65 76 65 72 79 20  ated with every 
13090 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20 74 61  .row of every ta
130a0 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65 63 69 61  ble..^The specia
130b0 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e  l identifiers on
130c0 6c 79 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ly refer to the 
130d0 72 6f 77 20 6b 65 79 20 69 66 20 74 68 65 20 5b  row key if the [
130e0 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74  CREATE TABLE].st
130f0 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
13100 20 64 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63   define a real c
13110 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73  olumn with the s
13120 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 72  ame name..^The r
13130 6f 77 69 64 20 63 61 6e 20 62 65 20 75 73 65 64  owid can be used
13140 20 61 6e 79 77 68 65 72 65 20 61 20 72 65 67 75   anywhere a regu
13150 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20 62  lar.column can b
13160 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e used.</p>..<p>
13170 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  ^A [SELECT] stat
13180 65 6d 65 6e 74 20 75 73 65 64 20 61 73 20 65 69  ement used as ei
13190 74 68 65 72 20 61 20 73 63 61 6c 61 72 20 73 75  ther a scalar su
131a0 62 71 75 65 72 79 20 6f 72 20 61 73 20 74 68 65  bquery or as the
131b0 20 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65   .right-hand ope
131c0 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 2c 20 4e  rand of an IN, N
131d0 4f 54 20 49 4e 20 6f 72 20 45 58 49 53 54 53 20  OT IN or EXISTS 
131e0 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 63  expression may c
131f0 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72 65 6e 63  ontain .referenc
13200 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  es to columns in
13210 20 74 68 65 20 6f 75 74 65 72 20 71 75 65 72 79   the outer query
13220 2e 20 53 75 63 68 20 61 20 73 75 62 71 75 65 72  . Such a subquer
13230 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 61 20  y is known as.a 
13240 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75  correlated subqu
13250 65 72 79 2e 20 5e 41 20 63 6f 72 72 65 6c 61 74  ery. ^A correlat
13260 65 64 20 73 75 62 71 75 65 72 79 20 69 73 20 72  ed subquery is r
13270 65 65 76 61 6c 75 61 74 65 64 20 65 61 63 68 20  eevaluated each 
13280 74 69 6d 65 0a 69 74 73 20 72 65 73 75 6c 74 20  time.its result 
13290 69 73 20 72 65 71 75 69 72 65 64 2e 20 5e 41 6e  is required. ^An
132a0 20 75 6e 63 6f 72 72 65 6c 61 74 65 64 20 73 75   uncorrelated su
132b0 62 71 75 65 72 79 20 69 73 20 65 76 61 6c 75 61  bquery is evalua
132c0 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a 61 6e  ted only once.an
132d0 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 65 75  d the result reu
132e0 73 65 64 20 61 73 20 6e 65 63 65 73 73 61 72 79  sed as necessary
132f0 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
13300 65 6e 74 20 63 61 73 74 65 78 70 72 20 7b 43 41  ent castexpr {CA
13310 53 54 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f  ST expression}</
13320 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54 20 65 78  tcl>.<h3>CAST ex
13330 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  pressions</h3>..
13340 3c 70 3e 41 20 43 41 53 54 20 65 78 70 72 65 73  <p>A CAST expres
13350 73 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  sion is used to 
13360 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75  convert the valu
13370 65 20 6f 66 20 26 6c 74 3b 65 78 70 72 26 67 74  e of &lt;expr&gt
13380 3b 20 74 6f 20 0a 61 20 64 69 66 66 65 72 65 6e  ; to .a differen
13390 74 20 5b 73 74 6f 72 61 67 65 20 63 6c 61 73 73  t [storage class
133a0 5d 20 69 6e 20 61 20 73 69 6d 69 6c 61 72 20 77  ] in a similar w
133b0 61 79 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72  ay to the conver
133c0 73 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 0a  sion that takes.
133d0 70 6c 61 63 65 20 77 68 65 6e 20 61 20 5b 63 6f  place when a [co
133e0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 69  lumn affinity] i
133f0 73 20 61 70 70 6c 69 65 64 20 74 6f 20 61 20 76  s applied to a v
13400 61 6c 75 65 2e 20 5e 41 70 70 6c 69 63 61 74 69  alue. ^Applicati
13410 6f 6e 20 6f 66 20 61 20 43 41 53 54 0a 65 78 70  on of a CAST.exp
13420 72 65 73 73 69 6f 6e 20 69 73 20 64 69 66 66 65  ression is diffe
13430 72 65 6e 74 20 74 6f 20 61 70 70 6c 69 63 61 74  rent to applicat
13440 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ion of a column 
13450 61 66 66 69 6e 69 74 79 2c 20 61 73 0a 77 69 74  affinity, as.wit
13460 68 20 61 20 43 41 53 54 20 65 78 70 72 65 73 73  h a CAST express
13470 69 6f 6e 20 74 68 65 20 73 74 6f 72 61 67 65 20  ion the storage 
13480 63 6c 61 73 73 20 63 6f 6e 76 65 72 73 69 6f 6e  class conversion
13490 20 69 73 20 66 6f 72 63 65 64 20 65 76 65 6e 20   is forced even 
134a0 0a 69 66 20 69 74 20 69 73 20 6c 6f 73 73 79 20  .if it is lossy 
134b0 61 6e 64 20 69 72 72 72 65 76 65 72 73 69 62 6c  and irrreversibl
134c0 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76  e...<p>^If the v
134d0 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72  alue of &lt;expr
134e0 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c 20 74 68  &gt; is NULL, th
134f0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
13500 20 74 68 65 20 43 41 53 54 0a 65 78 70 72 65 73   the CAST.expres
13510 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c  sion is also NUL
13520 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  L. ^Otherwise, t
13530 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73  he storage class
13540 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 76   of the result v
13550 61 6c 75 65 0a 69 73 20 64 65 74 65 72 6d 69 6e  alue.is determin
13560 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67 20 74  ed by applying t
13570 68 65 20 5b 72 75 6c 65 73 20 66 6f 72 20 64 65  he [rules for de
13580 74 65 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e  termining column
13590 20 61 66 66 69 6e 69 74 79 5d 20 74 6f 0a 74 68   affinity] to.th
135a0 65 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26  e &lt;type-name&
135b0 67 74 3b 20 73 70 65 63 69 66 69 65 64 20 61 73  gt; specified as
135c0 20 70 61 72 74 20 6f 66 20 74 68 65 20 43 41 53   part of the CAS
135d0 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 0a 3c  T expression...<
135e0 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a  table border=1>.
135f0 3c 74 72 3e 0a 20 20 3c 74 68 3e 20 41 66 66 69  <tr>.  <th> Affi
13600 6e 69 74 79 20 6f 66 20 26 6c 74 3b 74 79 70 65  nity of &lt;type
13610 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c 74 68 3e  -name&gt;.  <th>
13620 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f 63   Conversion Proc
13630 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c 74  essing.<tr>.  <t
13640 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e 20  d> NONE .  <td> 
13650 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75 65  ^Casting a value
13660 20 74 6f 20 61 20 26 6c 74 3b 74 79 70 65 2d 6e   to a &lt;type-n
13670 61 6d 65 26 67 74 3b 20 77 69 74 68 20 6e 6f 20  ame&gt; with no 
13680 61 66 66 69 6e 69 74 79 20 63 61 75 73 65 73 20  affinity causes 
13690 74 68 65 20 76 61 6c 75 65 20 74 6f 0a 20 20 62  the value to.  b
136a0 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
136b0 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61 73 74 69   a BLOB.  ^Casti
136c0 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20 63 6f 6e  ng to a BLOB con
136d0 73 69 73 74 73 20 6f 66 20 66 69 72 73 74 20 63  sists of first c
136e0 61 73 74 69 6e 67 0a 20 20 74 68 65 20 76 61 6c  asting.  the val
136f0 75 65 20 74 6f 20 54 45 58 54 20 69 6e 20 74 68  ue to TEXT in th
13700 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 20  e [encoding] of 
13710 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
13720 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 0a 20 20  nection, then.  
13730 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68 65  interpreting the
13740 20 72 65 73 75 6c 74 69 6e 67 20 62 79 74 65 20   resulting byte 
13750 73 65 71 75 65 6e 63 65 20 61 73 20 61 20 42 4c  sequence as a BL
13760 4f 42 20 69 6e 73 74 65 61 64 20 6f 66 20 61 73  OB instead of as
13770 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20 3c   TEXT...<tr>.  <
13780 74 64 3e 20 54 45 58 54 0a 20 20 3c 74 64 3e 20  td> TEXT.  <td> 
13790 5e 54 6f 20 63 61 73 74 20 61 20 42 4c 4f 42 20  ^To cast a BLOB 
137a0 76 61 6c 75 65 20 74 6f 20 54 45 58 54 2c 20 74  value to TEXT, t
137b0 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62  he sequence of b
137c0 79 74 65 73 20 74 68 61 74 20 6d 61 6b 65 20 75  ytes that make u
137d0 70 20 74 68 65 0a 20 20 42 4c 4f 42 20 69 73 20  p the.  BLOB is 
137e0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74  interpreted as t
137f0 65 78 74 20 65 6e 63 6f 64 65 64 20 75 73 69 6e  ext encoded usin
13800 67 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65  g the database e
13810 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a 20  ncoding..  <p>. 
13820 20 20 5e 43 61 73 74 69 6e 67 20 61 6e 20 49 4e    ^Casting an IN
13830 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20 76 61  TEGER or REAL va
13840 6c 75 65 20 69 6e 74 6f 20 54 45 58 54 20 72 65  lue into TEXT re
13850 6e 64 65 72 73 20 74 68 65 20 76 61 6c 75 65 20  nders the value 
13860 61 73 20 69 66 20 76 69 61 20 0a 20 20 20 20 5b  as if via .    [
13870 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
13880 28 29 5d 20 65 78 63 65 70 74 20 74 68 61 74 20  ()] except that 
13890 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 54 45  the resulting TE
138a0 58 54 20 75 73 65 73 20 74 68 65 20 5b 65 6e 63  XT uses the [enc
138b0 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20 20 74 68  oding] of.    th
138c0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
138d0 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20 3c  ction...<tr>.  <
138e0 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74 64 3e 20  td> REAL.  <td> 
138f0 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20  ^When casting a 
13900 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 61 20  BLOB value to a 
13910 52 45 41 4c 2c 20 74 68 65 20 76 61 6c 75 65 20  REAL, the value 
13920 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74  is first convert
13930 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45  ed to.        TE
13940 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57  XT..       <p>^W
13950 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45  hen casting a TE
13960 58 54 20 76 61 6c 75 65 20 74 6f 20 52 45 41 4c  XT value to REAL
13970 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f  , the longest po
13980 73 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66  ssible prefix of
13990 0a 20 20 20 20 20 20 20 20 74 68 65 20 76 61 6c  .        the val
139a0 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 69  ue that can be i
139b0 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20  nterpreted as a 
139c0 72 65 61 6c 20 6e 75 6d 62 65 72 20 69 73 20 65  real number is e
139d0 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a 20 20  xtracted from.  
139e0 20 20 20 20 20 20 74 68 65 20 54 45 58 54 20 76        the TEXT v
139f0 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72 65 6d  alue and the rem
13a00 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e 20  ainder ignored. 
13a10 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73 70 61  ^Any leading spa
13a20 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20  ces in the.     
13a30 20 20 20 54 45 58 54 20 76 61 6c 75 65 20 61 72     TEXT value ar
13a40 65 20 69 67 6e 6f 72 65 64 20 77 68 65 6e 20 63  e ignored when c
13a50 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f 6d 20 54  onverging from T
13a60 45 58 54 20 74 6f 20 52 45 41 4c 2e 20 5e 28 49  EXT to REAL. ^(I
13a70 66 20 74 68 65 72 65 20 69 73 0a 20 20 20 20 20  f there is.     
13a80 20 20 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61     no prefix tha
13a90 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72  t can be interpr
13aa0 65 74 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e  eted as a real n
13ab0 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c  umber, the resul
13ac0 74 20 6f 66 20 74 68 65 0a 20 20 20 20 20 20 20  t of the.       
13ad0 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30   conversion is 0
13ae0 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  .0.)^..<tr>.  <t
13af0 64 3e 20 49 4e 54 45 47 45 52 0a 20 20 3c 74 64  d> INTEGER.  <td
13b00 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  > ^When casting 
13b10 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20  a BLOB value to 
13b20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 76 61 6c  INTEGER, the val
13b30 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76  ue is first conv
13b40 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20  erted to.       
13b50 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70   TEXT..       <p
13b60 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61  >^When casting a
13b70 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 49   TEXT value to I
13b80 4e 54 45 47 45 52 2c 20 74 68 65 20 6c 6f 6e 67  NTEGER, the long
13b90 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65  est possible pre
13ba0 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74  fix of.        t
13bb0 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 63 61  he value that ca
13bc0 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64  n be interpreted
13bd0 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e   as an integer n
13be0 75 6d 62 65 72 20 69 73 20 65 78 74 72 61 63 74  umber is extract
13bf0 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20  ed from.        
13c00 74 68 65 20 54 45 58 54 20 76 61 6c 75 65 20 61  the TEXT value a
13c10 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  nd the remainder
13c20 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c   ignored. ^Any l
13c30 65 61 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e  eading spaces in
13c40 20 74 68 65 0a 20 20 20 20 20 20 20 20 54 45 58   the.        TEX
13c50 54 20 76 61 6c 75 65 20 77 68 65 6e 20 63 6f 6e  T value when con
13c60 76 65 72 74 69 6e 67 20 66 72 6f 6d 20 54 45 58  verting from TEX
13c70 54 20 74 6f 20 49 4e 54 45 47 45 52 20 61 72 65  T to INTEGER are
13c80 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 20 74 68   ignored. ^If th
13c90 65 72 65 0a 20 20 20 20 20 20 20 20 69 73 20 6e  ere.        is n
13ca0 6f 20 70 72 65 66 69 78 20 74 68 61 74 20 63 61  o prefix that ca
13cb0 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64  n be interpreted
13cc0 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e   as an integer n
13cd0 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c  umber, the resul
13ce0 74 0a 20 20 20 20 20 20 20 20 6f 66 20 74 68 65  t.        of the
13cf0 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30   conversion is 0
13d00 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20 63  ...      <p>^A c
13d10 61 73 74 20 6f 66 20 61 20 52 45 41 4c 20 76 61  ast of a REAL va
13d20 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54 45  lue into an INTE
13d30 47 45 52 20 77 69 6c 6c 20 74 72 75 6e 63 61 74  GER will truncat
13d40 65 20 74 68 65 20 66 72 61 63 74 69 6f 6e 61 6c  e the fractional
13d50 0a 20 20 20 20 20 20 70 61 72 74 20 6f 66 20 74  .      part of t
13d60 68 65 20 52 45 41 4c 2e 20 20 5e 49 66 20 61 6e  he REAL.  ^If an
13d70 20 52 45 41 4c 20 69 73 20 74 6f 6f 20 6c 61 72   REAL is too lar
13d80 67 65 20 74 6f 20 62 65 20 72 65 70 72 65 73 65  ge to be represe
13d90 6e 74 65 64 20 61 73 20 61 6e 20 0a 20 20 20 20  nted as an .    
13da0 20 20 49 4e 54 45 47 45 52 20 74 68 65 6e 20 74    INTEGER then t
13db0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
13dc0 20 63 61 73 74 20 69 73 20 74 68 65 20 6c 61 72   cast is the lar
13dd0 67 65 73 74 20 6e 65 67 61 74 69 76 65 20 69 6e  gest negative in
13de0 74 65 67 65 72 3a 20 0a 20 20 20 20 20 20 2d 39  teger: .      -9
13df0 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
13e00 30 38 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  08...<tr>.  <td>
13e10 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e 20   NUMERIC.  <td> 
13e20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58 54 20  ^Casting a TEXT 
13e30 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e  or BLOB value in
13e40 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72 73 74  to NUMERIC first
13e50 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64 0a 20   does a forced. 
13e60 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e 74    conversion int
13e70 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65 6e 20  o REAL but then 
13e80 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72 74 73  further converts
13e90 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f   the result into
13ea0 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20 20 61   INTEGER if.   a
13eb0 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 63  nd only if the c
13ec0 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 52  onversion from R
13ed0 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52 20 69  EAL to INTEGER i
13ee0 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72  s lossless and r
13ef0 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20 54 68  eversible..   Th
13f00 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63  is is the only c
13f10 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69 74 65  ontext in SQLite
13f20 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d 45 52   where the NUMER
13f30 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52 20 5b  IC and INTEGER [
13f40 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20 20 62  affinities].   b
13f50 65 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 6c  ehave differentl
13f60 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73 74 69  y..   <p> ^Casti
13f70 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49 4e 54  ng a REAL or INT
13f80 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20 4e 55  EGER value to NU
13f90 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d 6f 70  MERIC is a no-op
13fa0 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65 61 6c  , even if a real
13fb0 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c 64 20  .   value could 
13fc0 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f  be losslessly co
13fd0 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
13fe0 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a 3c  teger...</tr>..<
13ff0 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f 74  /table>..<p>^Not
14000 65 20 74 68 61 74 20 74 68 65 20 72 65 73 75 6c  e that the resul
14010 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61  t from casting a
14020 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75  ny non-BLOB valu
14030 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20 61  e into a .BLOB a
14040 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 66 72  nd the result fr
14050 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20 42  om casting any B
14060 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  LOB value into a
14070 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 0a   non-BLOB value.
14080 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e 74  may be different
14090 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
140a0 65 74 68 65 72 20 74 68 65 20 64 61 74 61 62 61  ether the databa
140b0 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 69 73  se [encoding] is
140c0 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36 62 65   UTF-8,.UTF-16be
140d0 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e 0a 0a  , or UTF-16le...
140e0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
140f0 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20 7b 62  t booleanexpr {b
14100 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
14110 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42 6f 6f  n}</tcl>.<h3>Boo
14120 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f 6e 73  lean Expressions
14130 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 53 51  </h3>..<p>The SQ
14140 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75  L language featu
14150 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f 6e 74  res several cont
14160 65 78 74 73 20 77 68 65 72 65 20 61 6e 20 65 78  exts where an ex
14170 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65 76 61  pression is .eva
14180 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72  luated and the r
14190 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65 64 20  esult converted 
141a0 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28 74 72  to a boolean (tr
141b0 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76 61 6c  ue or false) val
141c0 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74 65 78  ue. These.contex
141d0 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a  ts are:..  <ul>.
141e0 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45      <li> the WHE
141f0 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  RE clause of a S
14200 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20 6f 72  ELECT, UPDATE or
14210 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
14220 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20  t,.    <li> the 
14230 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75  ON or USING clau
14240 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69 6e 20  se of a join in 
14250 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
14260 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  nt,.    <li> the
14270 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 6f   HAVING clause o
14280 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
14290 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
142a0 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
142b0 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67 65 72  f an SQL trigger
142c0 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e 20 74  , and.    <li> t
142d0 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
142e0 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73 6f 6d  r clauses of som
142f0 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
14300 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c 70 3e  ns..  </ul>..<p>
14310 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74 68 65  ^(To convert the
14320 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e 20 53   results of an S
14330 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f  QL expression to
14340 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
14350 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74 20 63  , SQLite.first c
14360 61 73 74 73 20 74 68 65 20 72 65 73 75 6c 74 20  asts the result 
14370 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c  to a NUMERIC val
14380 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ue in the same w
14390 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54 20 65  ay as a .[CAST e
143a0 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20 4e 55  xpression]. A NU
143b0 4c 4c 20 6f 72 20 7a 65 72 6f 20 76 61 6c 75 65  LL or zero value
143c0 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20   (integer value 
143d0 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  0 or real value 
143e0 30 2e 30 29 20 69 73 0a 63 6f 6e 73 69 64 65 72  0.0) is.consider
143f0 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65 2e 20  ed to be false. 
14400 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  All other values
14410 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
14420 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46 6f  true.)^..<p>^(Fo
14430 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 76  r example, the v
14440 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e 30 2c  alues NULL, 0.0,
14450 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20 61 6e   0, 'english' an
14460 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20 63 6f  d '0' are all co
14470 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65 20 66  nsidered.to be f
14480 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75 65 73  alse.)^ ^(Values
14490 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20 2d 30   1, 1.0, 0.1, -0
144a0 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69 73 68  .1 and '1english
144b0 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  ' are considered
144c0 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29 5e 0a   to .be true.)^.
144d0 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73 3c 2f  .<h3>Functions</
144e0 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b 63 6f  h3>.<p>^Both [co
144f0 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20 61  refunc|simple] a
14500 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67 72  nd [aggfunc|aggr
14510 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f 6e 73  egate] functions
14520 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e 0a   are supported..
14530 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74 69 6f  (For presentatio
14540 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69 6d 70  n purposes, simp
14550 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  le functions are
14560 20 66 75 72 74 68 65 72 20 73 75 62 64 69 76 69   further subdivi
14570 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65 66 75  ded into.[corefu
14580 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63 74 69  nc | core functi
14590 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65 66 75  ons] and [datefu
145a0 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65 20 66  nc | date-time f
145b0 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41 20 73  unctions].).^A s
145c0 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 63  imple function c
145d0 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e  an be used in an
145e0 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 5e  y expression.  ^
145f0 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  Simple functions
14600 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75 6c 74   return.a result
14610 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 61 73   immediately bas
14620 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e 70 75  ed on their inpu
14630 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  ts.  ^Aggregate 
14640 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20 6f 6e  functions.may on
14650 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 61 20  ly be used in a 
14660 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
14670 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20 66 75  .  ^Aggregate fu
14680 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74 65 0a  nctions compute.
14690 74 68 65 69 72 20 72 65 73 75 6c 74 20 61 63 72  their result acr
146a0 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20  oss all rows of 
146b0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 3c  the result set.<
146c0 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
146d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
146e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
146f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14710 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
14720 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f 6e  n {Core Function
14730 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63 6f  s} corefunc {*co
14740 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66 75 6e  refunc}.proc fun
14750 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65 79  cdef {syntax key
14760 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20 20  words desc} {.  
14770 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d 0a 20  hd_puts {<tr>}. 
14780 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73   regsub -all {\s
14790 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  +} [string trim 
147a0 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 3e 3c 2f  $syntax] {<br></
147b0 62 72 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65  br>} syntax.  re
147c0 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e  gsub -all {\(([^
147d0 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78  *)]+)\)} $syntax
147e0 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73   {(<i>\1</i>)} s
147f0 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d  yntax.  regsub -
14800 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20  all {,} $syntax 
14810 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61  {</i>,<i>} synta
14820 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
14830 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20  {<i>\.\.\.</i>} 
14840 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79  $syntax {...} sy
14850 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20 22  ntax.  hd_puts "
14860 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
14870 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68 74  \" align=\"right
14880 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c 22  \" width=\"120\"
14890 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74  >".  if {[llengt
148a0 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d  h $keywords]==0}
148b0 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b   {.    regexp {[
148c0 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20  a-z_]+} $syntax 
148d0 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67  name.    hd_frag
148e0 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d  ment $name *$nam
148f0 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c  e "${name}() SQL
14900 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65   function".  } e
14910 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72  lse {.    set fr
14920 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24  agname [lindex $
14930 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20  keywords 0].    
14940 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61  regsub -all {[^a
14950 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b  -z]} $fragname {
14960 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68  } fragname.    h
14970 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67  d_fragment $frag
14980 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64  name.    eval hd
14990 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e  _keywords [strin
149a0 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24  g map {\n { }} $
149b0 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20  keywords].  }.  
149c0 68 64 5f 70 75 74 73 20 22 24 73 79 6e 74 61 78  hd_puts "$syntax
149d0 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75 74 73  </td>".  hd_puts
149e0 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f   {<td valign="to
149f0 70 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f 6c 76  p">}.  hd_resolv
14a00 65 20 24 64 65 73 63 0a 20 20 68 64 5f 70 75 74  e $desc.  hd_put
14a10 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d  s {</td></tr>}.}
14a20 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
14a30 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  core functions s
14a40 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61  hown below are a
14a50 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
14a60 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20  ult. .[datefunc 
14a70 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69 6d  | Date &amp; Tim
14a80 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64  e functions] and
14a90 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72  .[aggfunc | aggr
14aa0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d  egate functions]
14ab0 20 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 20   are documented 
14ac0 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a  separately.  An.
14ad0 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20  application may 
14ae0 64 65 66 69 6e 65 20 61 64 64 69 74 69 6f 6e 61  define additiona
14af0 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74  l.functions writ
14b00 74 65 6e 20 69 6e 20 43 20 61 6e 64 20 61 64 64  ten in C and add
14b10 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
14b20 73 65 20 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a  se engine using.
14b30 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65  the [sqlite3_cre
14b40 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20  ate_function()] 
14b50 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65  API.</p>..<table
14b60 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
14b70 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a  dding=10>.<tcl>.
14b80 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29 7d  funcdef {abs(X)}
14b90 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62 73   {} {.  ^The abs
14ba0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
14bb0 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75 74  urns the absolut
14bc0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6e  e value of the n
14bd0 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65 6e  umeric.  argumen
14be0 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72 65  t X.  ^Abs(X) re
14bf0 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58 20  turns NULL if X 
14c00 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41 62  is NULL. .  ^(Ab
14c10 73 28 58 29 20 72 65 74 75 72 6e 20 30 2e 30 20  s(X) return 0.0 
14c20 69 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67  if X is a string
14c30 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61 74 20   or blob.  that 
14c40 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
14c50 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72 69 63  ted to a numeric
14c60 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66 20 58   value.)^  ^If X
14c70 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74 65 67   is the .  integ
14c80 65 72 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  er -922337203685
14c90 34 37 37 35 38 30 37 20 74 68 65 6e 20 61 62 73  4775807 then abs
14ca0 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20 69 6e  (X) throws an in
14cb0 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 0a 20  teger overflow. 
14cc0 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74 68 65   error since the
14cd0 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76 61 6c  re is no equival
14ce0 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36 34 2d  ent positive 64-
14cf0 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65 6d 65  bit two compleme
14d00 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e  nt value..}..fun
14d10 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28 29 7d  cdef {changes()}
14d20 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68 61   {} {.  ^The cha
14d30 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20  nges() function 
14d40 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
14d50 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 20 72  er of database r
14d60 6f 77 73 20 74 68 61 74 20 77 65 72 65 20 63 68  ows that were ch
14d70 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73 65 72  anged.  or inser
14d80 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62  ted or deleted b
14d90 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  y the most recen
14da0 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20 49 4e  tly completed IN
14db0 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a 20 20  SERT, DELETE,.  
14dc0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
14dd0 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65 20 6f  ent, exclusive o
14de0 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  f statements in 
14df0 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72 69 67  lower-level trig
14e00 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63 68 61  gers..  ^The cha
14e10 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e 63 74  nges() SQL funct
14e20 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72  ion is a wrapper
14e30 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c   around the [sql
14e40 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a  ite3_changes()].
14e50 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e    C/C++ function
14e60 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f   and hence follo
14e70 77 73 20 74 68 65 20 73 61 6d 65 20 72 75 6c 65  ws the same rule
14e80 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63  s for counting c
14e90 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64  hanges..}..funcd
14ea0 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59  ef {coalesce(X,Y
14eb0 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ,...)} {} {.  ^T
14ec0 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20 66 75  he coalesce() fu
14ed0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
14ee0 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72   copy of its fir
14ef0 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75  st non-NULL argu
14f00 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20  ment, or.  NULL 
14f10 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73  if all arguments
14f20 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61   are NULL.  ^Coa
14f30 6c 65 73 63 65 28 29 20 6d 75 73 74 20 62 65 20  lesce() must be 
14f40 61 74 20 6c 65 61 73 74 20 0a 20 20 32 20 61 72  at least .  2 ar
14f50 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63  guments..}..func
14f60 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29 7d 20  def {glob(X,Y)} 
14f70 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67 6c 6f 62  {} {.  ^The glob
14f80 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 69  (X,Y) function i
14f90 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  s equivalent to 
14fa0 74 68 65 0a 20 20 65 78 70 72 65 73 73 69 6f 6e  the.  expression
14fb0 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c 2f 62   "<b>Y GLOB X</b
14fc0 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20  >"..  Note that 
14fd0 74 68 65 20 58 20 61 6e 64 20 59 20 61 72 67 75  the X and Y argu
14fe0 6d 65 6e 74 73 20 61 72 65 20 72 65 76 65 72 73  ments are revers
14ff0 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62 28 29  ed in the glob()
15000 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 6c 61   function.  rela
15010 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69  tive to the infi
15020 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f  x [GLOB] operato
15030 72 2e 0a 20 20 5e 49 66 20 74 68 65 20 5b 73 71  r..  ^If the [sq
15040 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
15050 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61  ction()] interfa
15060 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a 20 20  ce is used to.  
15070 6f 76 65 72 72 69 64 65 20 74 68 65 20 67 6c 6f  override the glo
15080 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  b(X,Y) function 
15090 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e 61 74  with an alternat
150a0 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ive implementati
150b0 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20 5b 47  on then.  the [G
150c0 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20 77 69  LOB] operator wi
150d0 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 61 6c  ll invoke the al
150e0 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d  ternative implem
150f0 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e  entation..}..fun
15100 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59  cdef {ifnull(X,Y
15110 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69  )} {} {.  ^The i
15120 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e  fnull() function
15130 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20   returns a copy 
15140 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e  of its first non
15150 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20  -NULL argument, 
15160 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f 74  or.  NULL if bot
15170 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  h arguments are 
15180 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28 29  NULL.  ^Ifnull()
15190 20 6d 75 73 74 20 68 61 76 65 20 65 78 61 63 74   must have exact
151a0 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a  ly 2 arguments..
151b0 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20    ^The ifnull() 
151c0 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69  function is equi
151d0 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c 65  valent to [coale
151e0 73 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f 20  sce()] with two 
151f0 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75  arguments..}..fu
15200 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20 7b  ncdef {hex(X)} {
15210 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78 28 29  } {.  ^The hex()
15220 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70   function interp
15230 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e  rets its argumen
15240 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e 64 20  t as a BLOB and 
15250 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69  returns.  a stri
15260 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ng which is the 
15270 75 70 70 65 72 2d 63 61 73 65 20 68 65 78 61 64  upper-case hexad
15280 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67  ecimal rendering
15290 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   of the content 
152a0 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a  of.  that blob..
152b0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74  }..funcdef {last
152c0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d  _insert_rowid()}
152d0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73   {} {.  ^The las
152e0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
152f0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
15300 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20  s the [ROWID].  
15310 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20  of the last row 
15320 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 65 20  insert from the 
15330 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
15340 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b 65  ion which invoke
15350 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e  d the.  function
15360 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e  ..  ^The last_in
15370 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53 51 4c  sert_rowid() SQL
15380 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
15390 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
153a0 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73  e.  [sqlite3_las
153b0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
153c0 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  ] C/C++ interfac
153d0 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66  e function..}..f
153e0 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58  uncdef {length(X
153f0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
15400 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f  ength(X) functio
15410 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65  n returns the le
15420 6e 67 74 68 20 6f 66 20 58 20 69 6e 20 0a 20 20  ngth of X in .  
15430 63 68 61 72 61 63 74 65 72 73 20 69 66 20 58 20  characters if X 
15440 69 73 20 61 20 73 74 72 69 6e 67 2c 20 6f 72 20  is a string, or 
15450 69 6e 20 62 79 74 65 73 20 69 66 20 58 20 69 73  in bytes if X is
15460 20 61 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58   a blob..  ^If X
15470 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65   is NULL then le
15480 6e 67 74 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e  ngth(X) is NULL.
15490 0a 20 20 5e 49 66 20 58 20 69 73 20 6e 75 6d 65  .  ^If X is nume
154a0 72 69 63 20 74 68 65 6e 20 6c 65 6e 67 74 68 28  ric then length(
154b0 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c  X) returns the l
154c0 65 6e 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e  ength of a strin
154d0 67 0a 20 20 72 65 70 72 65 73 65 6e 74 61 74 69  g.  representati
154e0 6f 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  on of X..}..func
154f0 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c  def {like(X,Y) l
15500 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b  ike(X,Y,Z)} {} {
15510 0a 20 20 5e 54 68 65 20 6c 69 6b 65 28 29 20 66  .  ^The like() f
15520 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
15530 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
15540 0a 20 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20  .  "<b>Y LIKE X 
15550 26 23 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39  &#91;ESCAPE Z&#9
15560 33 3b 3c 2f 62 3e 22 20 65 78 70 72 65 73 73 69  3;</b>" expressi
15570 6f 6e 2e 20 0a 20 20 5e 49 66 20 74 68 65 20 6f  on. .  ^If the o
15580 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63  ptional ESCAPE c
15590 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
155a0 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b  , then the.  lik
155b0 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  e() function is 
155c0 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72  invoked with thr
155d0 65 65 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e  ee arguments.  ^
155e0 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73  Otherwise, it is
155f0 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20  .  invoked with 
15600 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e  two arguments on
15610 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ly. Note that th
15620 65 20 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65  e X and Y parame
15630 74 65 72 73 20 61 72 65 0a 20 20 72 65 76 65 72  ters are.  rever
15640 73 65 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28  sed in the like(
15650 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74  ) function relat
15660 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78  ive to the infix
15670 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72   [LIKE] operator
15680 2e 0a 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65  ..  ^The [sqlite
15690 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
156a0 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63  n()] interface c
156b0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76  an be used to ov
156c0 65 72 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b  erride the.  lik
156d0 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  e() function and
156e0 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65 20   thereby change 
156f0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
15700 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70   the.  [LIKE] op
15710 65 72 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76  erator.  When ov
15720 65 72 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b  erriding the lik
15730 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74  e() function, it
15740 20 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e   may be importan
15750 74 0a 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20  t.  to override 
15760 62 6f 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64  both the two and
15770 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20   three argument 
15780 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20  versions of the 
15790 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69  like() .  functi
157a0 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64  on. Otherwise, d
157b0 69 66 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61  ifferent code ma
157c0 79 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69  y be called to i
157d0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b  mplement the.  [
157e0 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64  LIKE] operator d
157f0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
15800 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53  her or not an ES
15810 43 41 50 45 20 63 6c 61 75 73 65 20 77 61 73 20  CAPE clause was 
15820 0a 20 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a  .  specified..}.
15830 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65  .funcdef {load_e
15840 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64  xtension(X) load
15850 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d  _extension(X,Y)}
15860 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61   {} {.  ^The loa
15870 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29  d_extension(X,Y)
15880 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20   function loads 
15890 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e  SQLite extension
158a0 73 20 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61  s out of the sha
158b0 72 65 64 0a 20 20 6c 69 62 72 61 72 79 20 66 69  red.  library fi
158c0 6c 65 20 6e 61 6d 65 64 20 58 20 75 73 69 6e 67  le named X using
158d0 20 74 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   the entry point
158e0 20 59 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74   Y.  ^The result
158f0 20 6f 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69   of load_extensi
15900 6f 6e 28 29 0a 20 20 69 73 20 61 6c 77 61 79 73  on().  is always
15910 20 61 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20   a NULL.  ^If Y 
15920 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20  is omitted then 
15930 74 68 65 20 64 65 66 61 75 6c 74 20 65 6e 74 72  the default entr
15940 79 20 70 6f 69 6e 74 0a 20 20 6f 66 20 3c 62 3e  y point.  of <b>
15950 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f  sqlite3_extensio
15960 6e 5f 69 6e 69 74 3c 2f 62 3e 20 69 73 20 75 73  n_init</b> is us
15970 65 64 2e 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65  ed.  ^The load_e
15980 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74  xtension() funct
15990 69 6f 6e 0a 20 20 72 61 69 73 65 73 20 61 6e 20  ion.  raises an 
159a0 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65  exception if the
159b0 20 65 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73   extension fails
159c0 20 74 6f 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74   to load or init
159d0 69 61 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c 79  ialize correctly
159e0 2e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61  ...  <p>^The loa
159f0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75  d_extension() fu
15a00 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c  nction will fail
15a10 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f   if the extensio
15a20 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20 0a 20  n attempts to . 
15a30 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74   modify or delet
15a40 65 20 61 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e a SQL function
15a50 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
15a60 71 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20  quence.  ^The.  
15a70 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64  extension can ad
15a80 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20  d new functions 
15a90 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
15aa0 75 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e  uences, but cann
15ab0 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64  ot.  modify or d
15ac0 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 66  elete existing f
15ad0 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
15ae0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
15af0 62 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20  because.  those 
15b00 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72  functions and/or
15b10 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
15b20 6e 63 65 73 20 6d 69 67 68 74 20 62 65 20 75 73  nces might be us
15b30 65 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69  ed elsewhere.  i
15b40 6e 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  n the currently 
15b50 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74  running SQL stat
15b60 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20  ement.  To load 
15b70 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61  an extension tha
15b80 74 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64  t.  changes or d
15b90 65 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73  eletes functions
15ba0 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
15bb0 71 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65  quences, use the
15bc0 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64  .  [sqlite3_load
15bd0 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d  _extension()] C-
15be0 6c 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70  language API.</p
15bf0 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f  >.}..funcdef {lo
15c00 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  wer(X)} {} {.  ^
15c10 54 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e  The lower(X) fun
15c20 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
15c30 63 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58  copy of string X
15c40 20 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20   with all ASCII 
15c50 63 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e  characters.  con
15c60 76 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20  verted to lower 
15c70 63 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61  case.  ^The defa
15c80 75 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77  ult built-in low
15c90 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f  er() function wo
15ca0 72 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20  rks.  for ASCII 
15cb0 63 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e  characters only.
15cc0 20 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e    To do case con
15cd0 76 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d  versions on non-
15ce0 41 53 43 49 49 0a 20 20 63 68 61 72 61 63 74 65  ASCII.  characte
15cf0 72 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55  rs, load the ICU
15d00 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66   extension..}..f
15d10 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29  uncdef {ltrim(X)
15d20 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20   ltrim(X,Y)} {} 
15d30 7b 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58  {.  ^The ltrim(X
15d40 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
15d50 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
15d60 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67  rmed by removing
15d70 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63   any and all.  c
15d80 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
15d90 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20  ppear in Y from 
15da0 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66  the left side of
15db0 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20   X..  ^If the Y 
15dc0 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
15dd0 74 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65  ted, ltrim(X) re
15de0 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f  moves spaces fro
15df0 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a  m the left side.
15e00 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64    of X..}..funcd
15e10 65 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29  ef {max(X,Y,...)
15e20 7d 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20  } {*maxCoreFunc 
15e30 2a 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20  *max {max() SQL 
15e40 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
15e50 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65  The multi-argume
15e60 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f  nt max() functio
15e70 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72  n returns the ar
15e80 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20  gument with the 
15e90 0a 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  .  maximum value
15ea0 2c 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c  , or return NULL
15eb0 20 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74   if any argument
15ec0 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68   is NULL. .  ^Th
15ed0 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
15ee0 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20   max() function 
15ef0 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67  searches its arg
15f00 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74  uments from left
15f10 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20   to right.  for 
15f20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74  an argument that
15f30 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61   defines a colla
15f40 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ting function an
15f50 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c  d uses that coll
15f60 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e  ating.  function
15f70 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20   for all string 
15f80 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
15f90 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72  f none of the ar
15fa0 67 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29  guments to max()
15fb0 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c  .  define a coll
15fc0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20  ating function, 
15fd0 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20  then the BINARY 
15fe0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
15ff0 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f  on is used..  No
16000 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29  te that <b>max()
16010 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65  </b> is a simple
16020 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20   function when. 
16030 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72   it has 2 or mor
16040 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20  e arguments but 
16050 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a 20  operates as an. 
16060 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20 61   [minAggFunc | a
16070 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16080 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79  n] if given only
16090 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a single argume
160a0 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  nt..}..funcdef {
160b0 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a  min(X,Y,...)} {*
160c0 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e  minCoreFunc *min
160d0 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e 63   {min() SQL func
160e0 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
160f0 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d  multi-argument m
16100 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  in() function re
16110 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65  turns the argume
16120 6e 74 20 77 69 74 68 20 74 68 65 0a 20 20 6d 69  nt with the.  mi
16130 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e  nimum value..  ^
16140 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65  The multi-argume
16150 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f  nt min() functio
16160 6e 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61  n searches its a
16170 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65  rguments from le
16180 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f  ft to right.  fo
16190 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68  r an argument th
161a0 61 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c  at defines a col
161b0 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
161c0 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f  and uses that co
161d0 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69  llating.  functi
161e0 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e  on for all strin
161f0 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20  g comparisons.  
16200 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  ^If none of the 
16210 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e  arguments to min
16220 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f  ().  define a co
16230 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
16240 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52  , then the BINAR
16250 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  Y collating func
16260 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20  tion is used..  
16270 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e  Note that <b>min
16280 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70  ()</b> is a simp
16290 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e  le function when
162a0 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d  .  it has 2 or m
162b0 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75  ore arguments bu
162c0 74 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e  t operates as an
162d0 20 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20   .  [maxAggFunc 
162e0 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  | aggregate func
162f0 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20  tion] if given. 
16300 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61   only a single a
16310 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63  rgument..}..func
16320 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29  def {nullif(X,Y)
16330 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75  } {} {.  ^The nu
16340 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69  llif(X,Y) functi
16350 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20 66  on returns its f
16360 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66  irst argument if
16370 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61   the arguments a
16380 72 65 0a 20 20 64 69 66 66 65 72 65 6e 74 20 61  re.  different a
16390 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 61  nd NULL if the a
163a0 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65  rguments are the
163b0 20 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c   same.  ^The nul
163c0 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lif(X,Y) functio
163d0 6e 0a 20 20 73 65 61 72 63 68 65 73 20 69 74 73  n.  searches its
163e0 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
163f0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 66 6f  left to right fo
16400 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68  r an argument th
16410 61 74 20 64 65 66 69 6e 65 73 20 61 0a 20 20 63  at defines a.  c
16420 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
16430 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
16440 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
16450 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e  on for all strin
16460 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  g.  comparisons.
16470 20 20 5e 49 66 20 6e 65 69 74 68 65 72 20 61 72    ^If neither ar
16480 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66  gument to nullif
16490 28 29 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c  () defines a col
164a0 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a  lating function.
164b0 20 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52    then the BINAR
164c0 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75  Y is used..}..fu
164d0 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d  ncdef {quote(X)}
164e0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f   {} {.  ^The quo
164f0 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  te(X) function r
16500 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
16510 77 68 69 63 68 20 69 73 20 74 68 65 20 76 61 6c  which is the val
16520 75 65 20 6f 66 0a 20 20 69 74 73 20 61 72 67 75  ue of.  its argu
16530 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f  ment suitable fo
16540 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f  r inclusion into
16550 20 61 6e 6f 74 68 65 72 20 53 51 4c 20 73 74 61   another SQL sta
16560 74 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e  tement..  ^Strin
16570 67 73 20 61 72 65 20 73 75 72 72 6f 75 6e 64 65  gs are surrounde
16580 64 20 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74  d by single-quot
16590 65 73 20 77 69 74 68 20 65 73 63 61 70 65 73 20  es with escapes 
165a0 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71 75 6f 74  on interior quot
165b0 65 73 0a 20 20 61 73 20 6e 65 65 64 65 64 2e 20  es.  as needed. 
165c0 20 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f   ^BLOBs are enco
165d0 64 65 64 20 61 73 20 68 65 78 61 64 65 63 69 6d  ded as hexadecim
165e0 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 7d 0a 0a  al literals..}..
165f0 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 28  funcdef {random(
16600 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72  )} {} {.  ^The r
16610 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e  andom() function
16620 20 72 65 74 75 72 6e 73 20 61 20 70 73 65 75 64   returns a pseud
16630 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72  o-random integer
16640 0a 20 20 62 65 74 77 65 65 6e 20 2d 39 32 32 33  .  between -9223
16650 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20  372036854775808 
16660 61 6e 64 20 2b 39 32 32 33 33 37 32 30 33 36 38  and +92233720368
16670 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e  54775807..}..fun
16680 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62  cdef {randomblob
16690 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (N)} {} {.  ^The
166a0 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20 66   randomblob(N) f
166b0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 20 61  unction return a
166c0 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f  n N-byte blob co
166d0 6e 74 61 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d  ntaining pseudo-
166e0 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65 73 2e 20  random.  bytes. 
166f0 5e 49 66 20 4e 20 69 73 20 6c 65 73 73 20 74 68  ^If N is less th
16700 61 6e 20 31 20 74 68 65 6e 20 61 20 31 2d 62 79  an 1 then a 1-by
16710 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f 62 20 69  te random blob i
16720 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 20 20 3c  s returned...  <
16730 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69 63 61  p>Hint:  applica
16740 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65 72 61  tions can genera
16750 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71  te globally uniq
16760 75 65 20 69 64 65 6e 74 69 66 69 65 72 73 0a 20  ue identifiers. 
16770 20 75 73 69 6e 67 20 74 68 69 73 20 66 75 6e 63   using this func
16780 74 69 6f 6e 20 74 6f 67 65 74 68 65 72 20 77 69  tion together wi
16790 74 68 20 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f  th [hex()] and/o
167a0 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69  r.  [lower()] li
167b0 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20  ke this:</p>..  
167c0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68  <blockquote>.  h
167d0 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36  ex(randomblob(16
167e0 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f  ))<br></br>.  lo
167f0 77 65 72 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c  wer(hex(randombl
16800 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f  ob(16))).  </blo
16810 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63  ckquote>.}..func
16820 64 65 66 20 7b 72 65 70 6c 61 63 65 28 58 2c 59  def {replace(X,Y
16830 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Z)} {} {.  ^The
16840 20 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 20   replace(X,Y,Z) 
16850 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
16860 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
16870 20 62 79 20 73 75 62 73 74 69 74 75 74 69 6e 67   by substituting
16880 0a 20 20 73 74 72 69 6e 67 20 5a 20 66 6f 72 20  .  string Z for 
16890 65 76 65 72 79 20 6f 63 63 75 72 72 65 6e 63 65  every occurrence
168a0 20 6f 66 20 73 74 72 69 6e 67 20 59 20 69 6e 20   of string Y in 
168b0 73 74 72 69 6e 67 20 58 2e 20 20 5e 54 68 65 20  string X.  ^The 
168c0 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c 61  [BINARY].  colla
168d0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
168e0 20 75 73 65 64 20 66 6f 72 20 63 6f 6d 70 61 72   used for compar
168f0 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59 20 69 73  isons.  ^If Y is
16900 20 61 6e 20 65 6d 70 74 79 0a 20 20 73 74 72 69   an empty.  stri
16910 6e 67 20 74 68 65 6e 20 72 65 74 75 72 6e 20 58  ng then return X
16920 20 75 6e 63 68 61 6e 67 65 64 2e 20 20 5e 49 66   unchanged.  ^If
16930 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61   Z is not initia
16940 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e 67 2c 20  lly.  a string, 
16950 69 74 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  it is cast to a 
16960 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 72 69  UTF-8 string pri
16970 6f 72 20 74 6f 20 70 72 6f 63 65 73 73 69 6e 67  or to processing
16980 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f  ..}..funcdef {ro
16990 75 6e 64 28 58 29 20 72 6f 75 6e 64 28 58 2c 59  und(X) round(X,Y
169a0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72  )} {} {.  ^The r
169b0 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e 63 74 69  ound(X,Y) functi
169c0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
169d0 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
169e0 6f 6e 20 6f 66 20 74 68 65 20 66 6c 6f 61 74 69  on of the floati
169f0 6e 67 2d 70 6f 69 6e 74 0a 20 20 76 61 6c 75 65  ng-point.  value
16a00 20 58 20 72 6f 75 6e 64 65 64 20 74 6f 20 59 20   X rounded to Y 
16a10 64 69 67 69 74 73 20 74 6f 20 74 68 65 20 72 69  digits to the ri
16a20 67 68 74 20 6f 66 20 74 68 65 20 64 65 63 69 6d  ght of the decim
16a30 61 6c 20 70 6f 69 6e 74 2e 0a 20 20 5e 49 66 20  al point..  ^If 
16a40 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69  the Y argument i
16a50 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 20 58  s omitted, the X
16a60 20 76 61 6c 75 65 20 69 73 20 74 72 75 6e 63 61   value is trunca
16a70 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
16a80 72 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  r..}..funcdef {r
16a90 74 72 69 6d 28 58 29 20 72 74 72 69 6d 28 58 2c  trim(X) rtrim(X,
16aa0 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
16ab0 72 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74  rtrim(X,Y) funct
16ac0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
16ad0 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72  ring formed by r
16ae0 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20  emoving any and 
16af0 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73  all.  characters
16b00 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20   that appear in 
16b10 59 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74  Y from the right
16b20 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49   side of X..  ^I
16b30 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74  f the Y argument
16b40 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 72 74 72   is omitted, rtr
16b50 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70  im(X) removes sp
16b60 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20 72 69  aces from the ri
16b70 67 68 74 0a 20 20 73 69 64 65 20 6f 66 20 58 2e  ght.  side of X.
16b80 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75  .}..funcdef {sou
16b90 6e 64 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  ndex(X)} {} {.  
16ba0 5e 54 68 65 20 73 6f 75 6e 64 65 78 28 58 29 20  ^The soundex(X) 
16bb0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
16bc0 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
16bd0 73 20 74 68 65 20 73 6f 75 6e 64 65 78 20 65 6e  s the soundex en
16be0 63 6f 64 69 6e 67 20 0a 20 20 6f 66 20 74 68 65  coding .  of the
16bf0 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 54 68   string X..  ^Th
16c00 65 20 73 74 72 69 6e 67 20 22 3f 30 30 30 22 20  e string "?000" 
16c10 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  is returned if t
16c20 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e  he argument is N
16c30 55 4c 4c 20 6f 72 20 63 6f 6e 74 61 69 6e 73 0a  ULL or contains.
16c40 20 20 6e 6f 20 41 53 43 49 49 20 61 6c 70 68 61    no ASCII alpha
16c50 62 65 74 69 63 20 63 68 61 72 61 63 74 65 72 73  betic characters
16c60 2e 0a 20 20 5e 28 54 68 69 73 20 66 75 6e 63 74  ..  ^(This funct
16c70 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ion is omitted f
16c80 72 6f 6d 20 53 51 4c 69 74 65 20 62 79 20 64 65  rom SQLite by de
16c90 66 61 75 6c 74 2e 0a 20 20 49 74 20 69 73 20 6f  fault..  It is o
16ca0 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 66  nly available if
16cb0 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 53 4f 55   the [SQLITE_SOU
16cc0 4e 44 45 58 5d 20 63 6f 6d 70 69 6c 65 2d 74 69  NDEX] compile-ti
16cd0 6d 65 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75  me option.  is u
16ce0 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74 65 20  sed when SQLite 
16cf0 69 73 20 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66  is built.)^.}..f
16d00 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63  uncdef {sqlite_c
16d10 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
16d20 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (N)} {} {.  ^The
16d30 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f   sqlite_compileo
16d40 70 74 69 6f 6e 5f 67 65 74 28 29 20 53 51 4c 20  ption_get() SQL 
16d50 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
16d60 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
16d70 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70  .  [sqlite3_comp
16d80 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29 5d  ileoption_get()]
16d90 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e   C/C++ function.
16da0 0a 20 20 5e 54 68 69 73 20 72 6f 75 74 69 6e 65  .  ^This routine
16db0 20 72 65 74 75 72 6e 73 20 74 68 65 20 4e 2d 74   returns the N-t
16dc0 68 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  h compile-time o
16dd0 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 62 75  ption used to bu
16de0 69 6c 64 20 53 51 4c 69 74 65 0a 20 20 6f 72 20  ild SQLite.  or 
16df0 4e 55 4c 4c 20 69 66 20 4e 20 69 73 20 6f 75 74  NULL if N is out
16e00 20 6f 66 20 72 61 6e 67 65 2e 20 20 53 65 65 20   of range.  See 
16e10 61 6c 73 6f 20 74 68 65 20 5b 63 6f 6d 70 69 6c  also the [compil
16e20 65 5f 6f 70 74 69 6f 6e 73 20 70 72 61 67 6d 61  e_options pragma
16e30 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  ]..}..funcdef {s
16e40 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
16e50 69 6f 6e 5f 75 73 65 64 28 58 29 7d 20 7b 7d 20  ion_used(X)} {} 
16e60 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
16e70 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
16e80 65 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  ed() SQL functio
16e90 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  n is a wrapper a
16ea0 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c  round the.  [sql
16eb0 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  ite3_compileopti
16ec0 6f 6e 5f 75 73 65 64 28 29 5d 20 43 2f 43 2b 2b  on_used()] C/C++
16ed0 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 57 68   function..  ^Wh
16ee0 65 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  en the argument 
16ef0 58 20 74 6f 20 73 71 6c 69 74 65 5f 63 6f 6d 70  X to sqlite_comp
16f00 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58  ileoption_used(X
16f10 29 20 69 73 20 61 20 73 74 72 69 6e 67 20 77 68  ) is a string wh
16f20 69 63 68 0a 20 20 69 73 20 74 68 65 20 6e 61 6d  ich.  is the nam
16f30 65 20 6f 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74  e of a compile-t
16f40 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 69 73  ime option, this
16f50 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
16f60 20 74 72 75 65 20 28 31 29 20 6f 72 0a 20 20 66   true (1) or.  f
16f70 61 6c 73 65 20 28 30 29 20 64 65 70 65 6e 64 69  alse (0) dependi
16f80 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72  ng on whether or
16f90 20 6e 6f 74 20 74 68 61 74 20 6f 70 74 69 6f 6e   not that option
16fa0 20 77 61 73 20 75 73 65 64 20 64 75 72 69 6e 67   was used during
16fb0 20 74 68 65 0a 20 20 62 75 69 6c 64 2e 0a 7d 0a   the.  build..}.
16fc0 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65  .funcdef {sqlite
16fd0 5f 73 6f 75 72 63 65 5f 69 64 28 29 7d 20 7b 7d  _source_id()} {}
16fe0 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65   {.  ^The sqlite
16ff0 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 66 75 6e  _source_id() fun
17000 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
17010 73 74 72 69 6e 67 20 74 68 61 74 20 69 64 65 6e  string that iden
17020 74 69 66 69 65 73 20 74 68 65 0a 20 20 73 70 65  tifies the.  spe
17030 63 69 66 69 63 20 76 65 72 73 69 6f 6e 20 6f 66  cific version of
17040 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65   the source code
17050 20 74 68 61 74 20 77 61 73 20 75 73 65 64 20 74   that was used t
17060 6f 20 62 75 69 6c 64 20 74 68 65 20 53 51 4c 69  o build the SQLi
17070 74 65 0a 20 20 6c 69 62 72 61 72 79 2e 20 20 5e  te.  library.  ^
17080 54 68 65 20 73 74 72 69 6e 67 20 72 65 74 75 72  The string retur
17090 6e 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73 6f  ned by sqlite_so
170a0 75 72 63 65 5f 69 64 28 29 20 62 65 67 69 6e 73  urce_id() begins
170b0 20 77 69 74 68 0a 20 20 74 68 65 20 64 61 74 65   with.  the date
170c0 20 61 6e 64 20 74 69 6d 65 20 74 68 61 74 20 74   and time that t
170d0 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 77  he source code w
170e0 61 73 20 63 68 65 63 6b 65 64 20 69 6e 20 61 6e  as checked in an
170f0 64 20 69 73 20 66 6f 6c 6c 6f 77 73 20 62 79 0a  d is follows by.
17100 20 20 61 6e 20 53 48 41 31 20 68 61 73 68 20 74    an SHA1 hash t
17110 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64 65  hat uniquely ide
17120 6e 74 69 66 69 65 73 20 74 68 65 20 73 6f 75 72  ntifies the sour
17130 63 65 20 74 72 65 65 2e 20 20 5e 54 68 69 73 20  ce tree.  ^This 
17140 66 75 6e 63 74 69 6f 6e 20 69 73 0a 20 20 61 6e  function is.  an
17150 20 53 51 4c 20 77 72 61 70 70 65 72 20 61 72 6f   SQL wrapper aro
17160 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33  und the [sqlite3
17170 5f 73 6f 75 72 63 65 69 64 28 29 5d 20 43 20 69  _sourceid()] C i
17180 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e  nterface..}..fun
17190 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 76 65 72  cdef {sqlite_ver
171a0 73 69 6f 6e 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  sion()} {} {.  ^
171b0 54 68 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69  The sqlite_versi
171c0 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  on() function re
171d0 74 75 72 6e 73 20 74 68 65 20 76 65 72 73 69 6f  turns the versio
171e0 6e 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  n string for the
171f0 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61 72   SQLite.  librar
17200 79 20 74 68 61 74 20 69 73 20 72 75 6e 6e 69 6e  y that is runnin
17210 67 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69  g.  ^This functi
17220 6f 6e 20 69 73 20 61 6e 20 53 51 4c 0a 20 20 77  on is an SQL.  w
17230 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
17240 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 62 76 65  e [sqlite3_libve
17250 72 73 69 6f 6e 28 29 5d 20 43 2d 69 6e 74 65 72  rsion()] C-inter
17260 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  face..}..funcdef
17270 20 7b 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20   {substr(X,Y,Z) 
17280 73 75 62 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20  substr(X,Y)} {} 
17290 7b 0a 20 20 5e 54 68 65 20 73 75 62 73 74 72 28  {.  ^The substr(
172a0 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20  X,Y,Z) function 
172b0 72 65 74 75 72 6e 73 20 61 20 73 75 62 73 74 72  returns a substr
172c0 69 6e 67 20 6f 66 20 69 6e 70 75 74 20 73 74 72  ing of input str
172d0 69 6e 67 20 58 20 74 68 61 74 20 62 65 67 69 6e  ing X that begin
172e0 73 0a 20 20 77 69 74 68 20 74 68 65 20 59 2d 74  s.  with the Y-t
172f0 68 20 63 68 61 72 61 63 74 65 72 20 61 6e 64 20  h character and 
17300 77 68 69 63 68 20 69 73 20 5a 20 63 68 61 72 61  which is Z chara
17310 63 74 65 72 73 20 6c 6f 6e 67 2e 0a 20 20 5e 49  cters long..  ^I
17320 66 20 5a 20 69 73 20 6f 6d 69 74 74 65 64 20 74  f Z is omitted t
17330 68 65 6e 20 73 75 62 73 74 72 28 58 2c 59 29 20  hen substr(X,Y) 
17340 72 65 74 75 72 6e 73 20 61 6c 6c 20 63 68 61 72  returns all char
17350 61 63 74 65 72 73 20 74 68 72 6f 75 67 68 20 74  acters through t
17360 68 65 20 65 6e 64 0a 20 20 6f 66 20 74 68 65 20  he end.  of the 
17370 73 74 72 69 6e 67 20 58 20 62 65 67 69 6e 6e 69  string X beginni
17380 6e 67 20 77 69 74 68 20 74 68 65 20 59 2d 74 68  ng with the Y-th
17390 2e 0a 20 20 5e 54 68 65 20 6c 65 66 74 2d 6d 6f  ..  ^The left-mo
173a0 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  st character of 
173b0 58 20 69 73 20 6e 75 6d 62 65 72 20 31 2e 20 20  X is number 1.  
173c0 5e 49 66 20 59 20 69 73 20 6e 65 67 61 74 69 76  ^If Y is negativ
173d0 65 0a 20 20 74 68 65 6e 20 74 68 65 20 66 69 72  e.  then the fir
173e0 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  st character of 
173f0 74 68 65 20 73 75 62 73 74 72 69 6e 67 20 69 73  the substring is
17400 20 66 6f 75 6e 64 20 62 79 20 63 6f 75 6e 74 69   found by counti
17410 6e 67 20 66 72 6f 6d 20 74 68 65 0a 20 20 72 69  ng from the.  ri
17420 67 68 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  ght rather than 
17430 74 68 65 20 6c 65 66 74 2e 20 20 5e 49 66 20 5a  the left.  ^If Z
17440 20 69 73 20 6e 65 67 61 74 69 76 65 20 74 68 65   is negative the
17450 6e 0a 20 20 74 68 65 20 61 62 73 28 5a 29 20 63  n.  the abs(Z) c
17460 68 61 72 61 63 74 65 72 73 20 70 72 65 63 65 64  haracters preced
17470 69 6e 67 20 74 68 65 20 59 2d 74 68 20 63 68 61  ing the Y-th cha
17480 72 61 63 74 65 72 20 61 72 65 20 72 65 74 75 72  racter are retur
17490 6e 65 64 2e 0a 20 20 5e 49 66 20 58 20 69 73 20  ned..  ^If X is 
174a0 61 20 73 74 72 69 6e 67 20 74 68 65 6e 20 63 68  a string then ch
174b0 61 72 61 63 74 65 72 73 20 69 6e 64 69 63 65 73  aracters indices
174c0 20 72 65 66 65 72 20 74 6f 20 61 63 74 75 61 6c   refer to actual
174d0 20 55 54 46 2d 38 20 0a 20 20 63 68 61 72 61 63   UTF-8 .  charac
174e0 74 65 72 73 2e 20 20 5e 49 66 20 58 20 69 73 20  ters.  ^If X is 
174f0 61 20 42 4c 4f 42 20 74 68 65 6e 20 74 68 65 20  a BLOB then the 
17500 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74 6f  indices refer to
17510 20 62 79 74 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64   bytes..}..funcd
17520 65 66 20 7b 74 6f 74 61 6c 5f 63 68 61 6e 67 65  ef {total_change
17530 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  s()} {} {.  ^The
17540 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29   total_changes()
17550 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
17560 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
17570 72 6f 77 20 63 68 61 6e 67 65 73 0a 20 20 63 61  row changes.  ca
17580 75 73 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  used by INSERT, 
17590 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
175a0 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 20 73 69  .  statements si
175b0 6e 63 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  nce the current 
175c0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
175d0 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64 2e 0a  ion was opened..
175e0 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e    ^This function
175f0 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
17600 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
17610 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
17620 29 5d 0a 20 20 43 2f 43 2b 2b 20 69 6e 74 65 72  )].  C/C++ inter
17630 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  face..}..funcdef
17640 20 7b 74 72 69 6d 28 58 29 20 74 72 69 6d 28 58   {trim(X) trim(X
17650 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
17660 20 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74   trim(X,Y) funct
17670 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
17680 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72  ring formed by r
17690 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20  emoving any and 
176a0 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73  all.  characters
176b0 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20   that appear in 
176c0 59 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73  Y from both ends
176d0 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65   of X..  ^If the
176e0 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f   Y argument is o
176f0 6d 69 74 74 65 64 2c 20 74 72 69 6d 28 58 29 20  mitted, trim(X) 
17700 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66  removes spaces f
17710 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f 66  rom both ends of
17720 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b   X..}..funcdef {
17730 74 79 70 65 6f 66 28 58 29 7d 20 7b 7d 20 7b 0a  typeof(X)} {} {.
17740 20 20 5e 54 68 65 20 74 79 70 65 6f 66 28 58 29    ^The typeof(X)
17750 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
17760 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
17770 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 5b 64  indicates the [d
17780 61 74 61 74 79 70 65 5d 20 6f 66 0a 20 20 74 68  atatype] of.  th
17790 65 20 65 78 70 72 65 73 73 69 6f 6e 20 58 3a 20  e expression X: 
177a0 22 6e 75 6c 6c 22 2c 20 22 69 6e 74 65 67 65 72  "null", "integer
177b0 22 2c 20 22 72 65 61 6c 22 2c 20 22 74 65 78 74  ", "real", "text
177c0 22 2c 20 6f 72 20 22 62 6c 6f 62 22 2e 0a 7d 0a  ", or "blob"..}.
177d0 0a 66 75 6e 63 64 65 66 20 7b 75 70 70 65 72 28  .funcdef {upper(
177e0 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
177f0 75 70 70 65 72 28 58 29 20 66 75 6e 63 74 69 6f  upper(X) functio
17800 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79  n returns a copy
17810 20 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67   of input string
17820 20 58 20 69 6e 20 77 68 69 63 68 20 61 6c 6c 20   X in which all 
17830 0a 20 20 6c 6f 77 65 72 2d 63 61 73 65 20 41 53  .  lower-case AS
17840 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 61  CII characters a
17850 72 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  re converted to 
17860 74 68 65 69 72 20 75 70 70 65 72 2d 63 61 73 65  their upper-case
17870 20 65 71 75 69 76 61 6c 65 6e 74 2e 0a 7d 0a 0a   equivalent..}..
17880 66 75 6e 63 64 65 66 20 7b 7a 65 72 6f 62 6c 6f  funcdef {zeroblo
17890 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  b(N)} {} {.  ^Th
178a0 65 20 7a 65 72 6f 62 6c 6f 62 28 4e 29 20 66 75  e zeroblob(N) fu
178b0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
178c0 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74 69 6e 67   BLOB consisting
178d0 20 6f 66 20 4e 20 62 79 74 65 73 20 6f 66 20 30   of N bytes of 0
178e0 78 30 30 2e 0a 20 20 53 51 4c 69 74 65 20 6d 61  x00..  SQLite ma
178f0 6e 61 67 65 73 20 74 68 65 73 65 20 7a 65 72 6f  nages these zero
17900 62 6c 6f 62 73 20 76 65 72 79 20 65 66 66 69 63  blobs very effic
17910 69 65 6e 74 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f  iently.  Zeroblo
17920 62 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  bs can be used t
17930 6f 0a 20 20 72 65 73 65 72 76 65 20 73 70 61 63  o.  reserve spac
17940 65 20 66 6f 72 20 61 20 42 4c 4f 42 20 74 68 61  e for a BLOB tha
17950 74 20 69 73 20 6c 61 74 65 72 20 77 72 69 74 74  t is later writt
17960 65 6e 20 75 73 69 6e 67 20 0a 20 20 5b 73 71 6c  en using .  [sql
17970 69 74 65 33 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29  ite3_blob_open()
17980 20 7c 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42   | incremental B
17990 4c 4f 42 20 49 2f 4f 5d 2e 0a 20 20 5e 54 68 69  LOB I/O]..  ^Thi
179a0 73 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  s SQL function i
179b0 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 75 73  s implemented us
179c0 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ing the [sqlite3
179d0 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62  _result_zeroblob
179e0 28 29 5d 0a 20 20 72 6f 75 74 69 6e 65 20 66 72  ()].  routine fr
179f0 6f 6d 20 74 68 65 20 43 2f 43 2b 2b 20 69 6e 74  om the C/C++ int
17a00 65 72 66 61 63 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e  erface..}.</tcl>
17a10 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e  .</table>..<tcl>
17a20 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
17a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
17a70 53 65 63 74 69 6f 6e 20 7b 44 61 74 65 20 41 6e  Section {Date An
17a80 64 20 54 69 6d 65 20 46 75 6e 63 74 69 6f 6e 73  d Time Functions
17a90 7d 20 64 61 74 65 66 75 6e 63 20 7b 2a 64 61 74  } datefunc {*dat
17aa0 65 66 75 6e 63 7d 0a 68 64 5f 6b 65 79 77 6f 72  efunc}.hd_keywor
17ab0 64 73 20 7b 64 61 74 65 28 29 20 53 51 4c 20 66  ds {date() SQL f
17ac0 75 6e 63 74 69 6f 6e 7d 20 7b 74 69 6d 65 28 29  unction} {time()
17ad0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68   SQL function}.h
17ae0 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65  d_keywords {date
17af0 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74  time() SQL funct
17b00 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e 64 61 79 28  ion} {julianday(
17b10 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a  ) SQL function}.
17b20 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 73 74 72  hd_keywords {str
17b30 66 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63  ftime() SQL func
17b40 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tion}.</tcl>..<p
17b50 3e 0a 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  >.SQLite support
17b60 73 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20  s five date and 
17b70 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  time functions a
17b80 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a  s follows:.</p>.
17b90 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e  .<p>.<ol>.<li> ^
17ba0 28 3c 62 3e 64 61 74 65 28 3c 2f 62 3e 3c 69 3e  (<b>date(</b><i>
17bb0 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
17bc0 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
17bd0 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
17be0 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c  ^ </li>.<li> ^(<
17bf0 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69  b>time(</b><i>ti
17c00 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
17c10 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
17c20 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20  .</i><b>)</b>)^ 
17c30 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e  </li>.<li> ^(<b>
17c40 64 61 74 65 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e  datetime(</b><i>
17c50 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
17c60 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
17c70 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
17c80 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c  ^ </li>.<li> ^(<
17c90 62 3e 6a 75 6c 69 61 6e 64 61 79 28 3c 2f 62 3e  b>julianday(</b>
17ca0 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
17cb0 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
17cc0 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
17cd0 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
17ce0 5e 28 3c 62 3e 73 74 72 66 74 69 6d 65 28 3c 2f  ^(<b>strftime(</
17cf0 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c 20 74 69 6d  b><i>format, tim
17d00 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
17d10 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
17d20 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
17d30 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a  /li>.</ol>..<p>.
17d40 5e 41 6c 6c 20 66 69 76 65 20 64 61 74 65 20 61  ^All five date a
17d50 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
17d60 73 20 74 61 6b 65 20 61 20 74 69 6d 65 20 73 74  s take a time st
17d70 72 69 6e 67 20 61 73 20 61 6e 20 61 72 67 75 6d  ring as an argum
17d80 65 6e 74 2e 20 0a 5e 54 68 65 20 74 69 6d 65 20  ent. .^The time 
17d90 73 74 72 69 6e 67 20 69 73 20 66 6f 6c 6c 6f 77  string is follow
17da0 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f  ed by zero or mo
17db0 72 65 20 6d 6f 64 69 66 69 65 72 73 2e 20 0a 5e  re modifiers. .^
17dc0 54 68 65 20 73 74 72 66 74 69 6d 65 28 29 20 66  The strftime() f
17dd0 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20 74 61 6b  unction also tak
17de0 65 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72 69  es a format stri
17df0 6e 67 20 61 73 20 69 74 73 20 66 69 72 73 74 20  ng as its first 
17e00 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a  argument..</p>..
17e10 3c 70 3e 0a 54 68 65 20 64 61 74 65 20 61 6e 64  <p>.The date and
17e20 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
17e30 75 73 65 20 61 20 73 75 62 73 65 74 20 6f 66 0a  use a subset of.
17e40 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
17e50 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 49 53  edia.org/wiki/IS
17e60 4f 5f 38 36 30 31 20 7c 20 49 53 30 2d 38 36 30  O_8601 | IS0-860
17e70 31 5d 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  1] date and time
17e80 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54 68 65 20 64  .formats..^The d
17e90 61 74 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ate() function r
17ea0 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 65 20  eturns the date 
17eb0 69 6e 20 74 68 69 73 20 66 6f 72 6d 61 74 3a 20  in this format: 
17ec0 59 59 59 59 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68  YYYY-MM-DD. .^Th
17ed0 65 20 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  e time() functio
17ee0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 69  n returns the ti
17ef0 6d 65 20 61 73 20 48 48 3a 4d 4d 3a 53 53 2e 20  me as HH:MM:SS. 
17f00 0a 5e 54 68 65 20 64 61 74 65 74 69 6d 65 28 29  .^The datetime()
17f10 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
17f20 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  s "YYYY-MM-DD HH
17f30 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28 54 68 65 20  :MM:SS". .^(The 
17f40 6a 75 6c 69 61 6e 64 61 79 28 29 20 66 75 6e 63  julianday() func
17f50 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
17f60 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b   .[http://en.wik
17f70 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
17f80 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c  Julian_day | Jul
17f90 69 61 6e 20 64 61 79 5d 20 2d 20 74 68 65 0a 6e  ian day] - the.n
17fa0 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69  umber of days si
17fb0 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20 47 72 65 65  nce noon in Gree
17fc0 6e 77 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65  nwich on Novembe
17fd0 72 20 32 34 2c 20 34 37 31 34 20 42 2e 43 2e 20  r 24, 4714 B.C. 
17fe0 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  .([http://en.wik
17ff0 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
18000 50 72 6f 6c 65 70 74 69 63 5f 47 72 65 67 6f 72  Proleptic_Gregor
18010 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 50  ian_calendar | P
18020 72 6f 6c 65 70 74 69 63 20 47 72 65 67 6f 72 69  roleptic Gregori
18030 61 6e 20 63 61 6c 65 6e 64 61 72 5d 29 2e 29 5e  an calendar]).)^
18040 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28 29  .^The strftime()
18050 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
18060 20 74 68 65 20 64 61 74 65 20 66 6f 72 6d 61 74   the date format
18070 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ted according to
18080 20 0a 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72   .the format str
18090 69 6e 67 20 73 70 65 63 69 66 69 65 64 20 61 73  ing specified as
180a0 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
180b0 65 6e 74 2e 0a 5e 54 68 65 20 66 6f 72 6d 61 74  ent..^The format
180c0 20 73 74 72 69 6e 67 20 73 75 70 70 6f 72 74 73   string supports
180d0 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e   the most common
180e0 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 20 66   substitutions f
180f0 6f 75 6e 64 20 69 6e 20 74 68 65 20 0a 5b 68 74  ound in the .[ht
18100 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f  tp://opengroup.o
18110 72 67 2f 6f 6e 6c 69 6e 65 70 75 62 73 2f 30 30  rg/onlinepubs/00
18120 37 39 30 38 37 39 39 2f 78 73 68 2f 73 74 72 66  7908799/xsh/strf
18130 74 69 6d 65 2e 68 74 6d 6c 20 7c 20 73 74 72 66  time.html | strf
18140 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 5d  time() function]
18150 0a 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61  .from the standa
18160 72 64 20 43 20 6c 69 62 72 61 72 79 20 70 6c 75  rd C library plu
18170 73 20 74 77 6f 20 6e 65 77 20 73 75 62 73 74 69  s two new substi
18180 74 75 74 69 6f 6e 73 2c 20 25 66 20 61 6e 64 20  tutions, %f and 
18190 25 4a 2e 0a 5e 28 54 68 65 20 66 6f 6c 6c 6f 77  %J..^(The follow
181a0 69 6e 67 20 69 73 20 61 20 63 6f 6d 70 6c 65 74  ing is a complet
181b0 65 20 6c 69 73 74 20 6f 66 20 76 61 6c 69 64 20  e list of valid 
181c0 73 74 72 66 74 69 6d 65 28 29 20 73 75 62 73 74  strftime() subst
181d0 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a  itutions:.</p>..
181e0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
181f0 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63  ble border="0" c
18200 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63  ellpadding="0" c
18210 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a  ellspacing="0">.
18220 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77 69 64 74  <tr><td><td widt
18230 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e  h="10"><td></tr>
18240 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64 20 3c 74  ..<tr><td> %d <t
18250 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 6d 6f  d><td> day of mo
18260 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c 74 64 3e  nth: 00.<tr><td>
18270 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20 66 72 61   %f <td><td> fra
18280 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 3a  ctional seconds:
18290 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c 74 64 3e   SS.SSS.<tr><td>
182a0 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20 68 6f 75   %H <td><td> hou
182b0 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72 3e 3c 74  r: 00-24 .<tr><t
182c0 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %j <td><td> d
182d0 61 79 20 6f 66 20 79 65 61 72 3a 20 30 30 31 2d  ay of year: 001-
182e0 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a 20  366.<tr><td> %J 
182f0 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e 20  <td><td> Julian 
18300 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c  day number.<tr><
18310 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74 64 3e 20  td> %m <td><td> 
18320 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a 3c 74 72  month: 01-12.<tr
18330 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e 3c 74 64  ><td> %M <td><td
18340 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d 35 39 0a  > minute: 00-59.
18350 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c 74 64 3e  <tr><td> %s <td>
18360 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20 73 69 6e  <td> seconds sin
18370 63 65 20 31 39 37 30 2d 30 31 2d 30 31 0a 3c 74  ce 1970-01-01.<t
18380 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64 3e 3c 74  r><td> %S <td><t
18390 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30 30 2d 35  d> seconds: 00-5
183a0 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77 20 3c 74  9.<tr><td> %w <t
183b0 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 77 65  d><td> day of we
183c0 65 6b 20 30 2d 36 20 77 69 74 68 20 53 75 6e 64  ek 0-6 with Sund
183d0 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20 25  ay==0.<tr><td> %
183e0 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65 65 6b 20  W <td><td> week 
183f0 6f 66 20 79 65 61 72 3a 20 30 30 2d 35 33 0a 3c  of year: 00-53.<
18400 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74 64 3e 3c  tr><td> %Y <td><
18410 74 64 3e 20 79 65 61 72 3a 20 30 30 30 30 2d 39  td> year: 0000-9
18420 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 25 20  999.<tr><td> %% 
18430 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61 62  <td><td> %.</tab
18440 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
18450 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63  >)^..<p>.^(Notic
18460 65 20 74 68 61 74 20 61 6c 6c 20 6f 74 68 65 72  e that all other
18470 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
18480 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  unctions can be 
18490 65 78 70 72 65 73 73 65 64 0a 69 6e 20 74 65 72  expressed.in ter
184a0 6d 73 20 6f 66 20 73 74 72 66 74 69 6d 65 28 29  ms of strftime()
184b0 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
184c0 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ote>.<table bord
184d0 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69  er="0" cellpaddi
184e0 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69  ng="0" cellspaci
184f0 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e  ng="0">.<tr><td>
18500 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c  <b>Function</b><
18510 74 64 20 77 69 64 74 68 3d 22 33 30 22 3e 3c 74  td width="30"><t
18520 64 3e 3c 62 3e 45 71 75 69 76 61 6c 65 6e 74 20  d><b>Equivalent 
18530 73 74 72 66 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c  strftime()</b>.<
18540 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 28 2e  tr><td>   date(.
18550 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64  ..)      <td><td
18560 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59 2d  >  strftime('%Y-
18570 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72  %m-%d', ...).<tr
18580 3e 3c 74 64 3e 20 20 20 74 69 6d 65 28 2e 2e 2e  ><td>   time(...
18590 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20  )      <td><td> 
185a0 20 73 74 72 66 74 69 6d 65 28 27 25 48 3a 25 4d   strftime('%H:%M
185b0 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c  :%S', ...).<tr><
185c0 74 64 3e 20 20 20 64 61 74 65 74 69 6d 65 28 2e  td>   datetime(.
185d0 2e 2e 29 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73  ..)  <td><td>  s
185e0 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25  trftime('%Y-%m-%
185f0 64 20 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e  d %H:%M:%S', ...
18600 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 6a 75 6c  ).<tr><td>   jul
18610 69 61 6e 64 61 79 28 2e 2e 2e 29 20 3c 74 64 3e  ianday(...) <td>
18620 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
18630 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c  %J', ...).</tabl
18640 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
18650 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79  )^..<p>.The only
18660 20 72 65 61 73 6f 6e 73 20 66 6f 72 20 70 72 6f   reasons for pro
18670 76 69 64 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  viding functions
18680 20 6f 74 68 65 72 20 74 68 61 6e 20 73 74 72 66   other than strf
18690 74 69 6d 65 28 29 20 69 73 0a 66 6f 72 20 63 6f  time() is.for co
186a0 6e 76 65 6e 69 65 6e 63 65 20 61 6e 64 20 66 6f  nvenience and fo
186b0 72 20 65 66 66 69 63 69 65 6e 63 79 2e 0a 3c 2f  r efficiency..</
186c0 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65 20 53 74 72  p>..<h3>Time Str
186d0 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  ings</h3>..<p>^(
186e0 41 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61  A time string ca
186f0 6e 20 62 65 20 69 6e 20 61 6e 79 20 6f 66 20 74  n be in any of t
18700 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72  he following for
18710 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  mats:</p>..<ol>.
18720 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
18730 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  DD</i>.<li> <i>Y
18740 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c  YYY-MM-DD HH:MM<
18750 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
18760 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 3c  -MM-DD HH:MM:SS<
18770 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
18780 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 2e  -MM-DD HH:MM:SS.
18790 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  SSS</i>.<li> <i>
187a0 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
187b0 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f  >T</b><i>HH:MM</
187c0 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  i>.<li> <i>YYYY-
187d0 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62  MM-DD</i><b>T</b
187e0 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e  ><i>HH:MM:SS</i>
187f0 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
18800 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c  -DD</i><b>T</b><
18810 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f  i>HH:MM:SS.SSS</
18820 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d  i>.<li> <i>HH:MM
18830 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a  </i>.<li> <i>HH:
18840 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM:SS</i>.<li> <
18850 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f  i>HH:MM:SS.SSS</
18860 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f  i>.<li> <b>now</
18870 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44 44 44 44 44  b>.<li> <i>DDDDD
18880 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29  DDDDD</i>.</ol>)
18890 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61  ^..<p>.^In forma
188a0 74 73 20 35 20 74 68 72 6f 75 67 68 20 37 2c 20  ts 5 through 7, 
188b0 74 68 65 20 22 54 22 20 69 73 20 61 20 6c 69 74  the "T" is a lit
188c0 65 72 61 6c 20 63 68 61 72 61 63 74 65 72 20 73  eral character s
188d0 65 70 61 72 61 74 69 6e 67 20 0a 74 68 65 20 64  eparating .the d
188e0 61 74 65 20 61 6e 64 20 74 68 65 20 74 69 6d 65  ate and the time
188f0 2c 20 61 73 20 72 65 71 75 69 72 65 64 20 62 79  , as required by
18900 20 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33   .[http://www.w3
18910 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54 45 2d 64 61  c.org/TR/NOTE-da
18920 74 65 74 69 6d 65 20 7c 20 49 53 4f 2d 38 36 30  tetime | ISO-860
18930 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74 73 20 38 20  1]. .^Formats 8 
18940 74 68 72 6f 75 67 68 20 31 30 20 74 68 61 74 20  through 10 that 
18950 73 70 65 63 69 66 79 20 6f 6e 6c 79 20 61 20 74  specify only a t
18960 69 6d 65 20 61 73 73 75 6d 65 20 61 20 64 61 74  ime assume a dat
18970 65 20 6f 66 20 0a 32 30 30 30 2d 30 31 2d 30 31  e of .2000-01-01
18980 2e 20 46 6f 72 6d 61 74 20 31 31 2c 20 74 68 65  . Format 11, the
18990 20 73 74 72 69 6e 67 20 27 6e 6f 77 27 2c 20 69   string 'now', i
189a0 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  s converted into
189b0 20 74 68 65 20 0a 63 75 72 72 65 6e 74 20 64 61   the .current da
189c0 74 65 20 61 6e 64 20 74 69 6d 65 20 61 73 20 6f  te and time as o
189d0 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65  btained from the
189e0 20 78 43 75 72 72 65 6e 74 54 69 6d 65 20 6d 65   xCurrentTime me
189f0 74 68 6f 64 0a 6f 66 20 74 68 65 20 5b 73 71 6c  thod.of the [sql
18a00 69 74 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74  ite3_vfs] object
18a10 20 69 6e 20 75 73 65 2e 0a 5e 5b 68 74 74 70 3a   in use..^[http:
18a20 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
18a30 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69 6e 61  rg/wiki/Coordina
18a40 74 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f 54 69  ted_Universal_Ti
18a50 6d 65 20 7c 20 55 6e 69 76 65 72 73 61 6c 20 43  me | Universal C
18a60 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20  oordinated Time 
18a70 28 55 54 43 29 5d 20 69 73 20 75 73 65 64 2e 20  (UTC)] is used. 
18a80 0a 5e 46 6f 72 6d 61 74 20 31 32 20 69 73 20 74  .^Format 12 is t
18a90 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  he .[http://en.w
18aa0 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
18ab0 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a  i/Julian_day | J
18ac0 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  ulian day number
18ad0 5d 0a 65 78 70 72 65 73 73 65 64 20 61 73 20 61  ].expressed as a
18ae0 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
18af0 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  value..</p>..<h3
18b00 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e 0a  >Modifiers</h3>.
18b10 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73 74  .<p>^The time st
18b20 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c 6c  ring can be foll
18b30 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20  owed by zero or 
18b40 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20 74  more modifiers t
18b50 68 61 74 20 0a 61 6c 74 65 72 20 74 68 65 20 64  hat .alter the d
18b60 61 74 65 20 61 6e 64 20 74 69 6d 65 20 73 74 72  ate and time str
18b70 69 6e 67 2e 20 5e 45 61 63 68 20 6d 6f 64 69 66  ing. ^Each modif
18b80 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73 66 6f  ier.is a transfo
18b90 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
18ba0 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 74  applied to the t
18bb0 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69 74 73  ime value to its
18bc0 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65 72   left..^Modifier
18bd0 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 66 72  s are applied fr
18be0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
18bf0 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70 6f 72  ; order is impor
18c00 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61 69  tant..^(The avai
18c10 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72 73 20  lable modifiers 
18c20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c  are as follows.<
18c30 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e  /p>..<ol>.<li> N
18c40 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e  NN days.<li> NNN
18c50 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20   hours.<li> NNN 
18c60 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e  minutes.<li> NNN
18c70 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c  .NNNN seconds.<l
18c80 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c  i> NNN months.<l
18c90 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69  i> NNN years.<li
18ca0 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68  > start of month
18cb0 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 79  .<li> start of y
18cc0 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  ear.<li> start o
18cd0 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64  f day.<li> weekd
18ce0 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70  ay N.<li> unixep
18cf0 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69  och.<li> localti
18d00 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f  me.<li> utc .</o
18d10 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69  l>)^..<p>^The fi
18d20 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69 65 72  rst six modifier
18d30 73 20 28 31 20 74 68 72 6f 75 67 68 20 36 29 20  s (1 through 6) 
18d40 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68 65 20  .simply add the 
18d50 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75 6e 74  specified amount
18d60 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68 65 20   of time to the 
18d70 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 0a 73  date and time .s
18d80 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
18d90 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65 73 74  preceding timest
18da0 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69 65  ring and modifie
18db0 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20 22  rs..^Note that "
18dc0 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74  &plusmn;NNN mont
18dd0 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72 65 6e  hs" works by ren
18de0 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69 67 69  dering the origi
18df0 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74 68  nal date into.th
18e00 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f 72  e YYYY-MM-DD for
18e10 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68 65 20  mat, adding the 
18e20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74  &plusmn;NNN to t
18e30 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c 75  he MM month valu
18e40 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a  e, then.normaliz
18e50 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2e 20  ing the result. 
18e60 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78 61 6d   ^Thus, for exam
18e70 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20 32 30  ple, the data 20
18e80 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69 65  01-03-31 modifie
18e90 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27 20  d.by '+1 month' 
18ea0 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c 64 73  initially yields
18eb0 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62 75 74   2001-04-31, but
18ec0 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73 20   April only has 
18ed0 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65 20 64  30 days.so the d
18ee0 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a 65  ate is normalize
18ef0 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30 31 2e  d to 2001-05-01.
18f00 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65 66 66    ^A similar eff
18f10 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e 0a  ect occurs when.
18f20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
18f30 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32 39  e is February 29
18f40 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20 61   of a leapyear a
18f50 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72 20  nd the modifier 
18f60 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65 61  is.&plusmn;N yea
18f70 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e 6f  rs where N is no
18f80 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  t a multiple of 
18f90 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  four.</p>..<p>^T
18fa0 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d 6f  he "start of" mo
18fb0 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f 75  difiers (7 throu
18fc0 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65 20  gh 9) shift the 
18fd0 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20 0a  date backwards .
18fe0 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  to the beginning
18ff0 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
19000 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20 64  month, year or d
19010 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ay.</p>..<p>^The
19020 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69 66   "weekday" modif
19030 69 65 72 20 61 64 76 61 6e 63 65 73 20 74 68 65  ier advances the
19040 20 64 61 74 65 20 66 6f 72 77 61 72 64 20 74 6f   date forward to
19050 20 74 68 65 20 6e 65 78 74 20 64 61 74 65 20 0a   the next date .
19060 77 68 65 72 65 20 74 68 65 20 77 65 65 6b 64 61  where the weekda
19070 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20 53  y number is N. S
19080 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64  unday is 0, Mond
19090 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f 20  ay is 1, and so 
190a0 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  forth.</p>..<p>^
190b0 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  The "unixepoch" 
190c0 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f 6e  modifier (11) on
190d0 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20 69  ly works if it i
190e0 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
190f0 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e 67  ws .a timestring
19100 20 69 6e 20 74 68 65 20 44 44 44 44 44 44 44 44   in the DDDDDDDD
19110 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69  DD format. .^Thi
19120 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73 65  s modifier cause
19130 73 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44  s the DDDDDDDDDD
19140 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65 74   to be interpret
19150 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c  ed not .as a Jul
19160 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20 61  ian day number a
19170 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f  s it normally wo
19180 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a 5b  uld be, but as.[
19190 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
191a0 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69  dia.org/wiki/Uni
191b0 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20 54 69  x_time | Unix Ti
191c0 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65  me] - the .numbe
191d0 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
191e0 63 65 20 31 39 37 30 2e 20 20 49 66 20 74 68 65  ce 1970.  If the
191f0 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
19200 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66  ifier does not.f
19210 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72 69  ollow a timestri
19220 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 44  ng of the form D
19230 44 44 44 44 44 44 44 44 44 20 77 68 69 63 68 20  DDDDDDDDD which 
19240 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6e 75  expresses the nu
19250 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20  mber.of seconds 
19260 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69 66  since 1970 or if
19270 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72 73   other modifiers
19280 0a 73 65 70 61 72 61 74 65 20 74 68 65 20 22 75  .separate the "u
19290 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
192a0 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44 44  er from prior DD
192b0 44 44 44 44 44 44 44 44 20 74 68 65 6e 20 74 68  DDDDDDDD then th
192c0 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e.behavior is un
192d0 64 65 66 69 6e 65 64 2e 0a 44 75 65 20 74 6f 20  defined..Due to 
192e0 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d 69 74 61  precision limita
192f0 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64 20 62 79  tions imposed by
19300 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
19310 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36 34 2d 62  ions use.of 64-b
19320 69 74 20 69 6e 74 65 67 65 72 73 2c 20 74 68 65  it integers, the
19330 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
19340 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b 73  ifier only works
19350 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77 65   for.dates betwe
19360 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30  en 0000-01-01 00
19370 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32 2d  :00:00 and 5352-
19380 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20 28  11-01 10:52:47 (
19390 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d 36  unix times.of -6
193a0 32 31 36 37 32 31 39 32 30 30 20 74 68 72 6f 75  2167219200 throu
193b0 67 68 20 31 30 36 37 35 31 39 39 31 36 37 29 2e  gh 10675199167).
193c0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 6c  </p>..<p>^The "l
193d0 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69  ocaltime" modifi
193e0 65 72 20 28 31 32 29 20 61 73 73 75 6d 65 73 20  er (12) assumes 
193f0 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20  the time string 
19400 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69  to its left is i
19410 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72  n.Universal Coor
19420 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54  dinated Time (UT
19430 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74  C) and adjusts t
19440 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20 73  he time.string s
19450 6f 20 74 68 61 74 20 69 74 20 64 69 73 70 6c 61  o that it displa
19460 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49  ys localtime.  I
19470 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f  f "localtime".fo
19480 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68 61  llows a time tha
19490 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74 68  t is not UTC, th
194a0 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
194b0 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28  is undefined..^(
194c0 54 68 65 20 22 75 74 63 22 20 69 73 20 74 68 65  The "utc" is the
194d0 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f   opposite of "lo
194e0 63 61 6c 74 69 6d 65 22 2e 20 20 22 75 74 63 22  caltime".  "utc"
194f0 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 74 68   assumes that th
19500 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74 73 20  e string.to its 
19510 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65 20 6c  left is in the l
19520 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61 6e  ocal timezone an
19530 64 20 61 64 6a 75 73 74 73 20 74 68 61 74 20 73  d adjusts that s
19540 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e 20 55  tring to be in U
19550 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70 72 69  TC.)^.If the pri
19560 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74  or string is not
19570 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20 74   in localtime, t
19580 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
19590 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64 65 66  f "utc" is.undef
195a0 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45  ined.</p>..<h3>E
195b0 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28  xamples</h3>..^(
195c0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63  <p>Compute the c
195d0 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a  urrent date.<p>.
195e0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c  .<blockquote>SEL
195f0 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29 3b  ECT date('now');
19600 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
19610 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
19620 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74 68  e last day of th
19630 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e  e current month.
19640 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
19650 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e  e>SELECT date('n
19660 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d 6f  ow','start of mo
19670 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c  nth','+1 month',
19680 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f  '-1 day');.</blo
19690 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
196a0 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74  >Compute the dat
196b0 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e  e and time given
196c0 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d   a unix timestam
196d0 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f 70  p 1092941466.</p
196e0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
196f0 20 20 20 20 53 45 4c 45 43 54 20 64 61 74 65 74      SELECT datet
19700 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c 20  ime(1092941466, 
19710 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f  'unixepoch');.</
19720 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
19730 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
19740 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69  date and time gi
19750 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73  ven a unix times
19760 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2c  tamp 1092941466,
19770 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74 65   and .compensate
19780 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c 20   for your local 
19790 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c  timezone.</p>..<
197a0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
197b0 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30  LECT datetime(10
197c0 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65  92941466, 'unixe
197d0 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69 6d  poch', 'localtim
197e0 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  e');.</blockquot
197f0 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
19800 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 75  te the current u
19810 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f  nix timestamp.</
19820 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
19830 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
19840 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a  me('%s','now');.
19850 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
19860 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
19870 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73  e number of days
19880 20 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e 69   since the signi
19890 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44 65 63  ng of the US Dec
198a0 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64 65  laration.of Inde
198b0 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c  pendence.</p>..<
198c0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
198d0 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28 27  LECT julianday('
198e0 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64 61  now') - julianda
198f0 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29 3b  y('1776-07-04');
19900 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
19910 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
19920 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63  he number of sec
19930 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61 72  onds since a par
19940 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69  ticular moment i
19950 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c  n 2004:</p>..<bl
19960 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
19970 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27  CT strftime('%s'
19980 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74 69  ,'now') - strfti
19990 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30 31  me('%s','2004-01
199a0 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a  -01 02:34:56');.
199b0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
199c0 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20 74  .^(<p>.Compute t
199d0 68 65 20 64 61 74 65 20 6f 66 20 74 68 65 20 66  he date of the f
199e0 69 72 73 74 20 54 75 65 73 64 61 79 20 69 6e 20  irst Tuesday in 
199f0 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65 20  October.for the 
19a00 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c 2f  current year..</
19a10 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
19a20 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 28 27  .  SELECT date('
19a30 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 79  now','start of y
19a40 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73 27  ear','+9 months'
19a50 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a 3c  ,'weekday 2');.<
19a60 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
19a70 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
19a80 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65 20   time since the 
19a90 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73 65  unix epoch in se
19aa0 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74 72  conds .(like str
19ab0 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
19ac0 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64 65  ) except include
19ad0 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72  s fractional par
19ae0 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  t):</p>..<blockq
19af0 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 28  uote>.  SELECT (
19b00 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29  julianday('now')
19b10 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38 36   - 2440587.5)*86
19b20 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  400.0;.</blockqu
19b30 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76 65  ote>)^..<h3>Cave
19b40 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f 68 33  ats And Bugs</h3
19b50 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74  >..<p>The comput
19b60 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74  ation of local t
19b70 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65 61 76  ime depends heav
19b80 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69 6d 20  ily on the whim 
19b90 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e 73 20  .of politicians 
19ba0 61 6e 64 20 69 73 20 74 68 75 73 20 64 69 66 66  and is thus diff
19bb0 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63 6f 72  icult to get cor
19bc0 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f  rect for .all lo
19bd0 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73 20  cales. ^In this 
19be0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
19bf0 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
19c00 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f 6e  ibrary .function
19c10 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 69   localtime_r() i
19c20 73 20 75 73 65 64 20 74 6f 20 61 73 73 69 73 74  s used to assist
19c30 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61 74   in the calculat
19c40 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74 69  ion of .local ti
19c50 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63 61  me.  ^(The .loca
19c60 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e 63  ltime_r() C func
19c70 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e  tion normally on
19c80 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65 61  ly works for yea
19c90 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30 20  rs.between 1970 
19ca0 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64 61  and 2037. For da
19cb0 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 69 73  tes outside this
19cc0 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20 0a   range, SQLite .
19cd0 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70 20  attempts to map 
19ce0 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61 6e  the year into an
19cf0 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61 72   equivalent year
19d00 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72 61   within .this ra
19d10 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c 63  nge, do the calc
19d20 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61  ulation, then ma
19d30 70 20 74 68 65 20 79 65 61 72 20 62 61 63 6b 2e  p the year back.
19d40 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68  )^</p>...<p>^(Th
19d50 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 6e  ese functions on
19d60 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61 74 65  ly work for date
19d70 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30  s between 0000-0
19d80 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a 61 6e  1-01 00:00:00.an
19d90 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32 33 3a  d 9999-12-31 23:
19da0 35 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20 64  59:59 (julidan d
19db0 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32 31 30  ay numbers 17210
19dc0 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35 33 37  59.5 through 537
19dd0 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64  3484.5).)^.For d
19de0 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 61  ates outside tha
19df0 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72 65 73  t range, the res
19e00 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a 66 75  ults of these.fu
19e10 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e 64 65  nctions are unde
19e20 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e  fined.</p>..<p>N
19e30 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73  on-Vista Windows
19e40 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20   platforms only 
19e50 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20  support one set 
19e60 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a 56  of DST rules. .V
19e70 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72  ista only suppor
19e80 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f 72  ts two. Therefor
19e90 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74  e, on these plat
19ea0 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63  forms, .historic
19eb0 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74 69  al DST calculati
19ec0 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f  ons will be inco
19ed0 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d  rrect. .For exam
19ee0 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c 20  ple, in the US, 
19ef0 69 6e 20 32 30 30 37 20 74 68 65 20 44 53 54 20  in 2007 the DST 
19f00 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20 0a  rules changed. .
19f10 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77  Non-Vista Window
19f20 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c  s platforms appl
19f30 79 20 74 68 65 20 6e 65 77 20 32 30 30 37 20 44  y the new 2007 D
19f40 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c  ST rules .to all
19f50 20 70 72 65 76 69 6f 75 73 20 79 65 61 72 73 20   previous years 
19f60 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20 64  as well. Vista d
19f70 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65 74  oes somewhat bet
19f80 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73 75  ter.getting resu
19f90 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61 63 6b  lts correct back
19fa0 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20 74   to 1986, when t
19fb0 68 65 20 72 75 6c 65 73 20 77 65 72 65 20 61 6c  he rules were al
19fc0 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a  so changed.</p>.
19fd0 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c  .<p>All internal
19fe0 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61 73   computations as
19ff0 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74 70 3a  sume the .[http:
1a000 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1a010 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69 61  rg/wiki/Gregoria
1a020 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47 72 65  n_calendar | Gre
1a030 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d  gorian calendar]
1a040 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20  .system.  It is 
1a050 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61  also assumed tha
1a060 74 20 65 76 65 72 79 0a 64 61 79 20 69 73 20 65  t every.day is e
1a070 78 61 63 74 6c 79 20 38 36 34 30 30 20 73 65 63  xactly 86400 sec
1a080 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e  onds in duration
1a090 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
1a0a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a0b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a0c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a0d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a0e0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
1a0f0 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46  ion {Aggregate F
1a100 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e  unctions} aggfun
1a110 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f 74  c {*aggfunc}.</t
1a120 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67  cl>..<p>.The agg
1a130 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1a140 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65   shown below are
1a150 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65   available by de
1a160 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e  fault.  Addition
1a170 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66 75 6e  al.aggregate fun
1a180 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69  ctions written i
1a190 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64 65 64  n C may be added
1a1a0 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c   using the .[sql
1a1b0 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
1a1c0 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e  tion()]</a>.API.
1a1d0 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e  </p>..<p>.^In an
1a1e0 79 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  y aggregate func
1a1f0 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20  tion that takes 
1a200 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
1a210 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74  t, that argument
1a220 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64  .can be preceded
1a230 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20   by the keyword 
1a240 44 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73  DISTINCT.  ^In s
1a250 75 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69  uch cases, dupli
1a260 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72  cate.elements ar
1a270 65 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72  e filtered befor
1a280 65 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 69  e being passed i
1a290 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74  nto the aggregat
1a2a0 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72  e function..^For
1a2b0 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75   example, the fu
1a2c0 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69  nction "count(di
1a2d0 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20  stinct X)" will 
1a2e0 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
1a2f0 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61  r.of distinct va
1a300 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58  lues of column X
1a310 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
1a320 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
1a330 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20  non-null.values 
1a340 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70  in column X..</p
1a350 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  >..<table border
1a360 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31  =0 cellpadding=1
1a370 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66  0>.<tcl>.funcdef
1a380 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76 67 20   {avg(X)} {*avg 
1a390 7b 61 76 67 28 29 20 61 67 67 72 65 67 61 74 65  {avg() aggregate
1a3a0 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1a3b0 5e 54 68 65 20 61 76 67 28 29 20 66 75 6e 63 74  ^The avg() funct
1a3c0 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
1a3d0 65 20 61 76 65 72 61 67 65 20 76 61 6c 75 65 20  e average value 
1a3e0 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  of all non-NULL 
1a3f0 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20  <i>X</i> within 
1a400 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53 74 72  a.  group.  ^Str
1a410 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c  ing and BLOB val
1a420 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  ues that do not 
1a430 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72  look like number
1a440 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70 72 65  s are.  interpre
1a450 74 65 64 20 61 73 20 30 2e 0a 20 20 5e 54 68 65  ted as 0..  ^The
1a460 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29   result of avg()
1a470 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f   is always a flo
1a480 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
1a490 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61  e as long as.  a
1a4a0 74 20 74 68 65 72 65 20 69 73 20 61 74 20 6c 65  t there is at le
1a4b0 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c  ast one non-NULL
1a4c0 20 69 6e 70 75 74 20 65 76 65 6e 20 69 66 20 61   input even if a
1a4d0 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72 65 20  ll.  inputs are 
1a4e0 69 6e 74 65 67 65 72 73 2e 20 20 5e 54 68 65 20  integers.  ^The 
1a4f0 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20  result of avg() 
1a500 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f  is NULL if and o
1a510 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65 20 61  nly if.  there a
1a520 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  re no non-NULL i
1a530 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63  nputs.  .}..func
1a540 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f  def {count(X) co
1a550 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20  unt(*)} {*count 
1a560 7b 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61  {count() aggrega
1a570 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
1a580 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 58 29 20    ^The count(X) 
1a590 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1a5a0 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68  .  a count of th
1a5b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65  e number of time
1a5c0 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69  s.  that <i>X</i
1a5d0 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e  > is not NULL in
1a5e0 20 61 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20   a group.  ^The 
1a5f0 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f  count(*) functio
1a600 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61 72 67  n.  (with no arg
1a610 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e 73 20  uments) returns 
1a620 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
1a630 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
1a640 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65  group..}..funcde
1a650 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  f {group_concat(
1a660 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  X) group_concat(
1a670 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70  X,Y)} {.  *group
1a680 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63  _concat {group_c
1a690 6f 6e 63 61 74 28 29 20 61 67 67 72 65 67 61 74  oncat() aggregat
1a6a0 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a  e function}.} {.
1a6b0 20 20 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e    ^The group_con
1a6c0 63 61 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  cat() function r
1a6d0 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e  eturns.  a strin
1a6e0 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20 63  g which is the c
1a6f0 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a  oncatenation of.
1a700 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76    all non-NULL v
1a710 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69  alues of <i>X</i
1a720 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d 65 74 65  >.  ^If paramete
1a730 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72  r <i>Y</i> is pr
1a740 65 73 65 6e 74 20 74 68 65 6e 0a 20 20 69 74 20  esent then.  it 
1a750 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 73  is used as the s
1a760 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74 77 65  eparator.  betwe
1a770 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  en instances of 
1a780 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f  <i>X</i>.  ^A co
1a790 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75 73 65  mma (",") is use
1a7a0 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74  d as the separat
1a7b0 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e  or.  if <i>Y</i>
1a7c0 20 69 73 20 6f 6d 69 74 74 65 64 2e 20 20 54 68   is omitted.  Th
1a7d0 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63  e order of the c
1a7e0 6f 6e 63 61 74 65 6e 61 74 65 64 20 65 6c 65 6d  oncatenated elem
1a7f0 65 6e 74 73 20 69 73 0a 20 20 61 72 62 69 74 72  ents is.  arbitr
1a800 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ary..}..funcdef 
1a810 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67  {max(X)} {*maxAg
1a820 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b  gFunc *agg_max {
1a830 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20  max() aggregate 
1a840 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
1a850 54 68 65 20 6d 61 78 28 29 20 61 67 67 72 65 67  The max() aggreg
1a860 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  ate function.  r
1a870 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d  eturns the maxim
1a880 75 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20  um value of all 
1a890 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
1a8a0 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69  oup..  ^The maxi
1a8b0 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65  mum value is the
1a8c0 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c   value that woul
1a8d0 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 6c 61  d be returned la
1a8e0 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52  st in an.  ORDER
1a8f0 20 42 59 20 6f 6e 20 74 68 65 20 73 61 6d 65 20   BY on the same 
1a900 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67  column.  ^Aggreg
1a910 61 74 65 20 6d 61 78 28 29 20 72 65 74 75 72 6e  ate max() return
1a920 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64  s NULL .  if and
1a930 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61   only if there a
1a940 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  re no non-NULL v
1a950 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
1a960 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  up..}..funcdef {
1a970 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67  min(X)} {*minAgg
1a980 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d  Func *agg_min {m
1a990 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20 66  in() aggregate f
1a9a0 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1a9b0 68 65 20 6d 69 6e 28 29 20 61 67 67 72 65 67 61  he min() aggrega
1a9c0 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  te function.  re
1a9d0 74 75 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75  turns the minimu
1a9e0 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  m non-NULL value
1a9f0 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69   of all values i
1aa00 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e  n the group..  ^
1aa10 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75  The minimum valu
1aa20 65 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e  e is the first n
1aa30 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68  on-NULL value th
1aa40 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61 72 0a  at would appear.
1aa50 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59    in an ORDER BY
1aa60 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a   of the column..
1aa70 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 69 6e    ^Aggregate min
1aa80 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20  () returns NULL 
1aa90 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74  if and only if t
1aaa0 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
1aab0 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e  NULL.  values in
1aac0 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66   the group..}..f
1aad0 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29 20 74  uncdef {sum(X) t
1aae0 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75  otal(X)} {.  *su
1aaf0 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61  mFunc *sum *tota
1ab00 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67 72 65  l.  {sum() aggre
1ab10 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20  gate function}. 
1ab20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67   {total() aggreg
1ab30 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20  ate function}.} 
1ab40 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28 29 20 61  {.  ^The sum() a
1ab50 6e 64 20 74 6f 74 61 6c 28 29 20 61 67 67 72 65  nd total() aggre
1ab60 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20  gate functions. 
1ab70 20 72 65 74 75 72 6e 20 73 75 6d 20 6f 66 20 61   return sum of a
1ab80 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  ll non-NULL valu
1ab90 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
1aba0 0a 20 20 5e 49 66 20 74 68 65 72 65 20 61 72 65  .  ^If there are
1abb0 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70   no non-NULL inp
1abc0 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d  ut rows then sum
1abd0 28 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c  () returns.  NUL
1abe0 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65  L but total() re
1abf0 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c  turns 0.0..  NUL
1ac00 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c  L is not normall
1ac10 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75  y a helpful resu
1ac20 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f  lt for the sum o
1ac30 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20  f no rows.  but 
1ac40 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64  the SQL standard
1ac50 20 72 65 71 75 69 72 65 73 20 69 74 20 61 6e 64   requires it and
1ac60 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51   most other.  SQ
1ac70 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
1ac80 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d  es implement sum
1ac90 28 29 20 74 68 61 74 20 77 61 79 20 73 6f 20 53  () that way so S
1aca0 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e  QLite does it in
1acb0 20 74 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20   the.  same way 
1acc0 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63  in order to be c
1acd0 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65  ompatible.   The
1ace0 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f   non-standard to
1acf0 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  tal() function. 
1ad00 20 69 73 20 70 72 6f 76 69 64 65 64 20 61 73 20   is provided as 
1ad10 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79  a convenient way
1ad20 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20   to work around 
1ad30 74 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62  this design prob
1ad40 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c  lem.  in the SQL
1ad50 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a   language.</p>..
1ad60 20 20 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74    <p>^The result
1ad70 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61   of total() is a
1ad80 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67  lways a floating
1ad90 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20   point value..  
1ada0 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 73  ^The result of s
1adb0 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65 67  um() is an integ
1adc0 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c 20  er value if all 
1add0 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20  non-NULL inputs 
1ade0 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20 20  are integers..  
1adf0 5e 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f  ^If any input to
1ae00 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65   sum() is neithe
1ae10 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  r an integer or 
1ae20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75  a NULL.  then su
1ae30 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c  m() returns a fl
1ae40 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
1ae50 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68 74  ue.  which might
1ae60 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d 61   be an approxima
1ae70 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75 65  tion to the true
1ae80 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e   sum.</p>..  <p>
1ae90 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f  ^Sum() will thro
1aea0 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76  w an "integer ov
1aeb0 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f  erflow" exceptio
1aec0 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a  n if all inputs.
1aed0 20 20 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f    are integers o
1aee0 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20  r NULL.  and an 
1aef0 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
1af00 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20 70   occurs at any p
1af10 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20  oint during the 
1af20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e  computation..  ^
1af30 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68  Total() never th
1af40 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20  rows an integer 
1af50 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63  overflow..}.</tc
1af60 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63  l>.</table>..<tc
1af70 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
1af80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1af90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1afa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1afb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1afc0 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54  #.Section INSERT
1afd0 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54 20   insert {INSERT 
1afe0 2a 49 4e 53 45 52 54 73 7d 0a 0a 42 75 62 62 6c  *INSERTs}..Bubbl
1aff0 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72 74 2d  eDiagram insert-
1b000 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
1b010 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73 74 61  p>The INSERT sta
1b020 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20  tement comes in 
1b030 74 68 72 65 65 20 62 61 73 69 63 20 66 6f 72 6d  three basic form
1b040 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  s.  .<ul>.<li><p
1b050 3e 5e 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  >^The first form
1b060 20 28 77 69 74 68 20 74 68 65 20 22 56 41 4c 55   (with the "VALU
1b070 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65  ES" keyword) cre
1b080 61 74 65 73 20 61 20 73 69 6e 67 6c 65 20 6e 65  ates a single ne
1b090 77 20 72 6f 77 20 69 6e 0a 61 6e 20 65 78 69 73  w row in.an exis
1b0a0 74 69 6e 67 20 74 61 62 6c 65 2e 20 5e 49 66 20  ting table. ^If 
1b0b0 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69  no column-list i
1b0c0 73 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  s specified then
1b0d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 76   the number of.v
1b0e0 61 6c 75 65 73 20 6d 75 73 74 20 62 65 20 74 68  alues must be th
1b0f0 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75  e same as the nu
1b100 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1b110 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 49  in the table. ^I
1b120 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68 65 20  n this case.the 
1b130 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 74  result of evalut
1b140 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  ing the left-mos
1b150 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  t expression in 
1b160 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74 20  the VALUES list 
1b170 69 73 20 0a 69 6e 73 65 72 74 65 64 20 69 6e 74  is .inserted int
1b180 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  o the left-most 
1b190 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65  column of the ne
1b1a0 77 20 72 6f 77 2c 20 61 6e 64 20 73 6f 20 6f 6e  w row, and so on
1b1b0 2e 20 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d 6c  . ^If a.column-l
1b1c0 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64  ist is specified
1b1d0 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  , then the numbe
1b1e0 72 20 6f 66 20 76 61 6c 75 65 73 20 6d 75 73 74  r of values must
1b1f0 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65   match the numbe
1b200 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63  r of.specified c
1b210 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66  olumns. ^Each of
1b220 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d   the named colum
1b230 6e 73 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f  ns of the new ro
1b240 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 0a 77  w is populated.w
1b250 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 73 20  ith the results 
1b260 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
1b270 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1b280 56 41 4c 55 45 53 20 65 78 70 72 65 73 73 69 6f  VALUES expressio
1b290 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e  n. ^Table.column
1b2a0 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70  s that do not ap
1b2b0 70 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6c 75  pear in the colu
1b2c0 6d 6e 20 6c 69 73 74 20 61 72 65 20 70 6f 70 75  mn list are popu
1b2d0 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 20 64  lated with the d
1b2e0 65 66 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61  efault.column va
1b2f0 6c 75 65 20 28 73 70 65 63 69 66 69 65 64 20 61  lue (specified a
1b300 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43 52  s part of the CR
1b310 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
1b320 6d 65 6e 74 29 2c 20 6f 72 20 77 69 74 68 20 4e  ment), or with N
1b330 55 4c 4c 20 69 66 0a 6e 6f 20 64 65 66 61 75 6c  ULL if.no defaul
1b340 74 20 76 61 6c 75 65 20 69 73 20 73 70 65 63 69  t value is speci
1b350 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68  fied...<li><p>Th
1b360 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66  e second form of
1b370 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74   the INSERT stat
1b380 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61  ement contains a
1b390 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1b3a0 74 0a 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56  t.instead of a V
1b3b0 41 4c 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41  ALUES clause. ^A
1b3c0 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e   new entry is in
1b3d0 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
1b3e0 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72  table for each.r
1b3f0 6f 77 20 6f 66 20 64 61 74 61 20 72 65 74 75 72  ow of data retur
1b400 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e 67  ned by executing
1b410 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
1b420 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c  ement. ^If a col
1b430 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63  umn-list is.spec
1b440 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65  ified, the numbe
1b450 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1b460 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
1b470 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65  e SELECT must be
1b480 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65   the same.as the
1b490 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73   number of items
1b4a0 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c   in the column-l
1b4b0 69 73 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ist. ^Otherwise,
1b4c0 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69   if no column-li
1b4d0 73 74 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c  st is.specified,
1b4e0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1b4f0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
1b500 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45  sult of the SELE
1b510 43 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73  CT must be the s
1b520 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65  ame.as the numbe
1b530 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1b540 74 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20  the table. ^Any 
1b550 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1b560 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 63 6f 6d 70  , including.comp
1b570 6f 75 6e 64 20 53 45 4c 45 43 54 73 20 61 6e 64  ound SELECTs and
1b580 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1b590 74 73 20 77 69 74 68 20 4f 52 44 45 52 20 42 59  ts with ORDER BY
1b5a0 20 61 6e 64 2f 6f 72 20 4c 49 4d 49 54 20 63 6c   and/or LIMIT cl
1b5b0 61 75 73 65 73 2c 20 0a 6d 61 79 20 62 65 20 75  auses, .may be u
1b5c0 73 65 64 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  sed in an INSERT
1b5d0 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68   statement of th
1b5e0 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70  is form...<li><p
1b5f0 3e 54 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20  >The third form 
1b600 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  of an INSERT sta
1b610 74 65 6d 65 6e 74 20 69 73 20 77 69 74 68 20 44  tement is with D
1b620 45 46 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e  EFAULT VALUES..^
1b630 28 54 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20  (The INSERT ... 
1b640 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20 73  DEFAULT VALUES s
1b650 74 61 74 65 6d 65 6e 74 20 69 6e 73 65 72 74 73  tatement inserts
1b660 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f   a single new ro
1b670 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61 6d 65 64  w into the.named
1b680 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61 63 68 20   table.)^ ^Each 
1b690 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65  column of the ne
1b6a0 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74  w row is populat
1b6b0 65 64 20 77 69 74 68 20 69 74 73 20 64 65 66 61  ed with its defa
1b6c0 75 6c 74 20 76 61 6c 75 65 2c 0a 6f 72 20 77 69  ult value,.or wi
1b6d0 74 68 20 61 20 4e 55 4c 4c 20 69 66 20 6e 6f 20  th a NULL if no 
1b6e0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73  default value is
1b6f0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
1b700 72 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  rt of the column
1b710 0a 64 65 66 69 6e 69 74 69 6f 6e 20 69 6e 20 74  .definition in t
1b720 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
1b730 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c  statement...</ul
1b740 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f  >..<p>^The optio
1b750 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  nal conflict-cla
1b760 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73  use allows the s
1b770 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
1b780 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63  an alternative.c
1b790 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
1b7a0 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
1b7b0 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64  gorithm to use d
1b7c0 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 49  uring this one I
1b7d0 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53  NSERT command..S
1b7e0 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74  ee the section t
1b7f0 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49  itled.[ON CONFLI
1b800 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  CT] for addition
1b810 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
1b820 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  For compatibilit
1b830 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74  y with MySQL, ^t
1b840 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f 77 73  he parser allows
1b850 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 0a   the use of the.
1b860 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c  single keyword <
1b870 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70  a href="lang_rep
1b880 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41  lace.html">REPLA
1b890 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c  CE</a> as an .al
1b8a0 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52 54 20  ias for "INSERT 
1b8b0 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70  OR REPLACE"...<p
1b8c0 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  >^(The optional 
1b8d0 22 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d  "<i>database-nam
1b8e0 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70  e</i><b>.</b>" p
1b8f0 72 65 66 69 78 20 6f 6e 20 74 68 65 20 3c 69 3e  refix on the <i>
1b900 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 69  table-name</i>.i
1b910 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74 6f  s support for to
1b920 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
1b930 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29  tatements only.)
1b940 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e 61  ^  ^The table na
1b950 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75 61  me must be.unqua
1b960 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45 52  lified for INSER
1b970 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
1b980 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 5b  t occur within [
1b990 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
1b9a0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d  statements..^Sim
1b9b0 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45 46  ilarly, the "DEF
1b9c0 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72  AULT VALUES" for
1b9d0 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20  m of the INSERT 
1b9e0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75 70  statement is sup
1b9f0 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c  ported for.top-l
1ba00 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
1ba10 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20  ements only and 
1ba20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20 73  not for INSERT s
1ba30 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
1ba40 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a  .triggers..<p>..
1ba50 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1ba60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ba70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ba80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ba90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1baa0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e  ####.Section {ON
1bab0 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1bac0 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e  } conflict {{con
1bad0 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f  flict clause} {O
1bae0 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42 75  N CONFLICT}}..Bu
1baf0 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e 66  bbleDiagram conf
1bb00 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63  lict-clause.</tc
1bb10 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f  l>..<p>The ON CO
1bb20 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
1bb30 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65 20   not a separate 
1bb40 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74  SQL command.  It
1bb50 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61   is a.non-standa
1bb60 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  rd clause that c
1bb70 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61 6e  an appear in man
1bb80 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d  y other SQL comm
1bb90 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76 65  ands..It is give
1bba0 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69 6f  n its own sectio
1bbb0 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d 65  n in this docume
1bbc0 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69 73  nt because it is
1bbd0 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74 61   not.part of sta
1bbe0 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74 68  ndard SQL and th
1bbf0 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f  erefore might no
1bc00 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f  t be familiar.</
1bc10 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74  p>..<p>^The synt
1bc20 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f  ax for the ON CO
1bc30 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
1bc40 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20   as shown above 
1bc50 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20 54  for.the CREATE T
1bc60 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e  ABLE command.  ^
1bc70 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20 61  For the INSERT a
1bc80 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e  nd.UPDATE comman
1bc90 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 73  ds, the keywords
1bca0 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61   "ON CONFLICT" a
1bcb0 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20 22  re replaced by "
1bcc0 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65 20  OR" so that.the 
1bcd0 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f 72  syntax reads mor
1bce0 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f  e naturally.  Fo
1bcf0 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65  r example, inste
1bd00 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e  ad of."INSERT ON
1bd10 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45   CONFLICT IGNORE
1bd20 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45 52  " we have "INSER
1bd30 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68  T OR IGNORE"..Th
1bd40 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e 67  e keywords chang
1bd50 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69 6e  e but the meanin
1bd60 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65 20  g of the clause 
1bd70 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74 68  is the same.eith
1bd80 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  er way.</p>..<p>
1bd90 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
1bda0 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20 74  clause applies t
1bdb0 6f 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 4e 55  o UNIQUE, NOT NU
1bdc0 4c 4c 2c 20 61 6e 64 20 43 48 45 43 4b 0a 63 6f  LL, and CHECK.co
1bdd0 6e 73 74 72 61 69 6e 74 73 20 28 61 6e 64 20 74  nstraints (and t
1bde0 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  o PRIMARY KEY co
1bdf0 6e 73 74 72 61 69 6e 74 73 20 77 68 69 63 68 20  nstraints which 
1be00 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
1be10 20 0a 6f 66 20 74 68 69 73 20 73 65 63 74 69 6f   .of this sectio
1be20 6e 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 74  n are the same t
1be30 68 69 6e 67 20 61 73 20 55 4e 49 51 55 45 20 63  hing as UNIQUE c
1be40 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 54 68 65  onstraints)..The
1be50 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
1be60 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74 0a  orithm does not.
1be70 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49 47  apply to [FOREIG
1be80 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
1be90 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66 69  s]..There are fi
1bea0 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ve conflict reso
1beb0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
1bec0 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42 41   choices:.ROLLBA
1bed0 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c 2c  CK, ABORT, FAIL,
1bee0 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50   IGNORE, and REP
1bef0 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61 75  LACE..^The defau
1bf00 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
1bf10 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
1bf20 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73   is ABORT.  This
1bf30 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d 65  .is what they me
1bf40 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64  an:</p>..<dl>.<d
1bf50 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62  t><b>ROLLBACK</b
1bf60 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
1bf70 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
1bf80 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
1bf90 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
1bfa0 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65 73  the ROLLBACK.res
1bfb0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1bfc0 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72  m aborts the cur
1bfd0 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65  rent SQL stateme
1bfe0 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49 54  nt with.an SQLIT
1bff0 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72  E_CONSTRAINT err
1c000 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61 63  or and rolls bac
1c010 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
1c020 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e  ansaction..^If n
1c030 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
1c040 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20 74  .active (other t
1c050 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20  han the implied 
1c060 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74  transaction that
1c070 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65   is created on e
1c080 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68  very.command) th
1c090 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
1c0a0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
1c0b0 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73  ithm works the s
1c0c0 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52 54  ame as the.ABORT
1c0d0 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c   algorithm.</p><
1c0e0 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f  /dd>..<dt><b>ABO
1c0f0 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RT</b></dt>.<dd>
1c100 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
1c110 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
1c120 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1c130 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a 72  urs, the ABORT.r
1c140 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
1c150 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63  thm aborts the c
1c160 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
1c170 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51 4c  ment.with an SQL
1c180 49 54 45 5f 43 4f 4e 53 54 52 41 49 54 20 65 72  ITE_CONSTRAIT er
1c190 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20 6f 75  ror and backs ou
1c1a0 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d 61  t any changes.ma
1c1b0 64 65 20 62 79 20 74 68 65 20 63 75 72 72 65 6e  de by the curren
1c1c0 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 3b  t SQL statement;
1c1d0 20 62 75 74 20 63 68 61 6e 67 65 73 20 63 61 75   but changes cau
1c1e0 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53 51 4c  sed.by prior SQL
1c1f0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
1c200 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61 6e  in the same tran
1c210 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72 65 73  saction are pres
1c220 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a 74 72  erved and the.tr
1c230 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e  ansaction remain
1c240 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73 20 69  s active..This i
1c250 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 65  s the default be
1c260 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65 20 62  havior and the b
1c270 65 68 61 76 69 6f 72 20 70 72 6f 73 63 72 69 62  ehavior proscrib
1c280 65 64 20 74 68 65 20 53 51 4c 0a 73 74 61 6e 64  ed the SQL.stand
1c290 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  ard.</p></dd>..<
1c2a0 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f  dt><b>FAIL</b></
1c2b0 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65  dt>.<dd><p> ^Whe
1c2c0 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20  n an applicable 
1c2d0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1c2e0 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
1c2f0 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e   FAIL.resolution
1c300 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74   algorithm abort
1c310 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  s the current SQ
1c320 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  L statement with
1c330 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54   an.SQLITE_CONST
1c340 52 41 49 4e 54 20 65 72 72 6f 72 2e 20 20 5e 42  RAINT error.  ^B
1c350 75 74 20 74 68 65 20 46 41 49 4c 20 72 65 73 6f  ut the FAIL reso
1c360 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a  lution does not.
1c370 62 61 63 6b 20 6f 75 74 20 70 72 69 6f 72 20 63  back out prior c
1c380 68 61 6e 67 65 73 20 6f 66 20 74 68 65 20 53 51  hanges of the SQ
1c390 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  L statement that
1c3a0 20 66 61 69 6c 65 64 20 6e 6f 72 20 64 6f 65 73   failed nor does
1c3b0 0a 69 74 20 65 6e 64 20 74 68 65 20 74 72 61 6e  .it end the tran
1c3c0 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78  saction..^For ex
1c3d0 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44  ample, if an UPD
1c3e0 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e  ATE.statement en
1c3f0 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73  countered a cons
1c400 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1c410 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f   on the 100th ro
1c420 77 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70  w that.it attemp
1c430 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68  ts to update, th
1c440 65 6e 20 74 68 65 20 66 69 72 73 74 20 39 39 20  en the first 99 
1c450 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65 20  row changes are 
1c460 70 72 65 73 65 72 76 65 64 0a 62 75 74 20 63 68  preserved.but ch
1c470 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30  anges to rows 10
1c480 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76  0 and beyond nev
1c490 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64  er occur.</p></d
1c4a0 64 3e 0a 0a 28 3c 64 74 3e 3c 62 3e 49 47 4e 4f  d>..(<dt><b>IGNO
1c4b0 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RE</b></dt>.<dd>
1c4c0 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
1c4d0 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
1c4e0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1c4f0 75 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f 52 45  urs, .the IGNORE
1c500 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1c510 72 69 74 68 6d 20 73 6b 69 70 73 20 74 68 65 20  rithm skips the 
1c520 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e  one row that con
1c530 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72  tains.the constr
1c540 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
1c550 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 70 72 6f  nd continues pro
1c560 63 65 73 73 69 6e 67 20 73 75 62 73 65 71 75 65  cessing subseque
1c570 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68 65 20 53  nt rows.of the S
1c580 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 73 20  QL statement as 
1c590 69 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e 74 20  if nothing went 
1c5a0 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72 6f 77  wrong..Other row
1c5b0 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  s before and aft
1c5c0 65 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a  er the row that.
1c5d0 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f  contained the co
1c5e0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1c5f0 6f 6e 20 61 72 65 20 69 6e 73 65 72 74 65 64 20  on are inserted 
1c600 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61  or updated.norma
1c610 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72 20 69  lly. ^No error i
1c620 73 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20  s returned when 
1c630 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66 6c  the IGNORE confl
1c640 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61  ict resolution.a
1c650 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
1c660 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  .</p></dd>..<dt>
1c670 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f  <b>REPLACE</b></
1c680 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65  dt>.<dd><p> ^Whe
1c690 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  n a UNIQUE const
1c6a0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
1c6b0 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c  occurs, the REPL
1c6c0 41 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a 64 65  ACE algorithm.de
1c6d0 6c 65 74 65 73 20 70 72 65 2d 65 78 69 73 74 69  letes pre-existi
1c6e0 6e 67 20 72 6f 77 73 20 74 68 61 74 20 61 72 65  ng rows that are
1c6f0 20 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f 6e   causing the con
1c700 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
1c710 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73 65 72  n.prior to inser
1c720 74 69 6e 67 20 6f 72 20 75 70 64 61 74 69 6e 67  ting or updating
1c730 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
1c740 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64   and the command
1c750 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78 65 63   continues .exec
1c760 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 0a  uting normally..
1c770 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ^If a NOT NULL c
1c780 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
1c790 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
1c7a0 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
1c7b0 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 72 65 70 6c  .resolution repl
1c7c0 61 63 65 73 20 74 68 65 20 4e 55 4c 4c 20 76 61  aces the NULL va
1c7d0 6c 75 65 20 77 69 74 68 0a 68 65 20 64 65 66 61  lue with.he defa
1c7e0 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ult value for th
1c7f0 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66  at column, or if
1c800 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20   the column has 
1c810 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65  no default.value
1c820 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54  , then the ABORT
1c830 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73   algorithm is us
1c840 65 64 2e 0a 5e 49 66 20 61 20 43 48 45 43 4b 20  ed..^If a CHECK 
1c850 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1c860 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
1c870 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
1c880 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67  t resolution.alg
1c890 6f 72 69 74 68 6d 20 61 6c 77 61 79 73 20 77 6f  orithm always wo
1c8a0 72 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e 3c  rks like ABORT.<
1c8b0 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68  /p>..<p>^When th
1c8c0 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69  e REPLACE confli
1c8d0 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74  ct resolution st
1c8e0 72 61 74 65 67 79 20 64 65 6c 65 74 65 73 20 72  rategy deletes r
1c8f0 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ows in order to.
1c900 73 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72  satisfy a constr
1c910 61 69 6e 74 2c 20 5b 43 52 45 41 54 45 20 54 52  aint, [CREATE TR
1c920 49 47 47 45 52 20 7c 20 64 65 6c 65 74 65 20 74  IGGER | delete t
1c930 72 69 67 67 65 72 73 5d 20 66 69 72 65 20 69 66  riggers] fire if
1c940 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72 65   and only if.[re
1c950 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73  cursive_triggers
1c960 20 70 72 61 67 6d 61 20 7c 20 72 65 63 75 72 73   pragma | recurs
1c970 69 76 65 20 74 72 69 67 67 65 72 73 5d 20 61 72  ive triggers] ar
1c980 65 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a  e enabled.</p>..
1c990 3c 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65 33  <p>^The [sqlite3
1c9a0 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20 75  _update_hook | u
1c9b0 70 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20 6e  pdate hook] is n
1c9c0 6f 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20 72  ot invoked for r
1c9d0 6f 77 73 20 74 68 61 74 0a 61 72 65 20 64 65 6c  ows that.are del
1c9e0 65 74 65 64 20 62 79 20 74 68 65 20 52 45 50 4c  eted by the REPL
1c9f0 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACE conflict res
1ca00 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79  olution strategy
1ca10 2e 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45 50  .  ^Nor does.REP
1ca20 4c 41 43 45 20 69 6e 63 72 65 6d 65 6e 74 20 74  LACE increment t
1ca30 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e  he [sqlite3_chan
1ca40 67 65 73 20 7c 20 63 68 61 6e 67 65 20 63 6f 75  ges | change cou
1ca50 6e 74 65 72 5d 2e 0a 54 68 65 20 65 78 63 65 70  nter]..The excep
1ca60 74 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72 73  tional behaviors
1ca70 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73   defined in this
1ca80 20 70 61 72 61 67 72 61 70 68 20 6d 69 67 68 74   paragraph might
1ca90 20 63 68 61 6e 67 65 20 0a 69 6e 20 61 20 66 75   change .in a fu
1caa0 74 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70  ture release.</p
1cab0 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  >.</dl>..<p>^The
1cac0 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69   algorithm speci
1cad0 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63  fied in the OR c
1cae0 6c 61 75 73 65 20 6f 66 20 61 20 49 4e 53 45 52  lause of a INSER
1caf0 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72  T or UPDATE.over
1cb00 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69  rides any algori
1cb10 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
1cb20 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e   a CREATE TABLE.
1cb30 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68  .^If no algorith
1cb40 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  m is specified a
1cb50 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f  nywhere, the ABO
1cb60 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  RT algorithm is 
1cb70 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  used.</p>..<tcl>
1cb80 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1cb90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cbb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cbc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
1cbd0 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20  Section REINDEX 
1cbe0 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a  reindex REINDEX.
1cbf0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
1cc00 65 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c 2f  eindex-stmt 1.</
1cc10 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45  tcl>..<p>^The RE
1cc20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73  INDEX command is
1cc30 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20   used to delete 
1cc40 61 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64  and recreate ind
1cc50 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63  ices from scratc
1cc60 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66 75  h..This is usefu
1cc70 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e  l when the defin
1cc80 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61  ition of a colla
1cc90 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61  tion sequence ha
1cca0 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a  s changed..</p>.
1ccb0 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e  .<p>^If the REIN
1ccc0 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 6e  DEX keyword is n
1ccd0 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ot followed by a
1cce0 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65   collation-seque
1ccf0 6e 63 65 20 6f 72 20 64 61 74 61 62 61 73 65 20  nce or database 
1cd00 0a 6f 62 6a 65 63 74 20 69 64 65 6e 74 69 66 69  .object identifi
1cd10 65 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  er, then all ind
1cd20 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61  ices in all atta
1cd30 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
1cd40 72 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e  re rebuilt...<p>
1cd50 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20  ^If the REINDEX 
1cd60 6b 65 79 77 6f 72 64 20 69 73 20 66 6f 6c 6c 6f  keyword is follo
1cd70 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69  wed by a collati
1cd80 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on-sequence name
1cd90 2c 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64 69 63  , then.all indic
1cda0 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68  es in all attach
1cdb0 65 64 20 64 61 74 61 62 61 73 65 73 20 74 68 61  ed databases tha
1cdc0 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20  t use the named 
1cdd0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1cde0 63 65 73 0a 61 72 65 20 72 65 63 72 65 61 74 65  ces.are recreate
1cdf0 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20  d. ..<p>^Or, if 
1ce00 74 68 65 20 61 72 67 75 6d 65 6e 74 20 61 74 74  the argument att
1ce10 61 63 68 65 64 20 74 6f 20 74 68 65 20 52 45 49  ached to the REI
1ce20 4e 44 45 58 20 69 64 65 6e 74 69 66 69 65 73 20  NDEX identifies 
1ce30 61 20 73 70 65 63 69 66 69 63 20 0a 64 61 74 61  a specific .data
1ce40 62 61 73 65 20 74 61 62 6c 65 2c 20 74 68 65 6e  base table, then
1ce50 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 61 74 74   all indices att
1ce60 61 63 68 65 64 20 74 6f 20 74 68 65 20 64 61 74  ached to the dat
1ce70 61 62 61 73 65 20 74 61 62 6c 65 20 61 72 65 20  abase table are 
1ce80 72 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20 69 74  rebuilt. .^If it
1ce90 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70   identifies a sp
1cea0 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20  ecific database 
1ceb0 69 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75 73 74  index, then just
1cec0 20 74 68 61 74 20 69 6e 64 65 78 20 69 73 20 72   that index is r
1ced0 65 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e 5e 49  ecreated...<p>^I
1cee0 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61 73 65  f no <i>database
1cef0 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73 70 65  -name</i> is spe
1cf00 63 69 66 69 65 64 20 61 6e 64 20 74 68 65 72 65  cified and there
1cf10 20 65 78 69 73 74 73 20 62 6f 74 68 20 61 20 74   exists both a t
1cf20 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 61 6e  able or.index an
1cf30 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  d a collation se
1cf40 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 73 70  quence of the sp
1cf50 65 63 69 66 69 65 64 20 6e 61 6d 65 2c 20 53 51  ecified name, SQ
1cf60 4c 69 74 65 20 69 6e 74 65 72 70 72 65 74 73 0a  Lite interprets.
1cf70 74 68 69 73 20 61 73 20 61 20 72 65 71 75 65 73  this as a reques
1cf80 74 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65  t to rebuild the
1cf90 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 75 73   indices that us
1cfa0 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c  e the named coll
1cfb0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e 0a  ation sequence..
1cfc0 54 68 69 73 20 61 6d 62 69 67 75 69 74 79 20 69  This ambiguity i
1cfd0 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6d 61 79  n the syntax may
1cfe0 20 62 65 20 61 76 6f 69 64 65 64 20 62 79 20 61   be avoided by a
1cff0 6c 77 61 79 73 20 73 70 65 63 69 66 79 69 6e 67  lways specifying
1d000 20 61 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e   a.<i>database-n
1d010 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65 69  ame</i> when rei
1d020 6e 64 65 78 69 6e 67 20 61 20 73 70 65 63 69 66  ndexing a specif
1d030 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ic table or inde
1d040 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  x...<tcl>.######
1d050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d090 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1d0a0 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63  n REPLACE replac
1d0b0 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c  e REPLACE..</tcl
1d0c0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41  >..<p>^The REPLA
1d0d0 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e  CE command is an
1d0e0 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 22   alias for the "
1d0f0 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49  [ON CONFLICT | I
1d100 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45  NSERT OR REPLACE
1d110 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74 68  ]".variant of th
1d120 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61  e [INSERT] comma
1d130 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61 73  nd.  .This alias
1d140 20 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f 72   is provided for
1d150 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 6f   compatibility o
1d160 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
1d170 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65 20  e engines.  See 
1d180 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f  the .[INSERT] co
1d190 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74  mmand documentat
1d1a0 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ion for addition
1d1b0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  al information.<
1d1c0 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23  /p>  ..<tcl>.###
1d1d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d1e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d1f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d210 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1d220 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c 65  tion SELECT sele
1d230 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72 79  ct {SELECT query
1d240 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
1d250 20 73 65 6c 65 63 74 2d 73 74 6d 74 20 31 0a 42   select-stmt 1.B
1d260 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c  ubbleDiagram sel
1d270 65 63 74 2d 63 6f 72 65 0a 42 75 62 62 6c 65 44  ect-core.BubbleD
1d280 69 61 67 72 61 6d 20 72 65 73 75 6c 74 2d 63 6f  iagram result-co
1d290 6c 75 6d 6e 0a 42 75 62 62 6c 65 44 69 61 67 72  lumn.BubbleDiagr
1d2a0 61 6d 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a 42  am join-source.B
1d2b0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6e  ubbleDiagram sin
1d2c0 67 6c 65 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c  gle-source.Bubbl
1d2d0 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 6f 70  eDiagram join-op
1d2e0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6a  .BubbleDiagram j
1d2f0 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 42  oin-constraint.B
1d300 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6f 72 64  ubbleDiagram ord
1d310 65 72 69 6e 67 2d 74 65 72 6d 0a 42 75 62 62 6c  ering-term.Bubbl
1d320 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75 6e  eDiagram compoun
1d330 64 2d 6f 70 65 72 61 74 6f 72 0a 3c 2f 74 63 6c  d-operator.</tcl
1d340 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43  >...<p>The SELEC
1d350 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  T statement is u
1d360 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  sed to query the
1d370 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a   database.  The.
1d380 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45  result of a SELE
1d390 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f  CT is zero or mo
1d3a0 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20  re rows of data 
1d3b0 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68  where each row.h
1d3c0 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65  as a fixed numbe
1d3d0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 0a  r of columns.  .
1d3e0 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73  .<p>The SELECT s
1d3f0 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
1d400 6d 6f 73 74 20 63 6f 6d 70 6c 69 63 61 74 65 64  most complicated
1d410 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20   command in the 
1d420 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 54 6f  SQL language..To
1d430 20 6d 61 6b 65 20 74 68 65 20 64 65 73 63 72 69   make the descri
1d440 70 74 69 6f 6e 20 65 61 73 69 65 72 20 74 6f 20  ption easier to 
1d450 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f 66 20  follow, some of 
1d460 74 68 65 20 70 61 73 73 61 67 65 73 20 62 65 6c  the passages bel
1d470 6f 77 20 64 65 73 63 72 69 62 65 0a 74 68 65 20  ow describe.the 
1d480 77 61 79 20 74 68 65 20 64 61 74 61 20 72 65 74  way the data ret
1d490 75 72 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43  urned by a SELEC
1d4a0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64  T statement is d
1d4b0 65 74 65 72 6d 69 6e 65 64 20 61 73 20 61 20 73  etermined as a s
1d4c0 65 72 69 65 73 20 6f 66 0a 73 74 65 70 73 2e 20  eries of.steps. 
1d4d0 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
1d4e0 74 6f 20 6b 65 65 70 20 69 6e 20 6d 69 6e 64 20  to keep in mind 
1d4f0 74 68 61 74 20 74 68 69 73 20 69 73 20 70 75 72  that this is pur
1d500 65 6c 79 20 69 6c 6c 75 73 74 72 61 74 69 76 65  ely illustrative
1d510 20 2d 0a 69 6e 20 70 72 61 63 74 69 63 65 20 6e   -.in practice n
1d520 65 69 74 68 65 72 20 53 51 4c 69 74 65 20 6e 6f  either SQLite no
1d530 72 20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20  r any other SQL 
1d540 65 6e 67 69 6e 65 20 69 73 20 72 65 71 75 69 72  engine is requir
1d550 65 64 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a 74 68  ed to follow .th
1d560 69 73 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  is or any other 
1d570 73 70 65 63 69 66 69 63 20 70 72 6f 63 65 73 73  specific process
1d580 2e 0a 0a 3c 68 33 3e 53 69 6d 70 6c 65 20 53 65  ...<h3>Simple Se
1d590 6c 65 63 74 20 50 72 6f 63 65 73 73 69 6e 67 3c  lect Processing<
1d5a0 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e  /h3>..<p>The syn
1d5b0 74 61 78 20 66 6f 72 20 61 20 73 69 6d 70 6c 65  tax for a simple
1d5c0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1d5d0 74 20 69 73 20 64 65 70 69 63 74 65 64 20 69 6e  t is depicted in
1d5e0 20 74 68 65 20 0a 5b 73 65 6c 65 63 74 2d 63 6f   the .[select-co
1d5f0 72 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  re syntax diagra
1d600 6d 5d 2e 20 47 65 6e 65 72 61 74 69 6e 67 20 74  m]. Generating t
1d610 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  he results of a 
1d620 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73 74  simple SELECT.st
1d630 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 73 65  atement is prese
1d640 6e 74 65 64 20 61 73 20 61 20 66 6f 75 72 20 73  nted as a four s
1d650 74 65 70 20 70 72 6f 63 65 73 73 20 69 6e 20 74  tep process in t
1d660 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 62  he description b
1d670 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c  elow:..<ol>.  <l
1d680 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75  i> <p>[FROM clau
1d690 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20  se] processing: 
1d6a0 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66  The input data f
1d6b0 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45  or the simple SE
1d6c0 4c 45 43 54 20 69 73 0a 20 20 20 20 20 20 20 64  LECT is.       d
1d6d0 65 74 65 72 6d 69 6e 65 64 2e 20 54 68 65 20 69  etermined. The i
1d6e0 6e 70 75 74 20 64 61 74 61 20 69 73 20 65 69 74  nput data is eit
1d6f0 68 65 72 20 69 6d 70 6c 69 63 69 74 6c 79 20 61  her implicitly a
1d700 20 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68   single row with
1d710 20 30 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e   0.       column
1d720 73 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6e  s (if there is n
1d730 6f 20 46 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f  o FROM clause) o
1d740 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  r is determined 
1d750 62 79 20 61 6e 61 6c 79 7a 69 6e 67 20 74 68 65  by analyzing the
1d760 0a 20 20 20 20 20 20 20 5b 6a 6f 69 6e 2d 73 6f  .       [join-so
1d770 75 72 63 65 20 73 79 6e 74 61 78 20 64 69 61 67  urce syntax diag
1d780 72 61 6d 7c 6a 6f 69 6e 2d 73 6f 75 72 63 65 5d  ram|join-source]
1d790 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 74   specification t
1d7a0 68 61 74 20 66 6f 6c 6c 6f 77 73 20 0a 20 20 20  hat follows .   
1d7b0 20 20 20 20 61 6e 20 65 78 70 6c 69 63 69 74 20      an explicit 
1d7c0 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 20 20 3c  FROM clause..  <
1d7d0 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20 63 6c  li> <p>[WHERE cl
1d7e0 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67  ause] processing
1d7f0 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61  : The input data
1d800 20 69 73 20 66 69 6c 74 65 72 65 64 20 75 73 69   is filtered usi
1d810 6e 67 20 74 68 65 20 57 48 45 52 45 0a 20 20 20  ng the WHERE.   
1d820 20 20 20 20 63 6c 61 75 73 65 20 65 78 70 72 65      clause expre
1d830 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20  ssion.  .  <li> 
1d840 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47 52 4f  <p>[GROUP BY|GRO
1d850 55 50 20 42 59 2c 20 48 41 56 49 4e 47 20 61 6e  UP BY, HAVING an
1d860 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20  d result-column 
1d870 65 78 70 72 65 73 73 69 6f 6e 5d 20 70 72 6f 63  expression] proc
1d880 65 73 73 69 6e 67 3a 20 0a 20 20 20 20 20 20 20  essing: .       
1d890 54 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  The set of resul
1d8a0 74 20 72 6f 77 73 20 69 73 20 63 6f 6d 70 75 74  t rows is comput
1d8b0 65 64 20 62 79 20 61 67 67 72 65 67 61 74 69 6e  ed by aggregatin
1d8c0 67 20 74 68 65 20 64 61 74 61 20 61 63 63 6f 72  g the data accor
1d8d0 64 69 6e 67 20 74 6f 0a 20 20 20 20 20 20 20 61  ding to.       a
1d8e0 6e 79 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  ny GROUP BY clau
1d8f0 73 65 20 61 6e 64 20 63 61 6c 63 75 6c 61 74 69  se and calculati
1d900 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  ng the result-se
1d910 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 66 6f  t expressions fo
1d920 72 20 74 68 65 0a 20 20 20 20 20 20 20 72 6f 77  r the.       row
1d930 73 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72 65  s of the filtere
1d940 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 2e  d input dataset.
1d950 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49    .  <li> <p>[DI
1d960 53 54 49 4e 43 54 7c 44 49 53 54 49 4e 43 54 2f  STINCT|DISTINCT/
1d970 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70 72 6f  ALL keyword] pro
1d980 63 65 73 73 69 6e 67 3a 20 49 66 20 74 68 65 20  cessing: If the 
1d990 71 75 65 72 79 20 69 73 20 61 20 22 53 45 4c 45  query is a "SELE
1d9a0 43 54 0a 20 20 20 20 20 20 20 44 49 53 54 49 4e  CT.       DISTIN
1d9b0 43 54 22 20 71 75 65 72 79 2c 20 64 75 70 6c 69  CT" query, dupli
1d9c0 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
1d9d0 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 73  moved from the s
1d9e0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
1d9f0 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65  s..</ol>..<p>The
1da00 72 65 20 61 72 65 20 74 77 6f 20 74 79 70 65 73  re are two types
1da10 20 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c 45 43   of simple SELEC
1da20 54 20 73 74 61 74 65 6d 65 6e 74 20 2d 20 61 67  T statement - ag
1da30 67 72 65 67 61 74 65 20 61 6e 64 20 0a 6e 6f 6e  gregate and .non
1da40 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69  -aggregate queri
1da50 65 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20 53 45  es. ^A simple SE
1da60 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
1da70 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  s an aggregate q
1da80 75 65 72 79 20 69 66 0a 69 74 20 63 6f 6e 74 61  uery if.it conta
1da90 69 6e 73 20 65 69 74 68 65 72 20 61 20 47 52 4f  ins either a GRO
1daa0 55 50 20 42 59 20 63 6c 61 75 73 65 20 6f 72 20  UP BY clause or 
1dab0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
1dac0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a  egate functions.
1dad0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
1dae0 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  t. ^Otherwise, i
1daf0 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  f a simple SELEC
1db00 54 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 61 67  T contains no ag
1db10 67 72 65 67 61 74 65 0a 66 75 6e 63 74 69 6f 6e  gregate.function
1db20 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20  s or a GROUP BY 
1db30 63 6c 61 75 73 65 2c 20 69 74 20 69 73 20 61 20  clause, it is a 
1db40 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75  non-aggregate qu
1db50 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44  ery...<p><b>1. D
1db60 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20  etermination of 
1db70 69 6e 70 75 74 20 64 61 74 61 20 28 46 52 4f 4d  input data (FROM
1db80 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69   clause processi
1db90 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ng).</b>.<tcl>hd
1dba0 5f 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d 63 6c  _fragment fromcl
1dbb0 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  ause</tcl>.<tcl>
1dbc0 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46 52 4f  hd_keywords {FRO
1dbd0 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a  M clause}</tcl>.
1dbe0 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 20 64 61  .<p>The input da
1dbf0 74 61 20 75 73 65 64 20 62 79 20 61 20 73 69 6d  ta used by a sim
1dc00 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72 79  ple SELECT query
1dc10 20 69 73 20 61 20 73 65 74 20 6f 66 20 3c 69 3e   is a set of <i>
1dc20 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61 63 68  N</i> rows .each
1dc30 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e   <i>M</i> column
1dc40 73 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66  s wide...<p>^(If
1dc50 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1dc60 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
1dc70 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
1dc80 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1dc90 20 74 68 65 20 0a 69 6e 70 75 74 20 64 61 74 61   the .input data
1dca0 20 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 61   is implicitly a
1dcb0 20 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65 72 6f   single row zero
1dcc0 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29 5e 20   columns wide)^ 
1dcd0 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31  (i.e. <i>N</i>=1
1dce0 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29   and.<i>M</i>=0)
1dcf0 2e 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f 4d 20  ...<p>If a FROM 
1dd00 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
1dd10 69 65 64 2c 20 74 68 65 20 64 61 74 61 20 6f 6e  ied, the data on
1dd20 20 77 68 69 63 68 20 61 20 73 69 6d 70 6c 65 20   which a simple 
1dd30 53 45 4c 45 43 54 20 71 75 65 72 79 0a 6f 70 65  SELECT query.ope
1dd40 72 61 74 65 73 20 63 6f 6d 65 73 20 66 72 6f 6d  rates comes from
1dd50 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   the one or more
1dd60 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
1dd70 65 72 69 65 73 20 28 53 45 4c 45 43 54 20 73 74  eries (SELECT st
1dd80 61 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61 72 65  atements.in pare
1dd90 6e 74 68 65 73 69 73 29 20 73 70 65 63 69 66 69  nthesis) specifi
1dda0 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ed following the
1ddb0 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 5e   FROM keyword. ^
1ddc0 41 20 73 75 62 2d 73 65 6c 65 63 74 20 73 70 65  A sub-select spe
1ddd0 63 69 66 69 65 64 0a 69 6e 20 74 68 65 20 6a 6f  cified.in the jo
1dde0 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f 77  in-source follow
1ddf0 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  ing the FROM cla
1de00 75 73 65 20 69 6e 20 61 20 73 69 6d 70 6c 65 20  use in a simple 
1de10 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1de20 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73 20 69   is.handled as i
1de30 66 20 69 74 20 77 61 73 20 61 20 74 61 62 6c 65  f it was a table
1de40 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1de50 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
1de60 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 0a 73   executing the.s
1de70 75 62 2d 73 65 6c 65 63 74 20 73 74 61 74 65 6d  ub-select statem
1de80 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d  ent. ^Each colum
1de90 6e 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  n of the sub-sel
1dea0 65 63 74 20 64 61 74 61 73 65 74 20 69 6e 68 65  ect dataset inhe
1deb0 72 69 74 73 20 74 68 65 0a 5b 63 6f 6c 6c 61 74  rits the.[collat
1dec0 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ion|collation se
1ded0 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66 66  quence] and [aff
1dee0 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f  inity] of the co
1def0 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70 72  rresponding expr
1df00 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73 75  ession.in the su
1df10 62 2d 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  b-select stateme
1df20 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72  nt...<p>^If ther
1df30 65 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67  e is only a sing
1df40 6c 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  le table in the 
1df50 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c  join-source foll
1df60 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 0a 63  owing the FROM.c
1df70 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20  lause, then the 
1df80 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64 20  input data used 
1df90 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  by the SELECT st
1dfa0 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 63  atement is the c
1dfb0 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a 6e  ontents of the.n
1dfc0 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66 20  amed table. ^If 
1dfd0 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74 68  there is more th
1dfe0 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20 73 70 65  an one table spe
1dff0 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
1e000 66 20 74 68 65 0a 6a 6f 69 6e 2d 73 6f 75 72 63  f the.join-sourc
1e010 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  e following the 
1e020 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2c 20 74 68  FROM keyword, th
1e030 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  en the contents 
1e040 6f 66 20 65 61 63 68 20 6e 61 6d 65 64 20 74 61  of each named ta
1e050 62 6c 65 0a 61 72 65 20 6a 6f 69 6e 65 64 20 69  ble.are joined i
1e060 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74  nto a single dat
1e070 61 73 65 74 20 66 6f 72 20 74 68 65 20 73 69 6d  aset for the sim
1e080 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
1e090 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61 74 65 20  ment to operate 
1e0a0 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68 6f 77 20  on..Exactly how 
1e0b0 74 68 65 20 64 61 74 61 20 69 73 20 63 6f 6d 62  the data is comb
1e0c0 69 6e 65 64 20 64 65 70 65 6e 64 73 20 6f 6e 20  ined depends on 
1e0d0 74 68 65 20 73 70 65 63 69 66 69 63 20 5b 6a 6f  the specific [jo
1e0e0 69 6e 2d 6f 70 5d 20 61 6e 64 0a 5b 6a 6f 69 6e  in-op] and.[join
1e0f0 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20 75 73 65  -constraint] use
1e100 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65  d to connect the
1e110 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
1e120 65 72 69 65 73 20 74 6f 67 65 74 68 65 72 2e 0a  eries together..
1e130 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e  .<p>All joins in
1e140 20 53 51 4c 69 74 65 20 61 72 65 20 62 61 73 65   SQLite are base
1e150 64 20 6f 6e 20 74 68 65 20 63 61 72 74 65 73 69  d on the cartesi
1e160 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68  an product of th
1e170 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74  e left and.right
1e180 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20  -hand datasets. 
1e190 5e 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ^The columns of 
1e1a0 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
1e1b0 6f 64 75 63 74 20 64 61 74 61 73 65 74 20 61 72  oduct dataset ar
1e1c0 65 2c 20 69 6e 20 0a 6f 72 64 65 72 2c 20 61 6c  e, in .order, al
1e1d0 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  l the columns of
1e1e0 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64   the left-hand d
1e1f0 61 74 61 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20  ataset followed 
1e200 62 79 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d  by all the colum
1e210 6e 73 0a 6f 66 20 74 68 65 20 72 69 67 68 74 2d  ns.of the right-
1e220 68 61 6e 64 20 64 61 74 61 73 65 74 2e 20 5e 54  hand dataset. ^T
1e230 68 65 72 65 20 69 73 20 61 20 72 6f 77 20 69 6e  here is a row in
1e240 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
1e250 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 0a 66  roduct dataset.f
1e260 6f 72 6d 65 64 20 62 79 20 63 6f 6d 62 69 6e 69  ormed by combini
1e270 6e 67 20 65 61 63 68 20 75 6e 69 71 75 65 20 63  ng each unique c
1e280 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20  ombination of a 
1e290 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6c 65 66  row from the lef
1e2a0 74 2d 68 61 6e 64 20 0a 61 6e 64 20 72 69 67 68  t-hand .and righ
1e2b0 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e  t-hand datasets.
1e2c0 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64   ^(In other word
1e2d0 73 2c 20 69 66 20 74 68 65 20 6c 65 66 74 2d 68  s, if the left-h
1e2e0 61 6e 64 20 64 61 74 61 73 65 74 20 63 6f 6e 73  and dataset cons
1e2f0 69 73 74 73 20 6f 66 0a 3c 69 3e 4e 6c 68 73 3c  ists of.<i>Nlhs<
1e300 2f 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e 4d  /i> rows of <i>M
1e310 6c 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c  lhs</i> columns,
1e320 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 68   and the right-h
1e330 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a 3c  and dataset of.<
1e340 69 3e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77 73 20  i>Nrhs</i> rows 
1e350 6f 66 20 3c 69 3e 4d 72 68 73 3c 2f 69 3e 20 63  of <i>Mrhs</i> c
1e360 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65  olumns, then the
1e370 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
1e380 63 74 20 69 73 20 61 0a 64 61 74 61 73 65 74 20  ct is a.dataset 
1e390 6f 66 20 3c 69 3e 4e 6c 68 73 2e 4e 72 68 73 3c  of <i>Nlhs.Nrhs<
1e3a0 2f 69 3e 20 72 6f 77 73 2c 20 65 61 63 68 20 63  /i> rows, each c
1e3b0 6f 6e 74 61 69 6e 69 6e 67 20 3c 69 3e 4d 6c 68  ontaining <i>Mlh
1e3c0 73 2b 4d 72 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d  s+Mrhs</i> colum
1e3d0 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ns.)^..<p>^If th
1e3e0 65 20 6a 6f 69 6e 2d 6f 70 20 69 73 20 22 43 52  e join-op is "CR
1e3f0 4f 53 53 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45  OSS JOIN", "INNE
1e400 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20  R JOIN", "JOIN" 
1e410 6f 72 20 61 20 63 6f 6d 6d 61 0a 28 22 2c 22 29  or a comma.(",")
1e420 20 61 6e 64 20 74 68 65 72 65 20 69 73 20 6e 6f   and there is no
1e430 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
1e440 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65  use, then the re
1e450 73 75 6c 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e  sult of the join
1e460 20 69 73 0a 73 69 6d 70 6c 79 20 74 68 65 20 63   is.simply the c
1e470 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
1e480 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
1e490 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
1e4a0 73 65 74 73 2e 20 0a 5e 54 68 65 72 65 20 69 73  sets. .^There is
1e4b0 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62   no difference b
1e4c0 65 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e 45  etween the "INNE
1e4d0 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20  R JOIN", "JOIN" 
1e4e0 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65  and "," join.ope
1e4f0 72 61 74 6f 72 73 2e 20 5e 28 54 68 65 20 22 43  rators. ^(The "C
1e500 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20  ROSS JOIN" join 
1e510 6f 70 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65  operator produce
1e520 73 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 20  s the same data 
1e530 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20 4a  as the ."INNER J
1e540 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64  OIN", "JOIN" and
1e550 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29 5e   "," operators)^
1e560 2c 20 62 75 74 20 69 73 20 0a 3c 61 20 68 72 65  , but is .<a hre
1e570 66 3d 6f 70 74 6f 76 65 72 76 69 65 77 2e 68 74  f=optoverview.ht
1e580 6d 6c 23 6d 61 6e 63 74 72 6c 3e 68 61 6e 64 6c  ml#manctrl>handl
1e590 65 64 20 73 6c 69 67 68 74 6c 79 20 64 69 66 66  ed slightly diff
1e5a0 65 72 65 6e 74 6c 79 20 62 79 20 74 68 65 20 71  erently by the q
1e5b0 75 65 72 79 0a 6f 70 74 69 6d 69 7a 65 72 3c 2f  uery.optimizer</
1e5c0 61 3e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  a>. Otherwise, i
1e5d0 74 20 69 73 20 74 68 65 20 63 61 72 74 65 73 69  t is the cartesi
1e5e0 61 6e 20 70 72 6f 64 75 63 74 20 6d 6f 64 69 66  an product modif
1e5f0 69 65 64 20 0a 61 63 63 6f 72 64 69 6e 67 20 74  ied .according t
1e600 6f 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66  o one or more of
1e610 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62   the following b
1e620 75 6c 6c 65 74 20 70 6f 69 6e 74 73 3a 20 0a 0a  ullet points: ..
1e630 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  <ul>.  <li> <p>^
1e640 28 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 20  (If there is an 
1e650 4f 4e 20 63 6c 61 75 73 65 20 73 70 65 63 69 66  ON clause specif
1e660 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 4f 4e  ied, then the ON
1e670 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 0a 20   expression is. 
1e680 20 20 20 20 20 20 65 76 61 6c 75 61 74 65 64 20        evaluated 
1e690 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
1e6a0 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
1e6b0 6f 64 75 63 74 20 61 73 20 61 20 0a 20 20 20 20  oduct as a .    
1e6c0 20 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72     [boolean expr
1e6d0 65 73 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77  ession]. All row
1e6e0 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
1e6f0 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
1e700 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20 20 20  ates to .       
1e710 66 61 6c 73 65 20 61 72 65 20 65 78 63 6c 75 64  false are exclud
1e720 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
1e730 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c  set.)^..  <li> <
1e740 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 61  p>^If there is a
1e750 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 73 70   USING clause sp
1e760 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
1e770 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73  of the join-cons
1e780 74 72 61 69 6e 74 2c 0a 20 20 20 20 20 20 20 74  traint,.       t
1e790 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20  hen each of the 
1e7a0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 73 70 65  column names spe
1e7b0 63 69 66 69 65 64 20 6d 75 73 74 20 65 78 69 73  cified must exis
1e7c0 74 20 69 6e 20 74 68 65 20 64 61 74 61 73 65 74  t in the dataset
1e7d0 73 20 74 6f 20 0a 20 20 20 20 20 20 20 62 6f 74  s to .       bot
1e7e0 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  h the left and r
1e7f0 69 67 68 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e  ight of the join
1e800 2d 6f 70 2e 20 5e 28 46 6f 72 20 65 61 63 68 20  -op. ^(For each 
1e810 70 61 69 72 20 6f 66 20 6e 61 6d 65 73 61 6b 65  pair of namesake
1e820 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 2c  .       columns,
1e830 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
1e840 22 6c 68 73 2e 58 20 3d 20 72 68 73 2e 58 22 20  "lhs.X = rhs.X" 
1e850 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  is evaluated for
1e860 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 20 20 20   each row of.   
1e870 20 20 20 20 74 68 65 20 63 61 72 74 65 73 69 61      the cartesia
1e880 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61 20 5b  n product as a [
1e890 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
1e8a0 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20 66 6f  on]. All rows fo
1e8b0 72 20 77 68 69 63 68 20 6f 6e 65 0a 20 20 20 20  r which one.    
1e8c0 20 20 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68     or more of th
1e8d0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  e expressions ev
1e8e0 61 6c 75 61 74 65 73 20 74 6f 20 66 61 6c 73 65  aluates to false
1e8f0 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 66 72   are excluded fr
1e900 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 20 72 65  om the.       re
1e910 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68 65  sult set.)^ ^Whe
1e920 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75  n comparing valu
1e930 65 73 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  es as a result o
1e940 66 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65  f a USING clause
1e950 2c 20 74 68 65 0a 20 20 20 20 20 20 20 6e 6f 72  , the.       nor
1e960 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 68 61  mal rules for ha
1e970 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69 74 69 65  ndling affinitie
1e980 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  s, collation seq
1e990 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a  uences and NULL.
1e9a0 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69 6e         values in
1e9b0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70 70   comparisons app
1e9c0 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20  ly. ^The column 
1e9d0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
1e9e0 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 6c   on the.       l
1e9f0 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
1ea00 20 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74   the join operat
1ea10 6f 72 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  or is considered
1ea20 20 74 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c 65   to be on the le
1ea30 66 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 73  ft-hand.       s
1ea40 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ide of the compa
1ea50 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28  rison operator (
1ea60 3d 29 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  =) for the purpo
1ea70 73 65 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ses of collation
1ea80 20 0a 20 20 20 20 20 20 20 73 65 71 75 65 6e 63   .       sequenc
1ea90 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79 20 70  e and affinity p
1eaa0 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20  recedence...    
1eab0 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20     <p>^For each 
1eac0 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  pair of columns 
1ead0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
1eae0 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
1eaf0 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  e column.       
1eb00 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68  from the right-h
1eb10 61 6e 64 20 64 61 74 61 73 65 74 20 69 73 20 6f  and dataset is o
1eb20 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
1eb30 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74 2e 20  joined dataset. 
1eb40 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20 69 73  ^This .       is
1eb50 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72   the only differ
1eb60 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 55  ence between a U
1eb70 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e 64 20  SING clause and 
1eb80 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20 4f  its equivalent O
1eb90 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61  N.       constra
1eba0 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  int...  <li> <p>
1ebb0 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52 41 4c  ^(If the NATURAL
1ebc0 20 6b 65 79 77 6f 72 64 20 69 73 20 61 64 64 65   keyword is adde
1ebd0 64 20 74 6f 20 61 6e 79 20 6f 66 20 74 68 65 20  d to any of the 
1ebe0 6a 6f 69 6e 2d 6f 70 73 2c 20 74 68 65 6e 20 61  join-ops, then a
1ebf0 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c 69 63 69  n.       implici
1ec00 74 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 69  t USING clause i
1ec10 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6a  s added to the j
1ec20 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 73 2e  oin-constraints.
1ec30 20 54 68 65 20 69 6d 70 6c 69 63 69 74 0a 20 20   The implicit.  
1ec40 20 20 20 20 20 55 53 49 4e 47 20 63 6c 61 75 73       USING claus
1ec50 65 20 63 6f 6e 74 61 69 6e 73 20 65 61 63 68 20  e contains each 
1ec60 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  of the column na
1ec70 6d 65 73 20 74 68 61 74 20 61 70 70 65 61 72 20  mes that appear 
1ec80 69 6e 20 62 6f 74 68 0a 20 20 20 20 20 20 20 74  in both.       t
1ec90 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
1eca0 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 64 61 74  t-hand input dat
1ecb0 61 73 65 74 73 2e 29 5e 20 5e 49 66 20 74 68 65  asets.)^ ^If the
1ecc0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
1ecd0 68 61 6e 64 0a 20 20 20 20 20 20 20 69 6e 70 75  hand.       inpu
1ece0 74 20 64 61 74 61 73 65 74 73 20 66 65 61 74 75  t datasets featu
1ecf0 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63 6f 6c  re no common col
1ed00 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68 65 6e 20  umn names, then 
1ed10 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77  the NATURAL keyw
1ed20 6f 72 64 0a 20 20 20 20 20 20 20 68 61 73 20 6e  ord.       has n
1ed30 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20  o effect on the 
1ed40 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6a  results of the j
1ed50 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47 20 6f 72  oin. ^A USING or
1ed60 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61 79 0a 20   ON clause may. 
1ed70 20 20 20 20 20 20 6e 6f 74 20 62 65 20 61 64 64        not be add
1ed80 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20 74 68 61  ed to a join tha
1ed90 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
1eda0 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 2e  NATURAL keyword.
1edb0 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66  ..  <li> <p>^(If
1edc0 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 20 69 73 20   the join-op is 
1edd0 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22 20 6f 72  a "LEFT JOIN" or
1ede0 20 22 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49   "LEFT OUTER JOI
1edf0 4e 22 2c 20 74 68 65 6e 20 61 66 74 65 72 0a 20  N", then after. 
1ee00 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f 72 20        the ON or 
1ee10 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e 67 20  USING filtering 
1ee20 63 6c 61 75 73 65 73 20 68 61 76 65 20 62 65 65  clauses have bee
1ee30 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20 65 78  n applied, an ex
1ee40 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20 20 20  tra row is .    
1ee50 20 20 20 61 64 64 65 64 20 74 6f 20 74 68 65 20     added to the 
1ee60 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63 68 20  output for each 
1ee70 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69 67 69  row in the origi
1ee80 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e  nal left-hand in
1ee90 70 75 74 20 0a 20 20 20 20 20 20 20 64 61 74 61  put .       data
1eea0 73 65 74 20 74 68 61 74 20 63 6f 72 72 65 73 70  set that corresp
1eeb0 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20  onds to no rows 
1eec0 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f  at all in the co
1eed0 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20 20 64  mposite.       d
1eee0 61 74 61 73 65 74 20 28 69 66 20 61 6e 79 29 2e  ataset (if any).
1eef0 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20 72 6f  )^ ^The added ro
1ef00 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20  ws contain NULL 
1ef10 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f  values in the co
1ef20 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74 68 61  lumns.       tha
1ef30 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79  t would normally
1ef40 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20   contain values 
1ef50 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20  copied from the 
1ef60 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74  right-hand input
1ef70 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 2e  .       dataset.
1ef80 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57    .</ul>..<p>^(W
1ef90 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74 77  hen more than tw
1efa0 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a 6f 69  o tables are joi
1efb0 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61 73 20  ned together as 
1efc0 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d 20 63  part of a FROM c
1efd0 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20  lause,.the join 
1efe0 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70  operations are p
1eff0 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72 64 65  rocessed in orde
1f000 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  r from left to r
1f010 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a  ight. In other .
1f020 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f 4d 20  words, the FROM 
1f030 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f  clause (A join-o
1f040 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20  p-1 B join-op-2 
1f050 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61  C) is computed a
1f060 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31  s .((A join-op-1
1f070 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29   B) join-op-2 C)
1f080 2e 29 5e 0a 20 20 20 20 20 20 20 0a 0a 3c 70 3e  .)^.       ..<p>
1f090 3c 62 3e 32 2e 20 57 48 45 52 45 20 63 6c 61 75  <b>2. WHERE clau
1f0a0 73 65 20 66 69 6c 74 65 72 69 6e 67 2e 3c 2f 62  se filtering.</b
1f0b0 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
1f0c0 6e 74 20 77 68 65 72 65 63 6c 61 75 73 65 3c 2f  nt whereclause</
1f0d0 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79  tcl>.<tcl>hd_key
1f0e0 77 6f 72 64 73 20 7b 57 48 45 52 45 20 63 6c 61  words {WHERE cla
1f0f0 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  use}</tcl>..<p>^
1f100 28 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75  (If a WHERE clau
1f110 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  se is specified,
1f120 20 74 68 65 20 57 48 45 52 45 20 65 78 70 72 65   the WHERE expre
1f130 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
1f140 65 64 20 66 6f 72 20 0a 65 61 63 68 20 72 6f 77  ed for .each row
1f150 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61   in the input da
1f160 74 61 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e  ta as a [boolean
1f170 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 6c   expression]. Al
1f180 6c 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  l rows for which
1f190 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
1f1a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
1f1b0 6c 75 61 74 65 73 20 74 6f 20 66 61 6c 73 65 20  luates to false 
1f1c0 61 72 65 20 65 78 63 6c 75 64 65 64 20 66 72 6f  are excluded fro
1f1d0 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 62 65  m the dataset be
1f1e0 66 6f 72 65 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e  fore.continuing.
1f1f0 29 5e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47 65 6e  )^..<p><b>3. Gen
1f200 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  eration of the s
1f210 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
1f220 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66  s.</b>.<tcl>hd_f
1f230 72 61 67 6d 65 6e 74 20 72 65 73 75 6c 74 73 65  ragment resultse
1f240 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  t</tcl>.<tcl>hd_
1f250 6b 65 79 77 6f 72 64 73 20 7b 72 65 73 75 6c 74  keywords {result
1f260 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73  -set expressions
1f270 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f 74 63  } {GROUP BY}</tc
1f280 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68 65 20  l>..<p>Once the 
1f290 69 6e 70 75 74 20 64 61 74 61 20 66 72 6f 6d 20  input data from 
1f2a0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1f2b0 68 61 73 20 62 65 65 6e 20 66 69 6c 74 65 72 65  has been filtere
1f2c0 64 20 62 79 20 74 68 65 0a 57 48 45 52 45 20 63  d by the.WHERE c
1f2d0 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
1f2e0 20 28 69 66 20 61 6e 79 29 2c 20 74 68 65 20 73   (if any), the s
1f2f0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
1f300 73 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65  s for the simple
1f310 20 0a 53 45 4c 45 43 54 20 61 72 65 20 63 61 6c   .SELECT are cal
1f320 63 75 6c 61 74 65 64 2e 20 45 78 61 63 74 6c 79  culated. Exactly
1f330 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e   how this is don
1f340 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68 65  e depends on whe
1f350 74 68 65 72 20 74 68 65 20 73 69 6d 70 6c 65 20  ther the simple 
1f360 0a 53 45 4c 45 43 54 20 69 73 20 61 6e 20 61 67  .SELECT is an ag
1f370 67 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e 2d 61  gregate or non-a
1f380 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2c 20  ggregate query, 
1f390 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
1f3a0 6f 74 20 61 20 47 52 4f 55 50 0a 42 59 20 63 6c  ot a GROUP.BY cl
1f3b0 61 75 73 65 20 77 61 73 20 73 70 65 63 69 66 69  ause was specifi
1f3c0 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c 69 73  ed...<p> The lis
1f3d0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
1f3e0 20 62 65 74 77 65 65 6e 20 74 68 65 20 53 45 4c   between the SEL
1f3f0 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65 79  ECT and FROM key
1f400 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e 20 61  words is known a
1f410 73 0a 74 68 65 20 72 65 73 75 6c 74 20 65 78 70  s.the result exp
1f420 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20 20 5e  ression list.  ^
1f430 49 66 20 61 20 72 65 73 75 6c 74 20 65 78 70 72  If a result expr
1f440 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 73 70  ession is the sp
1f450 65 63 69 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ecial expression
1f460 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f  ."*" then all co
1f470 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 70  lumns in the inp
1f480 75 74 20 64 61 74 61 20 61 72 65 20 73 75 62 73  ut data are subs
1f490 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 61 74  tituted for that
1f4a0 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e 2e   one expression.
1f4b0 0a 5e 28 49 66 20 74 68 65 20 65 78 70 72 65 73  .^(If the expres
1f4c0 73 69 6f 6e 20 69 73 20 74 68 65 20 61 6c 69 61  sion is the alia
1f4d0 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20  s of a table or 
1f4e0 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
1f4f0 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f 6c 6c  FROM clause.foll
1f500 6f 77 65 64 20 62 79 20 22 2e 2a 22 20 74 68 65  owed by ".*" the
1f510 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 66 72  n all columns fr
1f520 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62  om the named tab
1f530 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 61  le or subquery a
1f540 72 65 0a 73 75 62 73 74 69 74 75 74 65 64 20 66  re.substituted f
1f550 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20 65 78  or the single ex
1f560 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28 49 74  pression.)^ ^(It
1f570 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
1f580 75 73 65 20 61 20 22 2a 22 20 6f 72 0a 22 61 6c  use a "*" or."al
1f590 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f  ias.*" expressio
1f5a0 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74  n in any context
1f5b0 20 6f 74 68 65 72 20 74 68 61 6e 20 74 68 61 6e   other than than
1f5c0 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65 73   a result expres
1f5d0 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28 49  sion list.)^.^(I
1f5e0 74 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72 72  t is also an err
1f5f0 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20  or to use a "*" 
1f600 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78 70  or "alias.*" exp
1f610 72 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69 6d  ression in a sim
1f620 70 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72 79  ple SELECT.query
1f630 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 68   that does not h
1f640 61 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75 73  ave a FROM claus
1f650 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20  e.)^..<p> ^(The 
1f660 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1f670 73 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72 65  s in the rows re
1f680 74 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d 70  turned by a simp
1f690 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
1f6a0 65 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f 20  ent.is equal to 
1f6b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 78  the number of ex
1f6c0 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65  pressions in the
1f6d0 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
1f6e0 6f 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73 75  on list after.su
1f6f0 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a 20  bstitution of * 
1f700 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70 72  and alias.* expr
1f710 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68 20  essions.)^ Each 
1f720 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63 61  result row is ca
1f730 6c 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61 6c  lculated by.eval
1f740 75 61 74 69 6e 67 20 74 68 65 20 65 78 70 72 65  uating the expre
1f750 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65  ssions in the re
1f760 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
1f770 6c 69 73 74 20 77 69 74 68 20 72 65 73 70 65 63  list with respec
1f780 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72 6f  t to a.single ro
1f790 77 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 20  w of input data 
1f7a0 6f 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61 74  or, for aggregat
1f7b0 65 20 71 75 65 72 69 65 73 2c 20 77 69 74 68 20  e queries, with 
1f7c0 72 65 73 70 65 63 74 20 74 6f 20 61 20 67 72 6f  respect to a gro
1f7d0 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c  up.of rows...<ul
1f7e0 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  >.  <li><p>^If t
1f7f0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
1f800 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d  ent is <b>a non-
1f810 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 3c  aggregate query<
1f820 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20 65  /b>, then .    e
1f830 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
1f840 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78 70  n the result exp
1f850 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73 20  ression list is 
1f860 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61  evaluated for ea
1f870 63 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74 68  ch row in.    th
1f880 65 20 64 61 74 61 73 65 74 20 66 69 6c 74 65 72  e dataset filter
1f890 65 64 20 62 79 20 74 68 65 20 57 48 45 52 45 20  ed by the WHERE 
1f8a0 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c  clause...  <li><
1f8b0 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54  p>^If the SELECT
1f8c0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62   statement is <b
1f8d0 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75  >an aggregate qu
1f8e0 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52  ery without a GR
1f8f0 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63  OUP.    BY</b> c
1f900 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68  lause, then each
1f910 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
1f920 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73  ssion in the res
1f930 75 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20 20  ult-set is .    
1f940 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 61  evaluated once a
1f950 63 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72 65  cross the entire
1f960 20 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68 20   dataset. ^Each 
1f970 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
1f980 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e 20  pression.    in 
1f990 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69  the result-set i
1f9a0 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65  s evaluated once
1f9b0 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72   for an arbitrar
1f9c0 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77  ily selected row
1f9d0 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74 61   of.    the data
1f9e0 73 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20 61  set. ^The same a
1f9f0 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63  rbitrarily selec
1fa00 74 65 64 20 72 6f 77 20 69 73 20 75 73 65 64 20  ted row is used 
1fa10 66 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f 6e  for each.    non
1fa20 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
1fa30 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20 74  ssion. ^Or, if t
1fa40 68 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74 61  he dataset conta
1fa50 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20 74  ins zero rows, t
1fa60 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e 6f  hen .    each no
1fa70 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
1fa80 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
1fa90 74 65 64 20 61 67 61 69 6e 73 74 20 61 20 72 6f  ted against a ro
1faa0 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20 20  w consisting.   
1fab0 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55 4c   entirely of NUL
1fac0 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c 70  L values...   <p
1fad0 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f 77  >^The single row
1fae0 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 64   of result-set d
1faf0 61 74 61 20 63 72 65 61 74 65 64 20 62 79 20 65  ata created by e
1fb00 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 67  valuating the ag
1fb10 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64 20  gregate.    and 
1fb20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
1fb30 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65  pressions in the
1fb40 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72 6d   result-set form
1fb50 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  s the result of 
1fb60 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74 65  an.    aggregate
1fb70 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61   query without a
1fb80 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
1fb90 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65 20  . ^An aggregate 
1fba0 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 0a  query without a.
1fbb0 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61      GROUP BY cla
1fbc0 75 73 65 20 61 6c 77 61 79 73 20 72 65 74 75 72  use always retur
1fbd0 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 72  ns exactly one r
1fbe0 6f 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65 6e  ow of data, even
1fbf0 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 20 20   if there are.  
1fc00 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20 69    zero rows of i
1fc10 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c 6c  nput data...  <l
1fc20 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53 45  i><p>^(If the SE
1fc30 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
1fc40 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61 74  s <b>an aggregat
1fc50 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47  e query with a G
1fc60 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20  ROUP.    BY</b> 
1fc70 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63  clause, then eac
1fc80 68 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  h of the express
1fc90 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20 61  ions specified a
1fca0 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20 20  s part of the.  
1fcb0 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73    GROUP BY claus
1fcc0 65 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66  e is evaluated f
1fcd0 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
1fce0 68 65 20 64 61 74 61 73 65 74 2e 20 45 61 63 68  he dataset. Each
1fcf0 20 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65 6e   row.    is then
1fd00 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 22   assigned to a "
1fd10 67 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e 20  group" based on 
1fd20 74 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f 77  the results; row
1fd30 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20 20  s for which.    
1fd40 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 65  the results of e
1fd50 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47 52  valuating the GR
1fd60 4f 55 50 20 42 59 20 65 78 70 72 65 73 73 69 6f  OUP BY expressio
1fd70 6e 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  ns are the same 
1fd80 61 72 65 0a 20 20 20 20 61 73 73 69 67 6e 65 64  are.    assigned
1fd90 20 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72 6f   to the same gro
1fda0 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70  up.)^ ^For the p
1fdb0 75 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75 70  urposes of group
1fdc0 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a  ing rows, NULL .
1fdd0 20 20 20 20 76 61 6c 75 65 73 20 61 72 65 20 63      values are c
1fde0 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c 2e  onsidered equal.
1fdf0 20 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c 65   ^The usual rule
1fe00 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e  s for [collation
1fe10 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20 20  |selecting a.   
1fe20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1fe30 6e 63 65 5d 20 77 69 74 68 20 77 68 69 63 68 20  nce] with which 
1fe40 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
1fe50 76 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68 65  values apply whe
1fe60 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20 20  n evaluating.   
1fe70 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
1fe80 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
1fe90 65 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73 73  e.  ^The express
1fea0 69 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f 55  ions in the GROU
1feb0 50 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20 20  P BY clause.    
1fec0 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  do <em>not</em> 
1fed0 68 61 76 65 20 74 6f 20 62 65 20 65 78 70 72 65  have to be expre
1fee0 73 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70 65  ssions that appe
1fef0 61 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ar in the result
1ff00 2e 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72 65  . ^The.    expre
1ff10 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55  ssions in a GROU
1ff20 50 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79 20  P BY clause may 
1ff30 6e 6f 74 20 62 65 20 61 67 67 72 65 67 61 74 65  not be aggregate
1ff40 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a 20   expressions... 
1ff50 20 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41 56     <p>^(If a HAV
1ff60 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73 70  ING clause is sp
1ff70 65 63 69 66 69 65 64 2c 20 69 74 20 69 73 20 65  ecified, it is e
1ff80 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
1ff90 72 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20 20  r each group .  
1ffa0 20 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20 5b    of rows as a [
1ffb0 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
1ffc0 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73 75  on]. If the resu
1ffd0 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  lt of evaluating
1ffe0 20 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47 20   the.    HAVING 
1fff0 63 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65 2c  clause is false,
20000 20 74 68 65 20 67 72 6f 75 70 20 69 73 20 64 69   the group is di
20010 73 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20 74  scarded.)^ ^If t
20020 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
20030 20 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72 65   is.    an aggre
20040 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  gate expression,
20050 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64   it is evaluated
20060 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73   across all rows
20070 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e   in the group. ^
20080 49 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47 20  If.    a HAVING 
20090 63 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e 2d  clause is a non-
200a0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
200b0 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61 6c  sion, it is eval
200c0 75 61 74 65 64 20 77 69 74 68 20 72 65 73 70 65  uated with respe
200d0 63 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72 62  ct.    to an arb
200e0 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65  itrarily selecte
200f0 64 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 67  d row from the g
20100 72 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56 49  roup.  ^The HAVI
20110 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  NG expression ma
20120 79 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20 76  y.    refer to v
20130 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67 72  alues, even aggr
20140 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c  egate functions,
20150 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e   that are not in
20160 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e   the result.</p>
20170 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 65  ..    <p>^Each e
20180 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
20190 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 74   result-set is t
201a0 68 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f 6e  hen evaluated on
201b0 63 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20  ce for each.    
201c0 67 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20 5e  group of rows. ^
201d0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
201e0 6e 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74  n is an aggregat
201f0 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74  e expression, it
20200 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74   is .    evaluat
20210 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f  ed across all ro
20220 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ws in the group.
20230 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20   ^Otherwise, it 
20240 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67 61  is evaluated aga
20250 69 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67 6c  inst.    a singl
20260 65 20 61 72 62 69 74 72 61 72 69 6c 79 20 63 68  e arbitrarily ch
20270 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77 69  osen row from wi
20280 74 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  thin the group. 
20290 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72  ^If there is mor
202a0 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20 6e  e.    than one n
202b0 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
202c0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72  ression in the r
202d0 65 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e 20  esult-set, then 
202e0 61 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78 70  all such.    exp
202f0 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61  ressions are eva
20300 6c 75 61 74 65 64 20 66 6f 72 20 74 68 65 20 73  luated for the s
20310 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c 70  ame row...    <p
20320 3e 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66 20  >^Each group of 
20330 69 6e 70 75 74 20 64 61 74 61 73 65 74 20 72 6f  input dataset ro
20340 77 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20 61  ws contributes a
20350 20 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20 74   single row to t
20360 68 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20 72  he .    set of r
20370 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75 62  esult rows. ^Sub
20380 6a 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69 6e  ject to filterin
20390 67 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  g associated wit
203a0 68 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a 20  h the DISTINCT. 
203b0 20 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 20     keyword, the 
203c0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72  number of rows r
203d0 65 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61 67  eturned by an ag
203e0 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69  gregate query wi
203f0 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42  th a GROUP.    B
20400 59 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20  Y clause is the 
20410 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62  same as the numb
20420 65 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66 20  er of groups of 
20430 72 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62 79  rows produced by
20440 20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74 68   applying.    th
20450 65 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20 48  e GROUP BY and H
20460 41 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74 6f  AVING clauses to
20470 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e   the filtered in
20480 70 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f 75  put dataset..</u
20490 6c 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d  l>..<p><b>4. Rem
204a0 6f 76 61 6c 20 6f 66 20 64 75 70 6c 69 63 61 74  oval of duplicat
204b0 65 20 72 6f 77 73 20 28 44 49 53 54 49 4e 43 54  e rows (DISTINCT
204c0 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62   processing).</b
204d0 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
204e0 6e 74 20 64 69 73 74 69 6e 63 74 3c 2f 74 63 6c  nt distinct</tcl
204f0 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72  >.<tcl>hd_keywor
20500 64 73 20 7b 44 49 53 54 49 4e 43 54 7d 3c 2f 74  ds {DISTINCT}</t
20510 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20  cl>..<p>^One of 
20520 74 68 65 20 41 4c 4c 20 6f 72 20 44 49 53 54 49  the ALL or DISTI
20530 4e 43 54 20 6b 65 79 77 6f 72 64 73 20 6d 61 79  NCT keywords may
20540 20 66 6f 6c 6c 6f 77 20 74 68 65 20 53 45 4c 45   follow the SELE
20550 43 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 61 20  CT keyword in a 
20560 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73  .simple SELECT s
20570 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68  tatement. ^If th
20580 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
20590 69 73 20 61 20 53 45 4c 45 43 54 20 41 4c 4c 2c  is a SELECT ALL,
205a0 20 74 68 65 6e 20 74 68 65 0a 65 6e 74 69 72 65   then the.entire
205b0 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
205c0 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
205d0 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 2e 20   by the SELECT. 
205e0 5e 49 66 20 6e 65 69 74 68 65 72 20 41 4c 4c 20  ^If neither ALL 
205f0 6f 72 0a 44 49 53 54 49 4e 43 54 20 61 72 65 20  or.DISTINCT are 
20600 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68  present, then th
20610 65 20 62 65 68 61 76 69 6f 75 72 20 69 73 20 61  e behaviour is a
20620 73 20 69 66 20 41 4c 4c 20 77 65 72 65 20 73 70  s if ALL were sp
20630 65 63 69 66 69 65 64 2e 20 0a 5e 49 66 20 74 68  ecified. .^If th
20640 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
20650 69 73 20 61 20 53 45 4c 45 43 54 20 44 49 53 54  is a SELECT DIST
20660 49 4e 43 54 2c 20 74 68 65 6e 20 64 75 70 6c 69  INCT, then dupli
20670 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
20680 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 73  moved.from the s
20690 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
206a0 73 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 72  s before it is r
206b0 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72 20 74 68  eturned. ^For th
206c0 65 20 70 75 72 70 6f 73 65 73 20 6f 66 0a 64 65  e purposes of.de
206d0 74 65 63 74 69 6e 67 20 64 75 70 6c 69 63 61 74  tecting duplicat
206e0 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e 55 4c 4c  e rows, two NULL
206f0 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
20700 69 64 65 72 65 64 20 74 6f 20 62 65 20 65 71 75  idered to be equ
20710 61 6c 2e 20 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20  al. ^The.normal 
20720 72 75 6c 65 73 20 66 6f 72 20 73 65 6c 65 63 74  rules for select
20730 69 6e 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ing a collation 
20740 73 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70  sequence to comp
20750 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73 20  are text values 
20760 77 69 74 68 0a 61 70 70 6c 79 2e 0a 0a 3c 68 33  with.apply...<h3
20770 3e 43 6f 6d 70 6f 75 6e 64 20 53 65 6c 65 63 74  >Compound Select
20780 20 53 74 61 74 65 6d 65 6e 74 73 0a 3c 74 63 6c   Statements.<tcl
20790 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d  >hd_fragment com
207a0 70 6f 75 6e 64 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  pound</tcl>.<tcl
207b0 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 63 6f  >hd_keywords {co
207c0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 7d 20 7b  mpound select} {
207d0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 7d 3c  compound query}<
207e0 2f 74 63 6c 3e 0a 3c 2f 68 33 3e 0a 0a 3c 70 3e  /tcl>.</h3>..<p>
207f0 54 77 6f 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70  Two or more simp
20800 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
20810 65 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e  ents may be conn
20820 65 63 74 65 64 20 74 6f 67 65 74 68 65 72 20 74  ected together t
20830 6f 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e  o form.a compoun
20840 64 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20 74  d SELECT using t
20850 68 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20  he UNION, UNION 
20860 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20 6f  ALL, INTERSECT o
20870 72 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f  r EXCEPT operato
20880 72 2e 0a 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e  r..^In a compoun
20890 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68  d SELECT, all th
208a0 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  e constituent SE
208b0 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74 75 72  LECTs must retur
208c0 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62  n the same .numb
208d0 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c  er of result col
208e0 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f  umns. ^As the co
208f0 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f  mponents of a co
20900 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75  mpound SELECT mu
20910 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c  st.be simple SEL
20920 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  ECT statements, 
20930 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  they may not con
20940 74 61 69 6e 20 4f 52 44 45 52 20 42 59 20 6f 72  tain ORDER BY or
20950 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 2e 0a   LIMIT clauses..
20960 5e 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49  ^ORDER BY and LI
20970 4d 49 54 20 63 6c 61 75 73 65 73 20 6d 61 79 20  MIT clauses may 
20980 6f 6e 6c 79 20 6f 63 63 75 72 20 61 74 20 74 68  only occur at th
20990 65 20 65 6e 64 20 6f 66 20 74 68 65 20 65 6e 74  e end of the ent
209a0 69 72 65 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c  ire compound.SEL
209b0 45 43 54 2e 20 20 0a 0a 3c 70 3e 5e 41 20 63 6f  ECT.  ..<p>^A co
209c0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63 72  mpound SELECT cr
209d0 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49 4f  eated using UNIO
209e0 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20 72  N ALL operator r
209f0 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20 72  eturns all the r
20a00 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c  ows.from the SEL
20a10 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ECT to the left 
20a20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c  of the UNION ALL
20a30 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20 61   operator, and a
20a40 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d  ll the rows.from
20a50 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74   the SELECT to t
20a60 68 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e 20  he right of it. 
20a70 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72 61  ^The UNION opera
20a80 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73 61  tor works the sa
20a90 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e 20  me way as.UNION 
20aa0 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61 74  ALL, except that
20ab0 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
20ac0 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  are removed from
20ad0 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75 6c   the final resul
20ae0 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54 45  t set..^The INTE
20af0 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20 72  RSECT operator r
20b00 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65 72  eturns the inter
20b10 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  section of the r
20b20 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c 65  esults of the le
20b30 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45 4c  ft and.right SEL
20b40 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43 45  ECTs.  ^The EXCE
20b50 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75  PT operator retu
20b60 72 6e 73 20 74 68 65 20 73 75 62 73 65 74 20 6f  rns the subset o
20b70 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  f rows returned 
20b80 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c 45  by the.left SELE
20b90 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  CT that are not 
20ba0 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62 79  also returned by
20bb0 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
20bc0 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63 61  SELECT. ^Duplica
20bd0 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d 6f  te.rows are remo
20be0 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73  ved from the res
20bf0 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45 43  ults of INTERSEC
20c00 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70 65  T and EXCEPT ope
20c10 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74 68  rators before th
20c20 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  e.result set is 
20c30 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46  returned...<p>^F
20c40 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
20c50 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 64  of determining d
20c60 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66 6f  uplicate rows fo
20c70 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  r the results of
20c80 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54   compound.SELECT
20c90 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c 4c   operators, NULL
20ca0 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
20cb0 69 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f 20  idered equal to 
20cc0 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65  other NULL value
20cd0 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20 66  s and.distinct f
20ce0 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c  rom all non-NULL
20cf0 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63 6f   values. ^The co
20d00 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
20d10 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
20d20 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65   .two text value
20d30 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
20d40 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  as if the column
20d50 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e  s of the left an
20d60 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45 4c  d right-hand.SEL
20d70 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ECT statements w
20d80 65 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  ere the left and
20d90 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72   right-hand oper
20da0 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75 61  ands of the equa
20db0 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72 2c  ls (=).operator,
20dc0 20 65 78 63 65 70 74 20 74 68 61 74 20 67 72 65   except that gre
20dd0 61 74 65 72 20 70 72 65 63 65 64 65 6e 63 65 20  ater precedence 
20de0 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20  is not assigned 
20df0 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a  to a collation .
20e00 73 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69  sequence specifi
20e10 65 64 20 77 69 74 68 20 74 68 65 20 70 6f 73 74  ed with the post
20e20 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  fix COLLATE oper
20e30 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e 69  ator. ^No affini
20e40 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  ty.transformatio
20e50 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 74  ns are applied t
20e60 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68 65  o any values whe
20e70 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77 73  n comparing rows
20e80 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63 6f   as part of a.co
20e90 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 0a  mpound SELECT. .
20ea0 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65 65  .<p>^(When three
20eb0 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20   or more simple 
20ec0 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e 6e  SELECTs are conn
20ed0 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d  ected into a com
20ee0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74 68  pound SELECT,.th
20ef0 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65  ey group from le
20f00 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20  ft to right. In 
20f10 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
20f20 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43 22  "A", "B" and "C"
20f30 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65 20   are all.simple 
20f40 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
20f50 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43 29  s, (A op B op C)
20f60 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73   is processed as
20f70 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43 29   ((A op B) op C)
20f80 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  .)^..</p>..<tcl>
20f90 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 65  hd_fragment orde
20fa0 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 3c 2f  rby {order by}</
20fb0 74 63 6c 3e 0a 3c 68 33 3e 4f 52 44 45 52 20 42  tcl>.<h3>ORDER B
20fc0 59 20 61 6e 64 20 4c 49 4d 49 54 2f 4f 46 46 53  Y and LIMIT/OFFS
20fd0 45 54 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a  ET Clauses</h3>.
20fe0 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20  .<p>If a SELECT 
20ff0 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72  statement that r
21000 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e  eturns more than
21010 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f   one row does no
21020 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20  t have an.ORDER 
21030 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f  BY clause, the o
21040 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68  rder in which th
21050 65 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  e rows are retur
21060 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
21070 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43  ..Or, if a SELEC
21080 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  T statement does
21090 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42   have an ORDER B
210a0 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
210b0 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65  he list of.expre
210c0 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20  ssions attached 
210d0 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  to the ORDER BY 
210e0 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72  determine the or
210f0 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
21100 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 74  s.are returned t
21110 6f 20 74 68 65 20 75 73 65 72 2e 20 5e 52 6f 77  o the user. ^Row
21120 73 20 61 72 65 20 66 69 72 73 74 20 73 6f 72 74  s are first sort
21130 65 64 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ed based on the 
21140 72 65 73 75 6c 74 73 20 6f 66 0a 65 76 61 6c 75  results of.evalu
21150 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d  ating the left-m
21160 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ost expression i
21170 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 6c  n the ORDER BY l
21180 69 73 74 2c 20 74 68 65 6e 20 74 69 65 73 20 61  ist, then ties a
21190 72 65 20 62 72 6f 6b 65 6e 0a 62 79 20 65 76 61  re broken.by eva
211a0 6c 75 61 74 69 6e 67 20 74 68 65 20 73 65 63 6f  luating the seco
211b0 6e 64 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70  nd left-most exp
211c0 72 65 73 73 69 6f 6e 20 61 6e 64 20 73 6f 20 6f  ression and so o
211d0 6e 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20  n. The order in 
211e0 77 68 69 63 68 0a 74 77 6f 20 72 6f 77 73 20 66  which.two rows f
211f0 6f 72 20 77 68 69 63 68 20 61 6c 6c 20 4f 52 44  or which all ORD
21200 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
21210 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 65 71  s evaluate to eq
21220 75 61 6c 20 76 61 6c 75 65 73 20 61 72 65 0a 72  ual values are.r
21230 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66  eturned is undef
21240 69 6e 65 64 2e 20 5e 45 61 63 68 20 4f 52 44 45  ined. ^Each ORDE
21250 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
21260 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c  may be optionall
21270 79 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 6f 6e  y followed.by on
21280 65 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64  e of the keyword
21290 73 20 41 53 43 20 28 73 6d 61 6c 6c 65 72 20 76  s ASC (smaller v
212a0 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72 6e  alues are return
212b0 65 64 20 66 69 72 73 74 29 20 6f 72 20 44 45 53  ed first) or DES
212c0 43 20 28 6c 61 72 67 65 72 0a 76 61 6c 75 65 73  C (larger.values
212d0 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66 69   are returned fi
212e0 72 73 74 29 2e 20 5e 49 66 20 6e 65 69 74 68 65  rst). ^If neithe
212f0 72 20 41 53 43 20 6f 72 20 44 45 53 43 20 61 72  r ASC or DESC ar
21300 65 20 73 70 65 63 69 66 69 65 64 2c 20 72 6f 77  e specified, row
21310 73 0a 61 72 65 20 73 6f 72 74 65 64 20 69 6e 20  s.are sorted in 
21320 61 73 63 65 6e 64 69 6e 67 20 28 73 6d 61 6c 6c  ascending (small
21330 65 72 20 76 61 6c 75 65 73 20 66 69 72 73 74 29  er values first)
21340 20 6f 72 64 65 72 20 62 79 20 64 65 66 61 75 6c   order by defaul
21350 74 2e 0a 0a 3c 70 3e 45 61 63 68 20 4f 52 44 45  t...<p>Each ORDE
21360 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
21370 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20  is processed as 
21380 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f  follows:</p>..<o
21390 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  l>.<li><p>^If th
213a0 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
213b0 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73 74  ssion is a const
213c0 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74 68  ant integer K th
213d0 65 6e 20 74 68 65 0a 65 78 70 72 65 73 73 69 6f  en the.expressio
213e0 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  n is considered 
213f0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
21400 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   K-th column of 
21410 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 28  the result set.(
21420 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 75 6d 62  columns are numb
21430 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74  ered from left t
21440 6f 20 72 69 67 68 74 20 73 74 61 72 74 69 6e 67  o right starting
21450 20 77 69 74 68 20 31 29 2e 0a 0a 3c 6c 69 3e 3c   with 1)...<li><
21460 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20  p>^If the ORDER 
21470 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
21480 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 74   an identifier t
21490 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
214a0 74 6f 0a 74 68 65 20 61 6c 69 61 73 20 6f 66 20  to.the alias of 
214b0 6f 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75  one of the outpu
214c0 74 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20  t columns, then 
214d0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
214e0 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 61 6e 20  s considered.an 
214f0 61 6c 69 61 73 20 66 6f 72 20 74 68 61 74 20 63  alias for that c
21500 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e  olumn...<li><p>^
21510 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68  Otherwise, if th
21520 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
21530 73 73 69 6f 6e 20 69 73 20 61 6e 79 20 6f 74 68  ssion is any oth
21540 65 72 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  er expression, i
21550 74 20 0a 69 73 20 65 76 61 6c 75 61 74 65 64 20  t .is evaluated 
21560 61 6e 64 20 74 68 65 20 74 68 65 20 72 65 74 75  and the the retu
21570 72 6e 65 64 20 76 61 6c 75 65 20 75 73 65 64 20  rned value used 
21580 74 6f 20 6f 72 64 65 72 20 74 68 65 20 6f 75 74  to order the out
21590 70 75 74 20 72 6f 77 73 2e 20 5e 49 66 0a 74 68  put rows. ^If.th
215a0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
215b0 6e 74 20 69 73 20 61 20 73 69 6d 70 6c 65 20 53  nt is a simple S
215c0 45 4c 45 43 54 2c 20 74 68 65 6e 20 61 6e 20 4f  ELECT, then an O
215d0 52 44 45 52 20 42 59 20 6d 61 79 20 63 6f 6e 74  RDER BY may cont
215e0 61 69 6e 20 61 6e 79 0a 61 72 62 69 74 72 61 72  ain any.arbitrar
215f0 79 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e  y expressions. ^
21600 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 20  However, if the 
21610 53 45 4c 45 43 54 20 69 73 20 61 20 63 6f 6d 70  SELECT is a comp
21620 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 74 68 65  ound SELECT, the
21630 6e 0a 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  n.ORDER BY expre
21640 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20  ssions that are 
21650 6e 6f 74 20 61 6c 69 61 73 65 73 20 74 6f 20 6f  not aliases to o
21660 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20 6d 75  utput columns mu
21670 73 74 20 62 65 20 65 78 61 63 74 6c 79 0a 74 68  st be exactly.th
21680 65 20 73 61 6d 65 20 61 73 20 61 6e 20 65 78 70  e same as an exp
21690 72 65 73 73 69 6f 6e 20 75 73 65 64 20 61 73 20  ression used as 
216a0 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  an output column
216b0 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f 72  ..</ol>..<p>^For
216c0 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
216d0 20 73 6f 72 74 69 6e 67 20 72 6f 77 73 2c 20 76   sorting rows, v
216e0 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72  alues are compar
216f0 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
21700 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f 6d 70 61  ay.as for [compa
21710 72 69 73 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e  rison expression
21720 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f  s]. The collatio
21730 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20  n sequence used 
21740 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77 6f 20 74  to compare.two t
21750 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64 65  ext values is de
21760 74 65 72 6d 69 6e 65 64 20 61 73 20 66 6f 6c 6c  termined as foll
21770 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69  ows:..<ol>.  <li
21780 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45  ><p>^If the ORDE
21790 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
217a0 69 73 20 61 73 73 69 67 6e 65 64 20 61 20 63 6f  is assigned a co
217b0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
217c0 20 75 73 69 6e 67 0a 20 20 74 68 65 20 70 6f 73   using.  the pos
217d0 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45 20 6f 70  tfix [COLLATE op
217e0 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74 68  erator], then th
217f0 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 6c  e specified coll
21800 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69  ation sequence i
21810 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e  s.  used..  <li>
21820 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  <p>^Otherwise, i
21830 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65  f the ORDER BY e
21840 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
21850 61 6c 69 61 73 20 74 6f 20 61 6e 20 65 78 70 72  alias to an expr
21860 65 73 73 69 6f 6e 0a 20 20 74 68 61 74 20 68 61  ession.  that ha
21870 73 20 62 65 65 6e 20 61 73 73 69 67 6e 65 64 20  s been assigned 
21880 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
21890 65 6e 63 65 20 75 73 69 6e 67 20 74 68 65 20 70  ence using the p
218a0 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f 4c 4c 41  ostfix .  [COLLA
218b0 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68  TE operator], th
218c0 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  en the collation
218d0 20 73 65 71 75 65 6e 63 65 20 61 73 73 69 67 6e   sequence assign
218e0 65 64 20 74 6f 20 74 68 65 20 61 6c 69 61 73 65  ed to the aliase
218f0 64 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20 69  d.  expression i
21900 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70  s used..  <li><p
21910 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  >^Otherwise, if 
21920 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
21930 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6c  ression is a col
21940 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69 61 73 20  umn or an alias 
21950 6f 66 0a 20 20 61 6e 20 65 78 70 72 65 73 73 69  of.  an expressi
21960 6f 6e 20 74 68 61 74 20 69 73 20 61 20 63 6f 6c  on that is a col
21970 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20 64 65  umn, then the de
21980 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
21990 73 65 71 75 65 6e 63 65 20 66 6f 72 0a 20 20 74  sequence for.  t
219a0 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65  he column is use
219b0 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74  d. .  <li><p>^Ot
219c0 68 65 72 77 69 73 65 2c 20 74 68 65 20 5b 42 49  herwise, the [BI
219d0 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e 20  NARY] collation 
219e0 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64  sequence is used
219f0 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61  ..</ol>..<p>In a
21a00 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
21a10 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c 6c 20   statement, all 
21a20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
21a30 69 6f 6e 73 20 61 72 65 20 68 61 6e 64 6c 65 64  ions are handled
21a40 0a 61 73 20 61 6c 69 61 73 65 73 20 66 6f 72 20  .as aliases for 
21a50 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c  one of the resul
21a60 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  t columns of the
21a70 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
21a80 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52 20  ..^(If an ORDER 
21a90 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
21aa0 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20   not an integer 
21ab0 61 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c 69  alias, then SQLi
21ac0 74 65 20 73 65 61 72 63 68 65 73 0a 74 68 65 20  te searches.the 
21ad0 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54  left-most SELECT
21ae0 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64   in the compound
21af0 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f   for a result co
21b00 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68 65  lumn that matche
21b10 73 20 65 69 74 68 65 72 0a 74 68 65 20 73 65 63  s either.the sec
21b20 6f 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75 6c  ond or third rul
21b30 65 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20 6d  es above. If a m
21b40 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
21b50 68 65 20 73 65 61 72 63 68 20 73 74 6f 70 73 20  he search stops 
21b60 61 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73 69  and.the expressi
21b70 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61 73  on is handled as
21b80 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
21b90 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
21ba0 74 68 61 74 20 69 74 20 68 61 73 20 62 65 65 6e  that it has been
21bb0 0a 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74  .matched against
21bc0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65  . Otherwise, the
21bd0 20 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20   next SELECT to 
21be0 74 68 65 20 72 69 67 68 74 20 69 73 20 74 72 69  the right is tri
21bf0 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e  ed, and so on.)^
21c00 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67  .^If no matching
21c10 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20   expression can 
21c20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  be found in the 
21c30 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f  result columns o
21c40 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e  f any.constituen
21c50 74 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73 20  t SELECT, it is 
21c60 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68 20  an error. ^Each 
21c70 74 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45  term of the ORDE
21c80 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 70  R BY clause is.p
21c90 72 6f 63 65 73 73 65 64 20 73 65 70 61 72 61 74  rocessed separat
21ca0 65 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20 6d  ely and may be m
21cb0 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 20 72  atched against r
21cc0 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72  esult columns fr
21cd0 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45 4c  om different.SEL
21ce0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69  ECT statements i
21cf0 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c  n the compound.<
21d00 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d 49  /p>..<p>The LIMI
21d10 54 20 63 6c 61 75 73 65 20 69 73 20 75 73 65 64  T clause is used
21d20 20 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70 70   to place an upp
21d30 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20  er bound on the 
21d40 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72  number of rows.r
21d50 65 74 75 72 6e 65 64 20 62 79 20 61 20 53 45 4c  eturned by a SEL
21d60 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
21d70 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72 65  Any scalar expre
21d80 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73 65  ssion may be use
21d90 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54 20  d in the .LIMIT 
21da0 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67 20  clause, so long 
21db0 61 73 20 69 74 20 65 76 61 6c 75 61 74 65 73 20  as it evaluates 
21dc0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  to an integer or
21dd0 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63 61   a value that ca
21de0 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20  n be.losslessly 
21df0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
21e00 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68 65  integer. ^If the
21e10 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
21e20 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c 20  uates to a NULL 
21e30 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f 74  .value or any ot
21e40 68 65 72 20 76 61 6c 75 65 20 74 68 61 74 20 63  her value that c
21e50 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
21e60 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
21e70 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e 0a   an integer, an.
21e80 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
21e90 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49 54  d. ^If the LIMIT
21ea0 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
21eb0 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74  uates to a negat
21ec0 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e 20  ive value,.then 
21ed0 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70 65  there is no uppe
21ee0 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e  r bound on the n
21ef0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65  umber of rows re
21f00 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77 69  turned. ^Otherwi
21f10 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20 72  se, the.SELECT r
21f20 65 74 75 72 6e 73 20 74 68 65 20 66 69 72 73 74  eturns the first
21f30 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20 72   N rows of its r
21f40 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c 20  esult set only, 
21f50 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 76  where N is the v
21f60 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c 49  alue.that the LI
21f70 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65  MIT expression e
21f80 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f 72  valuates to. ^Or
21f90 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 20  , if the SELECT 
21fa0 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 0a  statement would.
21fb0 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e  return less than
21fc0 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20   N rows without 
21fd0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
21fe0 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20  then the entire 
21ff0 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72 65  result set is.re
22000 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68  turned. ..<p>^Th
22010 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74 74  e expression att
22020 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70 74  ached to the opt
22030 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c 61  ional OFFSET cla
22040 75 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f 6c  use that may fol
22050 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75  low a.LIMIT clau
22060 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76 61  se must also eva
22070 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74 65  luate to an inte
22080 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65 20  ger, or a value 
22090 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73  that can be.loss
220a0 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
220b0 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   to an integer. 
220c0 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f  ^If an expressio
220d0 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20  n has an OFFSET 
220e0 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68 65  clause,.then the
220f0 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72   first M rows ar
22100 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  e omitted from t
22110 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 72 65  he result set re
22120 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
22130 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20 61  LECT.statement a
22140 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72 6f  nd the next N ro
22150 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 2c  ws are returned,
22160 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20 61   where M and N a
22170 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 68  re the values th
22180 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61 6e  at.the OFFSET an
22190 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20  d LIMIT clauses 
221a0 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65 73  evaluate to, res
221b0 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c 20  pectively. ^Or, 
221c0 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77 6f  if the SELECT.wo
221d0 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73 20  uld return less 
221e0 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69 66  than M+N rows if
221f0 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76 65   it did not have
22200 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
22210 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74 20   then the.first 
22220 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70  M rows are skipp
22230 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  ed and the remai
22240 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61 6e  ning rows (if an
22250 79 29 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e  y) are returned.
22260 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54 20   ^If the.OFFSET 
22270 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 73  clause evaluates
22280 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76   to a negative v
22290 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74  alue, the result
222a0 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 61  s are the same a
222b0 73 20 69 66 20 69 74 0a 68 61 64 20 65 76 61 6c  s if it.had eval
222c0 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a  uated to zero...
222d0 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20 61  <p>^Instead of a
222e0 20 73 65 70 61 72 61 74 65 20 4f 46 46 53 45 54   separate OFFSET
222f0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49 4d   clause, the LIM
22300 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70  IT clause may sp
22310 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61 72  ecify two.scalar
22320 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65 70   expressions sep
22330 61 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d 6d  arated by a comm
22340 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  a. ^In this case
22350 2c 20 74 68 65 20 66 69 72 73 74 20 65 78 70 72  , the first expr
22360 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20 61  ession.is used a
22370 73 20 74 68 65 20 4f 46 46 53 45 54 20 65 78 70  s the OFFSET exp
22380 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
22390 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c 49  second as the LI
223a0 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  MIT expression..
223b0 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72 2d  This is counter-
223c0 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77 68  intuitive, as wh
223d0 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46 46  en using the OFF
223e0 53 45 54 20 63 6c 61 75 73 65 20 74 68 65 20 73  SET clause the s
223f0 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77 6f  econd of.the two
22400 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20   expressions is 
22410 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20 74  the OFFSET and t
22420 68 65 20 66 69 72 73 74 20 74 68 65 20 4c 49 4d  he first the LIM
22430 49 54 2e 20 54 68 69 73 20 69 73 20 69 6e 74 65  IT. This is inte
22440 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61 78  ntional.- it max
22450 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62 69  imizes compatibi
22460 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72 20  lity with other 
22470 53 51 4c 20 64 61 74 61 62 61 73 65 20 73 79 73  SQL database sys
22480 74 65 6d 73 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  tems...<tcl>.###
22490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
224a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
224b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
224c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
224d0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
224e0 69 6f 6e 20 55 50 44 41 54 45 20 75 70 64 61 74  ion UPDATE updat
224f0 65 20 7b 55 50 44 41 54 45 20 2a 55 50 44 41 54  e {UPDATE *UPDAT
22500 45 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  Es}..BubbleDiagr
22510 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 20 31  am update-stmt 1
22520 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71  .BubbleDiagram q
22530 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
22540 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  ame.</tcl>..<p>^
22550 41 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  An UPDATE statem
22560 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 6d  ent is used to m
22570 6f 64 69 66 79 20 61 20 73 75 62 73 65 74 20 6f  odify a subset o
22580 66 20 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f  f the values sto
22590 72 65 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72 20  red in .zero or 
225a0 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65  more rows of the
225b0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
225c0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68  identified by th
225d0 65 20 0a 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d  e .<i>qualified-
225e0 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73  table-name</i> s
225f0 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
22600 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
22610 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49  tatement...<p>^I
22620 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
22630 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20  tement does not 
22640 68 61 76 65 20 61 20 57 48 45 52 45 20 63 6c 61  have a WHERE cla
22650 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69 6e  use, all rows in
22660 20 74 68 65 0a 74 61 62 6c 65 20 61 72 65 20 6d   the.table are m
22670 6f 64 69 66 69 65 64 20 62 79 20 74 68 65 20 55  odified by the U
22680 50 44 41 54 45 2e 20 5e 4f 74 68 65 72 77 69 73  PDATE. ^Otherwis
22690 65 2c 20 74 68 65 20 55 50 44 41 54 45 20 61 66  e, the UPDATE af
226a0 66 65 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73 65  fects only those
226b0 0a 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20  .rows for which 
226c0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76  the result of ev
226d0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 57 48 45  aluating the WHE
226e0 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73  RE clause expres
226f0 73 69 6f 6e 20 61 73 20 61 20 0a 5b 62 6f 6f 6c  sion as a .[bool
22700 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c 62  ean expression|b
22710 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
22720 6e 20 69 73 20 74 72 75 65 5d 2e 20 5e 49 74 20  n is true]. ^It 
22730 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20  is not an error 
22740 69 66 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61  if the.WHERE cla
22750 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 65 76 61  use does not eva
22760 6c 75 61 74 65 20 74 6f 20 74 72 75 65 20 66 6f  luate to true fo
22770 72 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65  r any row in the
22780 20 74 61 62 6c 65 20 2d 20 74 68 69 73 20 6a 75   table - this ju
22790 73 74 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68  st.means that th
227a0 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
227b0 6e 74 20 61 66 66 65 63 74 73 20 7a 65 72 6f 20  nt affects zero 
227c0 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f  rows...<p>The mo
227d0 64 69 66 69 63 61 74 69 6f 6e 73 20 6d 61 64 65  difications made
227e0 20 74 6f 20 65 61 63 68 20 72 6f 77 20 61 66 66   to each row aff
227f0 65 63 74 65 64 20 62 79 20 61 6e 20 55 50 44 41  ected by an UPDA
22800 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65  TE statement are
22810 0a 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74  .determined by t
22820 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67  he list of assig
22830 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67  nments following
22840 20 74 68 65 20 53 45 54 20 6b 65 79 77 6f 72 64   the SET keyword
22850 2e 20 45 61 63 68 0a 61 73 73 69 67 6e 6d 65 6e  . Each.assignmen
22860 74 20 73 70 65 63 69 66 69 65 73 20 61 20 63 6f  t specifies a co
22870 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68 65  lumn name to the
22880 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65 71 75   left of the equ
22890 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 0a 73  als sign and a.s
228a0 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
228b0 20 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 5e   to the right. ^
228c0 46 6f 72 20 65 61 63 68 20 61 66 66 65 63 74 65  For each affecte
228d0 64 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64  d row, the named
228e0 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74   columns.are set
228f0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20 66   to the values f
22900 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69  ound by evaluati
22910 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
22920 64 69 6e 67 20 73 63 61 6c 61 72 20 0a 65 78 70  ding scalar .exp
22930 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20  ressions. ^If a 
22940 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61  single column-na
22950 6d 65 20 61 70 70 65 61 72 73 20 6d 6f 72 65 20  me appears more 
22960 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65  than once in the
22970 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d   list of.assignm
22980 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  ent expressions,
22990 20 61 6c 6c 20 62 75 74 20 74 68 65 20 72 69 67   all but the rig
229a0 68 74 6d 6f 73 74 20 6f 63 63 75 72 65 6e 63 65  htmost occurence
229b0 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f   is ignored. ^Co
229c0 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f  lumns.that do no
229d0 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
229e0 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65  list of assignme
229f0 6e 74 73 20 61 72 65 20 6c 65 66 74 20 75 6e 6d  nts are left unm
22a00 6f 64 69 66 69 65 64 2e 20 5e 54 68 65 20 73 63  odified. ^The sc
22a10 61 6c 61 72 0a 65 78 70 72 65 73 73 69 6f 6e 73  alar.expressions
22a20 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20 63 6f   may refer to co
22a30 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f 77  lumns of the row
22a40 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e 20   being updated. 
22a50 5e 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c  ^In this case al
22a60 6c 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73 73  l.scalar express
22a70 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74  ions are evaluat
22a80 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73  ed before any as
22a90 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61  signments are ma
22aa0 64 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74  de...<p>^The opt
22ab0 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63  ional conflict-c
22ac0 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65  lause allows the
22ad0 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74   user to nominat
22ae0 65 20 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e  e a specific.con
22af0 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
22b00 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
22b10 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72  rithm to use dur
22b20 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44  ing this one UPD
22b30 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66  ATE command..Ref
22b40 65 72 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f  er to the sectio
22b50 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43  n entitled [ON C
22b60 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
22b70 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
22b80 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69  ion...<h3>Restri
22b90 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45  ctions on UPDATE
22ba0 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
22bb0 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45  in CREATE TRIGGE
22bc0 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66  R</h3>..<p>The f
22bd0 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f  ollowing additio
22be0 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72  nal syntax restr
22bf0 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f  ictions apply to
22c00 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
22c10 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69  ts that.occur wi
22c20 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
22c30 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47   a [CREATE TRIGG
22c40 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ER] statement.  
22c50 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
22c60 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61  ^The <i>table-na
22c70 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66 69 65 64  me</i> specified
22c80 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 55   as part of an U
22c90 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
22ca0 77 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20 74  within.      a t
22cb0 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74  rigger body must
22cc0 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e   be unqualified.
22cd0 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64   ^(In other word
22ce0 73 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69 3e  s, the.      <i>
22cf0 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69  database-name</i
22d00 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78  ><b>.</b> prefix
22d10 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61   on the table na
22d20 6d 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  me of the UPDATE
22d30 20 69 73 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c   is.      not al
22d40 6c 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69  lowed within tri
22d50 67 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73  ggers.)^ ^Unless
22d60 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68   the table to wh
22d70 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 0a  ich the trigger.
22d80 20 20 20 20 20 20 69 73 20 61 74 74 61 63 68 65        is attache
22d90 64 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50  d is in the TEMP
22da0 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74   database, the t
22db0 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74  able being updat
22dc0 65 64 20 62 79 20 74 68 65 0a 20 20 20 20 20 20  ed by the.      
22dd0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
22de0 6d 75 73 74 20 72 65 73 69 64 65 20 69 6e 20 74  must reside in t
22df0 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
22e00 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20   as it. ^If the 
22e10 74 61 62 6c 65 0a 20 20 20 20 20 20 74 6f 20 77  table.      to w
22e20 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
22e30 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20   is attached is 
22e40 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  in the TEMP data
22e50 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  base, then the. 
22e60 20 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64       unqualified
22e70 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
22e80 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  le being updated
22e90 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20   is resolved in 
22ea0 74 68 65 20 73 61 6d 65 20 77 61 79 0a 20 20 20  the same way.   
22eb0 20 20 20 61 73 20 69 74 20 69 73 20 66 6f 72 20     as it is for 
22ec0 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74  a top-level stat
22ed0 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68  ement (by search
22ee0 69 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45  ing first the TE
22ef0 4d 50 20 64 61 74 61 62 61 73 65 2c 0a 20 20 20  MP database,.   
22f00 20 20 20 74 68 65 6e 20 74 68 65 20 6d 61 69 6e     then the main
22f10 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20   database, then 
22f20 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62 61  any other databa
22f30 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72  ses in the order
22f40 20 74 68 65 79 20 77 65 72 65 0a 20 20 20 20 20   they were.     
22f50 20 61 74 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c   attached)...  <
22f60 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  li><p>^The INDEX
22f70 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
22f80 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
22f90 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e  e not allowed on
22fa0 20 55 50 44 41 54 45 0a 20 20 20 20 20 20 73 74   UPDATE.      st
22fb0 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
22fc0 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20  triggers.</p>.. 
22fd0 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d   <li><p>^The LIM
22fe0 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  IT and ORDER BY 
22ff0 63 6c 61 75 73 65 73 20 66 6f 72 20 55 50 44 41  clauses for UPDA
23000 54 45 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74  TE are unsupport
23010 65 64 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20  ed within.      
23020 74 72 69 67 67 65 72 73 2c 20 72 65 67 61 72 64  triggers, regard
23030 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  less of the comp
23040 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20  ilation options 
23050 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51  used to build SQ
23060 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33  Lite..</ul>..<h3
23070 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20  >Optional LIMIT 
23080 61 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c 61  and ORDER BY Cla
23090 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  uses</h3>..<p>^(
230a0 49 66 20 53 51 4c 69 74 65 20 69 73 20 62 75 69  If SQLite is bui
230b0 6c 74 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  lt with the [SQL
230c0 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
230d0 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a  E_DELETE_LIMIT].
230e0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
230f0 69 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79 6e  ion then the syn
23100 74 61 78 20 6f 66 20 74 68 65 20 55 50 44 41 54  tax of the UPDAT
23110 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65  E statement is e
23120 78 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70 74  xtended.with opt
23130 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61  ional ORDER BY a
23140 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
23150 29 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  )^ as follows:</
23160 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  p>..<tcl>BubbleD
23170 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74  iagram update-st
23180 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e  mt-limited</tcl>
23190 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41  ..<p>^If an UPDA
231a0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
231b0 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
231c0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
231d0 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74  ber of rows that
231e0 0a 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65 64  .will be updated
231f0 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61   is found by eva
23200 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f  luating the acco
23210 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73  mpanying express
23220 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a  ion and casting.
23230 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
23240 20 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74   value. ^A negat
23250 69 76 65 20 76 61 6c 75 65 20 69 73 20 69 6e 74  ive value is int
23260 65 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20  erpreted as "no 
23270 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20  limit"...<p>^If 
23280 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
23290 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
232a0 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  o non-negative v
232b0 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e  alue <i>N</i> an
232c0 64 20 74 68 65 0a 55 50 44 41 54 45 20 73 74 61  d the.UPDATE sta
232d0 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52  tement has an OR
232e0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
232f0 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
23300 74 20 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74  t would be updat
23310 65 64 20 69 6e 0a 74 68 65 20 61 62 73 65 6e 63  ed in.the absenc
23320 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
23330 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64  lause are sorted
23340 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
23350 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 74  e ORDER BY and t
23360 68 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69  he.first <i>N</i
23370 3e 20 75 70 64 61 74 65 64 2e 20 5e 28 49 66 20  > updated. ^(If 
23380 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
23390 6d 65 6e 74 20 61 6c 73 6f 20 68 61 73 20 61 6e  ment also has an
233a0 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a   OFFSET clause,.
233b0 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c  then it is simil
233c0 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61  arly evaluated a
233d0 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 20 69 6e  nd cast to an in
233e0 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
233f0 74 68 65 20 4f 46 46 53 45 54 0a 65 78 70 72 65  the OFFSET.expre
23400 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
23410 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  to a non-negativ
23420 65 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e  e value <i>M</i>
23430 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  , then the first
23440 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61   <i>M</i>.rows a
23450 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74  re skipped and t
23460 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e  he following <i>
23470 4e 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64 61 74  N</i> rows updat
23480 65 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c  ed instead.)^..<
23490 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45  p>^If the UPDATE
234a0 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e   statement has n
234b0 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
234c0 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
234d0 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 75   that.would be u
234e0 70 64 61 74 65 64 20 69 6e 20 74 68 65 20 61 62  pdated in the ab
234f0 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
23500 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73  IT clause are as
23510 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72  sembled in an.ar
23520 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65  bitrary order be
23530 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68  fore applying th
23540 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
23550 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65  ET clauses to de
23560 74 65 72 6d 69 6e 65 20 0a 77 68 69 63 68 20 61  termine .which a
23570 72 65 20 61 63 74 75 61 6c 6c 79 20 75 70 64 61  re actually upda
23580 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f  ted...<p>^(The O
23590 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f  RDER BY clause o
235a0 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  n an UPDATE stat
235b0 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e  ement is used on
235c0 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ly to determine 
235d0 77 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20  which.rows fall 
235e0 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54  within the LIMIT
235f0 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77  . The order in w
23600 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f  hich rows are mo
23610 64 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72  dified is arbitr
23620 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69  ary.and is not i
23630 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65  nfluenced by the
23640 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
23650 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  .)^..<tcl>.#####
23660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
236a0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
236b0 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20  n VACUUM vacuum 
236c0 56 41 43 55 55 4d 0a 0a 42 75 62 62 6c 65 44 69  VACUUM..BubbleDi
236d0 61 67 72 61 6d 20 76 61 63 75 75 6d 2d 73 74 6d  agram vacuum-stm
236e0 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  t 1.</tcl>..<p>.
236f0 20 20 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d    The VACUUM com
23700 6d 61 6e 64 20 72 65 62 75 69 6c 64 73 20 74 68  mand rebuilds th
23710 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
23720 65 2e 20 54 68 65 72 65 20 61 72 65 20 73 65 76  e. There are sev
23730 65 72 61 6c 20 0a 20 20 72 65 61 73 6f 6e 73 20  eral .  reasons 
23740 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d  an application m
23750 69 67 68 74 20 64 6f 20 74 68 69 73 3a 0a 0a 3c  ight do this:..<
23760 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  ul>.  <li> <p> ^
23770 55 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73  Unless SQLite is
23780 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22 61 75 74   running in "aut
23790 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c 22 20 6d  o_vacuum=FULL" m
237a0 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c 61 72 67  ode, when a larg
237b0 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74 20 6f 66  e.     amount of
237c0 20 64 61 74 61 20 69 73 20 64 65 6c 65 74 65 64   data is deleted
237d0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
237e0 73 65 20 66 69 6c 65 20 69 74 20 6c 65 61 76 65  se file it leave
237f0 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79 0a 20  s behind empty. 
23800 20 20 20 20 73 70 61 63 65 2c 20 6f 72 20 22 66      space, or "f
23810 72 65 65 22 20 64 61 74 61 62 61 73 65 20 70 61  ree" database pa
23820 67 65 73 2e 20 54 68 69 73 20 6d 65 61 6e 73 20  ges. This means 
23830 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
23840 65 20 6d 69 67 68 74 0a 20 20 20 20 20 62 65 20  e might.     be 
23850 6c 61 72 67 65 72 20 74 68 61 6e 20 73 74 72 69  larger than stri
23860 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79 2e 20  ctly necessary. 
23870 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20  ^Running VACUUM 
23880 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20 0a  to rebuild the .
23890 20 20 20 20 20 64 61 74 61 62 61 73 65 20 72 65       database re
238a0 63 6c 61 69 6d 73 20 74 68 69 73 20 73 70 61 63  claims this spac
238b0 65 20 61 6e 64 20 72 65 64 75 63 65 73 20 74 68  e and reduces th
238c0 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  e size of the da
238d0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 0a 20 20  tabase file...  
238e0 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65 71 75 65  <li> <p> ^Freque
238f0 6e 74 20 69 6e 73 65 72 74 73 2c 20 75 70 64 61  nt inserts, upda
23900 74 65 73 2c 20 61 6e 64 20 64 65 6c 65 74 65 73  tes, and deletes
23910 20 63 61 6e 20 63 61 75 73 65 20 74 68 65 20 64   can cause the d
23920 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20 20  atabase file.   
23930 20 20 74 6f 20 62 65 63 6f 6d 65 20 66 72 61 67    to become frag
23940 6d 65 6e 74 65 64 20 2d 20 77 68 65 72 65 20 64  mented - where d
23950 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ata for a single
23960 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
23970 69 73 20 73 63 61 74 74 65 72 65 64 20 0a 20 20  is scattered .  
23980 20 20 20 61 72 6f 75 6e 64 20 74 68 65 20 64 61     around the da
23990 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 52 75  tabase file. ^Ru
239a0 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 65 6e 73  nning VACUUM ens
239b0 75 72 65 73 20 74 68 61 74 20 65 61 63 68 20 74  ures that each t
239c0 61 62 6c 65 20 61 6e 64 0a 20 20 20 20 20 69 6e  able and.     in
239d0 64 65 78 20 69 73 20 6c 61 72 67 65 6c 79 20 73  dex is largely s
239e0 74 6f 72 65 64 20 63 6f 6e 74 69 67 75 6f 75 73  tored contiguous
239f0 6c 79 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ly within the da
23a00 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 49 6e  tabase file. ^In
23a10 20 73 6f 6d 65 0a 20 20 20 20 20 63 61 73 65 73   some.     cases
23a20 2c 20 56 41 43 55 55 4d 20 6d 61 79 20 61 6c 73  , VACUUM may als
23a30 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
23a40 62 65 72 20 6f 66 20 70 61 72 74 69 61 6c 6c 79  ber of partially
23a50 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 69 6e   filled pages in
23a60 0a 20 20 20 20 20 74 68 65 20 64 61 74 61 62 61  .     the databa
23a70 73 65 2c 20 72 65 64 75 63 69 6e 67 20 74 68 65  se, reducing the
23a80 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
23a90 61 62 61 73 65 20 66 69 6c 65 20 66 75 72 74 68  abase file furth
23aa0 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20  er...  <li> <p> 
23ab0 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 20 64  ^Normally, the d
23ac0 61 74 61 62 61 73 65 20 5b 70 61 67 65 5f 73 69  atabase [page_si
23ad0 7a 65 5d 20 61 6e 64 20 77 68 65 74 68 65 72 20  ze] and whether 
23ae0 6f 72 20 6e 6f 74 20 74 68 65 20 64 61 74 61 62  or not the datab
23af0 61 73 65 0a 20 20 20 20 20 73 75 70 70 6f 72 74  ase.     support
23b00 73 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  s [auto_vacuum] 
23b10 6d 75 73 74 20 62 65 20 63 6f 6e 66 69 67 75 72  must be configur
23b20 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 64 61  ed before the da
23b30 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a 20  tabase file is. 
23b40 20 20 20 20 61 63 74 75 61 6c 6c 79 20 63 72 65      actually cre
23b50 61 74 65 64 2e 20 5e 48 6f 77 65 76 65 72 2c 20  ated. ^However, 
23b60 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 77 72 69  when not in [wri
23b70 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f  te-ahead log] mo
23b80 64 65 2c 20 74 68 65 20 0a 20 20 20 20 20 5b 70  de, the .     [p
23b90 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f 72  age_size] and/or
23ba0 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70   [auto_vacuum] p
23bb0 72 6f 70 65 72 74 69 65 73 20 6f 66 20 61 6e 20  roperties of an 
23bc0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
23bd0 65 20 6d 61 79 20 62 65 0a 20 20 20 20 20 63 68  e may be.     ch
23be0 61 6e 67 65 64 20 62 79 20 75 73 69 6e 67 20 74  anged by using t
23bf0 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 20 70 72  he [page_size pr
23c00 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a 65 5d 20  agma|page_size] 
23c10 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20 20 5b 61   and/or .     [a
23c20 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72 61 67 6d  uto_vacuum|pragm
23c30 61 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70  a auto_vacuum] p
23c40 72 61 67 6d 61 73 20 61 6e 64 20 74 68 65 6e 20  ragmas and then 
23c50 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41 43 55  immediately VACU
23c60 55 4d 69 6e 67 0a 20 20 20 20 20 74 68 65 20 64  UMing.     the d
23c70 61 74 61 62 61 73 65 2e 20 5e 57 68 65 6e 20 69  atabase. ^When i
23c80 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
23c90 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c 79 20 74  og] mode, only t
23ca0 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  he [auto_vacuum]
23cb0 0a 20 20 20 20 20 73 75 70 70 6f 72 74 20 70 72  .     support pr
23cc0 6f 70 65 72 74 79 20 63 61 6e 20 62 65 20 63 68  operty can be ch
23cd0 61 6e 67 65 64 20 75 73 69 6e 67 20 56 41 43 55  anged using VACU
23ce0 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28  UM..</ul>..<p>^(
23cf0 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b  VACUUM only work
23d00 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s on the main da
23d10 74 61 62 61 73 65 2e 20 49 74 20 69 73 20 6e 6f  tabase. It is no
23d20 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 56 41  t possible to VA
23d30 43 55 55 4d 20 61 6e 0a 61 74 74 61 63 68 65 64  CUUM an.attached
23d40 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 29   database file.)
23d50 5e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55  ^..<p>^The VACUU
23d60 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20  M command works 
23d70 62 79 20 63 6f 70 79 69 6e 67 20 74 68 65 20 63  by copying the c
23d80 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
23d90 61 74 61 62 61 73 65 20 69 6e 74 6f 0a 61 20 74  atabase into.a t
23da0 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73  emporary databas
23db0 65 20 66 69 6c 65 20 61 6e 64 20 74 68 65 6e 20  e file and then 
23dc0 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20  overwriting the 
23dd0 6f 72 69 67 69 6e 61 6c 20 77 69 74 68 20 74 68  original with th
23de0 65 20 0a 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  e .contents of t
23df0 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c  he temporary fil
23e00 65 2e 20 5e 57 68 65 6e 20 6f 76 65 72 77 72 69  e. ^When overwri
23e10 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61  ting the origina
23e20 6c 2c 20 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f  l, a rollback.jo
23e30 75 72 6e 61 6c 20 6f 72 20 5b 77 72 69 74 65 2d  urnal or [write-
23e40 61 68 65 61 64 20 6c 6f 67 5d 20 57 41 4c 20 66  ahead log] WAL f
23e50 69 6c 65 20 69 73 20 75 73 65 64 20 6a 75 73 74  ile is used just
23e60 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
23e70 66 6f 72 20 61 6e 79 0a 6f 74 68 65 72 20 64 61  for any.other da
23e80 74 61 62 61 73 65 20 74 72 61 6e 73 61 63 74 69  tabase transacti
23e90 6f 6e 2e 20 5e 54 68 69 73 20 6d 65 61 6e 73 20  on. ^This means 
23ea0 74 68 61 74 20 77 68 65 6e 20 56 41 43 55 55 4d  that when VACUUM
23eb0 69 6e 67 20 61 20 64 61 74 61 62 61 73 65 2c 20  ing a database, 
23ec0 0a 61 73 20 6d 75 63 68 20 61 73 20 74 77 69 63  .as much as twic
23ed0 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  e the size of th
23ee0 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62  e original datab
23ef0 61 73 65 20 66 69 6c 65 20 69 73 20 72 65 71 75  ase file is requ
23f00 69 72 65 64 20 69 6e 20 66 72 65 65 0a 64 69 73  ired in free.dis
23f10 6b 20 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68  k space...<p>^Th
23f20 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64  e VACUUM command
23f30 20 6d 61 79 20 63 68 61 6e 67 65 20 74 68 65 20   may change the 
23f40 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49 44 73 5d  [ROWID | ROWIDs]
23f50 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
23f60 6e 79 0a 74 61 62 6c 65 73 20 74 68 61 74 20 64  ny.tables that d
23f70 6f 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 65 78  o not have an ex
23f80 70 6c 69 63 69 74 20 5b 49 4e 54 45 47 45 52 20  plicit [INTEGER 
23f90 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f  PRIMARY KEY]..</
23fa0 70 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43 55 55 4d  p>..<p>^A VACUUM
23fb0 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68   will fail if th
23fc0 65 72 65 20 69 73 20 61 6e 20 6f 70 65 6e 20 74  ere is an open t
23fd0 72 61 6e 73 61 63 74 69 6f 6e 2c 20 6f 72 20 69  ransaction, or i
23fe0 66 20 74 68 65 72 65 20 61 72 65 20 6f 6e 65 20  f there are one 
23ff0 6f 72 0a 6d 6f 72 65 20 61 63 74 69 76 65 20 53  or.more active S
24000 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  QL statements wh
24010 65 6e 20 69 74 20 69 73 20 72 75 6e 2e 0a 0a 3c  en it is run...<
24020 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c 69 74 65  p>^(As of SQLite
24030 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e   version 3.1, an
24040 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
24050 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d  using the VACUUM
24060 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65 63 6c   command to.recl
24070 61 69 6d 20 73 70 61 63 65 20 61 66 74 65 72 20  aim space after 
24080 64 61 74 61 20 68 61 73 20 62 65 65 6e 20 64 65  data has been de
24090 6c 65 74 65 64 20 69 73 20 61 75 74 6f 2d 76 61  leted is auto-va
240a0 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c  cuum mode, enabl
240b0 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b 61 75  ed using.the [au
240c0 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d  to_vacuum] pragm
240d0 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61 75 74 6f  a.)^ ^When [auto
240e0 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e 61 62  _vacuum] is enab
240f0 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61  led for a databa
24100 73 65 0a 66 72 65 65 20 70 61 67 65 73 20 6d 61  se.free pages ma
24110 79 20 62 65 20 72 65 63 6c 61 69 6d 65 64 20 61  y be reclaimed a
24120 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20 64 61  fter deleting da
24130 74 61 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20  ta, causing the 
24140 66 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2c 0a  file to shrink,.
24150 77 69 74 68 6f 75 74 20 72 65 62 75 69 6c 64 69  without rebuildi
24160 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  ng the entire da
24170 74 61 62 61 73 65 20 75 73 69 6e 67 20 56 41 43  tabase using VAC
24180 55 55 4d 2e 20 20 48 6f 77 65 76 65 72 2c 20 75  UUM.  However, u
24190 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61 63 75 75  sing.[auto_vacuu
241a0 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74 6f 20 65  m] can lead to e
241b0 78 74 72 61 20 64 61 74 61 62 61 73 65 20 66 69  xtra database fi
241c0 6c 65 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e  le fragmentation
241d0 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f 76 61 63  .  And [auto_vac
241e0 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63 6f  uum].does not co
241f0 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c 79 20  mpact partially 
24200 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f 66 20  filled pages of 
24210 74 68 65 20 64 61 74 61 62 61 73 65 20 61 73 20  the database as 
24220 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a 3c 2f  VACUUM does...</
24230 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  p>...<tcl>.#####
24240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24280 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
24290 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 69  n {INDEXED BY} i
242a0 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44 45 58  ndexedby {{INDEX
242b0 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45  ED BY} {NOT INDE
242c0 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70  XED}}..</tcl>.<p
242d0 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59  >^The INDEXED BY
242e0 20 70 68 72 61 73 65 20 69 73 20 61 20 53 51 4c   phrase is a SQL
242f0 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 75 6e 64   extension found
24300 20 6f 6e 6c 79 20 69 6e 20 53 51 4c 69 74 65 20   only in SQLite 
24310 77 68 69 63 68 20 63 61 6e 0a 62 65 20 75 73 65  which can.be use
24320 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
24330 20 74 68 65 20 63 6f 72 72 65 63 74 20 69 6e 64   the correct ind
24340 69 63 65 73 20 61 72 65 20 62 65 69 6e 67 20 75  ices are being u
24350 73 65 64 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45  sed on a [DELETE
24360 5d 2c 0a 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20  ],.[SELECT], or 
24370 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65  [UPDATE] stateme
24380 6e 74 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44  nt..^The INDEXED
24390 20 42 59 20 70 68 72 61 73 65 20 61 6c 77 61 79   BY phrase alway
243a0 73 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 6e 61  s follows the na
243b0 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20 74 68  me of a table th
243c0 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a 62  at SQLite will.b
243d0 65 20 72 65 61 64 69 6e 67 2e 20 20 54 68 65 20  e reading.  The 
243e0 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
243f0 65 20 63 61 6e 20 62 65 20 73 65 65 6e 20 69 6e  e can be seen in
24400 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
24410 79 6e 74 61 78 0a 64 69 61 67 72 61 6d 73 3a 3c  yntax.diagrams:<
24420 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 42 75 62 62 6c  /p>..<tcl>.Bubbl
24430 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69  eDiagram qualifi
24440 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 42 75  ed-table-name.Bu
24450 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6e 67  bbleDiagram sing
24460 6c 65 2d 73 6f 75 72 63 65 0a 3c 2f 74 63 6c 3e  le-source.</tcl>
24470 0a 0a 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45 58  ..<p>^The "INDEX
24480 45 44 20 42 59 20 69 6e 64 65 78 2d 6e 61 6d 65  ED BY index-name
24490 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  " clause specifi
244a0 65 73 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65  es that the name
244b0 64 20 69 6e 64 65 78 0a 6d 75 73 74 20 62 65 20  d index.must be 
244c0 75 73 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  used in order to
244d0 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73 20   look up values 
244e0 6f 6e 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  on the preceding
244f0 20 74 61 62 6c 65 2e 0a 5e 49 66 20 69 6e 64 65   table..^If inde
24500 78 2d 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20  x-name does not 
24510 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20  exist or cannot 
24520 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
24530 71 75 65 72 79 2c 20 74 68 65 6e 0a 74 68 65 20  query, then.the 
24540 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66 20 74  preparation of t
24550 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
24560 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e   fails..^(The "N
24570 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61 75  OT INDEXED" clau
24580 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61  se specifies tha
24590 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c  t no index shall
245a0 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61 63   be used when.ac
245b0 63 65 73 73 69 6e 67 20 74 68 65 20 70 72 65 63  cessing the prec
245c0 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63  eding table, inc
245d0 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69  luding implied i
245e0 6e 64 69 63 65 73 20 63 72 65 61 74 65 20 62 79  ndices create by
245f0 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d  .UNIQUE and PRIM
24600 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  ARY KEY constrai
24610 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 74  nts.  However, t
24620 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  he INTEGER PRIMA
24630 52 59 20 4b 45 59 0a 63 61 6e 20 73 74 69 6c 6c  RY KEY.can still
24640 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f 6b   be used to look
24650 20 75 70 20 65 6e 74 72 69 65 73 20 65 76 65 6e   up entries even
24660 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45 58   when "NOT INDEX
24670 45 44 22 20 69 73 20 73 70 65 63 69 66 69 65 64  ED" is specified
24680 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65  .)^</p>..<p>Some
24690 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
246a0 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e 6f  gines provide no
246b0 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e 74  n-standard "hint
246c0 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68 69  " mechanisms whi
246d0 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74  ch.can be used t
246e0 6f 20 67 69 76 65 20 74 68 65 20 71 75 65 72 79  o give the query
246f0 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65 73   optimizer clues
24700 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69   about what indi
24710 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75 73  ces it should.us
24720 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c  e for a particul
24730 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ar statement.  T
24740 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61 75  he INDEX BY clau
24750 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20  se of SQLite is 
24760 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20  .<em>not</em> a 
24770 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69 73  hinting mechanis
24780 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64 20  m and it should 
24790 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 73  not be used as s
247a0 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45  uch..^The INDEXE
247b0 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65 73  D BY clause does
247c0 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f 70   not give the op
247d0 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61 62  timizer hints ab
247e0 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65 78 0a  out which index.
247f0 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65 73  to use; it gives
24800 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 61   the optimizer a
24810 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66 20   requirement of 
24820 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20 75  which index to u
24830 73 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65 72  se..^If the quer
24840 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 75  y optimizer is u
24850 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65  nable to use the
24860 20 69 6e 64 65 78 20 73 70 65 63 69 66 69 65 64   index specified
24870 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42 59   by the.INDEX BY
24880 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
24890 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61 69  e query will fai
248a0 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e  l with an error.
248b0 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 44  </p>..<p>The IND
248c0 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69  EXED BY clause i
248d0 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69  s <em>not</em> i
248e0 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
248f0 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70 65  in tuning.the pe
24900 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20 71  rformance of a q
24910 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65 6e  uery.  The inten
24920 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45 44  t of the INDEXED
24930 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74 6f   BY clause is.to
24940 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69 6d   raise a run-tim
24950 65 20 65 72 72 6f 72 20 69 66 20 61 20 73 63 68  e error if a sch
24960 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63 68  ema change, such
24970 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72 0a   as dropping or.
24980 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65  creating an inde
24990 78 2c 20 63 61 75 73 65 73 20 74 68 65 20 71 75  x, causes the qu
249a0 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20 74  ery plan for a t
249b0 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71 75  ime-sensitive qu
249c0 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20 20  ery.to change.  
249d0 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63  The INDEXED BY c
249e0 6c 61 75 73 65 20 69 73 20 64 65 73 69 67 6e 65  lause is designe
249f0 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63 74  d to help detect
24a00 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75 65  .undesirable que
24a10 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73 20  ry plan changes 
24a20 64 75 72 69 6e 67 20 72 65 67 72 65 73 73 69 6f  during regressio
24a30 6e 20 74 65 73 74 69 6e 67 2e 0a 44 65 76 65 6c  n testing..Devel
24a40 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e 69  opers are admoni
24a50 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c 6c  shed to omit all
24a60 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20   use of INDEXED 
24a70 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69 63  BY during.applic
24a80 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69 6d  ation design, im
24a90 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 65  plementation, te
24aa0 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69 6e  sting, and tunin
24ab0 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20 42  g.  If.INDEXED B
24ac0 59 20 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  Y is to be used 
24ad0 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75 6c  at all, it shoul
24ae0 64 20 62 65 20 69 6e 73 65 72 74 65 64 20 61 74  d be inserted at
24af0 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f 66   the very.end of
24b00 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74   the development
24b10 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22 6c   process when "l
24b20 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20 64  ocking down" a d
24b30 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  esign.</p>..<h3>
24b40 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a  See Also:</h3>..
24b50 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  <p>The [sqlite3_
24b60 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 43  stmt_status()] C
24b70 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 74  /C++ interface t
24b80 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 68 65  ogether with the
24b90 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  .[SQLITE_STMTSTA
24ba0 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45  TUS_FULLSCAN_STE
24bb0 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 53  P] and [SQLITE_S
24bc0 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 20  TMTSTATUS_SORT] 
24bd0 76 65 72 62 73 0a 63 61 6e 20 62 65 20 75 73 65  verbs.can be use
24be0 64 20 74 6f 20 64 65 74 65 63 74 20 61 74 20 72  d to detect at r
24bf0 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e 20  un-time when an 
24c00 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 73  SQL statement is
24c10 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66 65   not.making effe
24c20 63 74 69 76 65 20 75 73 65 20 6f 66 20 69 6e 64  ctive use of ind
24c30 69 63 65 73 2e 20 20 4d 61 6e 79 20 61 70 70 6c  ices.  Many appl
24c40 69 63 61 74 69 6f 6e 73 20 6d 61 79 20 70 72 65  ications may pre
24c50 66 65 72 20 74 6f 0a 75 73 65 20 74 68 65 20 5b  fer to.use the [
24c60 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
24c70 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  tus()] interface
24c80 20 74 6f 20 64 65 74 65 63 74 20 69 6e 64 65 78   to detect index
24c90 20 6d 69 73 75 73 65 0a 72 61 74 68 65 72 20 74   misuse.rather t
24ca0 68 61 6e 20 74 68 65 20 49 4e 44 45 58 45 44 20  han the INDEXED 
24cb0 42 59 20 70 68 72 61 73 65 20 64 65 73 63 72 69  BY phrase descri
24cc0 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 0a 3c  bed here.</p>..<
24cd0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
24ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24d20 23 23 0a 23 20 41 20 6c 69 73 74 20 6f 66 20 6b  ##.# A list of k
24d30 65 79 77 6f 72 64 73 2e 20 20 41 20 61 73 74 65  eywords.  A aste
24d40 72 69 73 6b 20 6f 63 63 75 72 73 20 61 66 74 65  risk occurs afte
24d50 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20 69 66  r the keyword if
24d60 20 69 74 20 69 73 20 6f 6e 0a 23 20 74 68 65 20   it is on.# the 
24d70 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a 23  fallback list..#
24d80 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69 73  .set keyword_lis
24d90 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41 42  t [lsort {.   AB
24da0 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20 20  ORT.   ACTION.  
24db0 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a 20 20   ADD.   AFTER.  
24dc0 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20 20   ALL.   ALTER.  
24dd0 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44 0a   ANALYZE.   AND.
24de0 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20 20 20     AS.   ASC.   
24df0 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f 49 4e  ATTACH.   AUTOIN
24e00 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52  CREMENT.   BEFOR
24e10 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20 42 45  E.   BEGIN.   BE
24e20 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20 43  TWEEN.   BY.   C
24e30 41 53 43 41 44 45 0a 20 20 20 43 41 53 45 0a 20  ASCADE.   CASE. 
24e40 20 20 43 41 53 54 0a 20 20 20 43 48 45 43 4b 0a    CAST.   CHECK.
24e50 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43 4f     COLLATE.   CO
24e60 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a 20  LUMN.   COMMIT. 
24e70 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43 4f    CONFLICT.   CO
24e80 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45 41  NSTRAINT.   CREA
24e90 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43  TE.   CROSS.   C
24ea0 55 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20 43  URRENT_DATE.   C
24eb0 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 43  URRENT_TIME.   C
24ec0 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
24ed0 0a 20 20 20 44 41 54 41 42 41 53 45 0a 20 20 20  .   DATABASE.   
24ee0 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52  DEFAULT.   DEFER
24ef0 52 45 44 0a 20 20 20 44 45 46 45 52 52 41 42 4c  RED.   DEFERRABL
24f00 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20 44  E.   DELETE.   D
24f10 45 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20 20  ESC.   DETACH.  
24f20 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52 4f   DISTINCT.   DRO
24f30 50 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43 48  P.   END.   EACH
24f40 0a 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41  .   ELSE.   ESCA
24f50 50 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20  PE.   EXCEPT.   
24f60 45 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58 49  EXCLUSIVE.   EXI
24f70 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a 20  STS.   EXPLAIN. 
24f80 20 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20 20    FAIL.   FOR.  
24f90 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d   FOREIGN.   FROM
24fa0 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42  .   FULL.   GLOB
24fb0 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41 56  .   GROUP.   HAV
24fc0 49 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47 4e  ING.   IF.   IGN
24fd0 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54 45  ORE.   IMMEDIATE
24fe0 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a  .   IN.   INDEX.
24ff0 20 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49 4e     INDEXED.   IN
25000 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45 52  ITIALLY.   INNER
25010 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e  .   INSERT.   IN
25020 53 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53 45  STEAD.   INTERSE
25030 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49 53  CT.   INTO.   IS
25040 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f  .   ISNULL.   JO
25050 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45 46  IN.   KEY.   LEF
25060 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49 4d  T.   LIKE.   LIM
25070 49 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20 4e  IT.   MATCH.   N
25080 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20 20  ATURAL.   NO.   
25090 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20  NOT.   NOTNULL. 
250a0 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20 20    NULL.   OF.   
250b0 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20 20  OFFSET.   ON.   
250c0 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20 4f  OR.   ORDER.   O
250d0 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20 20  UTER.   PLAN.   
250e0 50 52 41 47 4d 41 0a 20 20 20 50 52 49 4d 41 52  PRAGMA.   PRIMAR
250f0 59 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52 41  Y.   QUERY.   RA
25100 49 53 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45  ISE.   REFERENCE
25110 53 0a 20 20 20 52 45 47 45 58 50 0a 20 20 20 52  S.   REGEXP.   R
25120 45 49 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53  EINDEX.   RELEAS
25130 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52  E.   RENAME.   R
25140 45 50 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49  EPLACE.   RESTRI
25150 43 54 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52  CT.   RIGHT.   R
25160 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20  OLLBACK.   ROW. 
25170 20 20 53 41 56 45 50 4f 49 4e 54 0a 20 20 20 53    SAVEPOINT.   S
25180 45 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20  ELECT.   SET.   
25190 54 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20 20  TABLE.   TEMP.  
251a0 20 54 45 4d 50 4f 52 41 52 59 0a 20 20 20 54 48   TEMPORARY.   TH
251b0 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e  EN.   TO.   TRAN
251c0 53 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47  SACTION.   TRIGG
251d0 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55  ER.   UNION.   U
251e0 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a  NIQUE.   UPDATE.
251f0 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55     USING.   VACU
25200 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20  UM.   VALUES.   
25210 56 49 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a  VIEW.   VIRTUAL.
25220 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45     WHEN.   WHERE
25230 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c 44  .}]..hd_puts {<D
25240 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73 65  IV class="pdf_se
25250 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e  ction">}.Section
25260 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72 64   {SQLite Keyword
25270 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a 53  s} keywords {{*S
25280 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51 4c  QL keyword} {SQL
25290 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f 70   keywords}}.hd_p
252a0 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74  uts {</DIV>}.</t
252b0 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20  cl>..<p>The SQL 
252c0 73 74 61 6e 64 61 72 64 20 73 70 65 63 69 66 69  standard specifi
252d0 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72  es a huge number
252e0 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69   of keywords whi
252f0 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73  ch may not.be us
25300 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20  ed as the names 
25310 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63  of tables, indic
25320 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61 74  es, columns, dat
25330 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65 66  abases, user-def
25340 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c 20  ined.functions, 
25350 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72 74  collations, virt
25360 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65  ual table module
25370 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  s, or any other 
25380 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54 68  named object..Th
25390 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72  e list of keywor
253a0 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68  ds is so long th
253b0 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63 61  at few people ca
253c0 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d 20  n remember them 
253d0 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53 51  all..For most SQ
253e0 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61 66  L code, your saf
253f0 65 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e 65  est bet is to ne
25400 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67 6c  ver use any Engl
25410 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f 72  ish language.wor
25420 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  d as the name of
25430 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20   a user-defined 
25440 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  object.</p>..<p>
25450 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 75  If you want to u
25460 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73 20  se a keyword as 
25470 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64  a name, you need
25480 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20 54   to quote it.  T
25490 68 65 72 65 0a 61 72 65 20 74 68 72 65 65 20 77  here.are three w
254a0 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b  ays of quoting k
254b0 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74  eywords in SQLit
254c0 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f  e:</p>..<p>.<blo
254d0 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e  ckquote>.<table>
254e0 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
254f0 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f  ="top"><b>'keywo
25500 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20  rd'</b></td><td 
25510 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
25520 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64  ..<td>^A keyword
25530 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
25540 73 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c 69  s is a string li
25550 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  teral.</td></tr>
25560 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
25570 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77  n="top"><b>"keyw
25580 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord"</b></td><td
25590 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
255a0 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65  eyword in double
255b0 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69 64  -quotes is an id
255c0 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f  entifier.</td></
255d0 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61  tr>..<tr>.<td va
255e0 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23  lign="top"><b>&#
255f0 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c  91;keyword&#93;<
25600 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
25610 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
25620 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71  d enclosed in sq
25630 75 61 72 65 20 62 72 61 63 6b 65 74 73 20 69 73  uare brackets is
25640 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65   .        an ide
25650 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69  ntifier.  This i
25660 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  s not standard S
25670 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e  QL.  This quotin
25680 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20  g mechanism.    
25690 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d      is used by M
256a0 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c  S Access and SQL
256b0 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20 69   Server and is i
256c0 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74  ncluded in SQLit
256d0 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f  e for.        co
256e0 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64  mpatibility.</td
256f0 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
25700 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
25710 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23 39  >&#96;keyword&#9
25720 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  6;</b></td><td><
25730 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
25740 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e  word enclosed in
25750 20 67 72 61 76 65 20 61 63 63 65 6e 74 73 20 28   grave accents (
25760 41 53 43 49 49 20 63 6f 64 65 20 39 36 29 20 69  ASCII code 96) i
25770 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64  s .        an id
25780 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20  entifier.  This 
25790 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  is not standard 
257a0 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69  SQL.  This quoti
257b0 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20  ng mechanism.   
257c0 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by 
257d0 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e 63  MySQL and is inc
257e0 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  luded in SQLite 
257f0 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  for.        comp
25800 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c  atibility.</td><
25810 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
25820 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e  blockquote>.</p>
25830 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69 65  ..<p>For resilie
25840 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e  nce when confron
25850 74 65 64 20 77 69 74 68 20 68 69 73 74 6f 72 69  ted with histori
25860 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  cal SQL statemen
25870 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20  ts, SQLite.will 
25880 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20 74  sometimes bend t
25890 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73  he quoting rules
258a0 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c   above:</p>..<ul
258b0 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b  >.<li><p>^If a k
258c0 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65  eyword in single
258d0 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e  .quotes (ex: <b>
258e0 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e  'key'</b> or <b>
258f0 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75  'glob'</b>) is u
25900 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74  sed in a context
25910 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74 69   where.an identi
25920 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20  fier is allowed 
25930 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69  but where a stri
25940 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f  ng literal is no
25950 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a  t allowed, then.
25960 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64  the token is und
25970 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e  erstood to be an
25980 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73 74   identifier inst
25990 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ead of a string 
259a0 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c  literal..</p></l
259b0 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61  i>..<li><p>^If a
259c0 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62   keyword in doub
259d0 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c  le.quotes (ex: <
259e0 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c  b>"key"</b> or <
259f0 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73  b>"glob"</b>) is
25a00 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65   used in a conte
25a10 78 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e 6e  xt where.it cann
25a20 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20 74  ot be resolved t
25a30 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  o an identifier 
25a40 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69  but where a stri
25a50 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c  ng literal.is al
25a60 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65 20  lowed, then the 
25a70 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74  token is underst
25a80 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72 69  ood to be a stri
25a90 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74 65  ng literal inste
25aa0 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69 66  ad.of an identif
25ab0 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f  ier.</p></li>.</
25ac0 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d  ul>..<p>Programm
25ad0 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e 65  ers are cautione
25ae0 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68 65  d not to use the
25af0 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73 20   two exceptions 
25b00 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65  described in.the
25b10 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65 74   previous bullet
25b20 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a 65  s.  We emphasize
25b30 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73 74   that they exist
25b40 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c   only so that ol
25b50 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64  d.and ill-formed
25b60 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
25b70 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63 74  will run correct
25b80 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72 73  ly.  Future vers
25b90 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d  ions of.SQLite m
25ba0 69 67 68 74 20 63 68 61 6e 67 65 20 74 6f 20 72  ight change to r
25bb0 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73 74  aise errors inst
25bc0 65 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e 67  ead of accepting
25bd0 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a 73   the malformed.s
25be0 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72 65  tatements covere
25bf0 64 20 62 79 20 74 68 65 20 65 78 63 65 70 74 69  d by the excepti
25c00 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a  ons above.</p>..
25c10 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20  <p>.SQLite adds 
25c20 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f  new keywords fro
25c30 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77  m time to time w
25c40 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e 20  hen it takes on 
25c50 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f  new features..So
25c60 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72   to prevent your
25c70 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67   code from being
25c80 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72   broken by futur
25c90 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20  e enhancements, 
25ca0 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61  you should.norma
25cb0 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69 64  lly quote any id
25cc0 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73  entifier that is
25cd0 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67   an English lang
25ce0 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e 20  uage word, even 
25cf0 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61  if.you do not ha
25d00 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ve to..</p>..<p>
25d10 0a 54 68 65 20 6c 69 73 74 20 62 65 6c 6f 77 20  .The list below 
25d20 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69 62  shows all possib
25d30 6c 65 20 6b 65 79 77 6f 72 64 73 20 75 73 65 64  le keywords used
25d40 20 62 79 20 61 6e 79 20 62 75 69 6c 64 20 6f 66   by any build of
25d50 0a 53 51 4c 69 74 65 20 72 65 67 61 72 64 6c 65  .SQLite regardle
25d60 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d 74  ss of [compile-t
25d70 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a  ime options].  .
25d80 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c 65 20  Most reasonable 
25d90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 75  configurations u
25da0 73 65 20 6d 6f 73 74 20 6f 72 20 61 6c 6c 20 6f  se most or all o
25db0 66 20 74 68 65 73 65 20 6b 65 79 77 6f 72 64 73  f these keywords
25dc0 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79 77 6f  ,.but some keywo
25dd0 72 64 73 20 6d 61 79 20 62 65 20 6f 6d 69 74 74  rds may be omitt
25de0 65 64 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e 67  ed when SQL lang
25df0 75 61 67 65 20 66 65 61 74 75 72 65 73 20 61 72  uage features ar
25e00 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52 65  e.disabled..^(Re
25e10 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
25e20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
25e30 66 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79 20  figuration, any 
25e40 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20  identifier that 
25e50 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66 6f  is not on.the fo
25e60 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64 5f  llowing <tcl>hd_
25e70 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6b  puts [llength $k
25e80 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74 63  eyword_list]</tc
25e90 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74 20  l> element.list 
25ea0 69 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64  is not a keyword
25eb0 20 74 6f 20 74 68 65 20 53 51 4c 20 70 61 72 73   to the SQL pars
25ec0 65 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f  er in SQLite:.</
25ed0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
25ee0 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 31  .<table width="1
25ef0 30 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c  00%"><tr>.<td al
25f00 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67  ign="left" valig
25f10 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32  n="top" width="2
25f20 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e  0%">.<tcl>.set n
25f30 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f   [llength $keywo
25f40 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f  rd_list].set nCo
25f50 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78  l 5.set nRow [ex
25f60 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29  pr {($n+$nCol-1)
25f70 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30  /$nCol}].set i 0
25f80 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24 6b  .foreach word $k
25f90 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20  eyword_list {.  
25fa0 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b  if {$i==$nRow} {
25fb0 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f  .    hd_puts "</
25fc0 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22  td><td valign=\"
25fd0 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65  top\" align=\"le
25fe0 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25  ft\" width=\"20%
25ff0 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31  \">".    set i 1
26000 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
26010 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f  incr i.  }.  hd_
26020 70 75 74 73 20 22 24 77 6f 72 64 3c 62 72 3e 5c  puts "$word<br>\
26030 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64  n".}.</tcl>.</td
26040 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f  ></tr></table></
26050 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a        blockquote>)^.