Documentation Source Text

Hex Artifact Content
Login

Artifact de8ee14028144ae3c680c00222b935caacc5d088:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f  .    {comment co
03d0: 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c  mment}.    {EXPL
03e0: 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20  AIN explain}.   
03f0: 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70   {expression exp
0400: 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54  r}.    {{BEGIN T
0410: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0420: 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43  saction}.    {{C
0430: 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f  OMMIT TRANSACTIO
0440: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43  N} transaction C
0450: 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44  OMMIT}.    {{END
0460: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
0470: 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54  ansaction COMMIT
0480: 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b  }.    {{ROLLBACK
0490: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
04a0: 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41  ansaction ROLLBA
04b0: 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49  CK}.    {SAVEPOI
04c0: 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20  NT savepoint}.  
04d0: 20 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45    {{RELEASE SAVE
04e0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
04f0: 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20   SAVEPOINT}.    
0500: 7b 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68  {PRAGMA pragma.h
0510: 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f  tml}.    {{ON CO
0520: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
0530: 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43  onflict}.    {{C
0540: 52 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61  REATE VIEW} crea
0550: 74 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52  teview}.    {{DR
0560: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
0570: 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20  w}.    {{CREATE 
0580: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
0590: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52  rigger}.    {{DR
05a0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
05b0: 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41  trigger}.    {{A
05c0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  TTACH DATABASE} 
05d0: 61 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45  attach}.    {{DE
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
05f0: 65 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45  etach}.      {RE
0600: 49 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20  INDEX reindex}. 
0610: 20 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45     {{ALTER TABLE
0620: 7d 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20  } altertable}.  
0630: 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61    {{ANALYZE} ana
0640: 6c 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45  lyze}.    {{INDE
0650: 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62  XED BY} indexedb
0660: 79 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61  y}.    {{aggrega
0670: 74 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67  te functions} ag
0680: 67 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20  gfunc aggfunc}. 
0690: 20 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69     {{core functi
06a0: 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f  ons} corefunc co
06b0: 72 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61  refunc}.    {{da
06c0: 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
06d0: 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20  tions} datefunc 
06e0: 64 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b  datefunc}.    {k
06f0: 65 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73  eywords keywords
0700: 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d   {SQL keywords}}
0710: 0a 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f  .  }.  set lang_
0720: 73 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65  section_break [e
0730: 78 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24  xpr {([llength $
0740: 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73  lang_section_lis
0750: 74 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65  t]+2)/3}].  fore
0760: 61 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c  ach {section} [l
0770: 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64  sort -index 0 -d
0780: 69 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f  ictionary $lang_
0790: 73 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a  section_list] {.
07a0: 20 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74    foreach {s_tit
07b0: 6c 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24  le s_tag s_kw} $
07c0: 73 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20  section {}.  if 
07d0: 7b 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a  {$s_kw == ""} {.
07e0: 20 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f      set s_kw $s_
07f0: 74 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b  title.  }.  if {
0800: 24 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e  $s_tag=="pragma.
0810: 68 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74  html"} {.    set
0820: 20 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20   url $s_tag.  } 
0830: 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75  else {.    set u
0840: 72 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68  rl lang_$s_tag.h
0850: 74 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73  tml.  }.  hd_res
0860: 6f 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b  olve "<li>\[$s_k
0870: 77 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69  w|$s_title\]</li
0880: 3e 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66  >".  incr i.  if
0890: 20 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74   {$i==$lang_sect
08a0: 69 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d  ion_break || $i=
08b0: 3d 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e  =2*$lang_section
08c0: 5f 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64  _break} {.    hd
08d0: 5f 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64  _puts "</ul></td
08e0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  ><td valign=\"to
08f0: 70 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a  p\"><ul>".  }.}.
0900: 3c 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64  </tcl>.</ul></td
0910: 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a  ></tr></table>..
0920: 3c 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73  <p>^The routines
0930: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0940: 65 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65  e_v2()], [sqlite
0950: 33 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73  3_prepare()],.[s
0960: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
0970: 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72  ()], [sqlite3_pr
0980: 65 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a  epare16_v2()], .
0990: 5b 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d  [sqlite3_exec()]
09a0: 2c 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67  , and [sqlite3_g
09b0: 65 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65  et_table()] acce
09c0: 70 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  pt.an SQL statem
09d0: 65 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74  ent list (sql-st
09e0: 6d 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69  mt-list) which i
09f0: 73 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65  s a semicolon-se
0a00: 70 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20  parated.list of 
0a10: 73 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a  statements.</p>.
0a20: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
0a30: 72 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73  ram sql-stmt-lis
0a40: 74 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68  t</tcl>..<p>Each
0a50: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69   SQL statement i
0a60: 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
0a70: 6c 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61  list is an insta
0a80: 6e 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f  nce of the.follo
0a90: 77 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  wing:</p>..<tcl>
0aa0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71  BubbleDiagram sq
0ab0: 6c 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74  l-stmt</tcl>..<t
0ac0: 63 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f  cl>.proc Operato
0ad0: 72 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74  r {name} {.  ret
0ae0: 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72  urn "<font color
0af0: 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69  =\"#2c2cf0\"><bi
0b00: 67 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66  g>$name</big></f
0b10: 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e  ont>".}.proc Non
0b20: 74 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20  terminal {name} 
0b30: 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c  {.  return "<i><
0b40: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66  font color=\"#ff
0b50: 33 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f  3434\">$name</fo
0b60: 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20  nt></i>".}.proc 
0b70: 4b 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b  Keyword {name} {
0b80: 0a 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74  .  return "<font
0b90: 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30   color=\"#2c2cf0
0ba0: 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22  \">$name</font>"
0bb0: 0a 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20  .}.proc Example 
0bc0: 7b 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75  {text} {.  hd_pu
0bd0: 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  ts "<blockquote>
0be0: 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e  <pre>$text</pre>
0bf0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d  </blockquote>".}
0c00: 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b  ..proc Section {
0c10: 6e 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f  name label keywo
0c20: 72 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  rds} {.  global 
0c30: 44 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d  DOC.  hd_close_m
0c40: 61 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61  ain.  hd_open_ma
0c50: 69 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68  in lang_$label.h
0c60: 74 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20  tml.  hd_header 
0c70: 22 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61  "SQLite Query La
0c80: 6e 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24  nguage: $name" $
0c90: 44 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69  DOC/pages/lang.i
0ca0: 6e 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77  n.  eval hd_keyw
0cb0: 6f 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20  ords $keywords. 
0cc0: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b   if {[lsearch $k
0cd0: 65 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d  eywords $name] =
0ce0: 3d 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68  = -1 && [lsearch
0cf0: 20 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d   $keywords *$nam
0d00: 65 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20  e] == -1} {.    
0d10: 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73  eval hd_keywords
0d20: 20 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20   { $name }.  }. 
0d30: 20 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c   hd_puts {<h1 al
0d40: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c  ign="center">SQL
0d50: 20 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42   As Understood B
0d60: 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20  y SQLite</h1>}. 
0d70: 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20   hd_puts {<p><a 
0d80: 68 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22  href="lang.html"
0d90: 3e 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a  >[Top]</a></p>}.
0da0: 20 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24    hd_puts "<h2>$
0db0: 6e 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23  name</h2>".}..##
0dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
0e10: 63 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42  ction {ALTER TAB
0e20: 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b  LE} altertable {
0e30: 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a  {ALTER TABLE} {*
0e40: 41 4c 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44  ALTER}}..BubbleD
0e50: 69 61 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62  iagram alter-tab
0e60: 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  le-stmt 1.</tcl>
0e70: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70  ..<p>SQLite supp
0e80: 6f 72 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73  orts a limited s
0e90: 75 62 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54  ubset of ALTER T
0ea0: 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20  ABLE..The ALTER 
0eb0: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  TABLE command in
0ec0: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74   SQLite allows t
0ed0: 68 65 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d  he user to renam
0ee0: 65 20 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20  e a table.or to 
0ef0: 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
0f00: 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20   to an existing 
0f10: 74 61 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74  table. It is not
0f20: 20 70 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e   possible.to ren
0f30: 61 6d 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 72 65  ame a column, re
0f40: 6d 6f 76 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f  move a column, o
0f50: 72 20 61 64 64 20 6f 72 20 72 65 6d 6f 76 65 20  r add or remove 
0f60: 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 72 6f 6d  constraints from
0f70: 20 61 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a   a table..</p>..
0f80: 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e 41 4d 45  <p> ^(The RENAME
0f90: 20 54 4f 20 73 79 6e 74 61 78 20 69 73 20 75 73   TO syntax is us
0fa0: 65 64 20 74 6f 20 72 65 6e 61 6d 65 20 74 68 65  ed to rename the
0fb0: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
0fc0: 64 20 62 79 20 0a 3c 69 3e 26 23 39 31 3b 64 61  d by .<i>&#91;da
0fd0: 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33  tabase-name.&#93
0fe0: 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  ;table-name</i> 
0ff0: 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62 6c 65 2d  to <i>new-table-
1000: 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54 68 69 73  name</i>.)^.This
1010: 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74   command .cannot
1020: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65   be used to move
1030: 20 61 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e   a table between
1040: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1050: 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e  ses, only to ren
1060: 61 6d 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74  ame .a table wit
1070: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
1080: 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  abase.</p>..<p> 
1090: 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20 62 65  ^If the table be
10a0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20  ing renamed has 
10b0: 74 72 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69  triggers or indi
10c0: 63 65 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20  ces, then these 
10d0: 72 65 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20  remain.attached 
10e0: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 66 74  to the table aft
10f0: 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20 72  er it has been r
1100: 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77 65 76 65  enamed.  ^Howeve
1110: 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  r, if there are.
1120: 61 6e 79 20 76 69 65 77 20 64 65 66 69 6e 69 74  any view definit
1130: 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65  ions, or stateme
1140: 6e 74 73 20 65 78 65 63 75 74 65 64 20 62 79 20  nts executed by 
1150: 74 72 69 67 67 65 72 73 20 74 68 61 74 20 72 65  triggers that re
1160: 66 65 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65  fer to.the table
1170: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20   being renamed, 
1180: 74 68 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75  these are not au
1190: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69  tomatically modi
11a0: 66 69 65 64 20 74 6f 20 75 73 65 20 74 68 65 20  fied to use the 
11b0: 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20  new.table name. 
11c0: 49 66 20 74 68 69 73 20 69 73 20 72 65 71 75 69  If this is requi
11d0: 72 65 64 2c 20 74 68 65 20 74 72 69 67 67 65 72  red, the trigger
11e0: 73 20 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69  s or view defini
11f0: 74 69 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72  tions must be.dr
1200: 6f 70 70 65 64 20 61 6e 64 20 72 65 63 72 65 61  opped and recrea
1210: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ted to use the n
1220: 65 77 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79  ew table name by
1230: 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   hand..</p>..<p>
1240: 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
1250: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
1260: 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  e .[foreign_keys
1270: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
1280: 64 5d 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20  d] when a table 
1290: 69 73 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e  is renamed, then
12a0: 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65   any.[foreign-ke
12b0: 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52  y-clause | REFER
12c0: 45 4e 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69  ENCES clauses] i
12d0: 6e 20 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74  n any table (eit
12e0: 68 65 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65  her the.table be
12f0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73  ing renamed or s
1300: 6f 6d 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29  ome other table)
1310: 0a 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74  .that refer to t
1320: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1330: 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66  enamed are modif
1340: 69 65 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f  ied to refer .to
1350: 20 74 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62   the renamed tab
1360: 6c 65 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61  le by its new na
1370: 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44  me...<p> ^The AD
1380: 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a  D COLUMN syntax.
1390: 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 61  is used to add a
13a0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   new column to a
13b0: 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
13c0: 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  ..^The new colum
13d0: 6e 20 69 73 20 61 6c 77 61 79 73 20 61 70 70 65  n is always appe
13e0: 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  nded to the end 
13f0: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  of the list of e
1400: 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  xisting columns.
1410: 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66  .The [column-def
1420: 5d 20 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74  ] rule defines t
1430: 68 65 20 63 68 61 72 61 63 74 65 72 69 73 74 69  he characteristi
1440: 63 73 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f  cs of the new co
1450: 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20  lumn..^(The new 
1460: 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20  column may take 
1470: 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73  any of the forms
1480: 20 70 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20   permissible in 
1490: 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  a [CREATE TABLE]
14a0: 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68  .statement, with
14b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
14c0: 65 73 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c  estrictions:)^.<
14d0: 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c  ul>.<li>^The col
14e0: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
14f0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f   a PRIMARY KEY o
1500: 72 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  r UNIQUE constra
1510: 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54  int.</li>.<li>^T
1520: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1530: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
1540: 20 76 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e   value of CURREN
1550: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
1560: 44 41 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45  DATE, .    CURRE
1570: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72  NT_TIMESTAMP, or
1580: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
1590: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f  n parentheses.</
15a0: 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f  li>.<li>^If a NO
15b0: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
15c0: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
15d0: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
15e0: 6d 75 73 74 20 68 61 76 65 20 61 0a 20 20 20 20  must have a.    
15f0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74  default value ot
1600: 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c  her than NULL..<
1610: 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  li>^If [foreign 
1620: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1630: 20 61 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65   are [foreign_ke
1640: 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62  ys pragma | enab
1650: 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63  led] and.    a c
1660: 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f  olumn with a [fo
1670: 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65  reign-key-clause
1680: 20 7c 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c   | REFERENCES cl
1690: 61 75 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64  ause].    is add
16a0: 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  ed, the column m
16b0: 75 73 74 20 68 61 76 65 20 61 20 64 65 66 61 75  ust have a defau
16c0: 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c  lt value of NULL
16d0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74  ..</ul>..<p>^Not
16e0: 65 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e  e also that when
16f0: 20 61 64 64 69 6e 67 20 61 20 5b 43 48 45 43 4b   adding a [CHECK
1700: 20 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68   constraint], th
1710: 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  e CHECK constrai
1720: 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64  nt.is not tested
1730: 20 61 67 61 69 6e 73 74 20 70 72 65 65 78 69 73   against preexis
1740: 74 69 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65  ting rows of the
1750: 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73 20 63 61   table..^This ca
1760: 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 74 61  n result in a ta
1770: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
1780: 73 20 64 61 74 61 20 74 68 61 74 0a 69 73 20 69  s data that.is i
1790: 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74  n violation of t
17a0: 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  he CHECK constra
17b0: 69 6e 74 2e 20 20 46 75 74 75 72 65 20 76 65 72  int.  Future ver
17c0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
17d0: 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 74 6f 20  might.change to 
17e0: 76 61 6c 69 64 61 74 65 20 43 48 45 43 4b 20 63  validate CHECK c
17f0: 6f 6e 73 74 72 61 69 6e 74 73 20 61 73 20 74 68  onstraints as th
1800: 65 79 20 61 72 65 20 61 64 64 65 64 2e 3c 2f 70  ey are added.</p
1810: 3e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 65 63 75  >..<p> The execu
1820: 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65  tion time of the
1830: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
1840: 6d 61 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64  mand is independ
1850: 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e  ent of.the amoun
1860: 74 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65  t of data in the
1870: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54   table.  The ALT
1880: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
1890: 20 72 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79   runs as quickly
18a0: 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68  .on a table with
18b0: 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73   10 million rows
18c0: 20 61 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61   as it does on a
18d0: 20 74 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f   table with 1 ro
18e0: 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65  w..</p>..<p>Afte
18f0: 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73  r ADD COLUMN has
1900: 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64   been run on a d
1910: 61 74 61 62 61 73 65 2c 20 74 68 61 74 20 64 61  atabase, that da
1920: 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a  tabase will not.
1930: 62 65 20 72 65 61 64 61 62 6c 65 20 62 79 20 53  be readable by S
1940: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1950: 31 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2e  1.3 and earlier.
1960: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
19c0: 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61  on {ANALYZE} ana
19d0: 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a 42 75  lyze ANALYZE..Bu
19e0: 62 62 6c 65 44 69 61 67 72 61 6d 20 61 6e 61 6c  bbleDiagram anal
19f0: 79 7a 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  yze-stmt 1.</tcl
1a00: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c  >..<p> ^The ANAL
1a10: 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68  YZE command gath
1a20: 65 72 73 20 73 74 61 74 69 73 74 69 63 73 20 61  ers statistics a
1a30: 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64 0a  bout tables and.
1a40: 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72  indices and stor
1a50: 65 73 20 74 68 65 20 63 6f 6c 6c 65 63 74 65 64  es the collected
1a60: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20   information.in 
1a70: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 73  a special tables
1a80: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1a90: 20 77 68 65 72 65 20 74 68 65 20 71 75 65 72 79   where the query
1aa0: 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e 20 75   optimizer can u
1ab0: 73 65 0a 74 68 65 6d 20 74 6f 20 68 65 6c 70 20  se.them to help 
1ac0: 6d 61 6b 65 20 62 65 74 74 65 72 20 71 75 65 72  make better quer
1ad0: 79 20 70 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63  y planning choic
1ae0: 65 73 2e 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d  es..^If no argum
1af0: 65 6e 74 73 20 61 72 65 20 67 69 76 65 6e 2c 20  ents are given, 
1b00: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1b10: 61 62 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79  abases are.analy
1b20: 7a 65 64 2e 20 20 5e 49 66 20 61 20 64 61 74 61  zed.  ^If a data
1b30: 62 61 73 65 20 6e 61 6d 65 20 69 73 20 67 69 76  base name is giv
1b40: 65 6e 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  en as the argume
1b50: 6e 74 2c 20 74 68 65 6e 20 61 6c 6c 20 74 61 62  nt, then all tab
1b60: 6c 65 73 0a 61 6e 64 20 69 6e 64 69 63 65 73 20  les.and indices 
1b70: 69 6e 20 74 68 61 74 20 6f 6e 65 20 64 61 74 61  in that one data
1b80: 62 61 73 65 20 61 72 65 20 61 6e 61 6c 79 7a 65  base are analyze
1b90: 64 2e 20 20 0a 5e 49 66 20 74 68 65 20 61 72 67  d.  .^If the arg
1ba0: 75 6d 65 6e 74 20 69 73 20 61 20 74 61 62 6c 65  ument is a table
1bb0: 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79   name, then only
1bc0: 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 20   that table and 
1bd0: 74 68 65 0a 69 6e 64 69 63 65 73 20 61 73 73 6f  the.indices asso
1be0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
1bf0: 20 74 61 62 6c 65 20 61 72 65 20 61 6e 61 6c 79   table are analy
1c00: 7a 65 64 2e 20 20 5e 49 66 20 74 68 65 20 61 72  zed.  ^If the ar
1c10: 67 75 6d 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64  gument.is an ind
1c20: 65 78 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e  ex name, then on
1c30: 6c 79 20 74 68 61 74 20 6f 6e 65 20 69 6e 64 65  ly that one inde
1c40: 78 20 69 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f  x is analyzed.</
1c50: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66  p>..<p> ^The def
1c60: 61 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ault implementat
1c70: 69 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20 73  ion stores all s
1c80: 74 61 74 69 73 74 69 63 73 20 69 6e 20 61 20 73  tatistics in a s
1c90: 69 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65  ingle.table name
1ca0: 64 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74  d <b>sqlite_stat
1cb0: 31 3c 2f 62 3e 2e 20 20 5e 49 66 20 53 51 4c 69  1</b>.  ^If SQLi
1cc0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
1cd0: 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
1ce0: 45 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 6f 70  ENABLE_STAT2] op
1cf0: 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74  tion, then addit
1d00: 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20  ional histogram 
1d10: 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65  data is.collecte
1d20: 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20  d and stored in 
1d30: 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 32 3c  <b>sqlite_stat2<
1d40: 2f 62 3e 2e 0a 46 75 74 75 72 65 20 65 6e 68 61  /b>..Future enha
1d50: 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65  ncements may cre
1d60: 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 74  ate.additional t
1d70: 61 62 6c 65 73 20 77 69 74 68 20 74 68 65 20 73  ables with the s
1d80: 61 6d 65 20 6e 61 6d 65 20 70 61 74 74 65 72 6e  ame name pattern
1d90: 20 65 78 63 65 70 74 20 77 69 74 68 20 74 68 65   except with the
1da0: 20 22 31 22 0a 6f 72 20 22 32 22 20 63 68 61 6e   "1".or "2" chan
1db0: 67 65 64 20 74 6f 20 61 20 64 69 66 66 65 72 65  ged to a differe
1dc0: 6e 74 20 64 69 67 69 74 2e 3c 2f 70 3e 0a 0a 3c  nt digit.</p>..<
1dd0: 70 3e 20 5e 54 68 65 20 5b 44 52 4f 50 20 54 41  p> ^The [DROP TA
1de0: 42 4c 45 5d 20 61 6e 64 20 5b 41 4c 54 45 52 20  BLE] and [ALTER 
1df0: 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 73 20  TABLE] commands 
1e00: 64 6f 0a 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 74  do.not work on t
1e10: 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61  he <b>sqlite_sta
1e20: 74 31 3c 2f 62 3e 20 6f 72 20 3c 62 3e 73 71 6c  t1</b> or <b>sql
1e30: 69 74 65 5f 73 74 61 74 32 3c 2f 62 3e 20 74 61  ite_stat2</b> ta
1e40: 62 6c 65 73 2c 0a 62 75 74 20 61 6c 6c 20 74 68  bles,.but all th
1e50: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 6f  e content of tho
1e60: 73 65 20 74 61 62 6c 65 73 20 63 61 6e 20 62 65  se tables can be
1e70: 20 71 75 65 72 69 65 64 20 75 73 69 6e 67 20 5b   queried using [
1e80: 53 45 4c 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20  SELECT].and can 
1e90: 62 65 20 64 65 6c 65 74 65 64 2c 20 61 75 67 6d  be deleted, augm
1ea0: 65 6e 74 65 64 2c 20 6f 72 20 6d 6f 64 69 66 69  ented, or modifi
1eb0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 45  ed using the [DE
1ec0: 4c 45 54 45 5d 2c 0a 5b 49 4e 53 45 52 54 5d 2c  LETE],.[INSERT],
1ed0: 20 61 6e 64 20 5b 55 50 44 41 54 45 5d 20 63 6f   and [UPDATE] co
1ee0: 6d 6d 61 6e 64 73 2e 0a 41 70 70 72 6f 70 72 69  mmands..Appropri
1ef0: 61 74 65 20 63 61 72 65 20 73 68 6f 75 6c 64 20  ate care should 
1f00: 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 68 61  be used when cha
1f10: 6e 67 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nging the conten
1f20: 74 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74  t of the statist
1f30: 69 63 73 0a 74 61 62 6c 65 73 20 61 73 20 69 6e  ics.tables as in
1f40: 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 63 61  valid content ca
1f50: 6e 20 63 61 75 73 65 20 53 51 4c 69 74 65 20 74  n cause SQLite t
1f60: 6f 20 73 65 6c 65 63 74 20 69 6e 65 66 66 69 63  o select ineffic
1f70: 69 65 6e 74 0a 71 75 65 72 79 20 70 6c 61 6e 73  ient.query plans
1f80: 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65  .  Generally spe
1f90: 61 6b 69 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c  aking, one shoul
1fa0: 64 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65  d not modify the
1fb0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20   content of.the 
1fc0: 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65  statistics table
1fd0: 73 20 62 79 20 61 6e 79 20 6d 65 63 68 61 6e 69  s by any mechani
1fe0: 73 6d 20 6f 74 68 65 72 20 74 68 61 6e 20 69 6e  sm other than in
1ff0: 76 6f 6b 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59  voking the.ANALY
2000: 5a 45 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  ZE command.</p>.
2010: 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74 69 63 73  .<p> ^Statistics
2020: 20 67 61 74 68 65 72 65 64 20 62 79 20 41 4e 41   gathered by ANA
2030: 4c 59 5a 45 20 61 72 65 20 3c 75 3e 6e 6f 74 3c  LYZE are <u>not<
2040: 2f 75 3e 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  /u> automaticall
2050: 79 20 75 70 64 61 74 65 64 20 61 73 0a 74 68 65  y updated as.the
2060: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
2070: 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73  database changes
2080: 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e  .  If the conten
2090: 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  t of the databas
20a0: 65 0a 63 68 61 6e 67 65 73 20 73 69 67 6e 69 66  e.changes signif
20b0: 69 63 61 6e 74 6c 79 2c 20 6f 72 20 69 66 20 74  icantly, or if t
20c0: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
20d0: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 6e  ma changes, then
20e0: 20 6f 6e 65 20 73 68 6f 75 6c 64 0a 63 6f 6e 73   one should.cons
20f0: 69 64 65 72 20 72 65 72 75 6e 6e 69 6e 67 20 74  ider rerunning t
2100: 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61  he ANALYZE comma
2110: 6e 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75  nd in order to u
2120: 70 64 61 74 65 20 74 68 65 20 73 74 61 74 69 73  pdate the statis
2130: 74 69 63 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54  tics.</p>..<p> T
2140: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
2150: 20 6d 69 67 68 74 20 6e 6f 74 20 6e 6f 74 69 63   might not notic
2160: 65 20 6d 61 6e 75 61 6c 20 63 68 61 6e 67 65 73  e manual changes
2170: 20 74 6f 20 74 68 65 0a 3c 62 3e 73 71 6c 69 74   to the.<b>sqlit
2180: 65 5f 73 74 61 74 31 3c 2f 62 3e 20 61 6e 64 2f  e_stat1</b> and/
2190: 6f 72 20 3c 62 3e 73 71 6c 69 74 65 33 5f 73 74  or <b>sqlite3_st
21a0: 61 74 32 3c 2f 62 3e 20 74 61 62 6c 65 73 2e 20  at2</b> tables. 
21b0: 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e   ^An application
21c0: 0a 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20 71  .can force the q
21d0: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20  uery planner to 
21e0: 72 65 72 65 61 64 20 74 68 65 20 73 74 61 74 69  reread the stati
21f0: 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79 20  stics tables by 
2200: 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59  running.<b>ANALY
2210: 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ZE sqlite_master
2220: 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 74 63 6c  </b>. </p>..<tcl
2230: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
2240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2280: 0a 53 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48  .Section {ATTACH
2290: 20 44 41 54 41 42 41 53 45 7d 20 61 74 74 61 63   DATABASE} attac
22a0: 68 20 2a 41 54 54 41 43 48 0a 0a 42 75 62 62 6c  h *ATTACH..Bubbl
22b0: 65 44 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d  eDiagram attach-
22c0: 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
22d0: 70 3e 20 5e 54 68 65 20 41 54 54 41 43 48 20 44  p> ^The ATTACH D
22e0: 41 54 41 42 41 53 45 20 73 74 61 74 65 6d 65 6e  ATABASE statemen
22f0: 74 20 61 64 64 73 20 61 6e 6f 74 68 65 72 20 64  t adds another d
2300: 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20 74 6f  atabase .file to
2310: 20 74 68 65 20 63 75 72 72 65 6e 74 20 5b 64 61   the current [da
2320: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
2330: 6e 5d 2e 20 0a 5e 54 68 65 20 66 69 6c 65 6e 61  n]. .^The filena
2340: 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  me for the datab
2350: 61 73 65 20 74 6f 20 62 65 20 61 74 74 61 63 68  ase to be attach
2360: 65 64 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ed is the value 
2370: 6f 66 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f  of.the expressio
2380: 6e 20 74 68 61 74 20 6f 63 63 75 72 73 20 62 65  n that occurs be
2390: 66 6f 72 65 20 74 68 65 20 41 53 20 6b 65 79 77  fore the AS keyw
23a0: 6f 72 64 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61  ord..^The filena
23b0: 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  me of the databa
23c0: 73 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73  se follows the s
23d0: 61 6d 65 20 73 65 6d 61 6e 74 69 63 73 20 61 73  ame semantics as
23e0: 20 74 68 65 0a 66 69 6c 65 6e 61 6d 65 20 61 72   the.filename ar
23f0: 67 75 6d 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74  gument to [sqlit
2400: 65 33 5f 6f 70 65 6e 28 29 5d 20 61 6e 64 20 5b  e3_open()] and [
2410: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28  sqlite3_open_v2(
2420: 29 5d 3b 20 74 68 65 0a 73 70 65 63 69 61 6c 20  )]; the.special 
2430: 6e 61 6d 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d  name "[:memory:]
2440: 22 20 72 65 73 75 6c 74 73 20 69 6e 20 61 6e 20  " results in an 
2450: 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
2460: 73 65 20 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20  se and an.empty 
2470: 73 74 72 69 6e 67 20 72 65 73 75 6c 74 73 20 69  string results i
2480: 6e 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72  n a new temporar
2490: 79 20 64 61 74 61 62 61 73 65 2e 0a 5e 54 68 65  y database..^The
24a0: 20 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65   filename argume
24b0: 6e 74 20 63 61 6e 20 62 65 20 61 20 5b 55 52 49  nt can be a [URI
24c0: 20 66 69 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52   filename] if UR
24d0: 49 20 66 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65  I filename proce
24e0: 73 73 69 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20  ssing.is enable 
24f0: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
2500: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 54 68 65 20  connection..The 
2510: 6e 61 6d 65 20 74 68 61 74 20 6f 63 63 75 72 73  name that occurs
2520: 20 61 66 74 65 72 20 74 68 65 20 41 53 20 6b 65   after the AS ke
2530: 79 77 6f 72 64 20 69 73 20 74 68 65 20 6e 61 6d  yword is the nam
2540: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
2550: 65 0a 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  e.used internall
2560: 79 20 62 79 20 53 51 4c 69 74 65 2e 0a 5e 54 68  y by SQLite..^Th
2570: 65 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 73  e database-names
2580: 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a 27 74 65   'main' and .'te
2590: 6d 70 27 20 72 65 66 65 72 20 74 6f 20 74 68 65  mp' refer to the
25a0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 61   main database a
25b0: 6e 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  nd the database 
25c0: 75 73 65 64 20 66 6f 72 20 0a 74 65 6d 70 6f 72  used for .tempor
25d0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 5e 54 68  ary tables.  ^Th
25e0: 65 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20  e main and temp 
25f0: 64 61 74 61 62 61 73 65 73 20 63 61 6e 6e 6f 74  databases cannot
2600: 20 62 65 20 61 74 74 61 63 68 65 64 20 6f 72 0a   be attached or.
2610: 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c  detached.</p>..<
2620: 70 3e 20 5e 28 54 61 62 6c 65 73 20 69 6e 20 61  p> ^(Tables in a
2630: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2640: 61 73 65 20 63 61 6e 20 62 65 20 72 65 66 65 72  ase can be refer
2650: 72 65 64 20 74 6f 20 75 73 69 6e 67 20 74 68 65  red to using the
2660: 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64 61 74 61   syntax .<i>data
2670: 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d  base-name.table-
2680: 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e 49 66  name</i>.)^  ^If
2690: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
26a0: 20 74 61 62 6c 65 20 69 73 20 75 6e 69 71 75 65   table is unique
26b0: 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61 74 74 61  .across all atta
26c0: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
26d0: 6e 64 20 74 68 65 20 6d 61 69 6e 20 61 6e 64 20  nd the main and 
26e0: 74 65 6d 70 20 64 61 74 61 62 61 73 65 73 2c 20  temp databases, 
26f0: 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64 61 74 61  then the.<i>data
2700: 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72  base-name</i> pr
2710: 65 66 69 78 20 69 73 20 6e 6f 74 20 72 65 71 75  efix is not requ
2720: 69 72 65 64 2e 20 20 5e 49 66 20 74 77 6f 20 6f  ired.  ^If two o
2730: 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 69 6e  r more tables in
2740: 0a 64 69 66 66 65 72 65 6e 74 20 64 61 74 61 62  .different datab
2750: 61 73 65 73 20 68 61 76 65 20 74 68 65 20 73 61  ases have the sa
2760: 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20  me name and the 
2770: 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d  .<i>database-nam
2780: 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20  e</i> prefix is 
2790: 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61 20 74 61  not used on a ta
27a0: 62 6c 65 20 72 65 66 65 72 65 6e 63 65 2c 20 74  ble reference, t
27b0: 68 65 6e 20 74 68 65 0a 74 61 62 6c 65 20 63 68  hen the.table ch
27c0: 6f 73 65 6e 20 69 73 20 74 68 65 20 6f 6e 65 20  osen is the one 
27d0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
27e0: 74 68 61 74 20 77 61 73 20 6c 65 61 73 74 20 72  that was least r
27f0: 65 63 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64  ecently attached
2800: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e  .</p>..<p>.^Tran
2810: 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69  sactions involvi
2820: 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61  ng multiple atta
2830: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
2840: 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d  re atomic,.assum
2850: 69 6e 67 20 74 68 61 74 20 74 68 65 20 6d 61 69  ing that the mai
2860: 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  n database is no
2870: 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 61  t "[:memory:]" a
2880: 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72 6e 61 6c  nd the .[journal
2890: 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74 20 5b 57  _mode] is not [W
28a0: 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68 65 20 6d  AL].  ^(If the m
28b0: 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20  ain.database is 
28c0: 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72 20 69 66  ":memory:" or if
28d0: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64   the journal_mod
28e0: 65 20 69 73 20 57 41 4c 2c 20 74 68 65 6e 20 0a  e is WAL, then .
28f0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e  transactions con
2900: 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d  tinue to be atom
2910: 69 63 20 77 69 74 68 69 6e 20 65 61 63 68 20 69  ic within each i
2920: 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61  ndividual.databa
2930: 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20  se file. But if 
2940: 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65  the host compute
2950: 72 20 63 72 61 73 68 65 73 20 69 6e 20 74 68 65  r crashes in the
2960: 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f   middle.of a [CO
2970: 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20  MMIT] where two 
2980: 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65  or more database
2990: 20 66 69 6c 65 73 20 61 72 65 20 75 70 64 61 74   files are updat
29a0: 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73  ed,.some of thos
29b0: 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65  e files might ge
29c0: 74 20 74 68 65 20 63 68 61 6e 67 65 73 20 77 68  t the changes wh
29d0: 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74  ere others.might
29e0: 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70   not.)^.</p>..<p
29f0: 3e 20 5e 54 68 65 72 65 20 69 73 20 61 20 6c 69  > ^There is a li
2a00: 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67 20 5b  mit, set using [
2a10: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d  sqlite3_limit()]
2a20: 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c 49   and .[SQLITE_LI
2a30: 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c 20 74  MIT_ATTACHED], t
2a40: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
2a50: 64 61 74 61 62 61 73 65 73 20 74 68 61 74 20 63  databases that c
2a60: 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65 6f  an be.simultaneo
2a70: 75 73 6c 79 20 61 74 74 61 63 68 65 64 20 74 6f  usly attached to
2a80: 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61   a single databa
2a90: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f  se connection.</
2aa0: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
2ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2af0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
2b00: 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43  n {BEGIN TRANSAC
2b10: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
2b20: 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49 54  n {*BEGIN COMMIT
2b30: 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 42 75 62 62   ROLLBACK}..Bubb
2b40: 6c 65 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d  leDiagram begin-
2b50: 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72  stmt.BubbleDiagr
2b60: 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 42  am commit-stmt.B
2b70: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c  ubbleDiagram rol
2b80: 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c  lback-stmt.</tcl
2b90: 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67  >..<p>.^No chang
2ba0: 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  es can be made t
2bb0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65  o the database e
2bc0: 78 63 65 70 74 20 77 69 74 68 69 6e 20 61 20 74  xcept within a t
2bd0: 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79  ransaction..^Any
2be0: 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68   command that ch
2bf0: 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62 61  anges the databa
2c00: 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61  se (basically, a
2c10: 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f  ny SQL command.o
2c20: 74 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45 43  ther than [SELEC
2c30: 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  T]) will automat
2c40: 69 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74  ically start a t
2c50: 72 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e  ransaction if.on
2c60: 65 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79  e is not already
2c70: 20 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41 75   in effect.  ^Au
2c80: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72  tomatically star
2c90: 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ted transactions
2ca0: 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 77  .are committed w
2cb0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75 65  hen the last que
2cc0: 72 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70  ry finishes..</p
2cd0: 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74  >..<p>.^Transact
2ce0: 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72  ions can be star
2cf0: 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69  ted manually usi
2d00: 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d  ng the BEGIN.com
2d10: 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74 72  mand.  ^(Such tr
2d20: 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c  ansactions usual
2d30: 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c  ly persist until
2d40: 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54   the next.COMMIT
2d50: 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d   or ROLLBACK com
2d60: 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61  mand.  But a tra
2d70: 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c  nsaction will al
2d80: 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20  so .ROLLBACK if 
2d90: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2da0: 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20  closed or if an 
2db0: 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64  error occurs.and
2dc0: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
2dd0: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
2de0: 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73  n algorithm is s
2df0: 70 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65 20  pecified.)^.See 
2e00: 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  the documentatio
2e10: 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e  n on the [ON CON
2e20: 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f  FLICT].clause fo
2e30: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
2e40: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
2e50: 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66  he ROLLBACK.conf
2e60: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
2e70: 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a  algorithm..</p>.
2e80: 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41  .<p>.^END TRANSA
2e90: 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61  CTION is an alia
2ea0: 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f  s for COMMIT..</
2eb0: 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61  p>..<p> ^(Transa
2ec0: 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20 75  ctions created u
2ed0: 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d  sing BEGIN...COM
2ee0: 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e  MIT do not nest.
2ef0: 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20 74  )^.^For nested t
2f00: 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65  ransactions, use
2f10: 20 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d   the [SAVEPOINT]
2f20: 20 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63   and [RELEASE] c
2f30: 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f  ommands..The "TO
2f40: 20 53 41 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61   SAVEPOINT <i>na
2f50: 6d 65 3c 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f  me</i>" clause o
2f60: 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  f the ROLLBACK c
2f70: 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20  ommand shown.in 
2f80: 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72  the syntax diagr
2f90: 61 6d 20 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79  am above is only
2fa0: 20 61 70 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b   applicable to [
2fb0: 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73  SAVEPOINT].trans
2fc0: 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e 20 61 74  actions.  ^An at
2fd0: 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20  tempt to invoke 
2fe0: 74 68 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e  the BEGIN comman
2ff0: 64 20 77 69 74 68 69 6e 0a 61 20 74 72 61 6e 73  d within.a trans
3000: 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c  action will fail
3010: 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2c 20   with an error, 
3020: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
3030: 65 74 68 65 72 0a 74 68 65 20 74 72 61 6e 73 61  ether.the transa
3040: 63 74 69 6f 6e 20 77 61 73 20 73 74 61 72 74 65  ction was starte
3050: 64 20 62 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d  d by [SAVEPOINT]
3060: 20 6f 72 20 61 20 70 72 69 6f 72 20 42 45 47 49   or a prior BEGI
3070: 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49 54 20 63  N..^The COMMIT c
3080: 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68 65 20 52  ommand and the R
3090: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
30a0: 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f 20 63  without the TO c
30b0: 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68 65 20 73  lause.work the s
30c0: 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e  ame on [SAVEPOIN
30d0: 54 5d 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  T] transactions 
30e0: 61 73 20 74 68 65 79 20 64 6f 20 77 69 74 68 20  as they do with 
30f0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61  transactions.sta
3100: 72 74 65 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f  rted by BEGIN.</
3110: 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  p>..<p>.^Transac
3120: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66  tions can be def
3130: 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65  erred, immediate
3140: 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20  , or exclusive. 
3150: 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74   .^The default t
3160: 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76  ransaction behav
3170: 69 6f 72 20 69 73 20 64 65 66 65 72 72 65 64 2e  ior is deferred.
3180: 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73  .^Deferred means
3190: 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61   that no locks a
31a0: 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74  re acquired.on t
31b0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
31c0: 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  l the database i
31d0: 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65 64  s first accessed
31e0: 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a  .  ^Thus with a.
31f0: 64 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63  deferred transac
3200: 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20  tion, the BEGIN 
3210: 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66  statement itself
3220: 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f   does nothing to
3230: 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e   the.filesystem.
3240: 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74    ^Locks.are not
3250: 20 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20   acquired until 
3260: 74 68 65 20 66 69 72 73 74 20 72 65 61 64 20 6f  the first read o
3270: 72 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f  r write operatio
3280: 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 72  n.  ^The first r
3290: 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67  ead.operation ag
32a0: 61 69 6e 73 74 20 61 20 64 61 74 61 62 61 73 65  ainst a database
32b0: 20 63 72 65 61 74 65 73 20 61 20 5b 53 48 41 52   creates a [SHAR
32c0: 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65  ED] lock and the
32d0: 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65   first.write ope
32e0: 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61  ration creates a
32f0: 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b   [RESERVED] lock
3300: 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74 68 65  .   ^Because the
3310: 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a   acquisition of.
3320: 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72 65  locks is deferre
3330: 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65  d until they are
3340: 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20 70   needed, it is p
3350: 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
3360: 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70  ther.thread or p
3370: 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65  rocess could cre
3380: 61 74 65 20 61 20 73 65 70 61 72 61 74 65 20 74  ate a separate t
3390: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77  ransaction and w
33a0: 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61  rite to.the data
33b0: 62 61 73 65 20 61 66 74 65 72 20 74 68 65 20 42  base after the B
33c0: 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72  EGIN on the curr
33d0: 65 6e 74 20 74 68 72 65 61 64 20 68 61 73 20 65  ent thread has e
33e0: 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65  xecuted..^If the
33f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
3400: 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20  immediate, then 
3410: 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73  [RESERVED] locks
3420: 0a 61 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e  .are acquired on
3430: 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61   all databases a
3440: 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45  s soon as the BE
3450: 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65  GIN command is.e
3460: 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74  xecuted, without
3470: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65   waiting for the
3480: 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 20  .database to be 
3490: 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20  used.  ^After a 
34a0: 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c  BEGIN IMMEDIATE,
34b0: 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61   .no other [data
34c0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
34d0: 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f   will be able to
34e0: 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 64 61   write to the da
34f0: 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42  tabase or.do a B
3500: 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f  EGIN IMMEDIATE o
3510: 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56  r BEGIN EXCLUSIV
3520: 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65  E.  ^Other proce
3530: 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75  sses can continu
3540: 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74  e.to read from t
3550: 68 65 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77  he database, how
3560: 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75  ever.  ^An exclu
3570: 73 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  sive transaction
3580: 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49   causes.[EXCLUSI
3590: 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20  VE] locks to be 
35a0: 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20  acquired on all 
35b0: 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74  databases.  ^Aft
35c0: 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55  er a BEGIN.EXCLU
35d0: 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b  SIVE, no other [
35e0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
35f0: 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20  ion] except for 
3600: 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65  [read_uncommitte
3610: 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77  d].connections w
3620: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72  ill be able to r
3630: 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
3640: 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f   and no other co
3650: 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74  nnection without
3660: 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20  .exception will 
3670: 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65  be able to write
3680: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
3690: 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74  til the transact
36a0: 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e  ion is.complete.
36b0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20  .</p>..<p>.^(An 
36c0: 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63  implicit transac
36d0: 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74  tion (a transact
36e0: 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74 61 72  ion that is star
36f0: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
3700: 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63  y,.not a transac
3710: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20  tion started by 
3720: 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74  BEGIN) is commit
3730: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
3740: 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20  y when.the last 
3750: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
3760: 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74   finishes.  A st
3770: 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73  atement finishes
3780: 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72   when its.prepar
3790: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
37a0: 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29  [sqlite3_reset()
37b0: 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71   | reset] or.[sq
37c0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
37d0: 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20   | finalized].  
37e0: 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33  An open [sqlite3
37f0: 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a  _blob] used for.
3800: 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42  incremental BLOB
3810: 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61   I/O counts as a
3820: 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61  n unfinished sta
3830: 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71  tement.  The [sq
3840: 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69  lite3_blob].fini
3850: 73 68 65 73 20 77 68 65 6e 20 69 74 20 69 73 20  shes when it is 
3860: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c  [sqlite3_blob_cl
3870: 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e  ose() | closed].
3880: 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68  )^.</p>..<p>.^Th
3890: 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49  e explicit COMMI
38a0: 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69  T command runs i
38b0: 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e  mmediately, even
38c0: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 70 65   if there are.pe
38d0: 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73  nding [SELECT] s
38e0: 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77  tatements.  ^How
38f0: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
3900: 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65  re pending.write
3910: 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65   operations, the
3920: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a   COMMIT command.
3930: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
3940: 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c   error code [SQL
3950: 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a  ITE_BUSY]..</p>.
3960: 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74  .<p>.^An attempt
3970: 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d   to execute COMM
3980: 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72 65  IT might also re
3990: 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49  sult in an [SQLI
39a0: 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e 20  TE_BUSY] return 
39b0: 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68  code.if an anoth
39c0: 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f  er thread or pro
39d0: 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61 72  cess has a [shar
39e0: 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20  ed lock] on the 
39f0: 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70 72  database.that pr
3a00: 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74 61  evented the data
3a10: 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20  base from being 
3a20: 75 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e 20  updated.  ^When 
3a30: 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20  COMMIT fails in 
3a40: 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72  this.way, the tr
3a50: 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e  ansaction remain
3a60: 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68 65  s active and the
3a70: 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72   COMMIT can be r
3a80: 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74  etried later.aft
3a90: 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68 61  er the reader ha
3aa0: 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20 74  s had a chance t
3ab0: 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c  o clear..</p>..<
3ac0: 70 3e 0a 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b  p>.^The ROLLBACK
3ad0: 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
3ae0: 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53  an error code [S
3af0: 51 4c 49 54 45 5f 42 55 53 59 5d 20 69 66 20 74  QLITE_BUSY] if t
3b00: 68 65 72 65 0a 61 72 65 20 61 6e 79 20 70 65 6e  here.are any pen
3b10: 64 69 6e 67 20 71 75 65 72 69 65 73 2e 20 20 5e  ding queries.  ^
3b20: 42 6f 74 68 20 72 65 61 64 2d 6f 6e 6c 79 20 61  Both read-only a
3b30: 6e 64 20 72 65 61 64 2f 77 72 69 74 65 20 71 75  nd read/write qu
3b40: 65 72 69 65 73 20 77 69 6c 6c 0a 63 61 75 73 65  eries will.cause
3b50: 20 61 20 52 4f 4c 4c 42 41 43 4b 20 74 6f 20 66   a ROLLBACK to f
3b60: 61 69 6c 2e 20 20 41 20 52 4f 4c 4c 42 41 43 4b  ail.  A ROLLBACK
3b70: 20 6d 75 73 74 20 66 61 69 6c 20 69 66 20 74 68   must fail if th
3b80: 65 72 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a  ere are pending.
3b90: 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 20  read operations 
3ba0: 28 75 6e 6c 69 6b 65 20 43 4f 4d 4d 49 54 20 77  (unlike COMMIT w
3bb0: 68 69 63 68 20 63 61 6e 20 73 75 63 63 65 65 64  hich can succeed
3bc0: 29 20 62 65 63 61 75 73 65 20 62 61 64 20 74 68  ) because bad th
3bd0: 69 6e 67 73 0a 77 69 6c 6c 20 68 61 70 70 65 6e  ings.will happen
3be0: 20 69 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   if the in-memor
3bf0: 79 20 69 6d 61 67 65 20 6f 66 20 74 68 65 20 64  y image of the d
3c00: 61 74 61 62 61 73 65 20 69 73 20 63 68 61 6e 67  atabase is chang
3c10: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
3c20: 72 0a 61 6e 20 61 63 74 69 76 65 20 71 75 65 72  r.an active quer
3c30: 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20  y..</p>..<p>.If 
3c40: 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f  [PRAGMA journal_
3c50: 6d 6f 64 65 5d 20 69 73 20 73 65 74 20 74 6f 20  mode] is set to 
3c60: 4f 46 46 20 28 74 68 75 73 20 64 69 73 61 62 6c  OFF (thus disabl
3c70: 69 6e 67 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  ing the rollback
3c80: 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20 74   journal.file) t
3c90: 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
3ca0: 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b   of the ROLLBACK
3cb0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65   command is unde
3cc0: 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  fined..</p>..<h3
3cd0: 3e 52 65 73 70 6f 6e 73 65 20 54 6f 20 45 72 72  >Response To Err
3ce0: 6f 72 73 20 57 69 74 68 69 6e 20 41 20 54 72 61  ors Within A Tra
3cf0: 6e 73 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c  nsaction</h3>..<
3d00: 70 3e 20 5e 28 49 66 20 63 65 72 74 61 69 6e 20  p> ^(If certain 
3d10: 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72 73 20  kinds of errors 
3d20: 6f 63 63 75 72 20 77 69 74 68 69 6e 20 61 20 74  occur within a t
3d30: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 0a  ransaction, the.
3d40: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
3d50: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 6f  or may not be ro
3d60: 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61  lled back automa
3d70: 74 69 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65 72  tically.  The.er
3d80: 72 6f 72 73 20 74 68 61 74 20 63 61 75 73 65 20  rors that cause 
3d90: 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 6e 63  the behavior inc
3da0: 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a  lude:</p>..<ul>.
3db0: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55 4c  <li> [SQLITE_FUL
3dc0: 4c 5d 3a 20 64 61 74 61 62 61 73 65 20 6f 72 20  L]: database or 
3dd0: 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b  disk full.<li> [
3de0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20 64  SQLITE_IOERR]: d
3df0: 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c  isk I/O error.<l
3e00: 69 3e 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d  i> [SQLITE_BUSY]
3e10: 3a 20 64 61 74 61 62 61 73 65 20 69 6e 20 75 73  : database in us
3e20: 65 20 62 79 20 61 6e 6f 74 68 65 72 20 70 72 6f  e by another pro
3e30: 63 65 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  cess.<li> [SQLIT
3e40: 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72  E_NOMEM]: out or
3e50: 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e 20 5b 53 51   memory.<li> [SQ
3e60: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 5d 3a  LITE_INTERRUPT]:
3e70: 20 70 72 6f 63 65 73 73 69 6e 67 20 5b 73 71 6c   processing [sql
3e80: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 7c 69  ite3_interrupt|i
3e90: 6e 74 65 72 72 75 70 74 65 64 5d 0a 20 20 20 20  nterrupted].    
3ea0: 20 62 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   by application 
3eb0: 72 65 71 75 65 73 74 0a 3c 2f 75 6c 3e 29 5e 0a  request.</ul>)^.
3ec0: 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20 6f 66  .<p>.^For all of
3ed0: 20 74 68 65 73 65 20 65 72 72 6f 72 73 2c 20 53   these errors, S
3ee0: 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73 20 74  QLite attempts t
3ef0: 6f 20 75 6e 64 6f 20 6a 75 73 74 20 74 68 65 20  o undo just the 
3f00: 6f 6e 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 74  one statement.it
3f10: 20 77 61 73 20 77 6f 72 6b 69 6e 67 20 6f 6e 20   was working on 
3f20: 61 6e 64 20 6c 65 61 76 65 20 63 68 61 6e 67 65  and leave change
3f30: 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 73 74 61  s from prior sta
3f40: 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
3f50: 68 65 0a 73 61 6d 65 20 74 72 61 6e 73 61 63 74  he.same transact
3f60: 69 6f 6e 20 69 6e 74 61 63 74 20 61 6e 64 20 63  ion intact and c
3f70: 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74 68 65  ontinue with the
3f80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
3f90: 48 6f 77 65 76 65 72 2c 20 0a 64 65 70 65 6e 64  However, .depend
3fa0: 69 6e 67 20 6f 6e 20 74 68 65 20 73 74 61 74 65  ing on the state
3fb0: 6d 65 6e 74 20 62 65 69 6e 67 20 65 76 61 6c 75  ment being evalu
3fc0: 61 74 65 64 20 61 6e 64 20 74 68 65 20 70 6f 69  ated and the poi
3fd0: 6e 74 20 61 74 20 77 68 69 63 68 20 74 68 65 0a  nt at which the.
3fe0: 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 69 74  error occurs, it
3ff0: 20 6d 69 67 68 74 20 62 65 20 6e 65 63 65 73 73   might be necess
4000: 61 72 79 20 66 6f 72 20 53 51 4c 69 74 65 20 74  ary for SQLite t
4010: 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 0a 63  o rollback and.c
4020: 61 6e 63 65 6c 20 74 68 65 20 65 6e 74 69 72 65  ancel the entire
4030: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
4040: 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63  An application c
4050: 61 6e 20 74 65 6c 6c 20 77 68 69 63 68 0a 63 6f  an tell which.co
4060: 75 72 73 65 20 6f 66 20 61 63 74 69 6f 6e 20 53  urse of action S
4070: 51 4c 69 74 65 20 74 6f 6f 6b 20 62 79 20 75 73  QLite took by us
4080: 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33  ing the.[sqlite3
4090: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28  _get_autocommit(
40a0: 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 69 6e  )] C-language in
40b0: 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70  terface.</p>..<p
40c0: 3e 49 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64  >It is recommend
40d0: 65 64 20 74 68 61 74 20 61 70 70 6c 69 63 61 74  ed that applicat
40e0: 69 6f 6e 73 20 72 65 73 70 6f 6e 64 20 74 6f 20  ions respond to 
40f0: 74 68 65 20 65 72 72 6f 72 73 0a 6c 69 73 74 65  the errors.liste
4100: 64 20 61 62 6f 76 65 20 62 79 20 65 78 70 6c 69  d above by expli
4110: 63 69 74 6c 79 20 69 73 73 75 69 6e 67 20 61 20  citly issuing a 
4120: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
4130: 2e 20 20 5e 49 66 20 74 68 65 20 0a 74 72 61 6e  .  ^If the .tran
4140: 73 61 63 74 69 6f 6e 20 68 61 73 20 61 6c 72 65  saction has alre
4150: 61 64 79 20 62 65 65 6e 20 72 6f 6c 6c 65 64 20  ady been rolled 
4160: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
4170: 6c 79 0a 62 79 20 74 68 65 20 65 72 72 6f 72 20  ly.by the error 
4180: 72 65 73 70 6f 6e 73 65 2c 20 74 68 65 6e 20 74  response, then t
4190: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
41a0: 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20 77 69  and will fail wi
41b0: 74 68 20 61 6e 0a 65 72 72 6f 72 2c 20 62 75 74  th an.error, but
41c0: 20 6e 6f 20 68 61 72 6d 20 69 73 20 63 61 75 73   no harm is caus
41d0: 65 64 20 62 79 20 74 68 69 73 2e 3c 2f 70 3e 0a  ed by this.</p>.
41e0: 0a 3c 70 3e 46 75 74 75 72 65 20 76 65 72 73 69  .<p>Future versi
41f0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 61  ons of SQLite ma
4200: 79 20 65 78 74 65 6e 64 20 74 68 65 20 6c 69 73  y extend the lis
4210: 74 20 6f 66 20 65 72 72 6f 72 73 20 77 68 69 63  t of errors whic
4220: 68 0a 6d 69 67 68 74 20 63 61 75 73 65 20 61 75  h.might cause au
4230: 74 6f 6d 61 74 69 63 20 74 72 61 6e 73 61 63 74  tomatic transact
4240: 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20 20 46  ion rollback.  F
4250: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f  uture versions o
4260: 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63  f.SQLite might c
4270: 68 61 6e 67 65 20 74 68 65 20 65 72 72 6f 72 20  hange the error 
4280: 72 65 73 70 6f 6e 73 65 2e 20 20 49 6e 20 70 61  response.  In pa
4290: 72 74 69 63 75 6c 61 72 2c 20 77 65 20 6d 61 79  rticular, we may
42a0: 0a 63 68 6f 6f 73 65 20 74 6f 20 73 69 6d 70 6c  .choose to simpl
42b0: 69 66 79 20 74 68 65 20 69 6e 74 65 72 66 61 63  ify the interfac
42c0: 65 20 69 6e 20 66 75 74 75 72 65 20 76 65 72 73  e in future vers
42d0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62  ions of SQLite b
42e0: 79 0a 63 61 75 73 69 6e 67 20 74 68 65 20 65 72  y.causing the er
42f0: 72 6f 72 73 20 61 62 6f 76 65 20 74 6f 20 66 6f  rors above to fo
4300: 72 63 65 20 61 6e 20 75 6e 63 6f 6e 64 69 74 69  rce an unconditi
4310: 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e 3c 2f  onal rollback.</
4320: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
4330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4370: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
4380: 6e 20 7b 53 41 56 45 50 4f 49 4e 54 7d 20 73 61  n {SAVEPOINT} sa
4390: 76 65 70 6f 69 6e 74 20 7b 53 41 56 45 50 4f 49  vepoint {SAVEPOI
43a0: 4e 54 20 52 45 4c 45 41 53 45 7d 0a 0a 42 75 62  NT RELEASE}..Bub
43b0: 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65 70  bleDiagram savep
43c0: 6f 69 6e 74 2d 73 74 6d 74 0a 42 75 62 62 6c 65  oint-stmt.Bubble
43d0: 44 69 61 67 72 61 6d 20 72 65 6c 65 61 73 65 2d  Diagram release-
43e0: 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72  stmt.BubbleDiagr
43f0: 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74  am rollback-stmt
4400: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41  .</tcl>..<p> ^SA
4410: 56 45 50 4f 49 4e 54 73 20 61 72 65 20 61 20 6d  VEPOINTs are a m
4420: 65 74 68 6f 64 20 6f 66 20 63 72 65 61 74 69 6e  ethod of creatin
4430: 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20  g transactions, 
4440: 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47 49  similar to.[BEGI
4450: 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c  N] and [COMMIT],
4460: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
4470: 20 53 41 56 45 50 4f 49 4e 54 20 61 6e 64 20 52   SAVEPOINT and R
4480: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73 0a  ELEASE commands.
4490: 61 72 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d 61  are named and ma
44a0: 79 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70 3e  y be nested.</p>
44b0: 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56 45 50  ..<p> ^The SAVEP
44c0: 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74 61  OINT command sta
44d0: 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61  rts a new transa
44e0: 63 74 69 6f 6e 20 77 69 74 68 20 61 20 6e 61 6d  ction with a nam
44f0: 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61 63 74  e..^The transact
4500: 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e  ion names need n
4510: 6f 74 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e 28  ot be unique..^(
4520: 41 20 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20  A SAVEPOINT can 
4530: 62 65 20 73 74 61 72 74 65 64 20 65 69 74 68 65  be started eithe
4540: 72 20 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73  r within or outs
4550: 69 64 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d  ide of.a [BEGIN]
4560: 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20  ...[COMMIT].)^  
4570: 5e 28 57 68 65 6e 20 61 20 53 41 56 45 50 4f 49  ^(When a SAVEPOI
4580: 4e 54 20 69 73 20 74 68 65 20 6f 75 74 65 72 2d  NT is the outer-
4590: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 0a 61  most savepoint.a
45a0: 6e 64 20 69 74 20 69 73 20 6e 6f 74 20 77 69 74  nd it is not wit
45b0: 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e  hin a [BEGIN]...
45c0: 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68  [COMMIT] then th
45d0: 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 74 68  e behavior is th
45e0: 65 0a 73 61 6d 65 20 61 73 20 42 45 47 49 4e 20  e.same as BEGIN 
45f0: 44 45 46 45 52 52 45 44 20 54 52 41 4e 53 41 43  DEFERRED TRANSAC
4600: 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  TION.)^</p>..<p>
4610: 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  ^The ROLLBACK TO
4620: 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74 73   command reverts
4630: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
4640: 65 20 64 61 74 61 62 61 73 65 20 62 61 63 6b 20  e database back 
4650: 74 6f 20 77 68 61 74 0a 69 74 20 77 61 73 20 6a  to what.it was j
4660: 75 73 74 20 61 66 74 65 72 20 74 68 65 20 63 6f  ust after the co
4670: 72 72 65 73 70 6f 6e 64 69 6e 67 20 53 41 56 45  rresponding SAVE
4680: 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74 68  POINT.  ^Note th
4690: 61 74 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a 70  at unlike that.p
46a0: 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20  lain [ROLLBACK] 
46b0: 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75 74  command (without
46c0: 20 74 68 65 20 54 4f 20 6b 65 79 77 6f 72 64 29   the TO keyword)
46d0: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f   the ROLLBACK TO
46e0: 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f   command.does no
46f0: 74 20 63 61 6e 63 65 6c 20 74 68 65 20 74 72 61  t cancel the tra
4700: 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73 74  nsaction.  ^Inst
4710: 65 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69 6e  ead of cancellin
4720: 67 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  g the transactio
4730: 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  n,.the ROLLBACK 
4740: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74 61  TO command resta
4750: 72 74 73 20 74 68 65 20 74 72 61 6e 73 61 63 74  rts the transact
4760: 69 6f 6e 20 61 67 61 69 6e 20 61 74 20 74 68 65  ion again at the
4770: 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c   beginning..^All
4780: 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 53 41 56   intervening SAV
4790: 45 50 4f 49 4e 54 73 20 61 72 65 20 63 61 6e 63  EPOINTs are canc
47a0: 65 6c 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f  eled, however.</
47b0: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45  p>..<p>^The RELE
47c0: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c  ASE command is l
47d0: 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66  ike a [COMMIT] f
47e0: 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a  or a SAVEPOINT..
47f0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
4800: 6d 61 6e 64 20 63 61 75 73 65 73 20 61 6c 6c 20  mand causes all 
4810: 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 20  savepoints back 
4820: 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  to and including
4830: 20 74 68 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e   the .most recen
4840: 74 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68  t savepoint with
4850: 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65   a matching name
4860: 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 66   to be removed f
4870: 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e 73 61 63  rom the .transac
4880: 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68  tion stack.  ^Th
4890: 65 20 52 45 4c 45 41 53 45 20 6f 66 20 61 6e 20  e RELEASE of an 
48a0: 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f  inner transactio
48b0: 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75 73 65  n.does not cause
48c0: 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20   any changes to 
48d0: 62 65 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68  be written to th
48e0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 3b  e database file;
48f0: 20 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76   it merely.remov
4900: 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20 66 72  es savepoints fr
4910: 6f 6d 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  om the transacti
4920: 6f 6e 20 73 74 61 63 6b 20 73 75 63 68 20 74 68  on stack such th
4930: 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67  at it is.no long
4940: 65 72 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 52  er possible to R
4950: 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73 65  OLLBACK TO those
4960: 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66   savepoints..^If
4970: 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
4980: 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68 65 20  nd releases the 
4990: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
49a0: 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74 68 65  int, so.that the
49b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
49c0: 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70 74 79  ck becomes empty
49d0: 2c 20 74 68 65 6e 20 52 45 4c 45 41 53 45 20 69  , then RELEASE i
49e0: 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20 5b 43  s the same.as [C
49f0: 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f  OMMIT]..^The [CO
4a00: 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61  MMIT] command ma
4a10: 79 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 6c  y be used to rel
4a20: 65 61 73 65 20 61 6c 6c 20 73 61 76 65 70 6f 69  ease all savepoi
4a30: 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74  nts and.commit t
4a40: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65  he transaction e
4a50: 76 65 6e 20 69 66 20 74 68 65 20 74 72 61 6e 73  ven if the trans
4a60: 61 63 74 69 6f 6e 20 77 61 73 20 6f 72 69 67 69  action was origi
4a70: 6e 61 6c 6c 79 20 73 74 61 72 74 65 64 0a 62 79  nally started.by
4a80: 20 61 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d   a SAVEPOINT com
4a90: 6d 61 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20  mand instead of 
4aa0: 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e  a [BEGIN] comman
4ab0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  d.</p>..<p>^If t
4ac0: 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d  he savepoint-nam
4ad0: 65 20 69 6e 20 61 20 52 45 4c 45 41 53 45 20 63  e in a RELEASE c
4ae0: 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20  ommand does not 
4af0: 6d 61 74 63 68 20 61 6e 79 0a 73 61 76 65 70 6f  match any.savepo
4b00: 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  int currently in
4b10: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4b20: 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20   stack, then no 
4b30: 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 0a 72  savepoints are.r
4b40: 65 6c 65 61 73 65 64 2c 20 74 68 65 20 64 61 74  eleased, the dat
4b50: 61 62 61 73 65 20 69 73 20 75 6e 63 68 61 6e 67  abase is unchang
4b60: 65 64 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45  ed, and the RELE
4b70: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75  ASE command retu
4b80: 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70  rns.an error.</p
4b90: 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  >..<p>^Note that
4ba0: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
4bb0: 63 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d 6d  ction might comm
4bc0: 69 74 20 28 75 73 69 6e 67 20 74 68 65 20 52 45  it (using the RE
4bd0: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a 62  LEASE command).b
4be0: 75 74 20 74 68 65 6e 20 6c 61 74 65 72 20 68 61  ut then later ha
4bf0: 76 65 20 69 74 73 20 77 6f 72 6b 20 75 6e 64 6f  ve its work undo
4c00: 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42 41 43 4b  ne by a ROLLBACK
4c10: 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61   in an outer tra
4c20: 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77  nsaction..^A pow
4c30: 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 70 72  er failure or pr
4c40: 6f 67 72 61 6d 20 63 72 61 73 68 20 6f 72 20 4f  ogram crash or O
4c50: 53 20 63 72 61 73 68 20 77 69 6c 6c 20 63 61 75  S crash will cau
4c60: 73 65 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73  se the outer-mos
4c70: 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f  t.transaction to
4c80: 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69   rollback, undoi
4c90: 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74  ng all changes t
4ca0: 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  hat have occurre
4cb0: 64 20 77 69 74 68 69 6e 0a 74 68 61 74 20 6f 75  d within.that ou
4cc0: 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ter transaction,
4cd0: 20 65 76 65 6e 20 63 68 61 6e 67 65 73 20 74 68   even changes th
4ce0: 61 74 20 68 61 76 65 20 73 75 70 70 6f 73 65 64  at have supposed
4cf0: 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74  ly been "committ
4d00: 65 64 22 0a 62 79 20 74 68 65 20 52 45 4c 45 41  ed".by the RELEA
4d10: 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f  SE command.  ^Co
4d20: 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 61 63 74  ntent is not act
4d30: 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20  ually committed 
4d40: 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a 75 6e 74  on the disk .unt
4d50: 69 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  il the outermost
4d60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
4d70: 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  mits.</p>..<p>Th
4d80: 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20  ere are several 
4d90: 77 61 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67  ways of thinking
4da0: 20 61 62 6f 75 74 20 74 68 65 20 52 45 4c 45 41   about the RELEA
4db0: 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a  SE command:</p>.
4dc0: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f  .<ul>.<li><p>.So
4dd0: 6d 65 20 70 65 6f 70 6c 65 20 76 69 65 77 20 52  me people view R
4de0: 45 4c 45 41 53 45 20 61 73 20 74 68 65 20 65 71  ELEASE as the eq
4df0: 75 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d  uivalent of COMM
4e00: 49 54 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49  IT for a SAVEPOI
4e10: 4e 54 2e 0a 54 68 69 73 20 69 73 20 61 6e 20 61  NT..This is an a
4e20: 63 63 65 70 74 61 62 6c 65 20 70 6f 69 6e 74 20  cceptable point 
4e30: 6f 66 20 76 69 65 77 20 61 73 20 6c 6f 6e 67 20  of view as long 
4e40: 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73  as one remembers
4e50: 20 74 68 61 74 20 74 68 65 0a 63 68 61 6e 67 65   that the.change
4e60: 73 20 63 6f 6d 6d 69 74 74 65 64 20 62 79 20 61  s committed by a
4e70: 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74  n inner transact
4e80: 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65 72 20  ion might later 
4e90: 62 65 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72  be undone by a.r
4ea0: 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75  ollback in an ou
4eb0: 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ter transaction.
4ec0: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
4ed0: 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65 77 20  p>.Another view 
4ee0: 6f 66 20 52 45 4c 45 41 53 45 20 69 73 20 74 68  of RELEASE is th
4ef0: 61 74 20 69 74 20 6d 65 72 67 65 73 20 61 20 6e  at it merges a n
4f00: 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  amed transaction
4f10: 20 69 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e 74   into its.parent
4f20: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f   transaction, so
4f30: 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20   that the named 
4f40: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
4f50: 69 74 73 20 70 61 72 65 6e 74 20 62 65 63 6f 6d  its parent becom
4f60: 65 0a 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73  e.the same trans
4f70: 61 63 74 69 6f 6e 2e 20 20 41 66 74 65 72 20 52  action.  After R
4f80: 45 4c 45 41 53 45 2c 20 74 68 65 20 6e 61 6d 65  ELEASE, the name
4f90: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  d transaction an
4fa0: 64 20 69 74 73 20 70 61 72 65 6e 74 0a 77 69 6c  d its parent.wil
4fb0: 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c  l commit or roll
4fc0: 62 61 63 6b 20 74 6f 67 65 74 68 65 72 2c 20 77  back together, w
4fd0: 68 61 74 65 76 65 72 20 74 68 65 69 72 20 66 61  hatever their fa
4fe0: 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c  te may be..</p><
4ff0: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e  /li>..<li><p>.On
5000: 65 20 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b  e can also think
5010: 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 73 20 61   of savepoints a
5020: 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74 68 65  s."marks" in the
5030: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d   transaction tim
5040: 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69 73 20  eline.  In this 
5050: 76 69 65 77 2c 20 74 68 65 20 53 41 56 45 50 4f  view, the SAVEPO
5060: 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61  INT command.crea
5070: 74 65 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20  tes a new mark, 
5080: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  the ROLLBACK TO 
5090: 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73 20  command rewinds 
50a0: 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 62 61 63  the timeline bac
50b0: 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73  k.to a point jus
50c0: 74 20 61 66 74 65 72 20 74 68 65 20 6e 61 6d 65  t after the name
50d0: 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65 20  d mark, and the 
50e0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a  RELEASE command.
50f0: 65 72 61 73 65 73 20 6d 61 72 6b 73 20 66 72 6f  erases marks fro
5100: 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 77  m the timeline w
5110: 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20  ithout actually 
5120: 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67  making any.chang
5130: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
5140: 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f  se..</p></li>.</
5150: 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73  ul>....<h3>Trans
5160: 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52  action Nesting R
5170: 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  ules</h3>..<p>^T
5180: 68 65 20 6c 61 73 74 20 74 72 61 6e 73 61 63 74  he last transact
5190: 69 6f 6e 20 73 74 61 72 74 65 64 20 77 69 6c 6c  ion started will
51a0: 20 62 65 20 74 68 65 20 66 69 72 73 74 0a 74 72   be the first.tr
51b0: 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74  ansaction commit
51c0: 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61  ted or rolled ba
51d0: 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ck.</p>..<p>^The
51e0: 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64   [BEGIN] command
51f0: 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 74   only works if t
5200: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
5210: 74 61 63 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f  tack is empty, o
5220: 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  r.in other words
5230: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
5240: 20 70 65 6e 64 69 6e 67 20 74 72 61 6e 73 61 63   pending transac
5250: 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65 20  tions.  ^If the 
5260: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61 63  transaction.stac
5270: 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 77  k is not empty w
5280: 68 65 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d 20  hen the [BEGIN] 
5290: 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b  command is invok
52a0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d  ed, then the com
52b0: 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69 74 68 20  mand.fails with 
52c0: 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c  an error.</p>..<
52d0: 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20  p>^The [COMMIT] 
52e0: 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20  command commits 
52f0: 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20  all outstanding 
5300: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64  transactions and
5310: 20 6c 65 61 76 65 73 0a 74 68 65 20 74 72 61 6e   leaves.the tran
5320: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d  saction stack em
5330: 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  pty.</p>..<p>^Th
5340: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
5350: 64 20 73 74 61 72 74 73 20 77 69 74 68 20 74 68  d starts with th
5360: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 64  e most recent ad
5370: 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72  dition to the.tr
5380: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
5390: 61 6e 64 20 72 65 6c 65 61 73 65 73 20 73 61 76  and releases sav
53a0: 65 70 6f 69 6e 74 73 20 62 61 63 6b 77 61 72 64  epoints backward
53b0: 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c  s .in time until
53c0: 20 69 74 20 72 65 6c 65 61 73 65 73 20 61 20 73   it releases a s
53d0: 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20  avepoint with a 
53e0: 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69  matching savepoi
53f0: 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72 20  nt-name..^Prior 
5400: 73 61 76 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e  savepoints, even
5410: 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68   savepoints with
5420: 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f   matching savepo
5430: 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75  int-names, are.u
5440: 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74 68  nchanged..^If th
5450: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
5460: 64 20 63 61 75 73 65 73 20 74 68 65 0a 74 72 61  d causes the.tra
5470: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 74  nsaction stack t
5480: 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74 79 20 28  o become empty (
5490: 69 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  if the RELEASE c
54a0: 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ommand releases 
54b0: 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72  the.outermost tr
54c0: 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74  ansaction from t
54d0: 68 65 20 73 74 61 63 6b 29 20 74 68 65 6e 20 74  he stack) then t
54e0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  he transaction c
54f0: 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ommits.</p>..<p>
5500: 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20  ^The [ROLLBACK] 
5510: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20  command without 
5520: 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c  a TO clause roll
5530: 73 20 62 61 63 6b 73 20 61 6c 6c 20 74 72 61 6e  s backs all tran
5540: 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65 61  sactions.and lea
5550: 76 65 73 20 74 68 65 20 74 72 61 6e 73 61 63 74  ves the transact
5560: 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e  ion stack empty.
5570: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f  </p>..<p>^The RO
5580: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77  LLBACK command w
5590: 69 74 68 20 61 20 54 4f 20 63 6c 61 75 73 65 20  ith a TO clause 
55a0: 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e 73  rolls back trans
55b0: 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61  actions going.ba
55c0: 63 6b 77 61 72 64 73 20 69 6e 20 74 69 6d 65 20  ckwards in time 
55d0: 62 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74  back to the most
55e0: 20 72 65 63 65 6e 74 20 53 41 56 45 50 4f 49 4e   recent SAVEPOIN
55f0: 54 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  T with a matchin
5600: 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41 56  g name..^The SAV
5610: 45 50 4f 49 4e 54 20 77 69 74 68 20 74 68 65 20  EPOINT with the 
5620: 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 72 65  matching name re
5630: 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20 74 72 61  mains on the tra
5640: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a  nsaction stack,.
5650: 62 75 74 20 61 6c 6c 20 64 61 74 61 62 61 73 65  but all database
5660: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 6f 63   changes that oc
5670: 63 75 72 72 65 64 20 61 66 74 65 72 20 74 68 61  curred after tha
5680: 74 20 53 41 56 45 50 4f 49 4e 54 20 77 61 73 20  t SAVEPOINT was 
5690: 63 72 65 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c  created.are roll
56a0: 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68  ed back.  ^If th
56b0: 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65  e savepoint-name
56c0: 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   in a ROLLBACK T
56d0: 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  O command does n
56e0: 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20 53 41 56  ot.match any SAV
56f0: 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73 74  EPOINT on the st
5700: 61 63 6b 2c 20 74 68 65 6e 20 74 68 65 20 52 4f  ack, then the RO
5710: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66  LLBACK command f
5720: 61 69 6c 73 20 77 69 74 68 20 61 6e 0a 65 72 72  ails with an.err
5730: 6f 72 20 61 6e 64 20 6c 65 61 76 65 73 20 74 68  or and leaves th
5740: 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64  e state of the d
5750: 61 74 61 62 61 73 65 20 75 6e 63 68 61 6e 67 65  atabase unchange
5760: 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
5770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
57c0: 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f  ction comment co
57d0: 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a  mment {comment *
57e0: 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 42 75 62 62 6c  comments}..Bubbl
57f0: 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74  eDiagram comment
5800: 2d 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a  -syntax.</tcl>..
5810: 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65  <p>^Comments are
5820: 20 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64   not SQL command
5830: 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75 72  s, but can occur
5840: 20 77 69 74 68 69 6e 20 74 68 65 20 74 65 78 74   within the text
5850: 20 6f 66 0a 53 51 4c 20 71 75 65 72 69 65 73 20   of.SQL queries 
5860: 70 61 73 73 65 64 20 74 6f 20 5b 73 71 6c 69 74  passed to [sqlit
5870: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d  e3_prepare_v2()]
5880: 20 61 6e 64 20 72 65 6c 61 74 65 64 20 69 6e 74   and related int
5890: 65 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e  erfaces..^Commen
58a0: 74 73 20 61 72 65 20 74 72 65 61 74 65 64 20 61  ts are treated a
58b0: 73 20 77 68 69 74 65 73 70 61 63 65 20 62 79 20  s whitespace by 
58c0: 74 68 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f 6d  the parser..^Com
58d0: 6d 65 6e 74 73 20 63 61 6e 20 62 65 67 69 6e 20  ments can begin 
58e0: 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70  anywhere whitesp
58f0: 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e  ace .can be foun
5900: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73  d, including ins
5910: 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ide expressions 
5920: 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69 70  that span multip
5930: 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a  le lines..</p>..
5940: 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74 73  <p>^SQL comments
5950: 20 62 65 67 69 6e 20 77 69 74 68 20 74 77 6f 20   begin with two 
5960: 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d 22 20  consecutive "-" 
5970: 63 68 61 72 61 63 74 65 72 73 20 28 41 53 43 49  characters (ASCI
5980: 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78 74 65  I 0x2d).and exte
5990: 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63  nd up to and inc
59a0: 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20  luding the next 
59b0: 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63 74 65  newline characte
59c0: 72 20 28 41 53 43 49 49 20 30 78 30 61 29 0a 6f  r (ASCII 0x0a).o
59d0: 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20  r until the end 
59e0: 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65  of input, whiche
59f0: 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e  ver comes first.
5a00: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c  </p>..<p>^C-styl
5a10: 65 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e  e comments begin
5a20: 0a 77 69 74 68 20 22 2f 2a 22 20 61 6e 64 20 65  .with "/*" and e
5a30: 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20  xtend up to and 
5a40: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65  including the ne
5a50: 78 74 20 22 2a 2f 22 20 63 68 61 72 61 63 74 65  xt "*/" characte
5a60: 72 20 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20  r pair.or until 
5a70: 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
5a80: 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65  , whichever come
5a90: 73 20 66 69 72 73 74 2e 20 20 5e 43 2d 73 74 79  s first.  ^C-sty
5aa0: 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20  le comments.can 
5ab0: 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69  span multiple li
5ac0: 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43  nes. </p>..<p>^C
5ad0: 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65  omments can appe
5ae0: 61 72 20 61 6e 79 77 68 65 72 65 20 77 68 69 74  ar anywhere whit
5af0: 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63 75 72  espace can occur
5b00: 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69  ,.including insi
5b10: 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  de expressions a
5b20: 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  nd in the middle
5b30: 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73 74   of other SQL st
5b40: 61 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65  atements..^Comme
5b50: 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e  nts do not nest.
5b60: 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
5b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5bb0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
5bc0: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44  tion {CREATE IND
5bd0: 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78 20  EX} createindex 
5be0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 7d  {{CREATE INDEX}}
5bf0: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
5c00: 63 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74 6d  create-index-stm
5c10: 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  t 1.BubbleDiagra
5c20: 6d 20 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e  m indexed-column
5c30: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
5c40: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f   CREATE INDEX co
5c50: 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f  mmand consists o
5c60: 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  f the keywords "
5c70: 43 52 45 41 54 45 20 49 4e 44 45 58 22 20 66 6f  CREATE INDEX" fo
5c80: 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e 61  llowed.by the na
5c90: 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69 6e  me of the new in
5ca0: 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  dex, the keyword
5cb0: 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65 20   "ON", the name 
5cc0: 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79 0a  of a previously.
5cd0: 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 74 68  created table th
5ce0: 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64 65  at is to be inde
5cf0: 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65 6e  xed, and a paren
5d00: 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
5d10: 20 6e 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e   names of.column
5d20: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74  s in the table t
5d30: 68 61 74 20 61 72 65 20 75 73 65 64 20 66 6f 72  hat are used for
5d40: 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 3c   the index key.<
5d50: 2f 70 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 63 6f  /p>..<p>^Each co
5d60: 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65  lumn name can be
5d70: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65   followed by one
5d80: 20 6f 66 20 74 68 65 20 22 41 53 43 22 20 6f 72   of the "ASC" or
5d90: 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72 64 73   "DESC" keywords
5da0: 0a 74 6f 20 69 6e 64 69 63 61 74 65 20 73 6f 72  .to indicate sor
5db0: 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 73  t order.  ^The s
5dc0: 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20 6f 72  ort order may or
5dd0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f   may not be igno
5de0: 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e  red depending.on
5df0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
5e00: 6c 65 20 66 6f 72 6d 61 74 2e 20 20 5e 54 68 65  le format.  ^The
5e10: 20 22 6c 65 67 61 63 79 22 20 66 69 6c 65 20 66   "legacy" file f
5e20: 6f 72 6d 61 74 20 69 67 6e 6f 72 65 73 20 69 6e  ormat ignores in
5e30: 64 65 78 0a 73 6f 72 74 20 6f 72 64 65 72 2e 20  dex.sort order. 
5e40: 20 5e 54 68 65 20 64 65 73 63 65 6e 64 69 6e 67   ^The descending
5e50: 20 69 6e 64 65 78 20 66 69 6c 65 20 66 6f 72 6d   index file form
5e60: 61 74 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73  at takes index s
5e70: 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61  ort order.into a
5e80: 63 63 6f 75 6e 74 2e 20 20 5e 28 4f 6e 6c 79 20  ccount.  ^(Only 
5e90: 63 6f 70 69 65 73 20 6f 66 20 53 51 4c 69 74 65  copies of SQLite
5ea0: 20 6e 65 77 65 72 20 74 68 61 6e 20 5b 76 65 72   newer than [ver
5eb0: 73 69 6f 6e 20 33 2e 33 2e 30 5d 20 0a 28 72 65  sion 3.3.0] .(re
5ec0: 6c 65 61 73 65 64 20 6f 6e 20 32 30 30 36 2d 30  leased on 2006-0
5ed0: 31 2d 31 30 29 20 61 72 65 20 61 62 6c 65 20 74  1-10) are able t
5ee0: 6f 20 75 6e 64 65 72 73 74 61 6e 64 20 74 68 65  o understand the
5ef0: 20 6e 65 77 65 72 20 64 65 73 63 65 6e 64 69 6e   newer descendin
5f00: 67 0a 69 6e 64 65 78 20 66 69 6c 65 20 66 6f 72  g.index file for
5f10: 6d 61 74 20 61 6e 64 20 73 6f 20 66 6f 72 20 63  mat and so for c
5f20: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
5f30: 68 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  h older versions
5f40: 20 6f 66 0a 53 51 4c 69 74 65 2c 20 74 68 65 20   of.SQLite, the 
5f50: 6c 65 67 61 63 79 20 66 69 6c 65 20 66 6f 72 6d  legacy file form
5f60: 61 74 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  at is generated 
5f70: 62 79 20 64 65 66 61 75 6c 74 2e 29 5e 20 20 5e  by default.)^  ^
5f80: 55 73 65 20 74 68 65 0a 5b 6c 65 67 61 63 79 5f  Use the.[legacy_
5f90: 66 69 6c 65 5f 66 6f 72 6d 61 74 5d 20 70 72 61  file_format] pra
5fa0: 67 6d 61 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  gma to modify th
5fb0: 69 73 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20  is behavior and 
5fc0: 67 65 6e 65 72 61 74 65 0a 64 61 74 61 62 61 73  generate.databas
5fd0: 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20  es that use the 
5fe0: 6e 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61  newer file forma
5ff0: 74 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69  t.  Future versi
6000: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 6d 61  ons of SQLite.ma
6010: 79 20 62 65 67 69 6e 20 74 6f 20 67 65 6e 65 72  y begin to gener
6020: 61 74 65 20 74 68 65 20 6e 65 77 65 72 20 66 69  ate the newer fi
6030: 6c 65 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66  le format by def
6040: 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ault.</p>..<p>^T
6050: 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73  he COLLATE claus
6060: 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c  e optionally fol
6070: 6c 6f 77 69 6e 67 20 65 61 63 68 20 63 6f 6c 75  lowing each colu
6080: 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e 65 73 20  mn name defines 
6090: 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a.collating sequ
60a0: 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20 74 65  ence used for te
60b0: 78 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  xt entries in th
60c0: 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68 65 20  at column..^The 
60d0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
60e0: 67 0a 73 65 71 75 65 6e 63 65 20 69 73 20 74 68  g.sequence is th
60f0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
6100: 65 6e 63 65 20 64 65 66 69 6e 65 64 20 66 6f 72  ence defined for
6110: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 6e 20   that column in 
6120: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
6130: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e  E] statement.  ^
6140: 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61 74 69  Or if no collati
6150: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 6f  ng sequence is o
6160: 74 68 65 72 77 69 73 65 20 64 65 66 69 6e 65 64  therwise defined
6170: 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 42  ,.the built-in B
6180: 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
6190: 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64  sequence is used
61a0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  .</p>..<p>There 
61b0: 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79  are no arbitrary
61c0: 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e   limits on the n
61d0: 75 6d 62 65 72 20 6f 66 20 69 6e 64 69 63 65 73  umber of indices
61e0: 20 74 68 61 74 20 63 61 6e 20 62 65 0a 61 74 74   that can be.att
61f0: 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c  ached to a singl
6200: 65 20 74 61 62 6c 65 2e 20 20 5e 28 54 68 65 20  e table.  ^(The 
6210: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
6220: 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 69 73  s in an index is
6230: 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20 74 68 65   .limited to the
6240: 20 76 61 6c 75 65 20 73 65 74 20 62 79 0a 5b 73   value set by.[s
6250: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 5b 53  qlite3_limit]([S
6260: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55  QLITE_LIMIT_COLU
6270: 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a  MN],...).)^</p>.
6280: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 4e 49 51  .<p>^If the UNIQ
6290: 55 45 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61  UE keyword appea
62a0: 72 73 20 62 65 74 77 65 65 6e 20 43 52 45 41 54  rs between CREAT
62b0: 45 20 61 6e 64 20 49 4e 44 45 58 20 74 68 65 6e  E and INDEX then
62c0: 20 64 75 70 6c 69 63 61 74 65 0a 69 6e 64 65 78   duplicate.index
62d0: 20 65 6e 74 72 69 65 73 20 61 72 65 20 6e 6f 74   entries are not
62e0: 20 61 6c 6c 6f 77 65 64 2e 20 20 5e 41 6e 79 20   allowed.  ^Any 
62f0: 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 73 65 72  attempt to inser
6300: 74 20 61 20 64 75 70 6c 69 63 61 74 65 20 65 6e  t a duplicate en
6310: 74 72 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74 20  try.will result 
6320: 69 6e 20 61 6e 20 65 72 72 6f 72 2e 20 20 5e 46  in an error.  ^F
6330: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
6340: 6f 66 20 75 6e 69 71 75 65 20 69 6e 64 69 63 65  of unique indice
6350: 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75  s, all NULL valu
6360: 65 73 0a 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es.are considere
6370: 64 20 74 6f 20 64 69 66 66 65 72 65 6e 74 20 66  d to different f
6380: 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 4e 55  rom all other NU
6390: 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 20 61 72  LL values and ar
63a0: 65 20 74 68 75 73 20 75 6e 69 71 75 65 2e 0a 54  e thus unique..T
63b0: 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 68  his is one of th
63c0: 65 20 74 77 6f 20 70 6f 73 73 69 62 6c 65 20 69  e two possible i
63d0: 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f  nterpretations o
63e0: 66 20 74 68 65 20 53 51 4c 2d 39 32 20 73 74 61  f the SQL-92 sta
63f0: 6e 64 61 72 64 0a 28 74 68 65 20 6c 61 6e 67 75  ndard.(the langu
6400: 61 67 65 20 69 6e 20 74 68 65 20 73 74 61 6e 64  age in the stand
6410: 61 72 64 20 69 73 20 61 6d 62 69 67 75 6f 75 73  ard is ambiguous
6420: 29 20 61 6e 64 20 69 73 20 74 68 65 20 69 6e 74  ) and is the int
6430: 65 72 70 72 65 74 61 74 69 6f 6e 0a 66 6f 6c 6c  erpretation.foll
6440: 6f 77 65 64 20 62 79 20 50 6f 73 74 67 72 65 53  owed by PostgreS
6450: 51 4c 2c 20 4d 79 53 51 4c 2c 20 46 69 72 65 62  QL, MySQL, Fireb
6460: 69 72 64 2c 20 61 6e 64 20 4f 72 61 63 6c 65 2e  ird, and Oracle.
6470: 20 20 49 6e 66 6f 72 6d 69 78 20 61 6e 64 0a 4d    Informix and.M
6480: 69 63 72 6f 73 6f 66 74 20 53 51 4c 20 53 65 72  icrosoft SQL Ser
6490: 76 65 72 20 66 6f 6c 6c 6f 77 20 74 68 65 20 6f  ver follow the o
64a0: 74 68 65 72 20 69 6e 74 65 72 70 72 65 74 61 74  ther interpretat
64b0: 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61 6e 64  ion of the stand
64c0: 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ard.</p>..<p>^If
64d0: 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46   the optional IF
64e0: 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c 61 75   NOT EXISTS clau
64f0: 73 65 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e  se is present an
6500: 64 20 61 6e 6f 74 68 65 72 20 69 6e 64 65 78 0a  d another index.
6510: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61  with the same na
6520: 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  me already exist
6530: 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f 6d  s, then this com
6540: 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61 20 6e  mand becomes a n
6550: 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  o-op.</p>..<p>^I
6560: 6e 64 65 78 65 73 20 61 72 65 20 72 65 6d 6f 76  ndexes are remov
6570: 65 64 20 77 69 74 68 20 74 68 65 20 5b 44 52 4f  ed with the [DRO
6580: 50 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64  P INDEX] command
6590: 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
65a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
65b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
65c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
65d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
65e0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
65f0: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 41 42  tion {CREATE TAB
6600: 4c 45 7d 20 7b 63 72 65 61 74 65 74 61 62 6c 65  LE} {createtable
6610: 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  } {{CREATE TABLE
6620: 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
6630: 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73  m create-table-s
6640: 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67  tmt 1.BubbleDiag
6650: 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a 42  ram column-def.B
6660: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 74 79 70  ubbleDiagram typ
6670: 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69 61  e-name.BubbleDia
6680: 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63 6f 6e 73  gram column-cons
6690: 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61  traint.BubbleDia
66a0: 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f 6e 73 74  gram table-const
66b0: 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61 67  raint.BubbleDiag
66c0: 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b 65 79 2d  ram foreign-key-
66d0: 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  clause.</tcl>..<
66e0: 70 3e 54 68 65 20 22 43 52 45 41 54 45 20 54 41  p>The "CREATE TA
66f0: 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  BLE" command is 
6700: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  used to create a
6710: 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e   new table in an
6720: 20 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73   SQLite .databas
6730: 65 2e 20 41 20 43 52 45 41 54 45 20 54 41 42 4c  e. A CREATE TABL
6740: 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66  E command specif
6750: 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ies the followin
6760: 67 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  g attributes of 
6770: 74 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a  the.new table:..
6780: 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68  <ul>.  <li><p>Th
6790: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  e name of the ne
67a0: 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e  w table...  <li>
67b0: 3c 70 3e 20 54 68 65 20 64 61 74 61 62 61 73 65  <p> The database
67c0: 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65   in which the ne
67d0: 77 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  w table is creat
67e0: 65 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62  ed. Tables may b
67f0: 65 20 0a 20 20 20 20 20 20 63 72 65 61 74 65 64  e .      created
6800: 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
6810: 61 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20  abase, the temp 
6820: 64 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20  database, or in 
6830: 61 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20 20  any attached.   
6840: 20 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20     database...  
6850: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65  <li><p> The name
6860: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
6870: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20  in the table... 
6880: 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63   <li><p> The dec
6890: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61  lared type of ea
68a0: 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
68b0: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
68c0: 70 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c  p> A default val
68d0: 75 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  ue or expression
68e0: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
68f0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a   in the table...
6900: 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61    <li><p> A defa
6910: 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
6920: 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69  quence to use wi
6930: 74 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a  th each column..
6940: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f  .  <li><p> Optio
6950: 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59  nally, a PRIMARY
6960: 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
6970: 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20  le. Both single 
6980: 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20  column and.     
6990: 20 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c    composite (mul
69a0: 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72  tiple column) pr
69b0: 69 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20 73  imary keys are s
69c0: 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69  upported...  <li
69d0: 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51  ><p> A set of SQ
69e0: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f  L constraints fo
69f0: 72 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51  r each table. SQ
6a00: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e  Lite supports UN
6a10: 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20  IQUE, NOT.      
6a20: 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64   NULL, CHECK and
6a30: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e   FOREIGN KEY con
6a40: 73 74 72 61 69 6e 74 73 2e 0a 3c 2f 75 6c 3e 0a  straints..</ul>.
6a50: 0a 3c 70 3e 45 76 65 72 79 20 43 52 45 41 54 45  .<p>Every CREATE
6a60: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
6a70: 20 6d 75 73 74 20 73 70 65 63 69 66 79 20 61 20   must specify a 
6a80: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 6e 65 77  name for the new
6a90: 20 74 61 62 6c 65 2e 0a 20 20 5e 28 54 61 62 6c   table..  ^(Tabl
6aa0: 65 20 6e 61 6d 65 73 20 74 68 61 74 20 62 65 67  e names that beg
6ab0: 69 6e 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f  in with "sqlite_
6ac0: 22 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66  " are reserved f
6ad0: 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 2e  or internal use.
6ae0: 20 49 74 0a 20 20 69 73 20 61 6e 20 65 72 72 6f   It.  is an erro
6af0: 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20  r to attempt to 
6b00: 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20 77  create a table w
6b10: 69 74 68 20 61 20 6e 61 6d 65 20 74 68 61 74 20  ith a name that 
6b20: 73 74 61 72 74 73 20 77 69 74 68 0a 20 20 22 73  starts with.  "s
6b30: 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a 3c 70 3e 20  qlite_".)^..<p> 
6b40: 5e 49 66 20 61 20 26 6c 74 3b 64 61 74 61 62 61  ^If a &lt;databa
6b50: 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 73  se-name&gt; is s
6b60: 70 65 63 69 66 69 65 64 2c 20 69 74 20 6d 75 73  pecified, it mus
6b70: 74 20 62 65 20 65 69 74 68 65 72 20 22 6d 61 69  t be either "mai
6b80: 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22 2c 20 6f  n", .  "temp", o
6b90: 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e  r the name of an
6ba0: 20 5b 41 54 54 41 43 48 20 44 41 54 41 42 41 53   [ATTACH DATABAS
6bb0: 45 7c 61 74 74 61 63 68 65 64 20 64 61 74 61 62  E|attached datab
6bc0: 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69 73 20 63  ase]. ^In this c
6bd0: 61 73 65 0a 20 20 74 68 65 20 6e 65 77 20 74 61  ase.  the new ta
6be0: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
6bf0: 6e 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61  n the named data
6c00: 62 61 73 65 2e 20 5e 49 66 20 74 68 65 20 22 54  base. ^If the "T
6c10: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
6c20: 52 59 22 0a 20 20 6b 65 79 77 6f 72 64 20 6f 63  RY".  keyword oc
6c30: 63 75 72 73 20 62 65 74 77 65 65 6e 20 74 68 65  curs between the
6c40: 20 22 43 52 45 41 54 45 22 20 61 6e 64 20 22 54   "CREATE" and "T
6c50: 41 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20 6e  ABLE" then the n
6c60: 65 77 20 74 61 62 6c 65 20 69 73 0a 20 20 63 72  ew table is.  cr
6c70: 65 61 74 65 64 20 69 6e 20 74 68 65 20 74 65 6d  eated in the tem
6c80: 70 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20  p database. ^It 
6c90: 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73  is an error to s
6ca0: 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 0a 20  pecify both a . 
6cb0: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
6cc0: 6d 65 26 67 74 3b 20 61 6e 64 20 74 68 65 20 54  me&gt; and the T
6cd0: 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59  EMP or TEMPORARY
6ce0: 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73   keyword, unless
6cf0: 20 74 68 65 0a 20 20 26 6c 74 3b 64 61 74 61 62   the.  &lt;datab
6d00: 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20  ase-name&gt; is 
6d10: 22 74 65 6d 70 22 2e 20 5e 49 66 20 6e 6f 20 64  "temp". ^If no d
6d20: 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20  atabase name is 
6d30: 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 68  specified and th
6d40: 65 0a 20 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  e.  TEMP keyword
6d50: 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20   is not present 
6d60: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
6d70: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
6d80: 20 6d 61 69 6e 0a 20 20 64 61 74 61 62 61 73 65   main.  database
6d90: 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20 69 73 20  ...<p>.  ^It is 
6da0: 75 73 75 61 6c 6c 79 20 61 6e 20 65 72 72 6f 72  usually an error
6db0: 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 63   to attempt to c
6dc0: 72 65 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  reate a new tabl
6dd0: 65 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  e in a database 
6de0: 74 68 61 74 0a 20 20 61 6c 72 65 61 64 79 20 63  that.  already c
6df0: 6f 6e 74 61 69 6e 73 20 61 20 74 61 62 6c 65 2c  ontains a table,
6e00: 20 69 6e 64 65 78 20 6f 72 20 76 69 65 77 20 6f   index or view o
6e10: 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e  f the same name.
6e20: 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68   ^However, if th
6e30: 65 0a 20 20 22 49 46 20 4e 4f 54 20 45 58 49 53  e.  "IF NOT EXIS
6e40: 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70  TS" clause is sp
6e50: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
6e60: 6f 66 20 74 68 65 20 43 52 45 41 54 45 20 54 41  of the CREATE TA
6e70: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  BLE statement an
6e80: 64 0a 20 20 61 20 74 61 62 6c 65 20 6f 72 20 76  d.  a table or v
6e90: 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20  iew of the same 
6ea0: 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69  name already exi
6eb0: 73 74 73 2c 20 74 68 65 20 43 52 45 41 54 45 20  sts, the CREATE 
6ec0: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20 20  TABLE command.  
6ed0: 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f 20 65 66  simply has no ef
6ee0: 66 65 63 74 20 28 61 6e 64 20 6e 6f 20 65 72 72  fect (and no err
6ef0: 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 72 65  or message is re
6f00: 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20 65 72 72  turned). ^An err
6f10: 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20 20 72 65  or is still.  re
6f20: 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 74 61  turned if the ta
6f30: 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  ble cannot be cr
6f40: 65 61 74 65 64 20 62 65 63 61 75 73 65 20 6f 66  eated because of
6f50: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 69 6e 64   an existing ind
6f60: 65 78 2c 20 65 76 65 6e 20 0a 20 20 69 66 20 74  ex, even .  if t
6f70: 68 65 20 22 49 46 20 4e 4f 54 20 45 58 49 53 54  he "IF NOT EXIST
6f80: 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  S" clause is spe
6f90: 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74 20  cified...<p>^It 
6fa0: 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20  is not an error 
6fb0: 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c  to create a tabl
6fc0: 65 20 74 68 61 74 20 68 61 73 20 74 68 65 20 73  e that has the s
6fd0: 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e 20 0a  ame name as an .
6fe0: 20 20 65 78 69 73 74 69 6e 67 20 5b 43 52 45 41    existing [CREA
6ff0: 54 45 20 54 52 49 47 47 45 52 7c 74 72 69 67 67  TE TRIGGER|trigg
7000: 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  er]...<p>^Tables
7010: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
7020: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42  ng the [DROP TAB
7030: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
7040: 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 52 45 41 54 45  </p>..<h3>CREATE
7050: 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20 53 45   TABLE ... AS SE
7060: 4c 45 43 54 20 53 74 61 74 65 6d 65 6e 74 73 3c  LECT Statements<
7070: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 22 43 52  /h3>..<p>^(A "CR
7080: 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41  EATE TABLE ... A
7090: 53 20 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d  S SELECT" statem
70a0: 65 6e 74 20 63 72 65 61 74 65 73 20 61 6e 64 20  ent creates and 
70b0: 70 6f 70 75 6c 61 74 65 73 20 61 20 64 61 74 61  populates a data
70c0: 62 61 73 65 0a 74 61 62 6c 65 20 62 61 73 65 64  base.table based
70d0: 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20   on the results 
70e0: 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
70f0: 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65 20 74  ement.)^ ^(The t
7100: 61 62 6c 65 20 68 61 73 20 74 68 65 20 73 61 6d  able has the sam
7110: 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e.number of colu
7120: 6d 6e 73 20 61 73 20 74 68 65 20 72 6f 77 73 20  mns as the rows 
7130: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
7140: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
7150: 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 0a 65 61  . The name of.ea
7160: 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65  ch column is the
7170: 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 61 6d   same as the nam
7180: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
7190: 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 6e  onding column in
71a0: 20 74 68 65 20 72 65 73 75 6c 74 0a 73 65 74 20   the result.set 
71b0: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  of the SELECT st
71c0: 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65  atement.)^ ^(The
71d0: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f   declared type o
71e0: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  f each column is
71f0: 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79 20 74   determined.by t
7200: 68 65 20 5b 65 78 70 72 65 73 73 69 6f 6e 20 61  he [expression a
7210: 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20  ffinity] of the 
7220: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78  corresponding ex
7230: 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
7240: 72 65 73 75 6c 74 20 73 65 74 0a 6f 66 20 74 68  result set.of th
7250: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
7260: 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  nt, as follows:.
7270: 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 3c 74  </p>..<center><t
7280: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 20  able border=1>. 
7290: 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72 65 73 73   <tr><th>Express
72a0: 69 6f 6e 20 41 66 66 69 6e 69 74 79 20 20 20 3c  ion Affinity   <
72b0: 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63 6c 61 72  th>Column Declar
72c0: 65 64 20 54 79 70 65 0a 20 20 3c 74 72 3e 3c 74  ed Type.  <tr><t
72d0: 64 3e 54 45 58 54 20 20 20 20 20 20 20 20 20 20  d>TEXT          
72e0: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 54 45 58          <td>"TEX
72f0: 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 55 4d  T".  <tr><td>NUM
7300: 45 52 49 43 20 20 20 20 20 20 20 20 20 20 20 20  ERIC            
7310: 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a 20 20 3c     <td>"NUM".  <
7320: 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45 52 20 20  tr><td>INTEGER  
7330: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64               <td
7340: 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e 3c 74 64  >"INT".  <tr><td
7350: 3e 52 45 41 4c 20 20 20 20 20 20 20 20 20 20 20  >REAL           
7360: 20 20 20 20 20 20 20 3c 74 64 3e 22 52 45 41 4c         <td>"REAL
7370: 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 4f 4e 45  ".  <tr><td>NONE
7380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7390: 20 20 3c 74 64 3e 22 22 20 28 65 6d 70 74 79 20    <td>"" (empty 
73a0: 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62 6c 65 3e  string).</table>
73b0: 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e  </center>)^..<p>
73c0: 5e 28 41 20 74 61 62 6c 65 20 63 72 65 61 74 65  ^(A table create
73d0: 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  d using CREATE T
73e0: 41 42 4c 45 20 41 53 20 68 61 73 20 6e 6f 20 50  ABLE AS has no P
73f0: 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
7400: 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 66  o.constraints of
7410: 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68 65 20 64   any kind. The d
7420: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
7430: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 4e  each column is N
7440: 55 4c 4c 2e 20 54 68 65 20 64 65 66 61 75 6c 74  ULL. The default
7450: 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65  .collation seque
7460: 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  nce for each col
7470: 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 74  umn of the new t
7480: 61 62 6c 65 20 69 73 20 42 49 4e 41 52 59 2e 29  able is BINARY.)
7490: 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 63 72  ^..<p>^Tables cr
74a0: 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
74b0: 54 45 20 54 41 42 4c 45 20 41 53 20 61 72 65 20  TE TABLE AS are 
74c0: 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70 75 6c 61  initially popula
74d0: 74 65 64 20 77 69 74 68 20 74 68 65 0a 72 6f 77  ted with the.row
74e0: 73 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e  s of data return
74f0: 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54  ed by the SELECT
7500: 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 52 6f 77   statement. ^Row
7510: 73 20 61 72 65 20 61 73 73 69 67 6e 65 64 20 63  s are assigned c
7520: 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61 73 63 65  ontiguously.asce
7530: 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d 20 76 61  nding [rowid] va
7540: 6c 75 65 73 2c 20 73 74 61 72 74 69 6e 67 20 77  lues, starting w
7550: 69 74 68 20 31 2c 20 69 6e 20 74 68 65 20 5b 6f  ith 1, in the [o
7560: 72 64 65 72 20 62 79 7c 6f 72 64 65 72 5d 20 74  rder by|order] t
7570: 68 61 74 20 74 68 65 79 0a 61 72 65 20 72 65 74  hat they.are ret
7580: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
7590: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ECT statement...
75a0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
75b0: 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66 7d 20 7b   {tablecoldef} {
75c0: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
75d0: 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  n} {column defin
75e0: 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  itions}</tcl>.<h
75f0: 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69 6e 69 74  3>Column Definit
7600: 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55 6e  ions</h3>..<p>Un
7610: 6c 65 73 73 20 69 74 20 69 73 20 61 20 43 52 45  less it is a CRE
7620: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
7630: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
7640: 74 2c 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  t, a CREATE TABL
7650: 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e 65 20 6f  E includes.one o
7660: 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d 6e 2d 64  r more [column-d
7670: 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  ef|column defini
7680: 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f 6e 61 6c  tions], optional
7690: 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ly followed by a
76a0: 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62 6c 65 2d   list of.[table-
76b0: 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61 62 6c 65  constraint|table
76c0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 20   constraints].  
76d0: 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69  Each column defi
76e0: 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73 74 73 20  nition consists 
76f0: 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f 66 20 74  of the.name of t
7700: 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70 74 69 6f  he column, optio
7710: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
7720: 79 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74  y the declared t
7730: 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ype of the colum
7740: 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f 72 20 6d  n,.then one or m
7750: 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 5b 63 6f  ore optional [co
7760: 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 7c  lumn-constraint|
7770: 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e  column constrain
7780: 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64 20 69 6e  ts]. Included in
7790: 0a 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20  .the definition 
77a0: 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74  of "column const
77b0: 72 61 69 6e 74 73 22 20 66 6f 72 20 74 68 65 20  raints" for the 
77c0: 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 20  purposes of the 
77d0: 70 72 65 76 69 6f 75 73 0a 73 74 61 74 65 6d 65  previous.stateme
77e0: 6e 74 20 61 72 65 20 74 68 65 20 43 4f 4c 4c 41  nt are the COLLA
77f0: 54 45 20 61 6e 64 20 44 45 46 41 55 4c 54 20 63  TE and DEFAULT c
7800: 6c 61 75 73 65 73 2c 20 65 76 65 6e 20 74 68 6f  lauses, even tho
7810: 75 67 68 20 74 68 65 73 65 20 61 72 65 20 6e 6f  ugh these are no
7820: 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73 74 72 61  t really.constra
7830: 69 6e 74 73 20 69 6e 20 74 68 65 20 73 65 6e 73  ints in the sens
7840: 65 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e  e that they do n
7850: 6f 74 20 72 65 73 74 72 69 63 74 20 74 68 65 20  ot restrict the 
7860: 64 61 74 61 20 74 68 61 74 20 74 68 65 20 74 61  data that the ta
7870: 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61 69 6e 2e  ble may.contain.
7880: 20 54 68 65 20 6f 74 68 65 72 20 63 6f 6e 73 74   The other const
7890: 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20 4e 55 4c  raints - NOT NUL
78a0: 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49 51 55 45  L, CHECK, UNIQUE
78b0: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  , PRIMARY KEY an
78c0: 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f  d.FOREIGN KEY co
78d0: 6e 73 74 72 61 69 6e 74 73 20 2d 20 69 6d 70 6f  nstraints - impo
78e0: 73 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  se restrictions 
78f0: 6f 6e 20 74 68 65 20 74 61 62 6c 65 73 20 64 61  on the tables da
7900: 74 61 2c 20 61 6e 64 20 61 72 65 20 61 72 65 0a  ta, and are are.
7910: 64 65 73 63 72 69 62 65 64 20 75 6e 64 65 72 20  described under 
7920: 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c 53 51 4c  [constraints|SQL
7930: 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74   Data Constraint
7940: 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70 3e 5e 55  s] below...<p>^U
7950: 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c 20 64  nlike most SQL d
7960: 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74 65  atabases, SQLite
7970: 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74 72 69   does not restri
7980: 63 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 64  ct the type of d
7990: 61 74 61 20 74 68 61 74 0a 6d 61 79 20 62 65 20  ata that.may be 
79a0: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61 20  inserted into a 
79b0: 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f 6e 20  column based on 
79c0: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64 65 63 6c  the columns decl
79d0: 61 72 65 64 20 74 79 70 65 2e 20 49 6e 73 74 65  ared type. Inste
79e0: 61 64 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20  ad,.SQLite uses 
79f0: 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e 67 5d  [dynamic typing]
7a00: 2e 20 5e 54 68 65 20 64 65 63 6c 61 72 65 64 20  . ^The declared 
7a10: 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  type of a column
7a20: 20 69 73 20 75 73 65 64 20 74 6f 0a 64 65 74 65   is used to.dete
7a30: 72 6d 69 6e 65 20 74 68 65 20 5b 61 66 66 69 6e  rmine the [affin
7a40: 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 6c 75  ity] of the colu
7a50: 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 70 3e 54 68 65  mn only...<p>The
7a60: 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20   DEFAULT clause 
7a70: 73 70 65 63 69 66 69 65 73 20 61 20 64 65 66 61  specifies a defa
7a80: 75 6c 74 20 76 61 6c 75 65 20 74 6f 20 75 73 65  ult value to use
7a90: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
7aa0: 69 66 20 6e 6f 0a 76 61 6c 75 65 20 69 73 20 65  if no.value is e
7ab0: 78 70 6c 69 63 69 74 6c 79 20 70 72 6f 76 69 64  xplicitly provid
7ac0: 65 64 20 62 79 20 74 68 65 20 75 73 65 72 20 77  ed by the user w
7ad0: 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20 5b 49 4e  hen doing an [IN
7ae0: 53 45 52 54 5d 2e 20 5e 49 66 20 74 68 65 72 65  SERT]. ^If there
7af0: 0a 69 73 20 6e 6f 20 65 78 70 6c 69 63 69 74 20  .is no explicit 
7b00: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 61  DEFAULT clause a
7b10: 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c  ttached to a col
7b20: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20  umn definition, 
7b30: 74 68 65 6e 20 74 68 65 20 0a 64 65 66 61 75 6c  then the .defaul
7b40: 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  t value of the c
7b50: 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 5e  olumn is NULL. ^
7b60: 28 41 6e 20 65 78 70 6c 69 63 69 74 20 44 45 46  (An explicit DEF
7b70: 41 55 4c 54 20 63 6c 61 75 73 65 20 6d 61 79 20  AULT clause may 
7b80: 73 70 65 63 69 66 79 0a 74 68 61 74 20 74 68 65  specify.that the
7b90: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69   default value i
7ba0: 73 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67  s NULL, a string
7bb0: 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20 62 6c 6f   constant, a blo
7bc0: 62 20 63 6f 6e 73 74 61 6e 74 2c 20 61 0a 73 69  b constant, a.si
7bd0: 67 6e 65 64 2d 6e 75 6d 62 65 72 2c 20 6f 72 20  gned-number, or 
7be0: 61 6e 79 20 63 6f 6e 73 74 61 6e 74 20 65 78 70  any constant exp
7bf0: 72 65 73 73 69 6f 6e 20 65 6e 63 6c 6f 73 65 64  ression enclosed
7c00: 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e   in parentheses.
7c10: 20 41 6e 20 65 78 70 6c 69 63 69 74 0a 64 65 66   An explicit.def
7c20: 61 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61  ault value may a
7c30: 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  lso be one of th
7c40: 65 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69  e special case-i
7c50: 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f  ndependent keywo
7c60: 72 64 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45  rds.CURRENT_TIME
7c70: 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f  , CURRENT_DATE o
7c80: 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  r CURRENT_TIMEST
7c90: 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20  AMP.)^ ^For the 
7ca0: 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a  purposes of the.
7cb0: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20  DEFAULT clause, 
7cc0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  an expression is
7cd0: 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73   considered cons
7ce0: 74 61 6e 74 20 70 72 6f 76 69 64 65 64 20 74 68  tant provided th
7cf0: 61 74 20 69 74 20 64 6f 65 73 0a 6e 6f 74 20 63  at it does.not c
7d00: 6f 6e 74 61 69 6e 20 61 6e 79 20 73 75 62 2d 71  ontain any sub-q
7d10: 75 65 72 69 65 73 20 6f 72 20 73 74 72 69 6e 67  ueries or string
7d20: 20 63 6f 6e 73 74 61 6e 74 73 20 65 6e 63 6c 6f   constants enclo
7d30: 73 65 64 20 69 6e 20 64 6f 75 62 6c 65 20 71 75  sed in double qu
7d40: 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45 61 63 68  otes...<p>^(Each
7d50: 20 74 69 6d 65 20 61 20 72 6f 77 20 69 73 20 69   time a row is i
7d60: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
7d70: 20 74 61 62 6c 65 20 62 79 20 61 6e 20 49 4e 53   table by an INS
7d80: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68  ERT statement th
7d90: 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20 70 72 6f  at .does not pro
7da0: 76 69 64 65 20 65 78 70 6c 69 63 69 74 20 76 61  vide explicit va
7db0: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 74 61 62  lues for all tab
7dc0: 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68 65 20 76  le columns the v
7dd0: 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e 0a  alues stored in.
7de0: 74 68 65 20 6e 65 77 20 72 6f 77 20 61 72 65 20  the new row are 
7df0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
7e00: 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75  eir default valu
7e10: 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c 6f 77 73  es)^, as follows
7e20: 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ul>.  <li><p
7e30: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
7e40: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
7e50: 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e 73 74 61  lumn is a consta
7e60: 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74 2c 20 62  nt NULL, text, b
7e70: 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69 67 6e 65  lob or.    signe
7e80: 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75 65 2c 20  d-number value, 
7e90: 74 68 65 6e 20 74 68 61 74 20 76 61 6c 75 65 20  then that value 
7ea0: 69 73 20 75 73 65 64 20 64 69 72 65 63 74 6c 79  is used directly
7eb0: 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e   in the new row.
7ec0: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ..  <li><p>^If t
7ed0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
7ee0: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   of a column is 
7ef0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
7f00: 20 70 61 72 65 6e 74 68 65 73 65 73 2c 20 74 68   parentheses, th
7f10: 65 6e 0a 20 20 20 20 74 68 65 20 65 78 70 72 65  en.    the expre
7f20: 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
7f30: 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  ed once for each
7f40: 20 72 6f 77 20 69 6e 73 65 72 74 65 64 20 61 6e   row inserted an
7f50: 64 20 74 68 65 20 72 65 73 75 6c 74 73 0a 20 20  d the results.  
7f60: 20 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65    used in the ne
7f70: 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  w row...  <li><p
7f80: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
7f90: 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75   value of a colu
7fa0: 6d 6e 20 69 73 20 43 55 52 52 45 4e 54 5f 54 49  mn is CURRENT_TI
7fb0: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
7fc0: 20 6f 72 0a 20 20 20 20 43 55 52 52 45 4e 54 5f   or.    CURRENT_
7fd0: 54 49 4d 45 53 54 41 4d 50 2c 20 74 68 65 6e 20  TIMESTAMP, then 
7fe0: 74 68 65 20 76 61 6c 75 65 20 75 73 65 64 20 69  the value used i
7ff0: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73  n the new row is
8000: 20 61 20 74 65 78 74 0a 20 20 20 20 72 65 70 72   a text.    repr
8010: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
8020: 65 20 63 75 72 72 65 6e 74 20 55 54 43 20 64 61  e current UTC da
8030: 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20  te and/or time. 
8040: 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d  ^For CURRENT_TIM
8050: 45 2c 20 74 68 65 0a 20 20 20 20 66 6f 72 6d 61  E, the.    forma
8060: 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69  t of the value i
8070: 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e 20 5e 46  s "HH:MM:SS". ^F
8080: 6f 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c  or CURRENT_DATE,
8090: 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22 2e 20 5e   "YYYY-MM-DD". ^
80a0: 54 68 65 0a 20 20 20 20 66 6f 72 6d 61 74 20 66  The.    format f
80b0: 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53  or CURRENT_TIMES
80c0: 54 41 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d  TAMP is "YYYY-MM
80d0: 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c  -DD HH:MM:SS"..<
80e0: 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f  /ul>..<p>^The CO
80f0: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 73 70 65  LLATE clause spe
8100: 63 69 66 69 65 73 20 74 68 65 20 6e 61 6d 65 20  cifies the name 
8110: 6f 66 20 61 20 5b 63 6f 6c 6c 61 74 69 6e 67 20  of a [collating 
8120: 73 65 71 75 65 6e 63 65 5d 20 74 6f 20 75 73 65  sequence] to use
8130: 20 61 73 0a 74 68 65 20 64 65 66 61 75 6c 74 20   as.the default 
8140: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
8150: 63 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ce for the colum
8160: 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c 4c 41 54  n. ^If no COLLAT
8170: 45 20 63 6c 61 75 73 65 20 69 73 0a 73 70 65 63  E clause is.spec
8180: 69 66 69 65 64 2c 20 74 68 65 20 64 65 66 61 75  ified, the defau
8190: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
81a0: 75 65 6e 63 65 20 69 73 20 5b 42 49 4e 41 52 59  uence is [BINARY
81b0: 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62  ]...<p>^The numb
81c0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
81d0: 20 61 20 74 61 62 6c 65 20 69 73 20 6c 69 6d 69   a table is limi
81e0: 74 65 64 20 62 79 20 74 68 65 20 5b 53 51 4c 49  ted by the [SQLI
81f0: 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d 0a 63  TE_MAX_COLUMN].c
8200: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70 61 72 61  ompile-time para
8210: 6d 65 74 65 72 2e 20 5e 41 20 73 69 6e 67 6c 65  meter. ^A single
8220: 20 72 6f 77 20 6f 66 20 61 20 74 61 62 6c 65 20   row of a table 
8230: 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20 6d 6f 72  cannot store mor
8240: 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d  e than.[SQLITE_M
8250: 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79 74 65 73  AX_LENGTH] bytes
8260: 20 6f 66 20 64 61 74 61 2e 20 5e 42 6f 74 68 20   of data. ^Both 
8270: 6f 66 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20  of these limits 
8280: 63 61 6e 20 62 65 20 6c 6f 77 65 72 65 64 20 61  can be lowered a
8290: 74 0a 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20  t.runtime using 
82a0: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d  the [sqlite3_lim
82b0: 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65  it()] C/C++ inte
82c0: 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  rface.</p>..<tcl
82d0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6f  >hd_fragment {co
82e0: 6e 73 74 72 61 69 6e 74 73 7d 20 7b 63 6f 6e 73  nstraints} {cons
82f0: 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c  traints}</tcl>.<
8300: 68 33 3e 53 51 4c 20 44 61 74 61 20 43 6f 6e 73  h3>SQL Data Cons
8310: 74 72 61 69 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70  traints</h3>..<p
8320: 3e 5e 45 61 63 68 20 74 61 62 6c 65 20 69 6e 20  >^Each table in 
8330: 53 51 4c 69 74 65 20 6d 61 79 20 68 61 76 65 20  SQLite may have 
8340: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50  at most one <b>P
8350: 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20  RIMARY KEY</b>. 
8360: 5e 49 66 20 74 68 65 0a 20 20 6b 65 79 77 6f 72  ^If the.  keywor
8370: 64 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  ds PRIMARY KEY a
8380: 72 65 20 61 64 64 65 64 20 74 6f 20 61 20 63 6f  re added to a co
8390: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c  lumn definition,
83a0: 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72   then the primar
83b0: 79 20 6b 65 79 0a 20 20 66 6f 72 20 74 68 65 20  y key.  for the 
83c0: 74 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f  table consists o
83d0: 66 20 74 68 61 74 20 73 69 6e 67 6c 65 20 63 6f  f that single co
83e0: 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20  lumn. ^Or, if a 
83f0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75  PRIMARY KEY clau
8400: 73 65 20 0a 20 20 69 73 20 73 70 65 63 69 66 69  se .  is specifi
8410: 65 64 20 61 73 20 61 20 5b 74 61 62 6c 65 2d 63  ed as a [table-c
8420: 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e  onstraint], then
8430: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
8440: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20   of the table.  
8450: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
8460: 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  list of columns 
8470: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
8480: 74 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  t of the PRIMARY
8490: 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e   KEY clause..  ^
84a0: 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
84b0: 20 74 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52   than one PRIMAR
84c0: 59 20 4b 45 59 20 63 6c 61 75 73 65 20 69 6e 20  Y KEY clause in 
84d0: 61 20 73 69 6e 67 6c 65 20 43 52 45 41 54 45 20  a single CREATE 
84e0: 54 41 42 4c 45 0a 20 20 73 74 61 74 65 6d 65 6e  TABLE.  statemen
84f0: 74 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  t, it is an erro
8500: 72 2e 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c  r...<p>If a tabl
8510: 65 20 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63  e has a single c
8520: 6f 6c 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65  olumn primary ke
8530: 79 2c 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61  y, and the decla
8540: 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 61 74  red type of that
8550: 0a 20 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e  .  column is "IN
8560: 54 45 47 45 52 22 2c 20 74 68 65 6e 20 74 68 65  TEGER", then the
8570: 20 63 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e   column is known
8580: 20 61 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20   as an [INTEGER 
8590: 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20  PRIMARY KEY]..  
85a0: 53 65 65 20 62 65 6c 6f 77 20 66 6f 72 20 61 20  See below for a 
85b0: 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74  description of t
85c0: 68 65 20 73 70 65 63 69 61 6c 20 70 72 6f 70 65  he special prope
85d0: 72 74 69 65 73 20 61 6e 64 20 62 65 68 61 76 69  rties and behavi
85e0: 6f 75 72 73 0a 20 20 61 73 73 6f 63 69 61 74 65  ours.  associate
85f0: 64 20 77 69 74 68 20 61 6e 20 5b 49 4e 54 45 47  d with an [INTEG
8600: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e  ER PRIMARY KEY].
8610: 0a 0a 3c 70 3e 5e 45 61 63 68 20 72 6f 77 20 69  ..<p>^Each row i
8620: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  n a table with a
8630: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6d 75 73   primary key mus
8640: 74 20 66 65 61 74 75 72 65 20 61 20 75 6e 69 71  t feature a uniq
8650: 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20  ue combination. 
8660: 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 69 74   of values in it
8670: 73 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f  s primary key co
8680: 6c 75 6d 6e 73 2e 20 5e 46 6f 72 20 74 68 65 20  lumns. ^For the 
8690: 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65  purposes of dete
86a0: 72 6d 69 6e 69 6e 67 0a 20 20 74 68 65 20 75 6e  rmining.  the un
86b0: 69 71 75 65 6e 65 73 73 20 6f 66 20 70 72 69 6d  iqueness of prim
86c0: 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20  ary key values, 
86d0: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20  NULL values are 
86e0: 63 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74 69  considered disti
86f0: 6e 63 74 20 66 72 6f 6d 0a 20 20 61 6c 6c 20 6f  nct from.  all o
8700: 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63  ther values, inc
8710: 6c 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c  luding other NUL
8720: 4c 73 2e 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45  Ls. ^If an [INSE
8730: 52 54 5d 20 6f 72 20 5b 55 50 44 41 54 45 5d 0a  RT] or [UPDATE].
8740: 20 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65    statement atte
8750: 6d 70 74 73 20 74 6f 20 6d 6f 64 69 66 79 20 74  mpts to modify t
8760: 68 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74  he table content
8770: 20 73 6f 20 74 68 61 74 20 74 77 6f 20 6f 72 20   so that two or 
8780: 6d 6f 72 65 20 72 6f 77 73 0a 20 20 66 65 61 74  more rows.  feat
8790: 75 72 65 20 69 64 65 6e 74 69 63 61 6c 20 70 72  ure identical pr
87a0: 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73  imary key values
87b0: 2c 20 69 74 20 69 73 20 61 20 63 6f 6e 73 74 72  , it is a constr
87c0: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a  aint violation..
87d0: 20 20 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74    According to t
87e0: 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c  he SQL standard,
87f0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f   PRIMARY KEY sho
8800: 75 6c 64 20 61 6c 77 61 79 73 20 69 6d 70 6c 79  uld always imply
8810: 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e 66   NOT NULL..  Unf
8820: 6f 72 74 75 6e 61 74 65 6c 79 2c 20 64 75 65 20  ortunately, due 
8830: 74 6f 20 61 20 6c 6f 6e 67 2d 73 74 61 6e 64 69  to a long-standi
8840: 6e 67 20 63 6f 64 69 6e 67 20 6f 76 65 72 73 69  ng coding oversi
8850: 67 68 74 2c 20 74 68 69 73 20 69 73 20 6e 6f 74  ght, this is not
8860: 20 74 68 65 0a 20 20 63 61 73 65 20 69 6e 20 53   the.  case in S
8870: 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73 20 74  QLite. ^Unless t
8880: 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20  he column is an 
8890: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
88a0: 20 4b 45 59 5d 20 53 51 4c 69 74 65 0a 20 20 61   KEY] SQLite.  a
88b0: 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65  llows NULL value
88c0: 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20 4b  s in a PRIMARY K
88d0: 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 57 65 20 63  EY column.  We c
88e0: 6f 75 6c 64 20 63 68 61 6e 67 65 20 53 51 4c 69  ould change SQLi
88f0: 74 65 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20  te to.  conform 
8900: 74 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  to the standard 
8910: 28 61 6e 64 20 77 65 20 6d 69 67 68 74 20 64 6f  (and we might do
8920: 20 73 6f 20 69 6e 20 74 68 65 20 66 75 74 75 72   so in the futur
8930: 65 29 2c 20 62 75 74 20 62 79 20 74 68 65 20 74  e), but by the t
8940: 69 6d 65 0a 20 20 74 68 65 20 6f 76 65 72 73 69  ime.  the oversi
8950: 67 68 74 20 77 61 73 20 64 69 73 63 6f 76 65 72  ght was discover
8960: 65 64 2c 20 53 51 4c 69 74 65 20 77 61 73 20 69  ed, SQLite was i
8970: 6e 20 73 75 63 68 20 77 69 64 65 20 75 73 65 20  n such wide use 
8980: 74 68 61 74 20 77 65 20 66 65 61 72 65 64 0a 20  that we feared. 
8990: 20 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79   breaking legacy
89a0: 20 63 6f 64 65 20 69 66 20 77 65 20 66 69 78 65   code if we fixe
89b0: 64 20 74 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20  d the problem.  
89c0: 53 6f 20 66 6f 72 20 6e 6f 77 20 77 65 20 68 61  So for now we ha
89d0: 76 65 20 63 68 6f 73 65 6e 20 74 6f 0a 20 20 63  ve chosen to.  c
89e0: 6f 6e 74 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67  ontinue allowing
89f0: 20 4e 55 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52   NULLs in PRIMAR
8a00: 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 20 20  Y KEY columns.  
8a10: 44 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c  Developers shoul
8a20: 64 20 62 65 0a 20 20 61 77 61 72 65 2c 20 68 6f  d be.  aware, ho
8a30: 77 65 76 65 72 2c 20 74 68 61 74 20 77 65 20 6d  wever, that we m
8a40: 61 79 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65  ay change SQLite
8a50: 20 74 6f 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74   to conform to t
8a60: 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
8a70: 69 6e 0a 20 20 66 75 74 75 72 65 20 61 6e 64 20  in.  future and 
8a80: 73 68 6f 75 6c 64 20 64 65 73 69 67 6e 20 6e 65  should design ne
8a90: 77 20 70 72 6f 67 72 61 6d 73 20 61 63 63 6f 72  w programs accor
8aa0: 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 5e 41 20 3c  dingly...<p>^A <
8ab0: 62 3e 55 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e  b>UNIQUE</b> con
8ac0: 73 74 72 61 69 6e 74 20 69 73 20 73 69 6d 69 6c  straint is simil
8ad0: 61 72 20 74 6f 20 61 20 50 52 49 4d 41 52 59 20  ar to a PRIMARY 
8ae0: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  KEY constraint, 
8af0: 65 78 63 65 70 74 0a 20 20 74 68 61 74 20 61 20  except.  that a 
8b00: 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d 61 79  single table may
8b10: 20 68 61 76 65 20 61 6e 79 20 6e 75 6d 62 65 72   have any number
8b20: 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74   of UNIQUE const
8b30: 72 61 69 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63  raints. ^For eac
8b40: 68 0a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  h.  UNIQUE const
8b50: 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74 61 62  raint on the tab
8b60: 6c 65 2c 20 65 61 63 68 20 72 6f 77 20 6d 75 73  le, each row mus
8b70: 74 20 66 65 61 74 75 72 65 20 61 20 75 6e 69 71  t feature a uniq
8b80: 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20  ue combination. 
8b90: 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68   of values in th
8ba0: 65 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69  e columns identi
8bb0: 66 69 65 64 20 62 79 20 74 68 65 20 55 4e 49 51  fied by the UNIQ
8bc0: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 5e  UE constraint. ^
8bd0: 41 73 20 77 69 74 68 0a 20 20 50 52 49 4d 41 52  As with.  PRIMAR
8be0: 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
8bf0: 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  s, for the purpo
8c00: 73 65 73 20 6f 66 20 55 4e 49 51 55 45 20 63 6f  ses of UNIQUE co
8c10: 6e 73 74 72 61 69 6e 74 73 20 4e 55 4c 4c 20 76  nstraints NULL v
8c20: 61 6c 75 65 73 0a 20 20 61 72 65 20 63 6f 6e 73  alues.  are cons
8c30: 69 64 65 72 65 64 20 64 69 73 74 69 6e 63 74 20  idered distinct 
8c40: 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76  from all other v
8c50: 61 6c 75 65 73 20 28 69 6e 63 6c 75 64 69 6e 67  alues (including
8c60: 20 6f 74 68 65 72 20 4e 55 4c 4c 73 29 2e 0a 20   other NULLs).. 
8c70: 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d   ^If an [INSERT]
8c80: 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61   or [UPDATE] sta
8c90: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
8ca0: 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 74 61  to modify the ta
8cb0: 62 6c 65 20 63 6f 6e 74 65 6e 74 20 73 6f 0a 20  ble content so. 
8cc0: 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72   that two or mor
8cd0: 65 20 72 6f 77 73 20 66 65 61 74 75 72 65 20 69  e rows feature i
8ce0: 64 65 6e 74 69 63 61 6c 20 76 61 6c 75 65 73 20  dentical values 
8cf0: 69 6e 20 61 20 73 65 74 20 6f 66 20 63 6f 6c 75  in a set of colu
8d00: 6d 6e 73 20 74 68 61 74 0a 20 20 61 72 65 20 73  mns that.  are s
8d10: 75 62 6a 65 63 74 20 74 6f 20 61 20 55 4e 49 51  ubject to a UNIQ
8d20: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69  UE constraint, i
8d30: 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61 69 6e  t is a constrain
8d40: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70  t violation...<p
8d50: 3e 5e 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  >^[INTEGER PRIMA
8d60: 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 73 20  RY KEY] columns 
8d70: 61 73 69 64 65 2c 20 62 6f 74 68 20 55 4e 49 51  aside, both UNIQ
8d80: 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  UE and PRIMARY K
8d90: 45 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 73  EY.  constraints
8da0: 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64   are implemented
8db0: 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 6e 20   by creating an 
8dc0: 69 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74  index in the dat
8dd0: 61 62 61 73 65 20 28 69 6e 20 74 68 65 20 73 61  abase (in the sa
8de0: 6d 65 0a 20 20 77 61 79 20 61 73 20 61 20 5b 43  me.  way as a [C
8df0: 52 45 41 54 45 20 49 4e 44 45 58 7c 22 43 52 45  REATE INDEX|"CRE
8e00: 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58  ATE UNIQUE INDEX
8e10: 22 5d 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  "] statement wou
8e20: 6c 64 29 2e 20 5e 53 75 63 68 20 61 6e 20 0a 20  ld). ^Such an . 
8e30: 20 69 6e 64 65 78 20 69 73 20 75 73 65 64 20 6c   index is used l
8e40: 69 6b 65 20 61 6e 79 20 6f 74 68 65 72 20 69 6e  ike any other in
8e50: 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62  dex in the datab
8e60: 61 73 65 20 74 6f 20 5b 6f 70 74 69 6d 69 7a 65  ase to [optimize
8e70: 72 7c 6f 70 74 69 6d 69 7a 65 0a 20 20 71 75 65  r|optimize.  que
8e80: 72 69 65 73 5d 2e 20 20 41 73 20 61 20 72 65 73  ries].  As a res
8e90: 75 6c 74 2c 20 74 68 65 72 65 20 6f 66 74 65 6e  ult, there often
8ea0: 20 6e 6f 20 61 64 76 61 6e 74 61 67 65 20 28 62   no advantage (b
8eb0: 75 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 6f  ut significant o
8ec0: 76 65 72 68 65 61 64 29 0a 20 20 69 6e 20 63 72  verhead).  in cr
8ed0: 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 20  eating an index 
8ee0: 6f 6e 20 61 20 73 65 74 20 6f 66 20 63 6f 6c 75  on a set of colu
8ef0: 6d 6e 73 20 74 68 61 74 20 61 72 65 20 61 6c 72  mns that are alr
8f00: 65 61 64 79 20 63 6f 6c 6c 65 63 74 69 76 65 6c  eady collectivel
8f10: 79 0a 20 20 73 75 62 6a 65 63 74 20 74 6f 20 61  y.  subject to a
8f20: 20 55 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41   UNIQUE or PRIMA
8f30: 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  RY KEY constrain
8f40: 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  t...<tcl>hd_frag
8f50: 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d 20 7b  ment {ckconst} {
8f60: 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20 63 6f  CHECK} {CHECK co
8f70: 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48 45 43 4b  nstraint} {CHECK
8f80: 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74   constraints}</t
8f90: 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48  cl>.<p>^(A <b>CH
8fa0: 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69  ECK</b> constrai
8fb0: 6e 74 20 6d 61 79 20 62 65 20 61 74 74 61 63 68  nt may be attach
8fc0: 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64  ed to a column d
8fd0: 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73  efinition or.  s
8fe0: 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61  pecified as a ta
8ff0: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ble constraint. 
9000: 49 6e 20 70 72 61 63 74 69 63 65 20 69 74 20 6d  In practice it m
9010: 61 6b 65 73 20 6e 6f 20 64 69 66 66 65 72 65 6e  akes no differen
9020: 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20 20 74  ce.)^ ^(Each.  t
9030: 69 6d 65 20 61 20 6e 65 77 20 72 6f 77 20 69 73  ime a new row is
9040: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
9050: 68 65 20 74 61 62 6c 65 20 6f 72 20 61 6e 20 65  he table or an e
9060: 78 69 73 74 69 6e 67 20 72 6f 77 20 69 73 20 75  xisting row is u
9070: 70 64 61 74 65 64 2c 0a 20 20 74 68 65 20 65 78  pdated,.  the ex
9080: 70 72 65 73 73 69 6f 6e 20 61 73 73 6f 63 69 61  pression associa
9090: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 43 48  ted with each CH
90a0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  ECK constraint i
90b0: 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 0a  s evaluated and.
90c0: 20 20 63 61 73 74 20 74 6f 20 61 20 4e 55 4d 45    cast to a NUME
90d0: 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65  RIC value in the
90e0: 20 73 61 6d 65 20 77 61 79 20 61 73 20 61 20 5b   same way as a [
90f0: 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d  CAST expression]
9100: 2e 20 49 66 20 74 68 65 20 0a 20 20 72 65 73 75  . If the .  resu
9110: 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e 74 65  lt is zero (inte
9120: 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72  ger value 0 or r
9130: 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29 2c 20  eal value 0.0), 
9140: 74 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e  then a constrain
9150: 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61  t.  violation ha
9160: 73 20 6f 63 63 75 72 72 65 64 2e 29 5e 20 5e 49  s occurred.)^ ^I
9170: 66 20 74 68 65 20 43 48 45 43 4b 20 65 78 70 72  f the CHECK expr
9180: 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
9190: 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61   to NULL, or.  a
91a0: 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72  ny other non-zer
91b0: 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 6e  o value, it is n
91c0: 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  ot a constraint 
91d0: 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54 68  violation..  ^Th
91e0: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  e expression of 
91f0: 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
9200: 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61  nt may not conta
9210: 69 6e 20 61 20 73 75 62 71 75 65 72 79 2e 0a 0a  in a subquery...
9220: 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  <p>CHECK constra
9230: 69 6e 74 73 20 68 61 76 65 20 62 65 65 6e 20 73  ints have been s
9240: 75 70 70 6f 72 74 65 64 20 73 69 6e 63 65 20 5b  upported since [
9250: 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30 5d 2e 20  version 3.3.0]. 
9260: 50 72 69 6f 72 20 74 6f 0a 20 20 76 65 72 73 69  Prior to.  versi
9270: 6f 6e 20 33 2e 33 2e 30 2c 20 43 48 45 43 4b 20  on 3.3.0, CHECK 
9280: 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65  constraints were
9290: 20 70 61 72 73 65 64 20 62 75 74 20 6e 6f 74 20   parsed but not 
92a0: 65 6e 66 6f 72 63 65 64 2e 0a 0a 3c 70 3e 5e 41  enforced...<p>^A
92b0: 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c 3c 2f 62 3e   <b>NOT NULL</b>
92c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20   constraint may 
92d0: 6f 6e 6c 79 20 62 65 20 61 74 74 61 63 68 65 64  only be attached
92e0: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   to a column def
92f0: 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e 6f 74 20 73  inition,.  not s
9300: 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61  pecified as a ta
9310: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ble constraint. 
9320: 20 4e 6f 74 20 73 75 72 70 72 69 73 69 6e 67 6c   Not surprisingl
9330: 79 2c 20 5e 28 61 20 4e 4f 54 20 4e 55 4c 4c 0a  y, ^(a NOT NULL.
9340: 20 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 69 63    constraint dic
9350: 74 61 74 65 73 20 74 68 61 74 20 74 68 65 20 61  tates that the a
9360: 73 73 6f 63 69 61 74 65 64 20 63 6f 6c 75 6d 6e  ssociated column
9370: 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e   may not contain
9380: 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 0a 20   a NULL value.. 
9390: 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73   Attempting to s
93a0: 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61  et the column va
93b0: 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 77 68 65 6e  lue to NULL when
93c0: 20 69 6e 73 65 72 74 69 6e 67 20 61 20 6e 65 77   inserting a new
93d0: 20 72 6f 77 20 6f 72 0a 20 20 75 70 64 61 74 69   row or.  updati
93e0: 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6f  ng an existing o
93f0: 6e 65 20 63 61 75 73 65 73 20 61 20 63 6f 6e 73  ne causes a cons
9400: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
9410: 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63 74 6c 79 20  .)^..<p>Exactly 
9420: 68 6f 77 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  how a constraint
9430: 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20 64 65   violation is de
9440: 61 6c 74 20 77 69 74 68 20 69 73 20 64 65 74 65  alt with is dete
9450: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 20  rmined by the.  
9460: 5b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65  [conflict clause
9470: 7c 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66  |constraint conf
9480: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
9490: 61 6c 67 6f 72 69 74 68 6d 5d 2e 20 45 61 63 68  algorithm]. Each
94a0: 20 0a 20 20 50 52 49 4d 41 52 59 20 4b 45 59 2c   .  PRIMARY KEY,
94b0: 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 4e 55 4c   UNIQUE, NOT NUL
94c0: 4c 20 61 6e 64 20 43 48 45 43 4b 20 63 6f 6e 73  L and CHECK cons
94d0: 74 72 61 69 6e 74 20 68 61 73 20 61 20 64 65 66  traint has a def
94e0: 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 0a 20 20  ault conflict.  
94f0: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
9500: 69 74 68 6d 2e 20 5e 50 52 49 4d 41 52 59 20 4b  ithm. ^PRIMARY K
9510: 45 59 2c 20 55 4e 49 51 55 45 20 61 6e 64 20 4e  EY, UNIQUE and N
9520: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
9530: 6e 74 73 20 6d 61 79 20 62 65 0a 20 20 65 78 70  nts may be.  exp
9540: 6c 69 63 69 74 6c 79 20 61 73 73 69 67 6e 65 64  licitly assigned
9550: 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c   a default confl
9560: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
9570: 6c 67 6f 72 69 74 68 6d 20 62 79 20 69 6e 63 6c  lgorithm by incl
9580: 75 64 69 6e 67 0a 20 20 61 20 5b 63 6f 6e 66 6c  uding.  a [confl
9590: 69 63 74 2d 63 6c 61 75 73 65 5d 20 69 6e 20 74  ict-clause] in t
95a0: 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f 6e 73  heir definitions
95b0: 2e 20 5e 4f 72 2c 20 69 66 20 61 20 63 6f 6e 73  . ^Or, if a cons
95c0: 74 72 61 69 6e 74 20 64 65 66 69 6e 69 74 69 6f  traint definitio
95d0: 6e 0a 20 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63  n.  does not inc
95e0: 6c 75 64 65 20 61 20 5b 63 6f 6e 66 6c 69 63 74  lude a [conflict
95f0: 2d 63 6c 61 75 73 65 5d 20 6f 72 20 69 74 20 69  -clause] or it i
9600: 73 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  s a CHECK constr
9610: 61 69 6e 74 2c 20 74 68 65 20 64 65 66 61 75 6c  aint, the defaul
9620: 74 0a 20 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  t.  conflict res
9630: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
9640: 6d 20 69 73 20 41 42 4f 52 54 2e 20 5e 44 69 66  m is ABORT. ^Dif
9650: 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  ferent constrain
9660: 74 73 20 77 69 74 68 69 6e 20 74 68 65 0a 20 20  ts within the.  
9670: 73 61 6d 65 20 74 61 62 6c 65 20 6d 61 79 20 68  same table may h
9680: 61 76 65 20 64 69 66 66 65 72 65 6e 74 20 64 65  ave different de
9690: 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72  fault conflict r
96a0: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
96b0: 74 68 6d 73 2e 20 53 65 65 0a 20 20 74 68 65 20  thms. See.  the 
96c0: 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 20 5b  section titled [
96d0: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72  ON CONFLICT] for
96e0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
96f0: 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 68  rmation...<tcl>h
9700: 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 77 69 64  d_fragment rowid
9710: 20 7b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   {INTEGER PRIMAR
9720: 59 20 4b 45 59 7d 20 52 4f 57 49 44 20 72 6f 77  Y KEY} ROWID row
9730: 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 4f 57  id</tcl>.<h3>ROW
9740: 49 44 73 20 61 6e 64 20 74 68 65 20 49 4e 54 45  IDs and the INTE
9750: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 3c  GER PRIMARY KEY<
9760: 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 76 65 72 79 20  /h3>..<p>^Every 
9770: 72 6f 77 20 6f 66 20 65 76 65 72 79 20 53 51 4c  row of every SQL
9780: 69 74 65 20 74 61 62 6c 65 20 68 61 73 20 61 20  ite table has a 
9790: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
97a0: 74 65 67 65 72 20 6b 65 79 20 0a 74 68 61 74 20  teger key .that 
97b0: 75 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66  uniquely identif
97c0: 69 65 73 20 74 68 65 20 72 6f 77 20 77 69 74 68  ies the row with
97d0: 69 6e 20 69 74 73 20 74 61 62 6c 65 2e 20 54 68  in its table. Th
97e0: 69 73 20 69 6e 74 65 67 65 72 20 69 73 20 75 73  is integer is us
97f0: 75 61 6c 6c 79 0a 63 61 6c 6c 65 64 20 74 68 65  ually.called the
9800: 20 22 72 6f 77 69 64 22 2e 20 5e 54 68 65 20 72   "rowid". ^The r
9810: 6f 77 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62  owid value can b
9820: 65 20 61 63 63 65 73 73 65 64 20 75 73 69 6e 67  e accessed using
9830: 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63   one of the spec
9840: 69 61 6c 0a 63 61 73 65 2d 69 6e 64 65 70 65 6e  ial.case-indepen
9850: 64 65 6e 74 20 6e 61 6d 65 73 20 22 72 6f 77 69  dent names "rowi
9860: 64 22 2c 20 22 6f 69 64 22 2c 20 6f 72 20 22 5f  d", "oid", or "_
9870: 72 6f 77 69 64 5f 22 20 69 6e 20 70 6c 61 63 65  rowid_" in place
9880: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d   of a column nam
9890: 65 2e 0a 5e 49 66 20 61 20 74 61 62 6c 65 20 63  e..^If a table c
98a0: 6f 6e 74 61 69 6e 73 20 61 20 75 73 65 72 20 64  ontains a user d
98b0: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
98c0: 6d 65 64 20 22 72 6f 77 69 64 22 2c 20 22 6f 69  med "rowid", "oi
98d0: 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 2c  d" or "_rowid_",
98e0: 0a 74 68 65 6e 20 74 68 61 74 20 6e 61 6d 65 20  .then that name 
98f0: 61 6c 77 61 79 73 20 72 65 66 65 72 73 20 74 68  always refers th
9900: 65 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63  e explicitly dec
9910: 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20 61 6e 64  lared column and
9920: 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 0a   cannot be used.
9930: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
9940: 69 6e 74 65 67 65 72 20 72 6f 77 69 64 20 76 61  integer rowid va
9950: 6c 75 65 2e 0a 0a 3c 70 3e 54 68 65 20 64 61 74  lue...<p>The dat
9960: 61 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65  a for each table
9970: 20 69 6e 20 53 51 4c 69 74 65 20 69 73 20 73 74   in SQLite is st
9980: 6f 72 65 64 20 61 73 20 61 20 42 2d 54 72 65 65  ored as a B-Tree
9990: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
99a0: 69 6e 69 6e 67 0a 61 6e 20 65 6e 74 72 79 20 66  ining.an entry f
99b0: 6f 72 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  or each table ro
99c0: 77 2c 20 75 73 69 6e 67 20 74 68 65 20 72 6f 77  w, using the row
99d0: 69 64 20 76 61 6c 75 65 20 61 73 20 74 68 65 20  id value as the 
99e0: 6b 65 79 2e 20 54 68 69 73 20 6d 65 61 6e 73 20  key. This means 
99f0: 74 68 61 74 0a 72 65 74 72 69 65 76 69 6e 67 20  that.retrieving 
9a00: 6f 72 20 73 6f 72 74 69 6e 67 20 72 65 63 6f 72  or sorting recor
9a10: 64 73 20 62 79 20 72 6f 77 69 64 20 69 73 20 66  ds by rowid is f
9a20: 61 73 74 2e 20 53 65 61 72 63 68 69 6e 67 20 66  ast. Searching f
9a30: 6f 72 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  or a record with
9a40: 20 61 0a 73 70 65 63 69 66 69 63 20 72 6f 77 69   a.specific rowi
9a50: 64 2c 20 6f 72 20 66 6f 72 20 61 6c 6c 20 72 65  d, or for all re
9a60: 63 6f 72 64 73 20 77 69 74 68 20 72 6f 77 69 64  cords with rowid
9a70: 73 20 77 69 74 68 69 6e 20 61 20 73 70 65 63 69  s within a speci
9a80: 66 69 65 64 20 72 61 6e 67 65 20 69 73 0a 61 72  fied range is.ar
9a90: 6f 75 6e 64 20 74 77 69 63 65 20 61 73 20 66 61  ound twice as fa
9aa0: 73 74 20 61 73 20 61 20 73 69 6d 69 6c 61 72 20  st as a similar 
9ab0: 73 65 61 72 63 68 20 6d 61 64 65 20 62 79 20 73  search made by s
9ac0: 70 65 63 69 66 79 69 6e 67 20 61 6e 79 20 6f 74  pecifying any ot
9ad0: 68 65 72 20 50 52 49 4d 41 52 59 0a 4b 45 59 20  her PRIMARY.KEY 
9ae0: 6f 72 20 69 6e 64 65 78 65 64 20 76 61 6c 75 65  or indexed value
9af0: 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68 20 6f 6e 65  ...<p> ^With one
9b00: 20 65 78 63 65 70 74 69 6f 6e 2c 20 69 66 20 61   exception, if a
9b10: 20 74 61 62 6c 65 20 68 61 73 20 61 20 70 72 69   table has a pri
9b20: 6d 61 72 79 20 6b 65 79 20 74 68 61 74 20 63 6f  mary key that co
9b30: 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69 6e 67  nsists of a sing
9b40: 6c 65 0a 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  le.column, and t
9b50: 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  he declared type
9b60: 20 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20   of that column 
9b70: 69 73 20 22 49 4e 54 45 47 45 52 22 20 69 6e 20  is "INTEGER" in 
9b80: 61 6e 79 20 6d 69 78 74 75 72 65 20 6f 66 0a 75  any mixture of.u
9b90: 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63  pper and lower c
9ba0: 61 73 65 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ase, then the co
9bb0: 6c 75 6d 6e 20 62 65 63 6f 6d 65 73 20 61 6e 20  lumn becomes an 
9bc0: 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f  alias for the ro
9bd0: 77 69 64 2e 20 53 75 63 68 20 61 0a 63 6f 6c 75  wid. Such a.colu
9be0: 6d 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 72 65  mn is usually re
9bf0: 66 65 72 72 65 64 20 74 6f 20 61 73 20 61 6e 20  ferred to as an 
9c00: 22 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79  "integer primary
9c10: 20 6b 65 79 22 2e 20 41 20 50 52 49 4d 41 52 59   key". A PRIMARY
9c20: 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79   KEY column.only
9c30: 20 62 65 63 6f 6d 65 73 20 61 6e 20 69 6e 74 65   becomes an inte
9c40: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
9c50: 69 66 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  if the declared 
9c60: 74 79 70 65 20 6e 61 6d 65 20 69 73 20 65 78 61  type name is exa
9c70: 63 74 6c 79 0a 22 49 4e 54 45 47 45 52 22 2e 20  ctly."INTEGER". 
9c80: 20 5e 4f 74 68 65 72 20 69 6e 74 65 67 65 72 20   ^Other integer 
9c90: 74 79 70 65 20 6e 61 6d 65 73 20 6c 69 6b 65 20  type names like 
9ca0: 22 49 4e 54 22 20 6f 72 20 22 42 49 47 49 4e 54  "INT" or "BIGINT
9cb0: 22 20 6f 72 20 22 53 48 4f 52 54 20 49 4e 54 45  " or "SHORT INTE
9cc0: 47 45 52 22 0a 6f 72 20 22 55 4e 53 49 47 4e 45  GER".or "UNSIGNE
9cd0: 44 20 49 4e 54 45 47 45 52 22 20 63 61 75 73 65  D INTEGER" cause
9ce0: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
9cf0: 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 68 61  y column to beha
9d00: 76 65 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72  ve as an ordinar
9d10: 79 0a 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77  y.table column w
9d20: 69 74 68 20 69 6e 74 65 67 65 72 20 5b 61 66 66  ith integer [aff
9d30: 69 6e 69 74 79 5d 20 61 6e 64 20 61 20 75 6e 69  inity] and a uni
9d40: 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20 61  que index, not a
9d50: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74  s an alias for.t
9d60: 68 65 20 72 6f 77 69 64 2e 0a 0a 3c 70 3e 20 54  he rowid...<p> T
9d70: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 6d 65 6e  he exception men
9d80: 74 69 6f 6e 65 64 20 61 62 6f 76 65 20 69 73 20  tioned above is 
9d90: 74 68 61 74 20 5e 69 66 20 74 68 65 20 64 65 63  that ^if the dec
9da0: 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61 20 63 6f  laration of a co
9db0: 6c 75 6d 6e 20 77 69 74 68 0a 64 65 63 6c 61 72  lumn with.declar
9dc0: 65 64 20 74 79 70 65 20 22 49 4e 54 45 47 45 52  ed type "INTEGER
9dd0: 22 20 69 6e 63 6c 75 64 65 73 20 61 6e 20 22 50  " includes an "P
9de0: 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43 22  RIMARY KEY DESC"
9df0: 20 63 6c 61 75 73 65 2c 20 69 74 20 64 6f 65 73   clause, it does
9e00: 20 6e 6f 74 0a 62 65 63 6f 6d 65 20 61 6e 20 61   not.become an a
9e10: 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77  lias for the row
9e20: 69 64 20 61 6e 64 20 69 73 20 6e 6f 74 20 63 6c  id and is not cl
9e30: 61 73 73 69 66 69 65 64 20 61 73 20 61 6e 20 69  assified as an i
9e40: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
9e50: 65 79 2e 0a 54 68 69 73 20 71 75 69 72 6b 20 69  ey..This quirk i
9e60: 73 20 6e 6f 74 20 62 79 20 64 65 73 69 67 6e 2e  s not by design.
9e70: 20 49 74 20 69 73 20 64 75 65 20 74 6f 20 61 20   It is due to a 
9e80: 62 75 67 20 69 6e 20 65 61 72 6c 79 20 76 65 72  bug in early ver
9e90: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e  sions of SQLite.
9ea0: 0a 42 75 74 20 66 69 78 69 6e 67 20 74 68 65 20  .But fixing the 
9eb0: 62 75 67 20 63 6f 75 6c 64 20 72 65 73 75 6c 74  bug could result
9ec0: 20 69 6e 20 76 65 72 79 20 73 65 72 69 6f 75 73   in very serious
9ed0: 20 62 61 63 6b 77 61 72 64 73 20 69 6e 63 6f 6d   backwards incom
9ee0: 70 61 74 69 62 69 6c 69 74 69 65 73 2e 0a 54 68  patibilities..Th
9ef0: 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f 70  e SQLite develop
9f00: 65 72 73 20 66 65 65 6c 20 74 68 61 74 20 67 6f  ers feel that go
9f10: 6f 66 79 20 62 65 68 61 76 69 6f 72 20 69 6e 20  ofy behavior in 
9f20: 61 6e 20 63 6f 72 6e 65 72 20 63 61 73 65 20 69  an corner case i
9f30: 73 20 66 61 72 20 62 65 74 74 65 72 0a 74 68 61  s far better.tha
9f40: 6e 20 61 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  n a compatibilit
9f50: 79 20 62 72 65 61 6b 2c 20 73 6f 20 74 68 65 20  y break, so the 
9f60: 6f 72 69 67 69 6e 61 6c 20 62 65 68 61 76 69 6f  original behavio
9f70: 72 20 69 73 20 72 65 74 61 69 6e 65 64 2e 20 54  r is retained. T
9f80: 68 69 73 20 6d 65 61 6e 73 0a 74 68 61 74 20 5e  his means.that ^
9f90: 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  (the following t
9fa0: 68 72 65 65 20 74 61 62 6c 65 20 64 65 63 6c 61  hree table decla
9fb0: 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73  rations all caus
9fc0: 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22  e the column "x"
9fd0: 20 74 6f 20 62 65 20 61 6e 0a 61 6c 69 61 73 20   to be an.alias 
9fe0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 28 61  for the rowid (a
9ff0: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
a000: 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c  y key):..<ul>.<l
a010: 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42  i><tt>CREATE TAB
a020: 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 20 50  LE t(x INTEGER P
a030: 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20  RIMARY KEY ASC, 
a040: 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e  y, z);</tt>.<li>
a050: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
a060: 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c   t(x INTEGER, y,
a070: 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   z, PRIMARY KEY(
a080: 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 6c  x ASC));</tt>.<l
a090: 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42  i><tt>CREATE TAB
a0a0: 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20  LE t(x INTEGER, 
a0b0: 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45  y, z, PRIMARY KE
a0c0: 59 28 78 20 44 45 53 43 29 29 3b 3c 2f 74 74 3e  Y(x DESC));</tt>
a0d0: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 42 75 74  .</ul>)^..<p>But
a0e0: 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67   ^(the following
a0f0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 64 6f 65   declaration doe
a100: 73 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20  s not result in 
a110: 22 78 22 20 62 65 69 6e 67 20 61 6e 20 61 6c 69  "x" being an ali
a120: 61 73 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64  as for.the rowid
a130: 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  :.<ul>.<li><tt>C
a140: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
a150: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
a160: 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b  KEY DESC, y, z);
a170: 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  </tt>.</ul>)^..<
a180: 70 3e 5e 52 6f 77 69 64 20 76 61 6c 75 65 73 20  p>^Rowid values 
a190: 6d 61 79 20 62 65 20 6d 6f 64 69 66 69 65 64 20  may be modified 
a1a0: 75 73 69 6e 67 20 61 6e 20 55 50 44 41 54 45 20  using an UPDATE 
a1b0: 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65  statement in the
a1c0: 20 73 61 6d 65 0a 77 61 79 20 61 73 20 61 6e 79   same.way as any
a1d0: 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e 20 76 61   other column va
a1e0: 6c 75 65 20 63 61 6e 2c 20 65 69 74 68 65 72 20  lue can, either 
a1f0: 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65  using one of the
a200: 20 62 75 69 6c 74 2d 69 6e 20 61 6c 69 61 73 65   built-in aliase
a210: 73 0a 28 22 72 6f 77 69 64 22 2c 20 22 6f 69 64  s.("rowid", "oid
a220: 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 29 20  " or "_rowid_") 
a230: 6f 72 20 62 79 20 75 73 69 6e 67 20 61 6e 20 61  or by using an a
a240: 6c 69 61 73 20 63 72 65 61 74 65 64 20 62 79 20  lias created by 
a250: 61 6e 20 69 6e 74 65 67 65 72 0a 70 72 69 6d 61  an integer.prima
a260: 72 79 20 6b 65 79 2e 20 5e 53 69 6d 69 6c 61 72  ry key. ^Similar
a270: 6c 79 2c 20 61 6e 20 49 4e 53 45 52 54 20 73 74  ly, an INSERT st
a280: 61 74 65 6d 65 6e 74 20 6d 61 79 20 70 72 6f 76  atement may prov
a290: 69 64 65 20 61 20 76 61 6c 75 65 20 74 6f 20 75  ide a value to u
a2a0: 73 65 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20  se as the.rowid 
a2b0: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73  for each row ins
a2c0: 65 72 74 65 64 2e 20 5e 28 55 6e 6c 69 6b 65 20  erted. ^(Unlike 
a2d0: 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65 20 63 6f  normal SQLite co
a2e0: 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e 74 65 67 65  lumns, an intege
a2f0: 72 20 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f 72  r primary.key or
a300: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75   rowid column mu
a310: 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67  st contain integ
a320: 65 72 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67  er values. Integ
a330: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  er primary key o
a340: 72 20 72 6f 77 69 64 0a 63 6f 6c 75 6d 6e 73 20  r rowid.columns 
a350: 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20  are not able to 
a360: 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f  hold floating po
a370: 69 6e 74 20 76 61 6c 75 65 73 2c 20 73 74 72 69  int values, stri
a380: 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72 20 4e  ngs, BLOBs, or N
a390: 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  ULLs.)^..<p>^If 
a3a0: 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  an UPDATE statem
a3b0: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
a3c0: 73 65 74 20 61 6e 20 69 6e 74 65 67 65 72 20 70  set an integer p
a3d0: 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f  rimary key or ro
a3e0: 77 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f 20 61 20  wid column.to a 
a3f0: 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c  NULL or blob val
a400: 75 65 2c 20 6f 72 20 74 6f 20 61 20 73 74 72 69  ue, or to a stri
a410: 6e 67 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65  ng or real value
a420: 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20   that cannot be 
a430: 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65  losslessly.conve
a440: 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
a450: 65 72 2c 20 61 20 22 64 61 74 61 74 79 70 65 20  er, a "datatype 
a460: 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20  mismatch" error 
a470: 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65 20 73  occurs and the s
a480: 74 61 74 65 6d 65 6e 74 0a 69 73 20 61 62 6f 72  tatement.is abor
a490: 74 65 64 2e 20 5e 49 66 20 61 6e 20 49 4e 53 45  ted. ^If an INSE
a4a0: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  RT statement att
a4b0: 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20  empts to insert 
a4c0: 61 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72  a blob value, or
a4d0: 20 61 20 73 74 72 69 6e 67 0a 6f 72 20 72 65 61   a string.or rea
a4e0: 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  l value that can
a4f0: 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  not be losslessl
a500: 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
a510: 6e 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61  n integer into a
a520: 6e 0a 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n.integer primar
a530: 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63  y key or rowid c
a540: 6f 6c 75 6d 6e 2c 20 61 20 22 64 61 74 61 74 79  olumn, a "dataty
a550: 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72  pe mismatch" err
a560: 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68  or occurs and th
a570: 65 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  e.statement is a
a580: 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20  borted...<p>^If 
a590: 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
a5a0: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
a5b0: 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c 20 76 61  insert a NULL va
a5c0: 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f 77 69 64  lue into a rowid
a5d0: 20 6f 72 0a 69 6e 74 65 67 65 72 20 70 72 69 6d   or.integer prim
a5e0: 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 2c 20  ary key column, 
a5f0: 74 68 65 20 73 79 73 74 65 6d 20 63 68 6f 6f 73  the system choos
a600: 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  es an integer va
a610: 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20 74 68  lue to use as th
a620: 65 0a 72 6f 77 69 64 20 61 75 74 6f 6d 61 74 69  e.rowid automati
a630: 63 61 6c 6c 79 2e 20 41 20 64 65 74 61 69 6c 65  cally. A detaile
a640: 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  d description of
a650: 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e   how this is don
a660: 65 20 69 73 20 70 72 6f 76 69 64 65 64 0a 3c 61  e is provided.<a
a670: 20 68 72 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68   href="autoinc.h
a680: 74 6d 6c 22 3e 73 65 70 61 72 61 74 65 6c 79 3c  tml">separately<
a690: 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  /a>.</p>..<p>^(T
a6a0: 68 65 20 5b 70 61 72 65 6e 74 20 6b 65 79 5d 20  he [parent key] 
a6b0: 6f 66 20 61 20 5b 66 6f 72 65 69 67 6e 20 6b 65  of a [foreign ke
a6c0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d 20 69 73  y constraint] is
a6d0: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a   not allowed to.
a6e0: 75 73 65 20 74 68 65 20 72 6f 77 69 64 2e 20 20  use the rowid.  
a6f0: 54 68 65 20 70 61 72 65 6e 74 20 6b 65 79 20 6d  The parent key m
a700: 75 73 74 20 75 73 65 64 20 6e 61 6d 65 64 20 63  ust used named c
a710: 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29 5e 3c 2f  olumns only.)^</
a720: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
a730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a770: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
a780: 20 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   {CREATE TRIGGER
a790: 7d 20 63 72 65 61 74 65 74 72 69 67 67 65 72 20  } createtrigger 
a7a0: 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52  {{CREATE TRIGGER
a7b0: 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
a7c0: 6d 20 63 72 65 61 74 65 2d 74 72 69 67 67 65 72  m create-trigger
a7d0: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
a7e0: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 54  <p>^The CREATE T
a7f0: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
a800: 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
a810: 74 72 69 67 67 65 72 73 20 74 6f 20 74 68 65 20  triggers to the 
a820: 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  .database schema
a830: 2e 20 5e 54 72 69 67 67 65 72 73 20 61 72 65 20  . ^Triggers are 
a840: 64 61 74 61 62 61 73 65 20 6f 70 65 72 61 74 69  database operati
a850: 6f 6e 73 20 0a 74 68 61 74 20 61 72 65 20 61 75  ons .that are au
a860: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 65 72 66  tomatically perf
a870: 6f 72 6d 65 64 20 77 68 65 6e 20 61 20 73 70 65  ormed when a spe
a880: 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65 20  cified database 
a890: 65 76 65 6e 74 0a 6f 63 63 75 72 73 2e 20 20 3c  event.occurs.  <
a8a0: 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74 72 69 67 67  /p>..<p>^A trigg
a8b0: 65 72 20 6d 61 79 20 62 65 20 73 70 65 63 69 66  er may be specif
a8c0: 69 65 64 20 74 6f 20 66 69 72 65 20 77 68 65 6e  ied to fire when
a8d0: 65 76 65 72 20 61 20 5b 44 45 4c 45 54 45 5d 2c  ever a [DELETE],
a8e0: 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f 72 20 5b 55   [INSERT],.or [U
a8f0: 50 44 41 54 45 5d 20 6f 66 20 61 0a 70 61 72 74  PDATE] of a.part
a900: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
a910: 74 61 62 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72  table occurs, or
a920: 20 77 68 65 6e 65 76 65 72 20 61 6e 20 5b 55 50   whenever an [UP
a930: 44 41 54 45 5d 20 6f 63 63 75 72 73 20 6f 6e 0a  DATE] occurs on.
a940: 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73  on one or more s
a950: 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73  pecified columns
a960: 20 6f 66 20 61 20 74 61 62 6c 65 2e 3c 2f 70 3e   of a table.</p>
a970: 0a 0a 3c 70 3e 5e 41 74 20 74 68 69 73 20 74 69  ..<p>^At this ti
a980: 6d 65 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  me SQLite suppor
a990: 74 73 20 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48  ts only FOR EACH
a9a0: 20 52 4f 57 20 74 72 69 67 67 65 72 73 2c 20 6e   ROW triggers, n
a9b0: 6f 74 20 46 4f 52 20 45 41 43 48 0a 53 54 41 54  ot FOR EACH.STAT
a9c0: 45 4d 45 4e 54 20 74 72 69 67 67 65 72 73 2e 20  EMENT triggers. 
a9d0: 5e 48 65 6e 63 65 20 65 78 70 6c 69 63 69 74 6c  ^Hence explicitl
a9e0: 79 20 73 70 65 63 69 66 79 69 6e 67 20 46 4f 52  y specifying FOR
a9f0: 20 45 41 43 48 20 52 4f 57 20 69 73 20 6f 70 74   EACH ROW is opt
aa00: 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20 45 41 43 48  ional..^FOR EACH
aa10: 20 52 4f 57 20 69 6d 70 6c 69 65 73 20 74 68 61   ROW implies tha
aa20: 74 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  t the SQL statem
aa30: 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 69  ents specified i
aa40: 6e 20 74 68 65 20 74 72 69 67 67 65 72 0a 6d 61  n the trigger.ma
aa50: 79 20 62 65 20 65 78 65 63 75 74 65 64 20 28 64  y be executed (d
aa60: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
aa70: 57 48 45 4e 20 63 6c 61 75 73 65 29 20 66 6f 72  WHEN clause) for
aa80: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 72   each database r
aa90: 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65 72 74 65  ow being.inserte
aaa0: 64 2c 20 75 70 64 61 74 65 64 20 6f 72 20 64 65  d, updated or de
aab0: 6c 65 74 65 64 20 62 79 20 74 68 65 20 73 74 61  leted by the sta
aac0: 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74  tement causing t
aad0: 68 65 20 74 72 69 67 67 65 72 20 74 6f 20 66 69  he trigger to fi
aae0: 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f  re.</p>..<p>^(Bo
aaf0: 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75  th the WHEN clau
ab00: 73 65 20 61 6e 64 20 74 68 65 20 74 72 69 67 67  se and the trigg
ab10: 65 72 20 61 63 74 69 6f 6e 73 20 6d 61 79 20 61  er actions may a
ab20: 63 63 65 73 73 20 65 6c 65 6d 65 6e 74 73 20 6f  ccess elements o
ab30: 66 20 0a 74 68 65 20 72 6f 77 20 62 65 69 6e 67  f .the row being
ab40: 20 69 6e 73 65 72 74 65 64 2c 20 64 65 6c 65 74   inserted, delet
ab50: 65 64 20 6f 72 20 75 70 64 61 74 65 64 20 75 73  ed or updated us
ab60: 69 6e 67 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ing references o
ab70: 66 20 74 68 65 20 66 6f 72 6d 20 0a 22 4e 45 57  f the form ."NEW
ab80: 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
ab90: 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44 2e 3c 69  /i>" and "OLD.<i
aba0: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e  >column-name</i>
abb0: 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63 6f 6c 75  ", where.<i>colu
abc0: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 74  mn-name</i> is t
abd0: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c  he name of a col
abe0: 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 74 61 62  umn from the tab
abf0: 6c 65 20 74 68 61 74 20 74 68 65 20 74 72 69 67  le that the trig
ac00: 67 65 72 0a 69 73 20 61 73 73 6f 63 69 61 74 65  ger.is associate
ac10: 64 20 77 69 74 68 2e 29 5e 20 5e 28 4f 4c 44 20  d with.)^ ^(OLD 
ac20: 61 6e 64 20 4e 45 57 20 72 65 66 65 72 65 6e 63  and NEW referenc
ac30: 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  es may only be u
ac40: 73 65 64 20 69 6e 20 74 72 69 67 67 65 72 73 20  sed in triggers 
ac50: 6f 6e 0a 65 76 65 6e 74 73 20 66 6f 72 20 77 68  on.events for wh
ac60: 69 63 68 20 74 68 65 79 20 61 72 65 20 72 65 6c  ich they are rel
ac70: 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77  evant, as follow
ac80: 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62  s:</p>..<table b
ac90: 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64  order=0 cellpadd
aca0: 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64  ing=10>.<tr>.<td
acb0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
acc0: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
acd0: 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52 54 3c  h=120><i>INSERT<
ace0: 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  /i></td>.<td val
acf0: 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 72 65  ign="top">NEW re
ad00: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
ad10: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  id</td>.</tr>.<t
ad20: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
ad30: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
ad40: 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 55  " width=120><i>U
ad50: 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c  PDATE</i></td>.<
ad60: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
ad70: 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65 66 65  NEW and OLD refe
ad80: 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64  rences are valid
ad90: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
ada0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
adb0: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  " align="right" 
adc0: 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44 45 4c  width=120><i>DEL
add0: 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64  ETE</i></td>.<td
ade0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c   valign="top">OL
adf0: 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65  D references are
ae00: 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72   valid</td>.</tr
ae10: 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29  >.</table>.</p>)
ae20: 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57 48 45 4e  ^..<p>^If a WHEN
ae30: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
ae40: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
ae50: 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
ae60: 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78 65 63 75  d.are only execu
ae70: 74 65 64 20 66 6f 72 20 72 6f 77 73 20 66 6f 72  ted for rows for
ae80: 20 77 68 69 63 68 20 74 68 65 20 57 48 45 4e 0a   which the WHEN.
ae90: 63 6c 61 75 73 65 20 69 73 20 74 72 75 65 2e 20  clause is true. 
aea0: 5e 49 66 20 6e 6f 20 57 48 45 4e 20 63 6c 61 75  ^If no WHEN clau
aeb0: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
aec0: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
aed0: 74 73 0a 61 72 65 20 65 78 65 63 75 74 65 64 20  ts.are executed 
aee0: 66 6f 72 20 61 6c 6c 20 72 6f 77 73 2e 3c 2f 70  for all rows.</p
aef0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42 45 46 4f 52  >..<p>^The BEFOR
af00: 45 20 6f 72 20 41 46 54 45 52 20 6b 65 79 77 6f  E or AFTER keywo
af10: 72 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  rd determines wh
af20: 65 6e 20 74 68 65 20 74 72 69 67 67 65 72 20 61  en the trigger a
af30: 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62 65 20 65  ctions.will be e
af40: 78 65 63 75 74 65 64 20 72 65 6c 61 74 69 76 65  xecuted relative
af50: 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74 69 6f   to the insertio
af60: 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20  n, modification 
af70: 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74 68  or removal of th
af80: 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72 6f 77  e.associated row
af90: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f  .</p>..<p>^An [O
afa0: 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75  N CONFLICT] clau
afb0: 73 65 20 6d 61 79 20 62 65 20 73 70 65 63 69 66  se may be specif
afc0: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  ied as part of a
afd0: 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72 20 5b 49  n [UPDATE] or [I
afe0: 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e 20 77 69  NSERT].action wi
aff0: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
b000: 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a 5e 48   the trigger..^H
b010: 6f 77 65 76 65 72 20 69 66 20 61 6e 20 5b 4f 4e  owever if an [ON
b020: 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73   CONFLICT] claus
b030: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  e is specified a
b040: 73 20 70 61 72 74 20 6f 66 20 0a 74 68 65 20 73  s part of .the s
b050: 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67  tatement causing
b060: 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f 20   the trigger to 
b070: 66 69 72 65 2c 20 74 68 65 6e 20 63 6f 6e 66 6c  fire, then confl
b080: 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c  ict handling.pol
b090: 69 63 79 20 6f 66 20 74 68 65 20 6f 75 74 65 72  icy of the outer
b0a0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
b0b0: 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a  ed instead.</p>.
b0c0: 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72  .<p>^Triggers ar
b0d0: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
b0e0: 5b 44 52 4f 50 20 54 52 49 47 47 45 52 20 7c 20  [DROP TRIGGER | 
b0f0: 64 72 6f 70 70 65 64 5d 0a 77 68 65 6e 20 74 68  dropped].when th
b100: 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  e table that the
b110: 79 20 61 72 65 20 0a 61 73 73 6f 63 69 61 74 65  y are .associate
b120: 64 20 77 69 74 68 20 28 74 68 65 20 3c 69 3e 74  d with (the <i>t
b130: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61  able-name</i> ta
b140: 62 6c 65 29 20 69 73 20 0a 5b 44 52 4f 50 20 54  ble) is .[DROP T
b150: 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 2e  ABLE | dropped].
b160: 20 20 5e 48 6f 77 65 76 65 72 20 69 66 20 74 68    ^However if th
b170: 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e  e trigger action
b180: 73 20 72 65 66 65 72 65 6e 63 65 0a 6f 74 68 65  s reference.othe
b190: 72 20 74 61 62 6c 65 73 2c 20 74 68 65 20 74 72  r tables, the tr
b1a0: 69 67 67 65 72 20 69 73 20 6e 6f 74 20 64 72 6f  igger is not dro
b1b0: 70 70 65 64 20 6f 72 20 6d 6f 64 69 66 69 65 64  pped or modified
b1c0: 20 69 66 20 74 68 6f 73 65 20 6f 74 68 65 72 0a   if those other.
b1d0: 74 61 62 6c 65 73 20 61 72 65 20 5b 44 52 4f 50  tables are [DROP
b1e0: 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64   TABLE | dropped
b1f0: 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54 41 42 4c  ] or [ALTER TABL
b200: 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f  E | modified].</
b210: 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73  p>..<p>^Triggers
b220: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
b230: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 52 49  ng the [DROP TRI
b240: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
b250: 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79 6e 74 61 78  </p>..<h3>Syntax
b260: 20 52 65 73 74 72 69 63 74 69 6f 6e 73 20 4f 6e   Restrictions On
b270: 20 55 50 44 41 54 45 2c 20 44 45 4c 45 54 45 2c   UPDATE, DELETE,
b280: 20 61 6e 64 20 49 4e 53 45 52 54 20 53 74 61 74   and INSERT Stat
b290: 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 0a 20 20  ements Within.  
b2a0: 20 20 54 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a    Triggers</h3>.
b2b0: 0a 3c 70 3e 5e 54 68 65 20 5b 55 50 44 41 54 45  .<p>^The [UPDATE
b2c0: 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64  ], [DELETE], and
b2d0: 20 5b 49 4e 53 45 52 54 5d 0a 73 74 61 74 65 6d   [INSERT].statem
b2e0: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
b2f0: 67 65 72 73 20 64 6f 20 6e 6f 74 20 73 75 70 70  gers do not supp
b300: 6f 72 74 0a 74 68 65 20 66 75 6c 6c 20 73 79 6e  ort.the full syn
b310: 74 61 78 20 66 6f 72 20 5b 55 50 44 41 54 45 5d  tax for [UPDATE]
b320: 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20  , [DELETE], and 
b330: 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65  [INSERT] stateme
b340: 6e 74 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  nts.  The follow
b350: 69 6e 67 0a 72 65 73 74 72 69 63 74 69 6f 6e 73  ing.restrictions
b360: 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c   apply:</p>..<ul
b370: 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68  >.<li><p>.  ^(Th
b380: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
b390: 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69  ble to be modifi
b3a0: 65 64 20 69 6e 20 61 6e 20 5b 55 50 44 41 54 45  ed in an [UPDATE
b3b0: 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 6f 72 20  ], [DELETE], or 
b3c0: 5b 49 4e 53 45 52 54 5d 0a 20 20 73 74 61 74 65  [INSERT].  state
b3d0: 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61 6e 20  ment must be an 
b3e0: 75 6e 71 75 61 6c 69 66 69 65 64 20 74 61 62 6c  unqualified tabl
b3f0: 65 20 6e 61 6d 65 2e 20 20 49 6e 20 6f 74 68 65  e name.  In othe
b400: 72 20 77 6f 72 64 73 2c 20 6f 6e 65 20 6d 75 73  r words, one mus
b410: 74 0a 20 20 75 73 65 20 6a 75 73 74 20 22 3c 69  t.  use just "<i
b420: 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20  >tablename</i>" 
b430: 6e 6f 74 20 22 3c 69 3e 64 61 74 61 62 61 73 65  not "<i>database
b440: 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74  </i><b>.</b><i>t
b450: 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20  ablename</i>".  
b460: 77 68 65 6e 20 73 70 65 63 69 66 79 69 6e 67 20  when specifying 
b470: 74 68 65 20 74 61 62 6c 65 2e 29 5e 20 20 5e 54  the table.)^  ^T
b480: 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d  he table to be m
b490: 6f 64 69 66 69 65 64 20 6d 75 73 74 20 65 78 69  odified must exi
b4a0: 73 74 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65  st in the.  same
b4b0: 20 64 61 74 61 62 61 73 65 20 61 73 20 74 68 65   database as the
b4c0: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
b4d0: 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
b4e0: 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 2e  ger is attached.
b4f0: 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  .  </p></li>..<l
b500: 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 22 49 4e  i><p>.  ^The "IN
b510: 53 45 52 54 20 49 4e 54 4f 20 3c 69 3e 74 61 62  SERT INTO <i>tab
b520: 6c 65 3c 2f 69 3e 20 44 45 46 41 55 4c 54 20 56  le</i> DEFAULT V
b530: 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74  ALUES" form of t
b540: 68 65 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74  he [INSERT] stat
b550: 65 6d 65 6e 74 0a 20 20 69 73 20 6e 6f 74 20 73  ement.  is not s
b560: 75 70 70 6f 72 74 65 64 2e 0a 20 20 3c 2f 70 3e  upported..  </p>
b570: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20  </li>..<li><p>. 
b580: 20 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59   ^The INDEXED BY
b590: 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44   and NOT INDEXED
b5a0: 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74   clauses are not
b5b0: 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b   supported for [
b5c0: 55 50 44 41 54 45 5d 20 61 6e 64 0a 20 20 5b 44  UPDATE] and.  [D
b5d0: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
b5e0: 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  s..  </p></li>..
b5f0: 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20  <li><p>.  ^(The 
b600: 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
b610: 49 54 20 63 6c 61 75 73 65 73 20 6f 6e 20 5b 55  IT clauses on [U
b620: 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45  PDATE] and [DELE
b630: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 61  TE] statements a
b640: 72 65 20 6e 6f 74 0a 20 20 73 75 70 70 6f 72 74  re not.  support
b650: 65 64 2e 20 20 4f 52 44 45 52 20 42 59 20 61 6e  ed.  ORDER BY an
b660: 64 20 4c 49 4d 49 54 20 61 72 65 20 6e 6f 74 20  d LIMIT are not 
b670: 6e 6f 72 6d 61 6c 6c 79 20 73 75 70 70 6f 72 74  normally support
b680: 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20  ed for [UPDATE] 
b690: 6f 72 0a 20 20 5b 44 45 4c 45 54 45 5d 20 69 6e  or.  [DELETE] in
b6a0: 20 61 6e 79 20 63 6f 6e 74 65 78 74 20 62 75 74   any context but
b6b0: 20 63 61 6e 20 62 65 20 65 6e 61 62 6c 65 64 20   can be enabled 
b6c0: 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74  for top-level st
b6d0: 61 74 65 6d 65 6e 74 73 0a 20 20 75 73 69 6e 67  atements.  using
b6e0: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
b6f0: 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
b700: 45 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70 69 6c 65  E_LIMIT] compile
b710: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 48  -time option.  H
b720: 6f 77 65 76 65 72 2c 0a 20 20 74 68 61 74 20 63  owever,.  that c
b730: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
b740: 6f 6e 20 6f 6e 6c 79 20 61 70 70 6c 69 65 73 20  on only applies 
b750: 74 6f 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 55 50  to top-level [UP
b760: 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54  DATE] and [DELET
b770: 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 2c  E].  statements,
b780: 20 6e 6f 74 20 5b 55 50 44 41 54 45 5d 20 61 6e   not [UPDATE] an
b790: 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65  d [DELETE] state
b7a0: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
b7b0: 67 67 65 72 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c  ggers.)^.  </p><
b7c0: 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c  /li>.</ul>..<tcl
b7d0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 73  >hd_fragment ins
b7e0: 74 65 61 64 5f 6f 66 5f 74 72 69 67 67 65 72 20  tead_of_trigger 
b7f0: 7b 49 4e 53 54 45 41 44 20 4f 46 7d 20 7b 49 4e  {INSTEAD OF} {IN
b800: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
b810: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54  }</tcl>.<h3>INST
b820: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 3c 2f  EAD OF trigger</
b830: 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72  h3>..<p>^Trigger
b840: 73 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64  s may be created
b850: 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20 61 73 20   on [views], as 
b860: 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72 79  well as ordinary
b870: 20 74 61 62 6c 65 73 2c 20 62 79 0a 73 70 65 63   tables, by.spec
b880: 69 66 79 69 6e 67 20 49 4e 53 54 45 41 44 20 4f  ifying INSTEAD O
b890: 46 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20  F in the CREATE 
b8a0: 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e  TRIGGER statemen
b8b0: 74 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f 72 20 6d  t. .^If one or m
b8c0: 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f  ore ON INSERT, O
b8d0: 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55  N DELETE.or ON U
b8e0: 50 44 41 54 45 20 74 72 69 67 67 65 72 73 20 61  PDATE triggers a
b8f0: 72 65 20 64 65 66 69 6e 65 64 20 6f 6e 20 61 20  re defined on a 
b900: 76 69 65 77 2c 20 74 68 65 6e 20 69 74 20 69 73  view, then it is
b910: 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72 20 74 6f   not an.error to
b920: 20 65 78 65 63 75 74 65 20 61 6e 20 49 4e 53 45   execute an INSE
b930: 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50  RT, DELETE or UP
b940: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 6f  DATE statement o
b950: 6e 20 74 68 65 20 76 69 65 77 2c 20 0a 72 65 73  n the view, .res
b960: 70 65 63 74 69 76 65 6c 79 2e 20 20 5e 49 6e 73  pectively.  ^Ins
b970: 74 65 61 64 2c 0a 65 78 65 63 75 74 69 6e 67 20  tead,.executing 
b980: 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
b990: 45 20 6f 72 20 55 50 44 41 54 45 20 6f 6e 20 74  E or UPDATE on t
b9a0: 68 65 20 76 69 65 77 20 63 61 75 73 65 73 20 74  he view causes t
b9b0: 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 74 72  he associated.tr
b9c0: 69 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20  iggers to fire. 
b9d0: 5e 54 68 65 20 72 65 61 6c 20 74 61 62 6c 65 73  ^The real tables
b9e0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20   underlying the 
b9f0: 76 69 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64  view are not mod
ba00: 69 66 69 65 64 0a 28 65 78 63 65 70 74 20 70 6f  ified.(except po
ba10: 73 73 69 62 6c 79 20 65 78 70 6c 69 63 69 74 6c  ssibly explicitl
ba20: 79 2c 20 62 79 20 61 20 74 72 69 67 67 65 72 20  y, by a trigger 
ba30: 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c  program).</p>..<
ba40: 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68 65  p>^Note that the
ba50: 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   [sqlite3_change
ba60: 73 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65  s()] and [sqlite
ba70: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
ba80: 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 64 6f  )] interfaces.do
ba90: 20 6e 6f 74 20 63 6f 75 6e 74 20 49 4e 53 54 45   not count INSTE
baa0: 41 44 20 4f 46 20 74 72 69 67 67 65 72 20 66 69  AD OF trigger fi
bab0: 72 69 6e 67 73 2c 20 62 75 74 20 74 68 65 0a 5b  rings, but the.[
bac0: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72  count_changes pr
bad0: 61 67 6d 61 5d 20 64 6f 65 73 20 63 6f 75 6e 74  agma] does count
bae0: 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67   INSTEAD OF trig
baf0: 67 65 72 20 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a  ger firing.</p>.
bb00: 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c 2f 68  .<h3>Examples</h
bb10: 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75 6d 69 6e  3>..<p>^(Assumin
bb20: 67 20 74 68 61 74 20 63 75 73 74 6f 6d 65 72 20  g that customer 
bb30: 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72  records are stor
bb40: 65 64 20 69 6e 20 74 68 65 20 22 63 75 73 74 6f  ed in the "custo
bb50: 6d 65 72 73 22 20 74 61 62 6c 65 2c 20 61 6e 64  mers" table, and
bb60: 0a 74 68 61 74 20 6f 72 64 65 72 20 72 65 63 6f  .that order reco
bb70: 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  rds are stored i
bb80: 6e 20 74 68 65 20 22 6f 72 64 65 72 73 22 20 74  n the "orders" t
bb90: 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  able, the follow
bba0: 69 6e 67 20 74 72 69 67 67 65 72 0a 65 6e 73 75  ing trigger.ensu
bbb0: 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73 73  res that all ass
bbc0: 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73 20 61  ociated orders a
bbd0: 72 65 20 72 65 64 69 72 65 63 74 65 64 20 77 68  re redirected wh
bbe0: 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63 68  en a customer ch
bbf0: 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65 72  anges.his or her
bc00: 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c   address:</p>..<
bc10: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52  tcl>Example {.CR
bc20: 45 41 54 45 20 54 52 49 47 47 45 52 20 75 70 64  EATE TRIGGER upd
bc30: 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64  ate_customer_add
bc40: 72 65 73 73 20 55 50 44 41 54 45 20 4f 46 20 61  ress UPDATE OF a
bc50: 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d  ddress ON custom
bc60: 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20 20  ers .  BEGIN.   
bc70: 20 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53   UPDATE orders S
bc80: 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65 77  ET address = new
bc90: 2e 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63  .address WHERE c
bca0: 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f  ustomer_name = o
bcb0: 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a  ld.name;.  END;.
bcc0: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68  }</tcl>..<p>With
bcd0: 20 74 68 69 73 20 74 72 69 67 67 65 72 20 69 6e   this trigger in
bce0: 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74 69  stalled, executi
bcf0: 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  ng the statement
bd00: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
bd10: 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73  ple {.UPDATE cus
bd20: 74 6f 6d 65 72 73 20 53 45 54 20 61 64 64 72 65  tomers SET addre
bd30: 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e  ss = '1 Main St.
bd40: 27 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27  ' WHERE name = '
bd50: 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f  Jack Jones';.}</
bd60: 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65 73 20  tcl>..<p>causes 
bd70: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f  the following to
bd80: 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   be automaticall
bd90: 79 20 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e 0a  y executed:</p>.
bda0: 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a  .<tcl>Example {.
bdb0: 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53 45  UPDATE orders SE
bdc0: 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d  T address = '1 M
bdd0: 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20 63  ain St.' WHERE c
bde0: 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 27  ustomer_name = '
bdf0: 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f  Jack Jones';.}</
be00: 74 63 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  tcl>)^..<tcl>hd_
be10: 66 72 61 67 6d 65 6e 74 20 75 6e 64 65 66 5f 62  fragment undef_b
be20: 65 66 6f 72 65 20 7b 75 6e 64 65 66 69 6e 65 64  efore {undefined
be30: 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 20   BEFORE trigger 
be40: 62 65 68 61 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a  behavior}</tcl>.
be50: 3c 68 33 3e 43 61 75 74 69 6f 6e 73 20 4f 6e 20  <h3>Cautions On 
be60: 54 68 65 20 55 73 65 20 4f 66 20 42 45 46 4f 52  The Use Of BEFOR
be70: 45 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a  E triggers</h3>.
be80: 0a 3c 70 3e 49 66 20 61 20 42 45 46 4f 52 45 20  .<p>If a BEFORE 
be90: 55 50 44 41 54 45 20 6f 72 20 42 45 46 4f 52 45  UPDATE or BEFORE
bea0: 20 44 45 4c 45 54 45 20 74 72 69 67 67 65 72 20   DELETE trigger 
beb0: 6d 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65  modifies or dele
bec0: 74 65 73 20 61 20 72 6f 77 0a 74 68 61 74 20 77  tes a row.that w
bed0: 61 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20  as to have been 
bee0: 75 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74  updated or delet
bef0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ed, then the res
bf00: 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 73 65  ult of the subse
bf10: 71 75 65 6e 74 0a 75 70 64 61 74 65 20 6f 72 20  quent.update or 
bf20: 64 65 6c 65 74 65 20 6f 70 65 72 61 74 69 6f 6e  delete operation
bf30: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
bf40: 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 69 66 20  Furthermore, if 
bf50: 61 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72  a BEFORE trigger
bf60: 0a 6d 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c  .modifies or del
bf70: 65 74 65 73 20 61 20 72 6f 77 2c 20 74 68 65 6e  etes a row, then
bf80: 20 69 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64   it is undefined
bf90: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
bfa0: 41 46 54 45 52 20 74 72 69 67 67 65 72 73 0a 74  AFTER triggers.t
bfb0: 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f  hat would have o
bfc0: 74 68 65 72 77 69 73 65 20 72 75 6e 20 6f 6e 20  therwise run on 
bfd0: 74 68 6f 73 65 20 72 6f 77 73 20 77 69 6c 6c 20  those rows will 
bfe0: 69 6e 20 66 61 63 74 20 72 75 6e 2e 0a 3c 2f 70  in fact run..</p
bff0: 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65 20  >..<p>The value 
c000: 6f 66 20 4e 45 57 2e 72 6f 77 69 64 20 69 73 20  of NEW.rowid is 
c010: 75 6e 64 65 66 69 6e 65 64 20 69 6e 20 61 20 42  undefined in a B
c020: 45 46 4f 52 45 20 49 4e 53 45 52 54 20 74 72 69  EFORE INSERT tri
c030: 67 67 65 72 20 69 6e 20 77 68 69 63 68 0a 74 68  gger in which.th
c040: 65 20 72 6f 77 69 64 20 69 73 20 6e 6f 74 20 65  e rowid is not e
c050: 78 70 6c 69 63 69 74 6c 79 20 73 65 74 20 74 6f  xplicitly set to
c060: 20 61 6e 20 69 6e 74 65 67 65 72 2e 3c 2f 70 3e   an integer.</p>
c070: 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20 6f 66 20  ..<p>Because of 
c080: 74 68 65 20 62 65 68 61 76 69 6f 72 73 20 64 65  the behaviors de
c090: 73 63 72 69 62 65 64 20 61 62 6f 76 65 2c 20 70  scribed above, p
c0a0: 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65  rogrammers are e
c0b0: 6e 63 6f 75 72 61 67 65 64 20 74 6f 0a 70 72 65  ncouraged to.pre
c0c0: 66 65 72 20 41 46 54 45 52 20 74 72 69 67 67 65  fer AFTER trigge
c0d0: 72 73 20 6f 76 65 72 20 42 45 46 4f 52 45 20 74  rs over BEFORE t
c0e0: 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 68  riggers.</p>..<h
c0f0: 33 3e 54 68 65 20 52 41 49 53 45 28 29 20 66 75  3>The RAISE() fu
c100: 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e  nction</h3>..<p>
c110: 5e 28 41 20 73 70 65 63 69 61 6c 20 53 51 4c 20  ^(A special SQL 
c120: 66 75 6e 63 74 69 6f 6e 20 52 41 49 53 45 28 29  function RAISE()
c130: 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 74   may be used wit
c140: 68 69 6e 20 61 20 74 72 69 67 67 65 72 2d 70 72  hin a trigger-pr
c150: 6f 67 72 61 6d 2c 29 5e 0a 77 69 74 68 20 74 68  ogram,)^.with th
c160: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74  e following synt
c170: 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75  ax</p> ..<tcl>Bu
c180: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 61 69 73  bbleDiagram rais
c190: 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e  e-function</tcl>
c1a0: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 6f 6e 65 20 6f  ..<p>^When one o
c1b0: 66 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65  f the first thre
c1c0: 65 20 66 6f 72 6d 73 20 69 73 20 63 61 6c 6c 65  e forms is calle
c1d0: 64 20 64 75 72 69 6e 67 20 74 72 69 67 67 65 72  d during trigger
c1e0: 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69  -program.executi
c1f0: 6f 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69 65  on, the specifie
c200: 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d [ON CONFLICT] 
c210: 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65  processing is pe
c220: 72 66 6f 72 6d 65 64 0a 28 65 69 74 68 65 72 20  rformed.(either 
c230: 41 42 4f 52 54 2c 20 46 41 49 4c 20 6f 72 20 52  ABORT, FAIL or R
c240: 4f 4c 4c 42 41 43 4b 29 20 61 6e 64 20 74 68 65  OLLBACK) and the
c250: 20 63 75 72 72 65 6e 74 20 71 75 65 72 79 20 74   current query t
c260: 65 72 6d 69 6e 61 74 65 73 2e 0a 41 6e 20 65 72  erminates..An er
c270: 72 6f 72 20 63 6f 64 65 20 6f 66 20 5b 53 51 4c  ror code of [SQL
c280: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20  ITE_CONSTRAINT] 
c290: 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
c2a0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c 0a  he application,.
c2b0: 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 65 20 73  along with the s
c2c0: 70 65 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d  pecified error m
c2d0: 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  essage.</p>..<p>
c2e0: 5e 57 68 65 6e 20 52 41 49 53 45 28 49 47 4e 4f  ^When RAISE(IGNO
c2f0: 52 45 29 20 69 73 20 63 61 6c 6c 65 64 2c 20 74  RE) is called, t
c300: 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20  he remainder of 
c310: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 69 67  the current trig
c320: 67 65 72 20 70 72 6f 67 72 61 6d 2c 0a 74 68 65  ger program,.the
c330: 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
c340: 63 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67  caused the trigg
c350: 65 72 20 70 72 6f 67 72 61 6d 20 74 6f 20 65 78  er program to ex
c360: 65 63 75 74 65 20 61 6e 64 20 61 6e 79 20 73 75  ecute and any su
c370: 62 73 65 71 75 65 6e 74 0a 74 72 69 67 67 65 72  bsequent.trigger
c380: 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20 77   programs that w
c390: 6f 75 6c 64 20 6f 66 20 62 65 65 6e 20 65 78 65  ould of been exe
c3a0: 63 75 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f  cuted are abando
c3b0: 6e 65 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73  ned. ^No databas
c3c0: 65 0a 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f  e.changes are ro
c3d0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20  lled back.  ^If 
c3e0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68  the statement th
c3f0: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72  at caused the tr
c400: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f  igger program.to
c410: 20 65 78 65 63 75 74 65 20 69 73 20 69 74 73 65   execute is itse
c420: 6c 66 20 70 61 72 74 20 6f 66 20 61 20 74 72 69  lf part of a tri
c430: 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 20 74 68  gger program, th
c440: 65 6e 20 74 68 61 74 20 74 72 69 67 67 65 72 20  en that trigger 
c450: 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73 20  program.resumes 
c460: 65 78 65 63 75 74 69 6f 6e 20 61 74 20 74 68 65  execution at the
c470: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
c480: 65 20 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70  e next step..</p
c490: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
c4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4e0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
c4f0: 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20  n {CREATE VIEW} 
c500: 7b 63 72 65 61 74 65 76 69 65 77 7d 20 7b 7b 43  {createview} {{C
c510: 52 45 41 54 45 20 56 49 45 57 7d 20 76 69 65 77  REATE VIEW} view
c520: 20 2a 76 69 65 77 73 7d 0a 0a 42 75 62 62 6c 65   *views}..Bubble
c530: 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76  Diagram create-v
c540: 69 65 77 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  iew-stmt 1.</tcl
c550: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54  >..<p>^The CREAT
c560: 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61  E VIEW command a
c570: 73 73 69 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f  ssigns a name to
c580: 20 61 20 70 72 65 2d 70 61 63 6b 61 67 65 64 20   a pre-packaged 
c590: 0a 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d  .[SELECT] statem
c5a0: 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20 74 68 65 20  ent. .^Once the 
c5b0: 76 69 65 77 20 69 73 20 63 72 65 61 74 65 64 2c  view is created,
c5c0: 20 69 74 20 63 61 6e 20 62 65 20 75 73 65 64 20   it can be used 
c5d0: 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
c5e0: 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53  se.of another [S
c5f0: 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61 63 65 20  ELECT] in place 
c600: 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e  of a table name.
c610: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  .</p>..<p>^If th
c620: 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d  e "TEMP" or "TEM
c630: 50 4f 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20  PORARY" keyword 
c640: 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65  occurs in betwee
c650: 6e 20 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22  n "CREATE".and "
c660: 56 49 45 57 22 20 74 68 65 6e 20 74 68 65 20 76  VIEW" then the v
c670: 69 65 77 20 74 68 61 74 20 69 73 20 63 72 65 61  iew that is crea
c680: 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69  ted is only visi
c690: 62 6c 65 20 74 6f 20 74 68 65 0a 70 72 6f 63 65  ble to the.proce
c6a0: 73 73 20 74 68 61 74 20 6f 70 65 6e 65 64 20 74  ss that opened t
c6b0: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
c6c0: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
c6d0: 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a 74 68   deleted when.th
c6e0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c  e database is cl
c6f0: 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  osed.</p>..<p> ^
c700: 49 66 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73  If a &lt;databas
c710: 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 73 70  e-name&gt; is sp
c720: 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68  ecified, then th
c730: 65 20 76 69 65 77 20 69 73 20 63 72 65 61 74 65  e view is create
c740: 64 20 69 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20  d in .the named 
c750: 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20 69 73  database. ^It is
c760: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65   an error to spe
c770: 63 69 66 79 20 62 6f 74 68 20 61 20 26 6c 74 3b  cify both a &lt;
c780: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74  database-name&gt
c790: 3b 0a 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b  ;.and the TEMP k
c7a0: 65 79 77 6f 72 64 20 6f 6e 20 61 20 56 49 45 57  eyword on a VIEW
c7b0: 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 26 6c 74  , unless the &lt
c7c0: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
c7d0: 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 0a 5e 49  t; is "temp"..^I
c7e0: 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61  f no database na
c7f0: 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  me is specified,
c800: 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65   and the TEMP ke
c810: 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65  yword is not pre
c820: 73 65 6e 74 2c 0a 74 68 65 20 56 49 45 57 20 69  sent,.the VIEW i
c830: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
c840: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 3c   main database.<
c850: 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e  /p>..<p>^You can
c860: 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49  not [DELETE], [I
c870: 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55 50 44 41  NSERT], or [UPDA
c880: 54 45 5d 20 61 20 76 69 65 77 2e 20 20 5e 56 69  TE] a view.  ^Vi
c890: 65 77 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c  ews are read-onl
c8a0: 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e 20 20 5e  y .in SQLite.  ^
c8b0: 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79  However, in many
c8c0: 20 63 61 73 65 73 20 79 6f 75 20 63 61 6e 20 75   cases you can u
c8d0: 73 65 20 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f  se an.[INSTEAD O
c8e0: 46 20 74 72 69 67 67 65 72 5d 20 6f 6e 20 74 68  F trigger] on th
c8f0: 65 20 76 69 65 77 20 74 6f 20 61 63 63 6f 6d 70  e view to accomp
c900: 6c 69 73 68 20 0a 74 68 65 20 73 61 6d 65 20 74  lish .the same t
c910: 68 69 6e 67 2e 20 20 5e 56 69 65 77 73 20 61 72  hing.  ^Views ar
c920: 65 20 72 65 6d 6f 76 65 64 20 0a 77 69 74 68 20  e removed .with 
c930: 74 68 65 20 5b 44 52 4f 50 20 56 49 45 57 5d 20  the [DROP VIEW] 
c940: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74  command.</p>..<t
c950: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
c960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c9a0: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41  ##.Section {CREA
c9b0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
c9c0: 7d 20 7b 63 72 65 61 74 65 76 74 61 62 7d 20 7b  } {createvtab} {
c9d0: 7b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  {CREATE VIRTUAL 
c9e0: 54 41 42 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44  TABLE}}..BubbleD
c9f0: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69  iagram create-vi
ca00: 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d 74  rtual-table-stmt
ca10: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20   1.</tcl>..<p>A 
ca20: 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20  [virtual table] 
ca30: 69 73 20 61 6e 20 69 6e 74 65 72 66 61 63 65 20  is an interface 
ca40: 74 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 73  to an external s
ca50: 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d 70 75 74  torage or comput
ca60: 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20 74 68 61  ation.engine tha
ca70: 74 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20  t appears to be 
ca80: 61 20 74 61 62 6c 65 20 62 75 74 20 64 6f 65 73  a table but does
ca90: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74   not actually st
caa0: 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ore information.
cab0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
cac0: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  file.</p>..<p>In
cad0: 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75 20 63 61   general, you ca
cae0: 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 77 69  n do anything wi
caf0: 74 68 20 61 20 5b 76 69 72 74 75 61 6c 20 74 61  th a [virtual ta
cb00: 62 6c 65 5d 20 74 68 61 74 20 63 61 6e 20 62 65  ble] that can be
cb10: 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f 72   done.with an or
cb20: 64 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 65 78  dinary table, ex
cb30: 63 65 70 74 20 74 68 61 74 20 5e 79 6f 75 20 63  cept that ^you c
cb40: 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 69 6e 64  annot create ind
cb50: 69 63 65 73 20 6f 72 20 74 72 69 67 67 65 72 73  ices or triggers
cb60: 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20 74 61   on a.virtual ta
cb70: 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76 69 72 74  ble.  ^Some virt
cb80: 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
cb90: 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20  entations might 
cba0: 69 6d 70 6f 73 65 20 61 64 64 69 74 69 6f 6e 61  impose additiona
cbb0: 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 2e 20  l.restrictions. 
cbc0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d 61   For example, ma
cbd0: 6e 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ny virtual table
cbe0: 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 2e  s are read-only.
cbf0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 26 6c 74  </p>..<p>The &lt
cc00: 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74 3b  ;module-name&gt;
cc10: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
cc20: 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69  an object that i
cc30: 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76 69  mplements.the vi
cc40: 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 54  rtual table.  ^T
cc50: 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61  he &lt;module-na
cc60: 6d 65 26 67 74 3b 20 6d 75 73 74 20 62 65 20 72  me&gt; must be r
cc70: 65 67 69 73 74 65 72 65 64 20 77 69 74 68 0a 74  egistered with.t
cc80: 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  he SQLite databa
cc90: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75 73  se connection us
cca0: 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65  ing.[sqlite3_cre
ccb0: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d 20 6f 72  ate_module()] or
ccc0: 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
ccd0: 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d 0a 70 72  _module_v2()].pr
cce0: 69 6f 72 20 74 6f 20 69 73 73 75 69 6e 67 20 74  ior to issuing t
ccf0: 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41  he CREATE VIRTUA
cd00: 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  L TABLE statemen
cd10: 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c 65 20 74  t..^The module t
cd20: 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  akes zero or mor
cd30: 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65  e comma-separate
cd40: 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a 5e 54 68  d arguments..^Th
cd50: 65 20 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20  e arguments can 
cd60: 62 65 20 6a 75 73 74 20 61 62 6f 75 74 20 61 6e  be just about an
cd70: 79 20 74 65 78 74 20 61 73 20 6c 6f 6e 67 20 61  y text as long a
cd80: 73 20 69 74 20 68 61 73 20 62 61 6c 61 6e 63 65  s it has balance
cd90: 64 0a 70 61 72 65 6e 74 68 65 73 65 73 2e 20 20  d.parentheses.  
cda0: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 73 79 6e  The argument syn
cdb0: 74 61 78 20 69 73 20 73 75 66 66 69 63 69 65 6e  tax is sufficien
cdc0: 74 6c 79 20 67 65 6e 65 72 61 6c 20 74 68 61 74  tly general that
cdd0: 20 74 68 65 0a 61 72 67 75 6d 65 6e 74 73 20 63   the.arguments c
cde0: 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 61 70  an be made to ap
cdf0: 70 65 61 72 20 61 73 20 5b 63 6f 6c 75 6d 6e 20  pear as [column 
ce00: 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20 69 6e 20  definitions] in 
ce10: 61 20 74 72 61 64 69 74 69 6f 6e 61 6c 0a 5b 43  a traditional.[C
ce20: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
ce30: 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c 69 74  tement.  .^SQLit
ce40: 65 20 70 61 73 73 65 73 20 74 68 65 20 6d 6f 64  e passes the mod
ce50: 75 6c 65 20 61 72 67 75 6d 65 6e 74 73 20 64 69  ule arguments di
ce60: 72 65 63 74 6c 79 0a 74 6f 20 74 68 65 20 5b 78  rectly.to the [x
ce70: 43 72 65 61 74 65 5d 20 61 6e 64 20 5b 78 43 6f  Create] and [xCo
ce80: 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64 73 20 6f  nnect] methods o
ce90: 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70  f the module imp
cea0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77 69 74 68  lementation.with
ceb0: 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 70 72 65  out any interpre
cec0: 74 61 74 69 6f 6e 2e 20 20 49 74 20 69 73 20 74  tation.  It is t
ced0: 68 65 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74  he responsibilit
cee0: 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20  y.of the module 
cef0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
cf00: 6f 20 70 61 72 73 65 20 61 6e 64 20 69 6e 74 65  o parse and inte
cf10: 72 70 72 65 74 20 69 74 73 20 6f 77 6e 20 61 72  rpret its own ar
cf20: 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  guments.</p>..<p
cf30: 3e 5e 41 20 76 69 72 74 75 61 6c 20 74 61 62 6c  >^A virtual tabl
cf40: 65 20 69 73 20 64 65 73 74 72 6f 79 65 64 20 75  e is destroyed u
cf50: 73 69 6e 67 20 74 68 65 20 6f 72 64 69 6e 61 72  sing the ordinar
cf60: 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 73  y.[DROP TABLE] s
cf70: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65  tatement.  There
cf80: 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56 49 52 54   is no.DROP VIRT
cf90: 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d  UAL TABLE statem
cfa0: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ent.</p>..<tcl>.
cfb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cfc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cfd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cfe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
d000: 65 63 74 69 6f 6e 20 44 45 4c 45 54 45 20 64 65  ection DELETE de
d010: 6c 65 74 65 20 7b 44 45 4c 45 54 45 20 2a 44 45  lete {DELETE *DE
d020: 4c 45 54 45 73 7d 0a 0a 42 75 62 62 6c 65 44 69  LETEs}..BubbleDi
d030: 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d  agram delete-stm
d040: 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  t 1.BubbleDiagra
d050: 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c  m qualified-tabl
d060: 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-name.</tcl>..<
d070: 70 3e 54 68 65 20 44 45 4c 45 54 45 20 63 6f 6d  p>The DELETE com
d080: 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20 72 65 63  mand removes rec
d090: 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20 74 61  ords from the ta
d0a0: 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ble identified b
d0b0: 79 20 74 68 65 0a 20 20 20 3c 69 3e 71 75 61 6c  y the.   <i>qual
d0c0: 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
d0d0: 3c 2f 69 3e 2e 20 0a 0a 3c 70 3e 5e 49 66 20 74  </i>. ..<p>^If t
d0e0: 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
d0f0: 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 20  is not present, 
d100: 61 6c 6c 20 72 65 63 6f 72 64 73 20 69 6e 20 74  all records in t
d110: 68 65 20 74 61 62 6c 65 20 61 72 65 20 64 65 6c  he table are del
d120: 65 74 65 64 2e 0a 20 20 20 5e 49 66 20 61 20 57  eted..   ^If a W
d130: 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 73  HERE clause is s
d140: 75 70 70 6c 69 65 64 2c 20 74 68 65 6e 20 6f 6e  upplied, then on
d150: 6c 79 20 74 68 6f 73 65 20 72 6f 77 73 20 66 6f  ly those rows fo
d160: 72 20 77 68 69 63 68 20 74 68 65 0a 20 20 20 72  r which the.   r
d170: 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74  esult of evaluat
d180: 69 6e 67 20 74 68 65 20 57 48 45 52 45 20 63 6c  ing the WHERE cl
d190: 61 75 73 65 20 61 73 20 61 20 5b 62 6f 6f 6c 65  ause as a [boole
d1a0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c 0a 20  an expression|. 
d1b0: 20 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73    boolean expres
d1c0: 73 69 6f 6e 20 69 73 20 74 72 75 65 5d 20 61 72  sion is true] ar
d1d0: 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 68 33 3e  e deleted...<h3>
d1e0: 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20  Restrictions on 
d1f0: 44 45 4c 45 54 45 20 53 74 61 74 65 6d 65 6e 74  DELETE Statement
d200: 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45 20  s Within CREATE 
d210: 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70  TRIGGER</h3>..<p
d220: 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72  >The following r
d230: 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c  estrictions appl
d240: 79 20 74 6f 20 44 45 4c 45 54 45 20 73 74 61 74  y to DELETE stat
d250: 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75  ements that occu
d260: 72 20 77 69 74 68 69 6e 20 74 68 65 0a 20 20 20  r within the.   
d270: 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54  body of a [CREAT
d280: 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  E TRIGGER] state
d290: 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  ment:..<ul>.  <l
d2a0: 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e 74 61 62  i><p>^The <i>tab
d2b0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63  le-name</i> spec
d2c0: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
d2d0: 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
d2e0: 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20 61  ent within.    a
d2f0: 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75   trigger body mu
d300: 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65  st be unqualifie
d310: 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65 72 20 77  d.  ^(In other w
d320: 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20 3c 69  ords, the.    <i
d330: 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
d340: 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69  i><b>.</b> prefi
d350: 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  x on the table n
d360: 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ame is not allow
d370: 65 64 20 0a 20 20 20 20 77 69 74 68 69 6e 20 74  ed .    within t
d380: 72 69 67 67 65 72 73 2e 29 5e 20 5e 49 66 20 74  riggers.)^ ^If t
d390: 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63  he table to whic
d3a0: 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
d3b0: 20 61 74 74 61 63 68 65 64 20 69 73 0a 20 20 20   attached is.   
d3c0: 20 6e 6f 74 20 69 6e 20 74 68 65 20 74 65 6d 70   not in the temp
d3d0: 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20   database, then 
d3e0: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
d3f0: 73 20 77 69 74 68 69 6e 20 74 68 65 20 74 72 69  s within the tri
d400: 67 67 65 72 0a 20 20 20 20 62 6f 64 79 20 6d 75  gger.    body mu
d410: 73 74 20 6f 70 65 72 61 74 65 20 6f 6e 20 74 61  st operate on ta
d420: 62 6c 65 73 20 77 69 74 68 69 6e 20 74 68 65 20  bles within the 
d430: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73  same database as
d440: 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62   it. ^If the tab
d450: 6c 65 0a 20 20 20 20 74 6f 20 77 68 69 63 68 20  le.    to which 
d460: 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61  the trigger is a
d470: 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68  ttached is in th
d480: 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c  e TEMP database,
d490: 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20 75 6e   then the.    un
d4a0: 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f  qualified name o
d4b0: 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
d4c0: 67 20 64 65 6c 65 74 65 64 20 69 73 20 72 65 73  g deleted is res
d4d0: 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d  olved in the sam
d4e0: 65 20 77 61 79 20 61 73 0a 20 20 20 20 69 74 20  e way as.    it 
d4f0: 69 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76  is for a top-lev
d500: 65 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79  el statement (by
d510: 20 73 65 61 72 63 68 69 6e 67 20 66 69 72 73 74   searching first
d520: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
d530: 73 65 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65  se, then.    the
d540: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
d550: 74 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20 64  then any other d
d560: 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 20  atabases in the 
d570: 6f 72 64 65 72 20 74 68 65 79 20 77 65 72 65 0a  order they were.
d580: 20 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 20      attached).. 
d590: 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68     .  <li><p>^Th
d5a0: 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
d5b0: 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
d5c0: 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  uses are not all
d5d0: 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54 45 0a 20  owed on DELETE. 
d5e0: 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
d5f0: 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f  thin triggers.</
d600: 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  p>..  <li><p>^Th
d610: 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45  e LIMIT and ORDE
d620: 52 20 42 59 20 63 6c 61 75 73 65 73 20 28 64 65  R BY clauses (de
d630: 73 63 72 69 62 65 64 20 62 65 6c 6f 77 29 20 61  scribed below) a
d640: 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20 66  re unsupported f
d650: 6f 72 0a 20 20 20 20 44 45 4c 45 54 45 20 73 74  or.    DELETE st
d660: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
d670: 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 3c 2f  triggers.</p>.</
d680: 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61  ul>..<h3>Optiona
d690: 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45  l LIMIT and ORDE
d6a0: 52 20 42 59 20 63 6c 61 75 73 65 73 3c 2f 68 33  R BY clauses</h3
d6b0: 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74  >..<p>^(If SQLit
d6c0: 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69  e is compiled wi
d6d0: 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45  th the [SQLITE_E
d6e0: 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
d6f0: 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69  ETE_LIMIT].compi
d700: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20  le-time option, 
d710: 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20  then the syntax 
d720: 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
d730: 61 74 65 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e  atement is.exten
d740: 64 65 64 20 62 79 20 74 68 65 20 61 64 64 69 74  ded by the addit
d750: 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20  ion of optional 
d760: 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
d770: 49 54 20 63 6c 61 75 73 65 73 3a 29 5e 3c 2f 70  IT clauses:)^</p
d780: 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
d790: 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d  agram delete-stm
d7a0: 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a  t-limited</tcl>.
d7b0: 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c 45 54 45  .<p>^If a DELETE
d7c0: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61   statement has a
d7d0: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
d7e0: 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
d7f0: 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77  r of rows that.w
d800: 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 69  ill be deleted i
d810: 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75  s found by evalu
d820: 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70  ating the accomp
d830: 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f  anying expressio
d840: 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74  n and casting.it
d850: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76   to an integer v
d860: 61 6c 75 65 2e 20 5e 49 66 20 74 68 65 20 72 65  alue. ^If the re
d870: 73 75 6c 74 20 6f 66 20 74 68 65 20 65 76 61 6c  sult of the eval
d880: 75 61 74 69 6e 67 20 74 68 65 20 4c 49 4d 49 54  uating the LIMIT
d890: 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f 74 20 62   clause.cannot b
d8a0: 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e losslessly con
d8b0: 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
d8c0: 65 67 65 72 20 76 61 6c 75 65 2c 20 69 74 20 69  eger value, it i
d8d0: 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 41 20 0a  s an error. ^A .
d8e0: 6e 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20 76  negative LIMIT v
d8f0: 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72 65  alue is interpre
d900: 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74  ted as "no limit
d910: 22 2e 20 5e 28 49 66 20 74 68 65 20 44 45 4c 45  ". ^(If the DELE
d920: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 0a 61 6c  TE statement .al
d930: 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  so has an OFFSET
d940: 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 69 74   clause, then it
d950: 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76   is similarly ev
d960: 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74  aluated and cast
d970: 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 76   to an.integer v
d980: 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20 69 74 20  alue. Again, it 
d990: 69 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  is an error if t
d9a0: 68 65 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20  he value cannot 
d9b0: 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f  be losslessly.co
d9c0: 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
d9d0: 74 65 67 65 72 2e 29 5e 20 5e 49 66 20 74 68 65  teger.)^ ^If the
d9e0: 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 20  re is no OFFSET 
d9f0: 63 6c 61 75 73 65 2c 20 6f 72 20 74 68 65 20 63  clause, or the c
da00: 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74 65 67 65  alculated.intege
da10: 72 20 76 61 6c 75 65 20 69 73 20 6e 65 67 61 74  r value is negat
da20: 69 76 65 2c 20 74 68 65 20 65 66 66 65 63 74 69  ive, the effecti
da30: 76 65 20 4f 46 46 53 45 54 20 76 61 6c 75 65 20  ve OFFSET value 
da40: 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 28 49  is zero...<p>^(I
da50: 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
da60: 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52  tement has an OR
da70: 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
da80: 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
da90: 74 20 77 6f 75 6c 64 20 0a 62 65 20 64 65 6c 65  t would .be dele
daa0: 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e  ted in the absen
dab0: 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
dac0: 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65  clause are sorte
dad0: 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  d according to t
dae0: 68 65 20 0a 4f 52 44 45 52 20 42 59 2e 20 54 68  he .ORDER BY. Th
daf0: 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e  e first <i>M</i>
db00: 20 72 6f 77 73 2c 20 77 68 65 72 65 20 3c 69 3e   rows, where <i>
db10: 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c  M</i> is the val
db20: 75 65 20 66 6f 75 6e 64 20 62 79 0a 65 76 61 6c  ue found by.eval
db30: 75 61 74 69 6e 67 20 74 68 65 20 4f 46 46 53 45  uating the OFFSE
db40: 54 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73  T clause express
db50: 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70 70 65 64  ion, are skipped
db60: 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77  , and the follow
db70: 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c 20 77  ing .<i>N</i>, w
db80: 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e 20 69 73  here <i>N</i> is
db90: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
dba0: 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
dbb0: 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74 65 64 2e  on, are deleted.
dbc0: 29 5e 0a 5e 49 66 20 74 68 65 72 65 20 61 72 65  )^.^If there are
dbd0: 20 6c 65 73 73 20 74 68 61 6e 20 3c 69 3e 4e 3c   less than <i>N<
dbe0: 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61 69 6e 69  /i> rows remaini
dbf0: 6e 67 20 61 66 74 65 72 20 74 61 6b 69 6e 67 20  ng after taking 
dc00: 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73  the OFFSET claus
dc10: 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2c 20  e.into account, 
dc20: 6f 72 20 69 66 20 74 68 65 20 4c 49 4d 49 54 20  or if the LIMIT 
dc30: 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 64  clause evaluated
dc40: 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76   to a negative v
dc50: 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c 6c 0a 72  alue, then all.r
dc60: 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 61 72  emaining rows ar
dc70: 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e  e deleted...<p>^
dc80: 49 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  If the DELETE st
dc90: 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f  atement has no O
dca0: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
dcb0: 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68  then all rows th
dcc0: 61 74 0a 77 6f 75 6c 64 20 62 65 20 64 65 6c 65  at.would be dele
dcd0: 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e  ted in the absen
dce0: 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
dcf0: 63 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d  clause are assem
dd00: 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74  bled in an.arbit
dd10: 72 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72  rary order befor
dd20: 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c  e applying the L
dd30: 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20  IMIT and OFFSET 
dd40: 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72  clauses to deter
dd50: 6d 69 6e 65 20 0a 74 68 65 20 73 75 62 73 65 74  mine .the subset
dd60: 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c   that are actual
dd70: 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e  ly deleted...<p>
dd80: 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  ^(The ORDER BY c
dd90: 6c 61 75 73 65 20 6f 6e 20 61 6e 20 44 45 4c 45  lause on an DELE
dda0: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
ddb0: 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74  used only to det
ddc0: 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77  ermine which.row
ddd0: 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  s fall within th
dde0: 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64  e LIMIT. The ord
ddf0: 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
de00: 20 61 72 65 20 64 65 6c 65 74 65 64 20 69 73 20   are deleted is 
de10: 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73  arbitrary.and is
de20: 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20   not influenced 
de30: 62 79 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  by the ORDER BY 
de40: 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e  clause.)^..<tcl>
de50: 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72 75 6e  hd_fragment trun
de60: 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63 61 74  cateopt {truncat
de70: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c  e optimization}<
de80: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 54 72  /tcl>.<h3>The Tr
de90: 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a 61 74  uncate Optimizat
dea0: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68  ion</h3>..<p>^Wh
deb0: 65 6e 20 74 68 65 20 57 48 45 52 45 20 69 73 20  en the WHERE is 
dec0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 44  omitted from a D
ded0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
dee0: 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a 62 65  and the table.be
def0: 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61 73 20  ing deleted has 
df00: 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53 51 4c  no triggers,.SQL
df10: 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70 74 69  ite uses an opti
df20: 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61 73  mization to eras
df30: 65 20 74 68 65 20 65 6e 74 69 72 65 20 74 61 62  e the entire tab
df40: 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f  le content.witho
df50: 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76 69 73  ut having to vis
df60: 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  it each row of t
df70: 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76 69 64  he table individ
df80: 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74 72 75  ually..This "tru
df90: 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a 61 74  ncate" optimizat
dfa0: 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20 64 65  ion makes the de
dfb0: 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20 66 61  lete run much fa
dfc0: 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f 20 53  ster..Prior to S
dfd0: 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33  QLite [version 3
dfe0: 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75 6e 63  .6.5], the trunc
dff0: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
e000: 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61 74  .also meant that
e010: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68   the [sqlite3_ch
e020: 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73 71  anges()] and.[sq
e030: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
e040: 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ges()] interface
e050: 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e 74  s.and the [count
e060: 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d  _changes pragma]
e070: 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c  .will not actual
e080: 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ly return the nu
e090: 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65 64 20  mber of deleted 
e0a0: 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70 72 6f  rows.  .That pro
e0b0: 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20 66 69  blem has been fi
e0c0: 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69  xed as of [versi
e0d0: 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70 3e 5e  on 3.6.5]...<p>^
e0e0: 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74  The truncate opt
e0f0: 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62 65  imization can be
e100: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
e110: 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75  abled for all qu
e120: 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d 70 69  eries.by recompi
e130: 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68  ling.SQLite with
e140: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49   the [SQLITE_OMI
e150: 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d  T_TRUNCATE_OPTIM
e160: 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65  IZATION] compile
e170: 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70  -time switch.</p
e180: 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63 61  >..<p>The trunca
e190: 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
e1a0: 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69 73 61  can also be disa
e1b0: 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  bled at runtime 
e1c0: 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74  using.the [sqlit
e1d0: 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65  e3_set_authorize
e1e0: 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 20  r()] interface. 
e1f0: 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72 69 7a   ^If an authoriz
e200: 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74 75  er callback.retu
e210: 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e 4f  rns [SQLITE_IGNO
e220: 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49  RE] for an [SQLI
e230: 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74 69 6f  TE_DELETE] actio
e240: 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68 65  n code, then.the
e250: 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74 69 6f   DELETE operatio
e260: 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 62  n will proceed b
e270: 75 74 20 74 68 65 20 74 72 75 6e 63 61 74 65 20  ut the truncate 
e280: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69 6c  optimization wil
e290: 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20 61 6e  l.be bypassed an
e2a0: 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 64  d rows will be d
e2b0: 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20 6f 6e  eleted one by on
e2c0: 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  e.</p>..<tcl>.##
e2d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e2e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e310: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
e320: 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20 44 41  ction {DETACH DA
e330: 54 41 42 41 53 45 7d 20 64 65 74 61 63 68 20 2a  TABASE} detach *
e340: 44 45 54 41 43 48 0a 0a 42 75 62 62 6c 65 44 69  DETACH..BubbleDi
e350: 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d  agram detach-stm
e360: 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  t 1.</tcl>..<p>^
e370: 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 64  This statement d
e380: 65 74 61 63 68 65 73 20 61 6e 20 61 64 64 69 74  etaches an addit
e390: 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 63  ional database c
e3a0: 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f  onnection previo
e3b0: 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64 20 75  usly .attached u
e3c0: 73 69 6e 67 20 74 68 65 20 5b 41 54 54 41 43 48  sing the [ATTACH
e3d0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e  ] statement.  .^
e3e0: 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  It is possible t
e3f0: 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  o have the same 
e400: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74  database file at
e410: 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65 20  tached multiple 
e420: 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69 66  times using .dif
e430: 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e  ferent names, an
e440: 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65 20  d detaching one 
e450: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20  connection to a 
e460: 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65 20  file will leave 
e470: 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74 61  the .others inta
e480: 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 69  ct.</p>..<p>^Thi
e490: 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  s statement will
e4a0: 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74 65 20   fail if SQLite 
e4b0: 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  is in the middle
e4c0: 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   of a transactio
e4d0: 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  n.</p>...<tcl>.#
e4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e4f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e520: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
e530: 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e 44 45  ction {DROP INDE
e540: 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b 7b 44  X} dropindex {{D
e550: 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 42 75 62  ROP INDEX}}..Bub
e560: 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d  bleDiagram drop-
e570: 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c 2f 74  index-stmt 1.</t
e580: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f  cl>..<p>^The DRO
e590: 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  P INDEX statemen
e5a0: 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64  t removes an ind
e5b0: 65 78 20 61 64 64 65 64 0a 77 69 74 68 20 74 68  ex added.with th
e5c0: 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d  e [CREATE INDEX]
e5d0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
e5e0: 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c 65   index is comple
e5f0: 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f  tely removed fro
e600: 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65  m.the disk.  The
e610: 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63   only way to rec
e620: 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69  over the index i
e630: 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65  s to reenter the
e640: 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52  .appropriate [CR
e650: 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d  EATE INDEX] comm
e660: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  and.</p>..<tcl>.
e670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e6a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e6b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
e6c0: 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42  ection {DROP TAB
e6d0: 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b  LE} droptable {{
e6e0: 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 42 75  DROP TABLE}}..Bu
e6f0: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
e700: 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f  -table-stmt 1.</
e710: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
e720: 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  OP TABLE stateme
e730: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 61 62  nt removes a tab
e740: 6c 65 20 61 64 64 65 64 20 77 69 74 68 20 74 68  le added with th
e750: 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e.[CREATE TABLE]
e760: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
e770: 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64 20   name specified 
e780: 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e 61 6d  is the.table nam
e790: 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70 65 64  e.  ^The dropped
e7a0: 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70 6c 65   table is comple
e7b0: 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f  tely removed fro
e7c0: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a  m the database .
e7d0: 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20 64  schema and the d
e7e0: 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65 20 74  isk file.  The t
e7f0: 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62 65 20  able can not be 
e800: 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e 41 6c  recovered.  .^Al
e810: 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20 74 72  l indices and tr
e820: 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61 74 65  iggers.associate
e830: 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
e840: 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65 74 65   are also delete
e850: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
e860: 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58 49 53  optional IF EXIS
e870: 54 53 20 63 6c 61 75 73 65 20 73 75 70 70 72 65  TS clause suppre
e880: 73 73 65 73 20 74 68 65 20 65 72 72 6f 72 20 74  sses the error t
e890: 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c  hat would normal
e8a0: 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74 68 65  ly.result if the
e8b0: 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20   table does not 
e8c0: 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  exist.</p>..<p>^
e8d0: 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  If [foreign key 
e8e0: 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65  constraints] are
e8f0: 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52 4f 50   enabled, a DROP
e900: 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 70   TABLE command p
e910: 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70 6c 69  erforms an.impli
e920: 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20 44 45  cit [DELETE | DE
e930: 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62  LETE FROM &lt;tb
e940: 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64 20 62  l&gt;] command b
e950: 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67 20 74  efore removing t
e960: 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20 74 68  he.table from th
e970: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
e980: 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65 72 73  a. ^Any triggers
e990: 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
e9a0: 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f 70 70   table are.dropp
e9b0: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
e9c0: 62 61 73 65 20 73 63 68 65 6d 61 20 62 65 66 6f  base schema befo
e9d0: 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69 74 20  re the implicit 
e9e0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
e9f0: 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78 65 63  tbl&gt; .is exec
ea00: 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20 63 61  uted, so this ca
ea10: 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79 20 74  nnot cause any t
ea20: 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e  riggers to fire.
ea30: 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20 5e 61   By contrast, ^a
ea40: 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54  n.implicit DELET
ea50: 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67  E FROM &lt;tbl&g
ea60: 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20 61 6e  t; does cause an
ea70: 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b 66 6f  y configured.[fo
ea80: 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e  reign key action
ea90: 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61 63 65  s] to take place
eaa0: 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70 6c 69  . .^If the impli
eab0: 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  cit DELETE FROM 
eac0: 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78 65 63  &lt;tbl&gt; exec
ead0: 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f 66 20  uted.as part of 
eae0: 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d  a DROP TABLE com
eaf0: 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20 61 6e  mand violates an
eb00: 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  y immediate fore
eb10: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
eb20: 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20 69 73  nts,.an error is
eb30: 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20 74 68   returned and th
eb40: 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 64  e table is not d
eb50: 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74 68 65  ropped. ^If .the
eb60: 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45   implicit DELETE
eb70: 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74   FROM &lt;tbl&gt
eb80: 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a 64 65  ; causes any .de
eb90: 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
eba0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ey constraints t
ebb0: 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c 20 61  o be violated, a
ebc0: 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69 6f 6e  nd the violation
ebd0: 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20 77 68  s still.exist wh
ebe0: 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  en the transacti
ebf0: 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2c  on is committed,
ec00: 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74   an error is ret
ec10: 75 72 6e 65 64 20 61 74 20 74 68 65 20 74 69 6d  urned at the tim
ec20: 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a 3c 74  e.of commit...<t
ec30: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
ec40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ec50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ec60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ec70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ec80: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ##.Section {DROP
ec90: 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74 72   TRIGGER} droptr
eca0: 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54 52 49  igger {{DROP TRI
ecb0: 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69  GGER}}..BubbleDi
ecc0: 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67  agram drop-trigg
ecd0: 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  er-stmt 1.</tcl>
ece0: 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54  ..<p>^The DROP T
ecf0: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
ed00: 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69 67 67   removes a trigg
ed10: 65 72 20 63 72 65 61 74 65 64 20 62 79 20 74 68  er created by th
ed20: 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49 47 47  e .[CREATE TRIGG
ed30: 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ER] statement. ^
ed40: 4f 6e 63 65 20 72 65 6d 6f 76 65 64 2c 20 74 68  Once removed, th
ed50: 65 20 74 72 69 67 67 65 72 20 64 65 66 69 6e 69  e trigger defini
ed60: 74 69 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65  tion is no.longe
ed70: 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
ed80: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28   sqlite_master (
ed90: 6f 72 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  or sqlite_temp_m
eda0: 61 73 74 65 72 29 20 74 61 62 6c 65 20 61 6e 64  aster) table and
edb0: 20 69 73 0a 6e 6f 74 20 66 69 72 65 64 20 62 79   is.not fired by
edc0: 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74 20   any subsequent 
edd0: 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
ede0: 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  r DELETE stateme
edf0: 6e 74 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  nts...<p>^Note t
ee00: 68 61 74 20 74 72 69 67 67 65 72 73 20 61 72 65  hat triggers are
ee10: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
ee20: 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65 20  ropped when the 
ee30: 61 73 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65  associated table
ee40: 20 69 73 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74   is.dropped...<t
ee50: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
ee60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eea0: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ##.Section {DROP
eeb0: 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77 20   VIEW} dropview 
eec0: 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 42  {{DROP VIEW}}..B
eed0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
eee0: 70 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c 2f  p-view-stmt 1.</
eef0: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
ef00: 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
ef10: 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65 77  t removes a view
ef20: 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20   created by the 
ef30: 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 0a 20  [CREATE VIEW] . 
ef40: 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54 68 65   statement. ^The
ef50: 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e   view definition
ef60: 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d   is removed from
ef70: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
ef80: 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e 6f 20  hema, but .  no 
ef90: 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e 20 74  actual data in t
efa0: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 62 61  he underlying ba
efb0: 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d 6f 64  se tables is mod
efc0: 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65  ified...<p>^(The
efd0: 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20 69 73   view to drop is
efe0: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
eff0: 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61 6e 64  he view-name and
f000: 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 64 61 74   optional .  dat
f010: 61 62 61 73 65 2d 6e 61 6d 65 20 73 70 65 63 69  abase-name speci
f020: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
f030: 74 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74  the DROP VIEW st
f040: 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 0a 20  atement. This . 
f050: 20 72 65 66 65 72 65 6e 63 65 20 69 73 20 72 65   reference is re
f060: 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74 68 65  solved using the
f070: 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63 65 64   standard proced
f080: 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63 74 20  ure for [object 
f090: 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a  resolution].)^..
f0a0: 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20 73 70  <p>.  ^If the sp
f0b0: 65 63 69 66 69 65 64 20 76 69 65 77 20 63 61 6e  ecified view can
f0c0: 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64  not be found and
f0d0: 20 74 68 65 20 49 46 20 45 58 49 53 54 53 20 63   the IF EXISTS c
f0e0: 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a 20 20  lause is not .  
f0f0: 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73 20 61  present, it is a
f100: 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74 68 65  n error. ^If the
f110: 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20   specified view 
f120: 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20  cannot be found 
f130: 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58 49 53  and an IF.  EXIS
f140: 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
f150: 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52 4f 50  sent in the DROP
f160: 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2c   VIEW statement,
f170: 20 74 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d   then the statem
f180: 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d 6f 70  ent.  is a no-op
f190: 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ....<tcl>.######
f1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1e0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
f1f0: 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a 65 63   {Database Objec
f200: 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74 69 6f  t Name Resolutio
f210: 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62  n} {naming} {{ob
f220: 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d  ject resolution}
f230: 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20  }.</tcl>..<p>.  
f240: 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64 61 74  In SQLite, a dat
f250: 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28 61 20  abase object (a 
f260: 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72  table, index, tr
f270: 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 20 69  igger or view) i
f280: 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20 20 62  s identified.  b
f290: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
f2a0: 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  e object and the
f2b0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
f2c0: 61 62 61 73 65 20 74 68 61 74 20 69 74 20 72 65  abase that it re
f2d0: 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44 61 74  sides in. .  Dat
f2e0: 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20 6d 61  abase objects ma
f2f0: 79 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20  y reside in the 
f300: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
f310: 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
f320: 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b 41 54  , or in.  an [AT
f330: 54 41 43 48 7c 61 74 74 61 63 68 65 64 20 64 61  TACH|attached da
f340: 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20  tabase]...<p>.  
f350: 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68  The syntax of th
f360: 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 2c 20  e [DROP TABLE], 
f370: 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20 5b 44  [DROP INDEX], [D
f380: 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52 4f 50  ROP VIEW], [DROP
f390: 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b 52 45   TRIGGER],.  [RE
f3a0: 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52 20 54  INDEX], [ALTER T
f3b0: 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79 20 6f  ABLE] and many o
f3c0: 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20 61 6c  ther commands al
f3d0: 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75 73 65  l permit the use
f3e0: 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79 20 61  r to.  specify a
f3f0: 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   database object
f400: 20 65 69 74 68 65 72 20 62 79 20 69 74 73 20 6e   either by its n
f410: 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20 62 79  ame alone, or by
f420: 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
f430: 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61 6e 64  f.  its name and
f440: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69 74 73   the name of its
f450: 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49 66 20   database. ^(If 
f460: 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73 20 73  no database is s
f470: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
f480: 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74  .  of the object
f490: 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65 6e   reference, then
f4a0: 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73   SQLite searches
f4b0: 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d 70 20   the main, temp 
f4c0: 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64  and all attached
f4d0: 0a 20 20 64 61 74 61 62 61 73 65 73 20 66 6f 72  .  databases for
f4e0: 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74 68 20   an object with 
f4f0: 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e  a matching name.
f500: 20 54 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   The temp databa
f510: 73 65 20 69 73 20 73 65 61 72 63 68 65 64 0a 20  se is searched. 
f520: 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64   first, followed
f530: 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64 61 74   by the main dat
f540: 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65 64 20  abase, followed 
f550: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
f560: 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a 20 20  abases in the.  
f570: 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20  order that they 
f580: 77 65 72 65 20 61 74 74 61 63 68 65 64 2e 20 54  were attached. T
f590: 68 65 20 72 65 66 65 72 65 6e 63 65 20 72 65 73  he reference res
f5a0: 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66 69 72  olves to the fir
f5b0: 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75 6e 64  st match.  found
f5c0: 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a  .)^ For example:
f5d0: 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20 20 20  ..<pre>^(.      
f5e0: 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65 20 6e  /* Add a table n
f5f0: 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74 68 65  amed 't1' to the
f600: 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e 64 20   temp, main and 
f610: 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
f620: 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 41 54  base */.      AT
f630: 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27 20 41  TACH 'file.db' A
f640: 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45  S aux;.      CRE
f650: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
f660: 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  y);.      CREATE
f670: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 78   TEMP TABLE t1(x
f680: 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , y);.      CREA
f690: 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28  TE TABLE aux.t1(
f6a0: 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20 44 52  x, y);..      DR
f6b0: 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
f6c0: 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
f6d0: 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74 61 62  le in temp datab
f6e0: 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f  ase */.      DRO
f6f0: 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20  P TABLE t1;     
f700: 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c      /* Drop tabl
f710: 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61 62 61  e in main databa
f720: 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50  se */.      DROP
f730: 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20   TABLE t1;      
f740: 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65     /* Drop table
f750: 20 69 6e 20 61 75 78 20 64 61 74 61 62 61 73 65   in aux database
f760: 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70   */.)^</pre>..<p
f770: 3e 0a 20 20 5e 49 66 20 61 20 64 61 74 61 62 61  >.  ^If a databa
f780: 73 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69  se name is speci
f790: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
f7a0: 61 6e 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  an object refere
f7b0: 6e 63 65 2c 20 69 74 20 6d 75 73 74 20 62 65 0a  nce, it must be.
f7c0: 20 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c    either "main",
f7d0: 20 6f 72 20 22 74 65 6d 70 22 20 6f 72 20 74 68   or "temp" or th
f7e0: 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 61 74 74  e name of an att
f7f0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 20  ached database. 
f800: 5e 4c 69 6b 65 20 6f 74 68 65 72 0a 20 20 53 51  ^Like other.  SQ
f810: 4c 20 69 64 65 6e 74 69 66 69 65 72 73 2c 20 64  L identifiers, d
f820: 61 74 61 62 61 73 65 20 6e 61 6d 65 73 20 61 72  atabase names ar
f830: 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  e case-insensiti
f840: 76 65 2e 20 5e 49 66 20 61 20 64 61 74 61 62 61  ve. ^If a databa
f850: 73 65 20 6e 61 6d 65 0a 20 20 69 73 20 73 70 65  se name.  is spe
f860: 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c  cified, then onl
f870: 79 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61  y the named data
f880: 62 61 73 65 20 69 73 20 73 65 61 72 63 68 65 64  base is searched
f890: 20 66 6f 72 20 74 68 65 20 6e 61 6d 65 64 20 6f   for the named o
f8a0: 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f  bject...<p>.  Mo
f8b0: 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  st object refere
f8c0: 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 72 65  nces may only re
f8d0: 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65 63 69  solve to a speci
f8e0: 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62 6a 65  fic type of obje
f8f0: 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d 70 6c  ct (for.  exampl
f900: 65 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 68  e a reference th
f910: 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 20  at is part of a 
f920: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
f930: 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 72 65  ment may only re
f940: 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74 61 62  solve.  to a tab
f950: 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 61  le object, not a
f960: 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72  n index, trigger
f970: 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77 65 76   or view). Howev
f980: 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e 74 65  er in some conte
f990: 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b 52 45  xts .  (e.g. [RE
f9a0: 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a 65 63  INDEX]) an objec
f9b0: 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61 79 20  t reference may 
f9c0: 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20 6d 6f  be resolve to mo
f9d0: 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79 70 65  re than one type
f9e0: 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20 5e 57  .  of object. ^W
f9f0: 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20 64 61  hen searching da
fa00: 74 61 62 61 73 65 20 73 63 68 65 6d 61 73 20 66  tabase schemas f
fa10: 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a 65 63  or a named objec
fa20: 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a 20 20  t, objects of.  
fa30: 74 79 70 65 73 20 74 68 61 74 20 63 61 6e 6e 6f  types that canno
fa40: 74 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65  t be used in the
fa50: 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20   context of the 
fa60: 72 65 66 65 72 65 6e 63 65 20 61 72 65 20 61 6c  reference are al
fa70: 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65 64 2e  ways .  ignored.
fa80: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
fa90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
faa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fad0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45  ######.Section E
fae0: 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45  XPLAIN explain E
faf0: 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69  XPLAIN..BubbleDi
fb00: 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c  agram sql-stmt.<
fb10: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51  /tcl>..<p>^An SQ
fb20: 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20  L statement can 
fb30: 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74  be preceded by t
fb40: 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c  he keyword "EXPL
fb50: 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70  AIN" or.by the p
fb60: 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51  hrase "EXPLAIN Q
fb70: 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69  UERY PLAN".  ^Ei
fb80: 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f  ther modificatio
fb90: 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c  n causes the.SQL
fba0: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65   statement to be
fbb0: 68 61 76 65 20 61 73 20 61 20 71 75 65 72 79 20  have as a query 
fbc0: 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e  and to return in
fbd0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a  formation about.
fbe0: 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74 61 74  how the SQL stat
fbf0: 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65  ement would have
fc00: 20 6f 70 65 72 61 74 65 64 20 69 66 20 74 68 65   operated if the
fc10: 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
fc20: 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64 20 62   or.phrase had b
fc30: 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e  een omitted.</p>
fc40: 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20  ..<p>The output 
fc50: 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64  from EXPLAIN and
fc60: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
fc70: 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65 64 20  LAN is intended 
fc80: 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76 65 20  for.interactive 
fc90: 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74 72 6f  analysis and tro
fca0: 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c  ubleshooting onl
fcb0: 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20  y.  The details 
fcc0: 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74 20 66  of the .output f
fcd0: 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a 65 63  ormat are subjec
fce0: 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d  t to change from
fcf0: 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f 66 20   one release of 
fd00: 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20 6e 65  SQLite to the ne
fd10: 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73  xt..Applications
fd20: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20   should not use 
fd30: 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41  EXPLAIN or EXPLA
fd40: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 69  IN QUERY PLAN si
fd50: 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63 74 20  nce.their exact 
fd60: 62 65 68 61 76 69 6f 72 20 69 73 20 76 61 72 69  behavior is vari
fd70: 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61  able and only pa
fd80: 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74  rtially document
fd90: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ed.</p>..<p>^Whe
fda0: 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  n the EXPLAIN ke
fdb0: 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 79  yword appears by
fdc0: 20 69 74 73 65 6c 66 20 69 74 20 63 61 75 73 65   itself it cause
fdd0: 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  s the statement.
fde0: 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
fdf0: 75 65 72 79 20 74 68 61 74 20 72 65 74 75 72 6e  uery that return
fe00: 73 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  s the sequence o
fe10: 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61 63 68  f .[virtual mach
fe20: 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ine instructions
fe30: 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ] it would have 
fe40: 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
fe50: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a  the command had.
fe60: 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
fe70: 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65  ord not been pre
fe80: 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68 65 20  sent. ^When the 
fe90: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
fea0: 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65 61 72  AN phrase.appear
feb0: 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  s, the statement
fec0: 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d 6c 65   returns high-le
fed0: 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  vel information 
fee0: 72 65 67 61 72 64 69 6e 67 20 74 68 65 20 71 75  regarding the qu
fef0: 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f  ery.plan that wo
ff00: 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75 73  uld have been us
ff10: 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41 49 4e  ed...The EXPLAIN
ff20: 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d   QUERY PLAN comm
ff30: 61 6e 64 20 69 73 20 64 65 73 63 72 69 62 65 64  and is described
ff40: 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20 71 75   in .[explain qu
ff50: 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20 64 65  ery plan|more de
ff60: 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74 63  tail here]...<tc
ff70: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
ff80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ff90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ffa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ffb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ffc0: 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73  #.Section expres
ffd0: 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72  sion expr {*expr
ffe0: 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69  ession {expressi
fff0: 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 42 75 62  on syntax}}..Bub
10000 62 6c 65 44 69 61 67 72 61 6d 20 65 78 70 72 20  bleDiagram expr 
10010 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
10020 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 0a 42 75  literal-value.Bu
10030 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 67 6e  bbleDiagram sign
10040 65 64 2d 6e 75 6d 62 65 72 0a 42 75 62 62 6c 65  ed-number.Bubble
10050 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75  Diagram raise-fu
10060 6e 63 74 69 6f 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c  nction.</tcl>..<
10070 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69  p>This section i
10080 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
10090 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f   the others.  Mo
100a0 73 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e  st other section
100b0 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65  s of.this docume
100c0 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61  nt talks about a
100d0 20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20   particular SQL 
100e0 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73  command.  This s
100f0 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20  ection does.not 
10100 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61  talk about a sta
10110 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20  ndalone command 
10120 62 75 74 20 61 62 6f 75 74 20 22 65 78 70 72 65  but about "expre
10130 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72  ssions" which ar
10140 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73  e .subcomponents
10150 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63   of most other c
10160 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74  ommands.</p>..<t
10170 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
10180 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61 72 79  inaryops {binary
10190 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63 6c   operators}</tcl
101a0 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73 3c  >.<h3>Operators<
101b0 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69 74 65  /h3>.<p>^(SQLite
101c0 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65   understands the
101d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61 72   following binar
101e0 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e 20  y operators, in 
101f0 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67 68 65  order from.highe
10200 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70 72 65  st to lowest pre
10210 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62  cedence:</p>..<b
10220 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
10230 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63  <font color="#2c
10240 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20  2cf0"><big>||.* 
10250 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20 20 2d     /    %.+    -
10260 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74 3b  .&lt;&lt;   &gt;
10270 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20 20 20  &gt;   &amp;    
10280 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d 20  |.&lt;    &lt;= 
10290 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b 3d 0a    &gt;    &gt;=.
102a0 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20 20 26  =    ==   !=   &
102b0 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67 3e  lt;&gt;   </big>
102c0 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20 49 4e  IS   IS NOT   IN
102d0 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42 20 20     LIKE   GLOB  
102e0 20 4d 41 54 43 48 20 20 20 52 45 47 45 58 50 0a   MATCH   REGEXP.
102f0 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e  AND   .OR</font>
10300 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
10310 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53 75 70  ote>)^..<p>^(Sup
10320 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70 72 65  ported unary pre
10330 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20 61 72  fix operators ar
10340 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c 62  e these:</p>..<b
10350 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
10360 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63  <font color="#2c
10370 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20 20  2cf0"><big>-    
10380 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c 2f 62  +    ~    NOT</b
10390 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65  ig></font>.</pre
103a0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
103b0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
103c0 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b 43 4f  nt collateop {CO
103d0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 7d 3c  LLATE operator}<
103e0 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f  /tcl>.<p>^The CO
103f0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 69  LLATE operator i
10400 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74 66 69  s a unary postfi
10410 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61 74 20  x.operator that 
10420 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c 6c 61  assigns a [colla
10430 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74  ting sequence] t
10440 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  o an expression.
10450 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70  .^The COLLATE op
10460 65 72 61 74 6f 72 20 68 61 73 20 61 20 68 69 67  erator has a hig
10470 68 65 72 20 70 72 65 63 65 64 65 6e 63 65 20 28  her precedence (
10480 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74  binds more tight
10490 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 70 72 65  ly) than any.pre
104a0 66 69 78 20 75 6e 61 72 79 20 6f 70 65 72 61 74  fix unary operat
104b0 6f 72 20 6f 72 20 61 6e 79 20 62 69 6e 61 72 79  or or any binary
104c0 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 54 68 65 20   operator..^The 
104d0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
104e0 63 65 20 73 65 74 20 62 79 20 74 68 65 20 43 4f  ce set by the CO
104f0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 6f  LLATE operator o
10500 76 65 72 72 69 64 65 73 20 74 68 65 0a 63 6f 6c  verrides the.col
10510 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
10520 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
10530 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
10540 20 69 6e 20 61 20 74 61 62 6c 65 0a 5b 63 6f 6c   in a table.[col
10550 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e  umn definition].
10560 0a 53 65 65 20 74 68 65 20 5b 63 6f 6c 6c 61 74  .See the [collat
10570 69 6e 67 20 73 65 71 75 65 6e 63 65 7c 20 64 65  ing sequence| de
10580 74 61 69 6c 65 64 20 64 69 73 63 75 73 73 69 6f  tailed discussio
10590 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73  n on collating s
105a0 65 71 75 65 6e 63 65 73 5d 0a 69 6e 20 74 68 65  equences].in the
105b0 20 5b 64 61 74 61 74 79 70 65 20 7c 20 44 61 74   [datatype | Dat
105c0 61 74 79 70 65 20 49 6e 20 53 51 4c 69 74 65 33  atype In SQLite3
105d0 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61  ] document for a
105e0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
105f0 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  ation..</p>..<tc
10600 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e  l>hd_puts ".<p>^
10610 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72 61 74  The unary operat
10620 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20  or [Operator +] 
10630 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74  is a no-op.  ^It
10640 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65 64 0a   can be applied.
10650 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62  to strings, numb
10660 65 72 73 2c 20 62 6c 6f 62 73 20 6f 72 20 4e 55  ers, blobs or NU
10670 4c 4c 20 61 6e 64 20 69 74 20 61 6c 77 61 79 73  LL and it always
10680 20 72 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c   returns a resul
10690 74 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  t.with the same 
106a0 76 61 6c 75 65 20 61 73 20 74 68 65 20 6f 70 65  value as the ope
106b0 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e  rand.</p>"</tcl>
106c0 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74  ..<p>Note that t
106d0 68 65 72 65 20 61 72 65 20 74 77 6f 20 76 61 72  here are two var
106e0 69 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 65  iations of the e
106f0 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71  quals and not eq
10700 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20  uals.operators. 
10710 20 5e 45 71 75 61 6c 73 20 63 61 6e 20 62 65 20   ^Equals can be 
10720 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64  either..<tcl>.hd
10730 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72  _puts "[Operator
10740 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72   =] or [Operator
10750 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65   ==]..^The non-e
10760 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72 20 63  quals operator c
10770 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b 4f 70  an be either.[Op
10780 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f  erator !=] or [O
10790 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74  perator {&lt;&gt
107a0 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70 65 72 61  ;}]..^The [Opera
107b0 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72  tor ||] operator
107c0 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74   is \"concatenat
107d0 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74  e\" - it joins t
107e0 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77 6f 20  ogether.the two 
107f0 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73 20 6f  strings of its o
10800 70 65 72 61 6e 64 73 2e 0a 5e 54 68 65 20 6f 70  perands..^The op
10810 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72  erator [Operator
10820 20 25 5d 20 6f 75 74 70 75 74 73 20 74 68 65 20   %] outputs the 
10830 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c 65 66  value of its lef
10840 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c  t .operand modul
10850 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70 65 72  o its right oper
10860 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  and.</p>..<p>^Th
10870 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 79 20  e result of any 
10880 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20  binary operator 
10890 69 73 20 65 69 74 68 65 72 20 61 20 6e 75 6d 65  is either a nume
108a0 72 69 63 20 76 61 6c 75 65 20 6f 72 20 0a 4e 55  ric value or .NU
108b0 4c 4c 2c 20 65 78 63 65 70 74 20 66 6f 72 20 74  LL, except for t
108c0 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d  he [Operator ||]
108d0 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f   concatenation o
108e0 70 65 72 61 74 6f 72 20 77 68 69 63 68 20 61 6c  perator which al
108f0 77 61 79 73 20 0a 65 76 61 6c 75 61 74 65 73 20  ways .evaluates 
10900 74 6f 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  to either NULL o
10910 72 20 61 20 74 65 78 74 20 76 61 6c 75 65 2e 3c  r a text value.<
10920 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e  /p>"..hd_fragmen
10930 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20  t {isisnot} {IS 
10940 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f  operator} {IS NO
10950 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f  T operator}..hd_
10960 70 75 74 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f  puts "<p>^The [O
10970 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20  perator IS] and 
10980 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f  [Operator {IS NO
10990 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73 20 77 6f  T}] operators wo
109a0 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f  rk.like [Operato
109b0 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74  r =] and [Operat
109c0 6f 72 20 21 3d 5d 20 65 78 63 65 70 74 20 77 68  or !=] except wh
109d0 65 6e 20 6f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  en one or both o
109e0 66 20 74 68 65 0a 6f 70 65 72 61 6e 64 73 20 61  f the.operands a
109f0 72 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20 74 68 69  re NULL. ^In thi
10a00 73 20 63 61 73 65 2c 20 69 66 20 62 6f 74 68 20  s case, if both 
10a10 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
10a20 4c 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f  L, then the.IS o
10a30 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
10a40 73 20 74 6f 20 31 20 28 74 72 75 65 29 20 61 6e  s to 1 (true) an
10a50 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70 65  d the IS NOT ope
10a60 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 0a  rator evaluates.
10a70 74 6f 20 30 20 28 66 61 6c 73 65 29 2e 20 5e 49  to 0 (false). ^I
10a80 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  f one operand is
10a90 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65 20 6f 74   NULL and the ot
10aa0 68 65 72 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e  her is not, then
10ab0 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72   the.IS operator
10ac0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30 20   evaluates to 0 
10ad0 28 66 61 6c 73 65 29 20 61 6e 64 20 74 68 65 20  (false) and the 
10ae0 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20  IS NOT operator 
10af0 69 73 20 31 20 28 74 72 75 65 29 2e 0a 5e 49 74  is 1 (true)..^It
10b00 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
10b10 20 66 6f 72 20 61 6e 20 49 53 20 6f 72 20 49 53   for an IS or IS
10b20 20 4e 4f 54 20 65 78 70 72 65 73 73 69 6f 6e 20   NOT expression 
10b30 74 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 4e  to evaluate to N
10b40 55 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f 72 73 20  ULL..^Operators 
10b50 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e  [Operator IS] an
10b60 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20  d [Operator {IS 
10b70 4e 4f 54 7d 5d 20 68 61 76 65 20 74 68 65 20 73  NOT}] have the s
10b80 61 6d 65 20 0a 70 72 65 63 65 64 65 6e 63 65 20  ame .precedence 
10b90 61 73 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e  as [Operator =].
10ba0 22 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  "..<tcl>hd_fragm
10bb0 65 6e 74 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69  ent litvalue {li
10bc0 74 65 72 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63  teral value}</tc
10bd0 6c 3e 0a 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56  l>.<h3>Literal V
10be0 61 6c 75 65 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e  alues</h3>.<p>.^
10bf0 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20  A literal value 
10c00 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 66  is a constant of
10c10 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 5e 4c 69 74   some kind..^Lit
10c20 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20  eral values may 
10c30 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f  be integers, flo
10c40 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
10c50 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c  ers, strings,.BL
10c60 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f  OBs, or NULLs.</
10c70 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61  p>..<p>The synta
10c80 78 20 66 6f 72 20 69 6e 74 65 67 65 72 20 61 6e  x for integer an
10c90 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  d floating point
10ca0 20 6c 69 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65   literals (colle
10cb0 63 74 69 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63  ctively."numeric
10cc0 20 6c 69 74 65 72 61 6c 73 22 29 20 69 73 20 73   literals") is s
10cd0 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c  hown by the foll
10ce0 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f  owing diagram:</
10cf0 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  p>..<tcl>BubbleD
10d00 69 61 67 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c  iagram numeric-l
10d10 69 74 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70  iteral</tcl>..<p
10d20 3e 0a 5e 28 49 66 20 61 20 6e 75 6d 65 72 69 63  >.^(If a numeric
10d30 20 6c 69 74 65 72 61 6c 20 68 61 73 20 61 20 64   literal has a d
10d40 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20  ecimal point or 
10d50 61 6e 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f  an exponentiatio
10d60 6e 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 69  n.clause, then i
10d70 74 20 69 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  t is a floating 
10d80 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 2e 20 20  point literal.  
10d90 4f 74 68 65 72 77 69 73 65 20 69 73 20 69 74 20  Otherwise is it 
10da0 69 73 20 61 6e 20 0a 69 6e 74 65 67 65 72 20 6c  is an .integer l
10db0 69 74 65 72 61 6c 2e 29 5e 20 20 5e 54 68 65 20  iteral.)^  ^The 
10dc0 22 45 22 20 63 68 61 72 61 63 74 65 72 20 74 68  "E" character th
10dd0 61 74 20 62 65 67 69 6e 73 20 74 68 65 20 65 78  at begins the ex
10de0 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61  ponentiation.cla
10df0 75 73 65 20 6f 66 20 61 20 66 6c 6f 61 74 69 6e  use of a floatin
10e00 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 20  g point literal 
10e10 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 75 70  can be either up
10e20 70 65 72 20 6f 72 20 6c 6f 77 65 72 20 63 61 73  per or lower cas
10e30 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63 68 61  e..^(The "." cha
10e40 72 61 63 74 65 72 20 69 73 20 61 6c 77 61 79 73  racter is always
10e50 20 75 73 65 64 20 0a 61 73 20 74 68 65 20 64 65   used .as the de
10e60 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65 6e  cimal point even
10e70 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65 20 73   if the locale s
10e80 65 74 74 69 6e 67 20 73 70 65 63 69 66 69 65 73  etting specifies
10e90 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20 72 6f   "," for.this ro
10ea0 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f 66 20  le - the use of 
10eb0 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65 63 69  "," for the deci
10ec0 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64 20  mal point would 
10ed0 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61 63  result in.syntac
10ee0 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e 29 5e  tic ambiguity.)^
10ef0 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72  </p>..<p> ^A str
10f00 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73 20  ing constant is 
10f10 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73  formed by enclos
10f20 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20 69  ing the.string i
10f30 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20  n single quotes 
10f40 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20  (').  ^A single 
10f50 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68 65  quote within the
10f60 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20 65   string can.be e
10f70 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74 69 6e  ncoded by puttin
10f80 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f  g two single quo
10f90 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20 61  tes in a row - a
10fa0 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73  s in Pascal..C-s
10fb0 74 79 6c 65 20 65 73 63 61 70 65 73 20 75 73 69  tyle escapes usi
10fc0 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73 68  ng the backslash
10fd0 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20 6e   character are n
10fe0 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62 65 63  ot supported bec
10ff0 61 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e 6f  ause.they are no
11000 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a  t standard SQL..
11010 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73 20 61  ^BLOB literals a
11020 72 65 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61  re string litera
11030 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65  ls containing he
11040 78 61 64 65 63 69 6d 61 6c 20 64 61 74 61 20 61  xadecimal data a
11050 6e 64 0a 70 72 65 63 65 64 65 64 20 62 79 20 61  nd.preceded by a
11060 20 73 69 6e 67 6c 65 20 22 78 22 20 6f 72 20 22   single "x" or "
11070 58 22 20 63 68 61 72 61 63 74 65 72 2e 20 20 5e  X" character.  ^
11080 28 46 6f 72 20 65 78 61 6d 70 6c 65 3a 3c 2f 70  (For example:</p
11090 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
110a0 70 72 65 3e 0a 58 27 35 33 35 31 34 43 36 39 37  pre>.X'53514C697
110b0 34 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  465'.</pre></blo
110c0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a  ckquote>)^..<p>.
110d0 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65  ^A literal value
110e0 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74 68 65   can also be the
110f0 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c   token "NULL"..<
11100 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
11110 67 6d 65 6e 74 20 76 61 72 70 61 72 61 6d 20 70  gment varparam p
11120 61 72 61 6d 65 74 65 72 20 70 61 72 61 6d 65 74  arameter paramet
11130 65 72 73 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d  ers {bound param
11140 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20 70 61 72  eter} {bound par
11150 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c  ameters}</tcl>.<
11160 68 33 3e 50 61 72 61 6d 65 74 65 72 73 3c 2f 68  h3>Parameters</h
11170 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69 61 62  3>.<p>.A "variab
11180 6c 65 22 20 6f 72 20 22 70 61 72 61 6d 65 74 65  le" or "paramete
11190 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69 66 69  r" token.specifi
111a0 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64 65 72  es a placeholder
111b0 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
111c0 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c 75 65 20  on for a .value 
111d0 74 68 61 74 20 69 73 20 66 69 6c 6c 65 64 20 69  that is filled i
111e0 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  n at runtime usi
111f0 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f  ng the.[sqlite3_
11200 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71  bind_blob() | sq
11210 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 66 61  lite3_bind()] fa
11220 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20 69 6e  mily of C/C++ in
11230 74 65 72 66 61 63 65 73 2e 0a 50 61 72 61 6d 65  terfaces..Parame
11240 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20 73 65  ters can take se
11250 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70  veral forms:.</p
11260 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
11270 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64  <table>.<tr>.<td
11280 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
11290 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f  align="top"><b>?
112a0 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f  </b><i>NNN</i></
112b0 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
112c0 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28 41 20  "></td>.<td>^(A 
112d0 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f  question mark fo
112e0 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62  llowed by a numb
112f0 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f  er <i>NNN</i> ho
11300 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 74  lds a spot for t
11310 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65  he.NNN-th parame
11320 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62  ter.  NNN must b
11330 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
11340 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49  [SQLITE_MAX_VARI
11350 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29 5e 0a  ABLE_NUMBER].)^.
11360 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
11370 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  .<td align="righ
11380 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  t" valign="top">
11390 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  <b>?</b></td><td
113a0 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
113b0 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73 74 69 6f  >.<td>^A questio
113c0 6e 20 6d 61 72 6b 20 74 68 61 74 20 69 73 20 6e  n mark that is n
113d0 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ot followed by a
113e0 20 6e 75 6d 62 65 72 20 63 72 65 61 74 65 73 20   number creates 
113f0 61 20 70 61 72 61 6d 65 74 65 72 0a 77 69 74 68  a parameter.with
11400 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65 20 67 72   a number one gr
11410 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6c  eater than the l
11420 61 72 67 65 73 74 20 70 61 72 61 6d 65 74 65 72  argest parameter
11430 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20   number already 
11440 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66 20 74 68  assigned..^If th
11450 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72  is means the par
11460 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73  ameter number is
11470 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 5b 53   greater than.[S
11480 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
11490 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69  LE_NUMBER], it i
114a0 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 2f 74 64  s an error..</td
114b0 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
114c0 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
114d0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a  align="top"><b>:
114e0 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c  </b><i>AAAA</i><
114f0 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
11500 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20  0"></td>.<td>^A 
11510 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62  colon followed b
11520 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  y an identifier 
11530 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73 70 6f  name holds a spo
11540 74 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69 74 65  t for a .[sqlite
11550 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
11560 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61 72 61  _name|named para
11570 6d 65 74 65 72 5d 20 77 69 74 68 20 74 68 65 20  meter] with the 
11580 6e 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a 5e 28  name :AAAA.  .^(
11590 4e 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 73  Named parameters
115a0 20 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72   are also number
115b0 65 64 2e 20 54 68 65 20 6e 75 6d 62 65 72 20 61  ed. The number a
115c0 73 73 69 67 6e 65 64 20 69 73 20 6f 6e 65 20 67  ssigned is one g
115d0 72 65 61 74 65 72 20 74 68 61 6e 0a 74 68 65 20  reater than.the 
115e0 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65 74 65  largest paramete
115f0 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79  r number already
11600 20 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e 49 66   assigned.)^ ^If
11610 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20   this means the 
11620 70 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c 64 20  parameter.would 
11630 62 65 20 61 73 73 69 67 6e 65 64 20 61 20 6e 75  be assigned a nu
11640 6d 62 65 72 20 67 72 65 61 74 65 72 20 74 68 61  mber greater tha
11650 6e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  n [SQLITE_MAX_VA
11660 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20  RIABLE_NUMBER], 
11670 69 74 20 69 73 0a 61 6e 20 65 72 72 6f 72 2e 20  it is.an error. 
11680 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  To avoid confusi
11690 6f 6e 2c 20 69 74 20 69 73 20 62 65 73 74 20 74  on, it is best t
116a0 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e  o avoid mixing n
116b0 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65 72 65  amed and numbere
116c0 64 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74  d.parameters.</t
116d0 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
116e0 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
116f0 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
11700 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e  @</b><i>AAAA</i>
11710 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
11720 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41  20"></td>.<td>^A
11730 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f 72 6b  n "at" sign work
11740 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 61  s exactly like a
11750 20 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74 20 74   colon, except t
11760 68 61 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a  hat the name of.
11770 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 63 72  the parameter cr
11780 65 61 74 65 64 20 69 73 20 40 41 41 41 41 2e 3c  eated is @AAAA.<
11790 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
117a0 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
117b0 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
117c0 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>$</b><i>AAAA</
117d0 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
117e0 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
117f0 5e 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e 20 66  ^A dollar-sign f
11800 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64  ollowed by an id
11810 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 61 6c  entifier name al
11820 73 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20  so holds a spot 
11830 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61  for a named.para
11840 6d 65 74 65 72 20 77 69 74 68 20 74 68 65 20 6e  meter with the n
11850 61 6d 65 20 24 41 41 41 41 2e 20 20 5e 28 54 68  ame $AAAA.  ^(Th
11860 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  e identifier nam
11870 65 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 63  e in this case c
11880 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f  an include.one o
11890 72 20 6d 6f 72 65 20 6f 63 63 75 72 72 65 6e 63  r more occurrenc
118a0 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61  es of "::" and a
118b0 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73 65 64   suffix enclosed
118c0 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74   in "(...)" cont
118d0 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74 20  aining.any text 
118e0 61 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69 73 20  at all.)^  This 
118f0 73 79 6e 74 61 78 20 69 73 20 74 68 65 20 66 6f  syntax is the fo
11900 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62 6c 65  rm of a variable
11910 20 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b 68 74   name in the.[ht
11920 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f  tp://www.tcl.tk/
11930 20 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69   | Tcl programmi
11940 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54  ng language].  T
11950 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74  he presence.of t
11960 68 69 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c  his syntax resul
11970 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74  ts from the fact
11980 20 74 68 61 74 20 53 51 4c 69 74 65 20 69 73 20   that SQLite is 
11990 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65  really a .[Tcl e
119a0 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68  xtension] that h
119b0 61 73 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20  as escaped into 
119c0 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c  the wild.</td>.<
119d0 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
119e0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
119f0 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68 61 74  ^Parameters that
11a00 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65   are not assigne
11a10 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b  d values using.[
11a20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
11a30 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69  b() | sqlite3_bi
11a40 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61 74 65  nd()] are treate
11a50 64 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a  d.as NULL.</p>..
11a60 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20  <p>^The maximum 
11a70 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
11a80 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d 70 69   is set at compi
11a90 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65 20 5b  le-time by.the [
11aa0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
11ab0 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72  BLE_NUMBER] macr
11ac0 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76 69 64  o.  ^(An individ
11ad0 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20 63 6f  ual [database co
11ae0 6e 6e 65 63 74 69 6f 6e 73 5d 0a 44 20 63 61 6e  nnections].D can
11af0 20 72 65 64 75 63 65 20 69 74 73 20 6d 61 78 69   reduce its maxi
11b00 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75  mum parameter nu
11b10 6d 62 65 72 20 62 65 6c 6f 77 20 74 68 65 20 63  mber below the c
11b20 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69  ompile-time maxi
11b30 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65 20 5b 73  mum.using the [s
11b40 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 44 2c  qlite3_limit](D,
11b50 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56   [SQLITE_LIMIT_V
11b60 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c  ARIABLE_NUMBER],
11b70 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 2e 29  ...) interface.)
11b80 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ^.</p>..<tcl>hd_
11b90 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49  fragment like LI
11ba0 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a  KE ESCAPE</tcl>.
11bb0 3c 68 33 3e 54 68 65 20 4c 49 4b 45 20 61 6e 64  <h3>The LIKE and
11bc0 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 73 3c   GLOB operators<
11bd0 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b  /h3>.<p>^The LIK
11be0 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20  E operator does 
11bf0 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 69  a pattern matchi
11c00 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e  ng comparison. ^
11c10 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74  The operand.to t
11c20 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65 20  he right of the 
11c30 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 6f  LIKE operator co
11c40 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74 74 65  ntains the patte
11c50 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66 74 20  rn and the left 
11c60 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63 6f 6e  hand.operand con
11c70 74 61 69 6e 73 20 74 68 65 20 73 74 72 69 6e 67  tains the string
11c80 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69 6e 73   to match agains
11c90 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a  t the pattern...
11ca0 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 5e 41  <tcl>hd_puts "^A
11cb0 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20   percent symbol 
11cc0 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65 20 4c  (\"%\") in the L
11cd0 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63  IKE pattern matc
11ce0 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e 63 65  hes any.sequence
11cf0 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   of zero or more
11d00 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
11d10 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41 6e 20  he string.  ^An 
11d20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22 5f 5c  underscore.(\"_\
11d30 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70  ") in the LIKE p
11d40 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61  attern matches a
11d50 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63  ny single charac
11d60 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69 6e  ter in the.strin
11d70 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65 72 20  g.  ^(Any other 
11d80 63 68 61 72 61 63 74 65 72 20 6d 61 74 63 68 65  character matche
11d90 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74 73 20  s itself or its 
11da0 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73 65  lower/upper case
11db0 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e 65  .equivalent (i.e
11dc0 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  . case-insensiti
11dd0 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29 5e 20  ve matching).)^ 
11de0 20 28 41 20 62 75 67 3a 20 5e 53 51 4c 69 74 65   (A bug: ^SQLite
11df0 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64   only.understand
11e00 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63 61  s upper/lower ca
11e10 73 65 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  se for ASCII cha
11e20 72 61 63 74 65 72 73 20 62 79 20 64 65 66 61 75  racters by defau
11e30 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f  lt.  ^The.LIKE o
11e40 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65 20  perator is case 
11e50 73 65 6e 73 69 74 69 76 65 20 62 79 20 64 65 66  sensitive by def
11e60 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64 65  ault for unicode
11e70 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
11e80 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68 65 20   are.beyond the 
11e90 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20 46 6f  ASCII range.  Fo
11ea0 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20  r example,.^the 
11eb0 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61  expression <b>'a
11ec0 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
11ed0 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45  ;'A'</b>.is TRUE
11ee0 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b   but <b>'&aelig;
11ef0 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
11f00 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69  ;'&AElig;'</b> i
11f10 73 20 46 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74  s FALSE.)<p>"</t
11f20 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  cl>..<p>^If the 
11f30 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20  optional ESCAPE 
11f40 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
11f50 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72  t, then the expr
11f60 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67  ession.following
11f70 20 74 68 65 20 45 53 43 41 50 45 20 6b 65 79 77   the ESCAPE keyw
11f80 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75 61 74  ord must evaluat
11f90 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f  e to a string co
11fa0 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20 73 69  nsisting of.a si
11fb0 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 2e 20  ngle character. 
11fc0 5e 54 68 69 73 20 63 68 61 72 61 63 74 65 72 20  ^This character 
11fd0 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 74  may be used in t
11fe0 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a  he LIKE pattern.
11ff0 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74 65 72  to include liter
12000 61 6c 20 70 65 72 63 65 6e 74 20 6f 72 20 75 6e  al percent or un
12010 64 65 72 73 63 6f 72 65 20 63 68 61 72 61 63 74  derscore charact
12020 65 72 73 2e 20 5e 54 68 65 20 65 73 63 61 70 65  ers. ^The escape
12030 0a 63 68 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f  .character follo
12040 77 65 64 20 62 79 20 61 20 70 65 72 63 65 6e 74  wed by a percent
12050 20 73 79 6d 62 6f 6c 20 28 25 29 2c 20 75 6e 64   symbol (%), und
12060 65 72 73 63 6f 72 65 20 28 5f 29 2c 20 6f 72 20  erscore (_), or 
12070 61 20 73 65 63 6f 6e 64 0a 69 6e 73 74 61 6e 63  a second.instanc
12080 65 20 6f 66 20 74 68 65 20 65 73 63 61 70 65 20  e of the escape 
12090 63 68 61 72 61 63 74 65 72 20 69 74 73 65 6c 66  character itself
120a0 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74 65 72   matches a.liter
120b0 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f  al percent symbo
120c0 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 2c 20 6f  l, underscore, o
120d0 72 20 61 20 73 69 6e 67 6c 65 20 65 73 63 61 70  r a single escap
120e0 65 20 63 68 61 72 61 63 74 65 72 2c 0a 72 65 73  e character,.res
120f0 70 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e  pectively...<p>^
12100 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f  The infix LIKE o
12110 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65  perator is imple
12120 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e  mented by callin
12130 67 20 74 68 65 0a 61 70 70 6c 69 63 61 74 69 6f  g the.applicatio
12140 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75  n-defined SQL fu
12150 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69  nctions [like(<i
12160 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29  >Y</i>,<i>X</i>)
12170 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c  ] or.[like(<i>Y<
12180 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e  /i>,<i>X</i>,<i>
12190 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e  Z</i>)]</a>.</p>
121a0 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f  ..<p>^The LIKE o
121b0 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 6d  perator can be m
121c0 61 64 65 20 63 61 73 65 20 73 65 6e 73 69 74 69  ade case sensiti
121d0 76 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 63 61  ve using the.[ca
121e0 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b  se_sensitive_lik
121f0 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a  e pragma].</p>..
12200 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
12210 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e   glob GLOB</tcl>
12220 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70  .<p>^The GLOB op
12230 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69 6c 61  erator is simila
12240 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20 75 73  r to LIKE but us
12250 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69 6c 65  es the Unix.file
12260 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61 78   globbing syntax
12270 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63 61 72   for its wildcar
12280 64 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42  ds.  ^Also, GLOB
12290 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74 69   is case.sensiti
122a0 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e  ve, unlike LIKE.
122b0 20 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64    ^Both GLOB and
122c0 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65   LIKE may be pre
122d0 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54  ceded by.the NOT
122e0 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65   keyword to inve
122f0 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20  rt the sense of 
12300 74 68 65 20 74 65 73 74 2e 20 20 5e 54 68 65 20  the test.  ^The 
12310 69 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72  infix GLOB .oper
12320 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e  ator is implemen
12330 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ted by calling t
12340 68 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f  he function.[glo
12350 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  b(<i>Y</i>,<i>X<
12360 2f 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62 65  /i>)] and can be
12370 20 6d 6f 64 69 66 69 65 64 20 62 79 20 6f 76 65   modified by ove
12380 72 72 69 64 69 6e 67 0a 74 68 61 74 20 66 75 6e  rriding.that fun
12390 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ction.</p>..<tcl
123a0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 67  >hd_fragment reg
123b0 65 78 70 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e  exp REGEXP</tcl>
123c0 0a 3c 70 3e 5e 54 68 65 20 52 45 47 45 58 50 20  .<p>^The REGEXP 
123d0 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70  operator is a sp
123e0 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72  ecial syntax for
123f0 20 74 68 65 20 72 65 67 65 78 70 28 29 0a 75 73   the regexp().us
12400 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e  er function.  ^N
12410 6f 20 72 65 67 65 78 70 28 29 20 75 73 65 72 20  o regexp() user 
12420 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
12430 6e 65 64 20 62 79 20 64 65 66 61 75 6c 74 0a 61  ned by default.a
12440 6e 64 20 73 6f 20 75 73 65 20 6f 66 20 74 68 65  nd so use of the
12450 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72   REGEXP operator
12460 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72   will normally r
12470 65 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f  esult in an.erro
12480 72 20 6d 65 73 73 61 67 65 2e 20 20 5e 49 66 20  r message.  ^If 
12490 61 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  a [application-d
124a0 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74  efined SQL funct
124b0 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67 65  ion] named "rege
124c0 78 70 22 0a 69 73 20 61 64 64 65 64 20 61 74 20  xp".is added at 
124d0 72 75 6e 2d 74 69 6d 65 2c 20 74 68 61 74 20 66  run-time, that f
124e0 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  unction will be 
124f0 63 61 6c 6c 65 64 20 69 6e 20 6f 72 64 65 72 0a  called in order.
12500 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
12510 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72   REGEXP operator
12520 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
12530 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41  ragment match MA
12540 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  TCH</tcl>.<p>^Th
12550 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72  e MATCH operator
12560 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79   is a special sy
12570 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d 61 74  ntax for the mat
12580 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69 6f 6e  ch().application
12590 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
125a0 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74  n.  ^The default
125b0 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f   match() functio
125c0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
125d0 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63 65 70  .raises an excep
125e0 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20  tion and is not 
125f0 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f  really useful fo
12600 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42 75 74  r anything..^But
12610 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20   extensions can 
12620 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d 61 74  override the mat
12630 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69  ch() function wi
12640 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20  th more.helpful 
12650 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  logic.</p>..<tcl
12660 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 65 74  >hd_fragment bet
12670 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f 74 63  ween BETWEEN</tc
12680 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54 57 45  l>.<h3>The BETWE
12690 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e  EN operator</h3>
126a0 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57 45 45  .<p>^(The BETWEE
126b0 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 6c 6f  N operator is lo
126c0 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65  gically equivale
126d0 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f 66 20  nt to a pair of 
126e0 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22 3c 69  comparisons.."<i
126f0 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57 45 45  >x</i> <b>BETWEE
12700 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20 3c  N</b> <i>y</i> <
12710 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c 2f  b>AND</b> <i>z</
12720 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61 6c 65  i>" is .equivale
12730 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69 3e  nt to ."<i>x</i>
12740 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e 79  <b>&gt;=</b><i>y
12750 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20  </i> <b>AND</b> 
12760 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b 3d  <i>x</i><b>&lt;=
12770 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65 78  </b><i>z</i>" ex
12780 63 65 70 74 0a 74 68 61 74 20 77 69 74 68 20 42  cept.that with B
12790 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69 3e 78  ETWEEN, the <i>x
127a0 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e 20  </i> expression 
127b0 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61 74 65  is only evaluate
127c0 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65 20 70  d once.)^.^The p
127d0 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74 68 65  recedence of the
127e0 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f   BETWEEN operato
127f0 72 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  r is the same as
12800 20 74 68 65 20 70 72 65 63 65 64 65 6e 63 65 0a   the precedence.
12810 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c 62 3e  as operators <b>
12820 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 21 3d  ==</b> and <b>!=
12830 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b 45  </b> and <b>LIKE
12840 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70 73 20  </b> and groups 
12850 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 0a 0a  left to right...
12860 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
12870 20 63 61 73 65 20 7b 43 41 53 45 20 65 78 70 72   case {CASE expr
12880 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68  ession}</tcl>.<h
12890 33 3e 54 68 65 20 43 41 53 45 20 65 78 70 72 65  3>The CASE expre
128a0 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41 20  ssion</h3>.<p>A 
128b0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
128c0 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20 73 69  serves a role si
128d0 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48 45 4e  milar to IF-THEN
128e0 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72 0a 70  -ELSE in other.p
128f0 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75  rogramming langu
12900 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68 65 20  ages.  ..<p>The 
12910 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65 73 73  optional express
12920 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72 73 20  ion that occurs 
12930 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 43  in between the C
12940 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e 64 20  ASE keyword and 
12950 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e 20 6b  the.first WHEN k
12960 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c 65 64  eyword is called
12970 20 74 68 65 20 22 62 61 73 65 22 20 65 78 70 72   the "base" expr
12980 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65 20 61  ession. ^There a
12990 72 65 20 74 77 6f 20 62 61 73 69 63 20 66 6f 72  re two basic for
129a0 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45 20 65  ms.of the CASE e
129b0 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f 73 65  xpression: those
129c0 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78 70   with a base exp
129d0 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 6f 73  ression and thos
129e0 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e 5e  e without...<p>^
129f0 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 6f 75  In a CASE withou
12a00 74 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73  t a base express
12a10 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e 20 65  ion, each WHEN e
12a20 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
12a30 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65 20 72  luated.and the r
12a40 65 73 75 6c 74 20 74 72 65 61 74 65 64 20 61 73  esult treated as
12a50 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74 61 72   a boolean, star
12a60 74 69 6e 67 20 77 69 74 68 20 74 68 65 20 6c 65  ting with the le
12a70 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e 74 69  ftmost and conti
12a80 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72 69 67  nuing.to the rig
12a90 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20  ht. ^The result 
12aa0 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
12ab0 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 65 76  ession is the ev
12ac0 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  aluation of the 
12ad0 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20  THEN.expression 
12ae0 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
12af0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57 48   to the first WH
12b00 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  EN expression th
12b10 61 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f 0a  at evaluates to.
12b20 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f  true. ^Or, if no
12b30 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65  ne of the WHEN e
12b40 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
12b50 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74 68 65  ate to true, the
12b60 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61 6c 75   result of.evalu
12b70 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65  ating the ELSE e
12b80 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e  xpression, if an
12b90 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20  y. ^If there is 
12ba0 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73 73 69  no ELSE expressi
12bb0 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74  on and.none of t
12bc0 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73 69  he WHEN expressi
12bd0 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20 74 68  ons are true, th
12be0 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c 20 72  en the overall r
12bf0 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a  esult is NULL...
12c00 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73 75 6c  <p>^A NULL resul
12c10 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  t is considered 
12c20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76 61 6c  untrue when eval
12c30 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65 72 6d  uating WHEN term
12c40 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53  s...<p>^In a CAS
12c50 45 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78  E with a base ex
12c60 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 62 61  pression, the ba
12c70 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  se expression is
12c80 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73 74 0a   evaluated just.
12c90 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72 65 73  once and the res
12ca0 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65 64 20  ult is compared 
12cb0 61 67 61 69 6e 73 74 20 74 68 65 20 65 76 61 6c  against the eval
12cc0 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68 20 57  uation of each W
12cd0 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f 6e 20  HEN .expression 
12ce0 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
12cf0 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20  ht. ^The result 
12d00 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
12d10 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 0a 65  ession is the .e
12d20 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65  valuation of the
12d30 20 54 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   THEN expression
12d40 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
12d50 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57  s to the first W
12d60 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20 66  HEN.expression f
12d70 6f 72 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d  or which the com
12d80 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
12d90 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66   ^Or, if none of
12da0 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72 65 73   the WHEN.expres
12db0 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74  sions evaluate t
12dc0 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61 6c 20  o a value equal 
12dd0 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70 72  to the base expr
12de0 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65 73 75  ession, the resu
12df0 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  lt.of evaluating
12e00 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73   the ELSE expres
12e10 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49  sion, if any. ^I
12e20 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45 4c  f there is no EL
12e30 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  SE expression an
12e40 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48  d.none of the WH
12e50 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 70  EN expressions p
12e60 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c 74 20  roduce a result 
12e70 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61 73  equal to the bas
12e80 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a 74 68  e expression,.th
12e90 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c 74  e overall result
12ea0 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 57   is NULL...<p>^W
12eb0 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 61 20  hen comparing a 
12ec0 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
12ed0 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e 20 65  against a WHEN e
12ee0 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 73  xpression, the s
12ef0 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ame.collating se
12f00 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69 74 79  quence, affinity
12f10 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64 6c  , and NULL-handl
12f20 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c 79 20  ing rules apply 
12f30 61 73 20 69 66 20 74 68 65 0a 62 61 73 65 20 65  as if the.base e
12f40 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 57 48  xpression and WH
12f50 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 72  EN expression ar
12f60 65 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 74  e respectively t
12f70 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72 69 67  he left- and.rig
12f80 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 73  ht-hand operands
12f90 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62 3e 3d   of an <big><b>=
12fa0 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65 72 61  </b></big> opera
12fb0 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74 68 65  tor.</p> ^If the
12fc0 20 62 61 73 65 20 0a 65 78 70 72 65 73 73 69 6f   base .expressio
12fd0 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  n is NULL then t
12fe0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
12ff0 20 43 41 53 45 20 69 73 20 61 6c 77 61 79 73 20   CASE is always 
13000 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66 20 65  the result .of e
13010 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c  valuating the EL
13020 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 66  SE expression if
13030 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72 20 4e   it exists, or N
13040 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73 20 6e  ULL if it does n
13050 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66 6f  ot...<p>^Both fo
13060 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53 45 20  rms of the CASE 
13070 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 20 6c  expression use l
13080 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d 63 69  azy, or short-ci
13090 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61 74 69  rcuit, .evaluati
130a0 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 6e  on...<p>^(The on
130b0 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  ly difference be
130c0 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  tween the follow
130d0 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65 78 70  ing two CASE exp
130e0 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 61 74  ressions is that
130f0 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65   .the <i>x</i> e
13100 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
13110 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79 20 6f  luated exactly o
13120 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72 73 74  nce in the first
13130 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a 6d 69   example but .mi
13140 67 68 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ght be evaluated
13150 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20   multiple times 
13160 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a 0a 0a  in the second:..
13170 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43 41  <ul><pre>.<li>CA
13180 53 45 20 78 20 57 48 45 4e 20 77 31 20 54 48 45  SE x WHEN w1 THE
13190 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54 48 45  N r1 WHEN w2 THE
131a0 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e 44  N r2 ELSE r3 END
131b0 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e 20 78  .<li>CASE WHEN x
131c0 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48 45 4e  =w1 THEN r1 WHEN
131d0 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20 45 4c   x=w2 THEN r2 EL
131e0 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72 65 3e  SE r3 END.</pre>
131f0 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e 68  </ul>)^...<tcl>h
13200 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70  d_fragment in_op
13210 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d 20 7b   {IN operator} {
13220 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 7d  NOT IN operator}
13230 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 49  </tcl>.<h3>The I
13240 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65  N and NOT IN ope
13250 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
13260 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49  The IN and NOT I
13270 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61 6b 65  N operators take
13280 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c 61 72   a single scalar
13290 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 0a   operand on the.
132a0 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63 74 6f  left and a vecto
132b0 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65  r operand on the
132c0 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20 62 79   right.formed by
132d0 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c 69 73   an explicit lis
132e0 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  t of zero or mor
132f0 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62 79 20  e scalars or by 
13300 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71 75 65  a .single subque
13310 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69  ry..^When the ri
13320 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  ght operand of a
13330 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f  n IN or NOT IN o
13340 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 75 62  perator is a sub
13350 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62 71 75  query, the.subqu
13360 65 72 79 20 6d 75 73 74 20 68 61 76 65 20 61 20  ery must have a 
13370 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20 63 6f  single result co
13380 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68 65 20  lumn..^When the 
13390 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 69 73  right operand is
133a0 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c 20 74   an empty set, t
133b0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 20  he result of IN 
133c0 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74 68 65  is false and the
133d0 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54 20 49  .result of NOT I
133e0 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67 61 72  N is true, regar
133f0 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c 65 66  dless of the lef
13400 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20 65 76  t operand and ev
13410 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74 20 6f  en if the.left o
13420 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a  perand is NULL..
13430 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20  ^(The result of 
13440 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  an IN or NOT IN 
13450 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65 74 65  operator is dete
13460 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 66 6f  rmined by the fo
13470 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78 3a 0a  llowing.matrix:.
13480 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c 65  .<center>.<table
13490 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a   border=1>.<tr>.
134a0 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64  <th>Left operand
134b0 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74 68   <br>is NULL.<th
134c0 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20 3c  >Right operand <
134d0 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55 4c 4c  br>contains NULL
134e0 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61  .<th>Right opera
134f0 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65 6d 70  nd <br>is an emp
13500 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66 74 20  ty set.<th>Left 
13510 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20 3c 62  operand found <b
13520 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74 20 6f  r>within right o
13530 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73 75 6c  perand.<th>Resul
13540 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70 65 72  t of <br>IN oper
13550 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c 74 20  ator.<th>Result 
13560 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f 70  of <br>NOT IN op
13570 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64 20  erator.<tr>.<td 
13580 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13590 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
135a0 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
135b0 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
135c0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
135d0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
135e0 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64  enter">false.<td
135f0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13600 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  true.<tr>.<td al
13610 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65  ign="center">doe
13620 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64  s not matter.<td
13630 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13640 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
13650 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c  nter">yes.<td al
13660 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
13670 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13680 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69  r">false.<td ali
13690 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65  gn="center">true
136a0 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
136b0 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
136c0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64  align="center">d
136d0 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c  oes not matter.<
136e0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
136f0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13700 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
13710 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74  align="center">t
13720 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  rue.<td align="c
13730 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 72  enter">false.<tr
13740 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
13750 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
13760 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c  n="center">yes.<
13770 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13780 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13790 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
137a0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
137b0 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  LL.<td align="ce
137c0 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e 0a  nter">NULL.<tr>.
137d0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
137e0 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<td align
137f0 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
13800 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
13810 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
13820 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13830 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74  r">does not matt
13840 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  er.<td align="ce
13850 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61  nter">NULL.<td a
13860 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
13870 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  LL.</table>.</ce
13880 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f 74  nter>)^..<p>^Not
13890 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 61 6c  e that SQLite al
138a0 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e 74 68  lows the parenth
138b0 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 73  esized list of s
138c0 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f 6e 0a  calar values on.
138d0 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73  the right-hand s
138e0 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  ide of an IN or 
138f0 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
13900 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79 20 6c  to be an empty l
13910 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f 74 68  ist but.most oth
13920 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  er SQL database 
13930 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
13940 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32 20 73   and the SQL92 s
13950 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 0a  tandard require.
13960 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f 6e 74  the list to cont
13970 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  ain at least one
13980 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c   element.</p>..<
13990 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
139a0 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20 6f 70  in_op {EXISTS op
139b0 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45 58 49  erator} {NOT EXI
139c0 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74  STS operator}</t
139d0 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58 49 53  cl>.<h3>The EXIS
139e0 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e  TS operator</h3>
139f0 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53 54 53  ..<p>^The EXISTS
13a00 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61 79 73   operator always
13a10 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6f 6e   evaluates to on
13a20 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
13a30 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64 20 31   values 0 .and 1
13a40 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20  . ^If executing 
13a50 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
13a60 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64 20 61  ment specified a
13a70 73 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  s the right-hand
13a80 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65   .operand of the
13a90 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
13aa0 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6f 6e   would return on
13ab0 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 2c 20  e or more rows, 
13ac0 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54 53 20  then the.EXISTS 
13ad0 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
13ae0 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65 78 65  es to 1. ^If exe
13af0 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43  cuting the SELEC
13b00 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 0a 6e  T would return.n
13b10 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c 20 74  o rows at all, t
13b20 68 65 6e 20 74 68 65 20 45 58 49 53 54 53 20 6f  hen the EXISTS o
13b30 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
13b40 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68  s to 0. ..<p>^Th
13b50 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
13b60 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f 77 20  mns in each row 
13b70 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
13b80 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
13b90 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20 74 68  .(if any) and th
13ba0 65 20 73 70 65 63 69 66 69 63 20 76 61 6c 75 65  e specific value
13bb0 73 20 72 65 74 75 72 6e 65 64 20 68 61 76 65 20  s returned have 
13bc0 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65  no effect on the
13bd0 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68 65 20   results.of the 
13be0 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2e  EXISTS operator.
13bf0 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c   ^In particular,
13c00 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69 6e 67   rows containing
13c10 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
13c20 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61 6e 79  .not handled any
13c30 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66 72 6f   differently fro
13c40 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20 4e  m rows without N
13c50 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c 68 33  ULL values...<h3
13c60 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65 72 69  >Scalar Subqueri
13c70 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b  es</h3>..<p>^A [
13c80 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
13c90 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61  t enclosed in pa
13ca0 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 61 70  rentheses may ap
13cb0 70 65 61 72 20 61 73 20 61 20 73 63 61 6c 61 72  pear as a scalar
13cc0 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20 5b 53  .quantity. ^A [S
13cd0 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73 20 61  ELECT] used as a
13ce0 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74 79   scalar quantity
13cf0 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61 20 72   must return a r
13d00 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68 20 61  esult set.with a
13d10 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
13d20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74  ^The result of t
13d30 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
13d40 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
13d50 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 69 6e  e.only column in
13d60 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 20 72   the first row r
13d70 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
13d80 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
13d90 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20   ^If the SELECT 
13da0 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74 68 61  .yields more tha
13db0 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72 6f 77  n one result row
13dc0 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74 65 72  , all rows after
13dd0 20 74 68 65 20 66 69 72 73 74 20 61 72 65 20 69   the first are i
13de0 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68 65 20  gnored. ^If.the 
13df0 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20 6e 6f  SELECT yields no
13e00 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 20   rows, then the 
13e10 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65 78 70  value of the exp
13e20 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 2e  ression is NULL.
13e30 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f 66 20  .^(The LIMIT of 
13e40 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65 72  a scalar subquer
13e50 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e 0a 41  y is always 1..A
13e60 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54 20 76  ny other LIMIT v
13e70 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20 74 68  alue given in th
13e80 65 20 53 51 4c 20 74 65 78 74 20 69 73 20 69 67  e SQL text is ig
13e90 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 6c  nored.)^..<p>^Al
13ea0 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45 4c 45  l types of [SELE
13eb0 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 69  CT] statement, i
13ec0 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65 67 61  ncluding aggrega
13ed0 74 65 20 61 6e 64 20 63 6f 6d 70 6f 75 6e 64 20  te and compound 
13ee0 53 45 4c 45 43 54 0a 71 75 65 72 69 65 73 20 28  SELECT.queries (
13ef0 71 75 65 72 69 65 73 20 77 69 74 68 20 6b 65 79  queries with key
13f00 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e  words like UNION
13f10 20 6f 72 20 45 58 43 45 50 54 29 20 61 72 65 20   or EXCEPT) are 
13f20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63 61 6c 61  allowed as scala
13f30 72 0a 73 75 62 71 75 65 72 69 65 73 2e 0a 0a 3c  r.subqueries...<
13f40 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 20  h3>Table Column 
13f50 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  Names</h3>..<p>^
13f60 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61  A column name ca
13f70 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68 65 20  n be any of the 
13f80 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20 69 6e  names defined in
13f90 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42   the [CREATE TAB
13fa0 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72  LE].statement or
13fb0 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
13fc0 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69 64  owing special id
13fd0 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e 52  entifiers: "<b>R
13fe0 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f  OWID</b>",."<b>O
13ff0 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e  ID</b>", or "<b>
14000 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e 54  _ROWID_</b>"..^T
14010 68 65 73 65 20 73 70 65 63 69 61 6c 20 69 64 65  hese special ide
14020 6e 74 69 66 69 65 72 73 20 61 6c 6c 20 64 65 73  ntifiers all des
14030 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75 65  cribe the.unique
14040 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74 68   integer key (th
14050 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73 6f 63  e [rowid]) assoc
14060 69 61 74 65 64 20 77 69 74 68 20 65 76 65 72 79  iated with every
14070 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20 74   .row of every t
14080 61 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65 63 69  able..^The speci
14090 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  al identifiers o
140a0 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74 68 65  nly refer to the
140b0 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68 65 20   row key if the 
140c0 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73  [CREATE TABLE].s
140d0 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f  tatement does no
140e0 74 20 64 65 66 69 6e 65 20 61 20 72 65 61 6c 20  t define a real 
140f0 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68 65 20  column with the 
14100 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68 65 20  same name..^The 
14110 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75 73 65  rowid can be use
14120 64 20 61 6e 79 77 68 65 72 65 20 61 20 72 65 67  d anywhere a reg
14130 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20  ular.column can 
14140 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  be used.</p>..<p
14150 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  >^A [SELECT] sta
14160 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73 20 65  tement used as e
14170 69 74 68 65 72 20 61 20 73 63 61 6c 61 72 20 73  ither a scalar s
14180 75 62 71 75 65 72 79 20 6f 72 20 61 73 20 74 68  ubquery or as th
14190 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70  e .right-hand op
141a0 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 2c 20  erand of an IN, 
141b0 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53 54 53  NOT IN or EXISTS
141c0 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
141d0 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72 65 6e  contain .referen
141e0 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  ces to columns i
141f0 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75 65 72  n the outer quer
14200 79 2e 20 53 75 63 68 20 61 20 73 75 62 71 75 65  y. Such a subque
14210 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 61  ry is known as.a
14220 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
14230 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65 6c 61  uery. ^A correla
14240 74 65 64 20 73 75 62 71 75 65 72 79 20 69 73 20  ted subquery is 
14250 72 65 65 76 61 6c 75 61 74 65 64 20 65 61 63 68  reevaluated each
14260 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75 6c 74   time.its result
14270 20 69 73 20 72 65 71 75 69 72 65 64 2e 20 5e 41   is required. ^A
14280 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64 20 73  n uncorrelated s
14290 75 62 71 75 65 72 79 20 69 73 20 65 76 61 6c 75  ubquery is evalu
142a0 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a 61  ated only once.a
142b0 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 65  nd the result re
142c0 75 73 65 64 20 61 73 20 6e 65 63 65 73 73 61 72  used as necessar
142d0 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  y...<tcl>hd_frag
142e0 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20 7b 43  ment castexpr {C
142f0 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c  AST expression}<
14300 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54 20 65  /tcl>.<h3>CAST e
14310 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a  xpressions</h3>.
14320 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70 72 65  .<p>A CAST expre
14330 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ssion is used to
14340 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c   convert the val
14350 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72 26 67  ue of &lt;expr&g
14360 74 3b 20 74 6f 20 0a 61 20 64 69 66 66 65 72 65  t; to .a differe
14370 6e 74 20 5b 73 74 6f 72 61 67 65 20 63 6c 61 73  nt [storage clas
14380 73 5d 20 69 6e 20 61 20 73 69 6d 69 6c 61 72 20  s] in a similar 
14390 77 61 79 20 74 6f 20 74 68 65 20 63 6f 6e 76 65  way to the conve
143a0 72 73 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73  rsion that takes
143b0 0a 70 6c 61 63 65 20 77 68 65 6e 20 61 20 5b 63  .place when a [c
143c0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20  olumn affinity] 
143d0 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 61 20  is applied to a 
143e0 76 61 6c 75 65 2e 20 5e 41 70 70 6c 69 63 61 74  value. ^Applicat
143f0 69 6f 6e 20 6f 66 20 61 20 43 41 53 54 0a 65 78  ion of a CAST.ex
14400 70 72 65 73 73 69 6f 6e 20 69 73 20 64 69 66 66  pression is diff
14410 65 72 65 6e 74 20 74 6f 20 61 70 70 6c 69 63 61  erent to applica
14420 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  tion of a column
14430 20 61 66 66 69 6e 69 74 79 2c 20 61 73 0a 77 69   affinity, as.wi
14440 74 68 20 61 20 43 41 53 54 20 65 78 70 72 65 73  th a CAST expres
14450 73 69 6f 6e 20 74 68 65 20 73 74 6f 72 61 67 65  sion the storage
14460 20 63 6c 61 73 73 20 63 6f 6e 76 65 72 73 69 6f   class conversio
14470 6e 20 69 73 20 66 6f 72 63 65 64 20 65 76 65 6e  n is forced even
14480 20 0a 69 66 20 69 74 20 69 73 20 6c 6f 73 73 79   .if it is lossy
14490 20 61 6e 64 20 69 72 72 72 65 76 65 72 73 69 62   and irrreversib
144a0 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  le...<p>^If the 
144b0 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78 70  value of &lt;exp
144c0 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c 20 74  r&gt; is NULL, t
144d0 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
144e0 66 20 74 68 65 20 43 41 53 54 0a 65 78 70 72 65  f the CAST.expre
144f0 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e 55  ssion is also NU
14500 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  LL. ^Otherwise, 
14510 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61 73  the storage clas
14520 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  s of the result 
14530 76 61 6c 75 65 0a 69 73 20 64 65 74 65 72 6d 69  value.is determi
14540 6e 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67 20  ned by applying 
14550 74 68 65 20 5b 72 75 6c 65 73 20 66 6f 72 20 64  the [rules for d
14560 65 74 65 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d  etermining colum
14570 6e 20 61 66 66 69 6e 69 74 79 5d 20 74 6f 0a 74  n affinity] to.t
14580 68 65 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65  he &lt;type-name
14590 26 67 74 3b 20 73 70 65 63 69 66 69 65 64 20 61  &gt; specified a
145a0 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43 41  s part of the CA
145b0 53 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 0a  ST expression...
145c0 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e  <table border=1>
145d0 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20 41 66 66  .<tr>.  <th> Aff
145e0 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b 74 79 70  inity of &lt;typ
145f0 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c 74 68  e-name&gt;.  <th
14600 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f  > Conversion Pro
14610 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c  cessing.<tr>.  <
14620 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e  td> NONE .  <td>
14630 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75   ^Casting a valu
14640 65 20 74 6f 20 61 20 26 6c 74 3b 74 79 70 65 2d  e to a &lt;type-
14650 6e 61 6d 65 26 67 74 3b 20 77 69 74 68 20 6e 6f  name&gt; with no
14660 20 61 66 66 69 6e 69 74 79 20 63 61 75 73 65 73   affinity causes
14670 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a 20 20   the value to.  
14680 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
14690 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61 73 74  o a BLOB.  ^Cast
146a0 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20 63 6f  ing to a BLOB co
146b0 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73 74 20  nsists of first 
146c0 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20 76 61  casting.  the va
146d0 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e 20 74  lue to TEXT in t
146e0 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66  he [encoding] of
146f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
14700 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 0a 20  nnection, then. 
14710 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   interpreting th
14720 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79 74 65  e resulting byte
14730 20 73 65 71 75 65 6e 63 65 20 61 73 20 61 20 42   sequence as a B
14740 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66 20 61  LOB instead of a
14750 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20  s TEXT...<tr>.  
14760 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74 64 3e  <td> TEXT.  <td>
14770 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c 4f 42   ^To cast a BLOB
14780 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 2c 20   value to TEXT, 
14790 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20  the sequence of 
147a0 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b 65 20  bytes that make 
147b0 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20 69 73  up the.  BLOB is
147c0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
147d0 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75 73 69  text encoded usi
147e0 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ng the database 
147f0 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a  encoding..  <p>.
14800 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e 20 49     ^Casting an I
14810 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20 76  NTEGER or REAL v
14820 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54 20 72  alue into TEXT r
14830 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c 75 65  enders the value
14840 20 61 73 20 69 66 20 76 69 61 20 0a 20 20 20 20   as if via .    
14850 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  [sqlite3_snprint
14860 66 28 29 5d 20 65 78 63 65 70 74 20 74 68 61 74  f()] except that
14870 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 54   the resulting T
14880 45 58 54 20 75 73 65 73 20 74 68 65 20 5b 65 6e  EXT uses the [en
14890 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20 20 74  coding] of.    t
148a0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
148b0 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20  ection...<tr>.  
148c0 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74 64 3e  <td> REAL.  <td>
148d0 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61   ^When casting a
148e0 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 61   BLOB value to a
148f0 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c 75 65   REAL, the value
14900 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72   is first conver
14910 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54  ted to.        T
14920 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e  EXT..       <p>^
14930 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54  When casting a T
14940 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52 45 41  EXT value to REA
14950 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70  L, the longest p
14960 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f  ossible prefix o
14970 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76 61  f.        the va
14980 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 20  lue that can be 
14990 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
149a0 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69 73 20   real number is 
149b0 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a 20  extracted from. 
149c0 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54 20         the TEXT 
149d0 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72 65  value and the re
149e0 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e  mainder ignored.
149f0 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73 70   ^Any leading sp
14a00 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20  aces in the.    
14a10 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20 61      TEXT value a
14a20 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65 6e 20  re ignored when 
14a30 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f 6d 20  converging from 
14a40 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20 5e 28  TEXT to REAL. ^(
14a50 49 66 20 74 68 65 72 65 20 69 73 0a 20 20 20 20  If there is.    
14a60 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20 74 68      no prefix th
14a70 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70  at can be interp
14a80 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c 20  reted as a real 
14a90 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75  number, the resu
14aa0 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20 20 20  lt of the.      
14ab0 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20    conversion is 
14ac0 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20 3c  0.0.)^..<tr>.  <
14ad0 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20 3c 74  td> INTEGER.  <t
14ae0 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  d> ^When casting
14af0 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
14b00 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 76 61   INTEGER, the va
14b10 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e  lue is first con
14b20 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20  verted to.      
14b30 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c    TEXT..       <
14b40 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  p>^When casting 
14b50 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20  a TEXT value to 
14b60 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c 6f 6e  INTEGER, the lon
14b70 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70 72  gest possible pr
14b80 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20 20  efix of.        
14b90 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 63  the value that c
14ba0 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  an be interprete
14bb0 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  d as an integer 
14bc0 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61 63  number is extrac
14bd0 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20  ted from.       
14be0 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65 20   the TEXT value 
14bf0 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64 65  and the remainde
14c00 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20  r ignored. ^Any 
14c10 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20 69  leading spaces i
14c20 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54 45  n the.        TE
14c30 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20 63 6f  XT value when co
14c40 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20 54 45  nverting from TE
14c50 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20 61 72  XT to INTEGER ar
14c60 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 20 74  e ignored. ^If t
14c70 68 65 72 65 0a 20 20 20 20 20 20 20 20 69 73 20  here.        is 
14c80 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20 63  no prefix that c
14c90 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  an be interprete
14ca0 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  d as an integer 
14cb0 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75  number, the resu
14cc0 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20 74 68  lt.        of th
14cd0 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  e conversion is 
14ce0 30 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20  0...      <p>^A 
14cf0 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c 20 76  cast of a REAL v
14d00 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54  alue into an INT
14d10 45 47 45 52 20 77 69 6c 6c 20 74 72 75 6e 63 61  EGER will trunca
14d20 74 65 20 74 68 65 20 66 72 61 63 74 69 6f 6e 61  te the fractiona
14d30 6c 0a 20 20 20 20 20 20 70 61 72 74 20 6f 66 20  l.      part of 
14d40 74 68 65 20 52 45 41 4c 2e 20 20 5e 49 66 20 61  the REAL.  ^If a
14d50 6e 20 52 45 41 4c 20 69 73 20 74 6f 6f 20 6c 61  n REAL is too la
14d60 72 67 65 20 74 6f 20 62 65 20 72 65 70 72 65 73  rge to be repres
14d70 65 6e 74 65 64 20 61 73 20 61 6e 20 0a 20 20 20  ented as an .   
14d80 20 20 20 49 4e 54 45 47 45 52 20 74 68 65 6e 20     INTEGER then 
14d90 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
14da0 65 20 63 61 73 74 20 69 73 20 74 68 65 20 6c 61  e cast is the la
14db0 72 67 65 73 74 20 6e 65 67 61 74 69 76 65 20 69  rgest negative i
14dc0 6e 74 65 67 65 72 3a 20 0a 20 20 20 20 20 20 2d  nteger: .      -
14dd0 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
14de0 38 30 38 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  808...<tr>.  <td
14df0 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e  > NUMERIC.  <td>
14e00 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58 54   ^Casting a TEXT
14e10 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20 69   or BLOB value i
14e20 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72 73  nto NUMERIC firs
14e30 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64 0a  t does a forced.
14e40 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e     conversion in
14e50 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65 6e  to REAL but then
14e60 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72 74   further convert
14e70 73 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  s the result int
14e80 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20 20  o INTEGER if.   
14e90 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20  and only if the 
14ea0 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20  conversion from 
14eb0 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52 20  REAL to INTEGER 
14ec0 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20  is lossless and 
14ed0 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20 54  reversible..   T
14ee0 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
14ef0 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69 74  context in SQLit
14f00 65 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d 45  e where the NUME
14f10 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52 20  RIC and INTEGER 
14f20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20 20  [affinities].   
14f30 62 65 68 61 76 65 20 64 69 66 66 65 72 65 6e 74  behave different
14f40 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73 74  ly..   <p> ^Cast
14f50 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49 4e  ing a REAL or IN
14f60 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20 4e  TEGER value to N
14f70 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d 6f  UMERIC is a no-o
14f80 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65 61  p, even if a rea
14f90 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c 64  l.   value could
14fa0 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be losslessly c
14fb0 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
14fc0 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a  nteger...</tr>..
14fd0 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f  </table>..<p>^No
14fe0 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73 75  te that the resu
14ff0 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20  lt from casting 
15000 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c  any non-BLOB val
15010 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20  ue into a .BLOB 
15020 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 66  and the result f
15030 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20  rom casting any 
15040 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20  BLOB value into 
15050 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65  a non-BLOB value
15060 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e  .may be differen
15070 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  t depending on w
15080 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61 62  hether the datab
15090 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 69  ase [encoding] i
150a0 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36 62  s UTF-8,.UTF-16b
150b0 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e 0a  e, or UTF-16le..
150c0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
150d0 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20 7b  nt booleanexpr {
150e0 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
150f0 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42 6f  on}</tcl>.<h3>Bo
15100 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f 6e  olean Expression
15110 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 53  s</h3>..<p>The S
15120 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74  QL language feat
15130 75 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f 6e  ures several con
15140 74 65 78 74 73 20 77 68 65 72 65 20 61 6e 20 65  texts where an e
15150 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65 76  xpression is .ev
15160 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20  aluated and the 
15170 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65 64  result converted
15180 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28 74   to a boolean (t
15190 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76 61  rue or false) va
151a0 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74 65  lue. These.conte
151b0 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e  xts are:..  <ul>
151c0 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48  .    <li> the WH
151d0 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ERE clause of a 
151e0 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20 6f  SELECT, UPDATE o
151f0 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  r DELETE stateme
15200 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  nt,.    <li> the
15210 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
15220 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69 6e  use of a join in
15230 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
15240 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68  ent,.    <li> th
15250 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
15260 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
15270 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20  ement,.    <li> 
15280 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  the WHEN clause 
15290 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67 65  of an SQL trigge
152a0 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e 20  r, and.    <li> 
152b0 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  the WHEN clause 
152c0 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73 6f  or clauses of so
152d0 6d 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  me CASE expressi
152e0 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c 70  ons..  </ul>..<p
152f0 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74 68  >^(To convert th
15300 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e 20  e results of an 
15310 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20 74  SQL expression t
15320 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  o a boolean valu
15330 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74 20  e, SQLite.first 
15340 63 61 73 74 73 20 74 68 65 20 72 65 73 75 6c 74  casts the result
15350 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61   to a NUMERIC va
15360 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20  lue in the same 
15370 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54 20  way as a .[CAST 
15380 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20 4e  expression]. A N
15390 55 4c 4c 20 6f 72 20 7a 65 72 6f 20 76 61 6c 75  ULL or zero valu
153a0 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65  e (integer value
153b0 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65   0 or real value
153c0 20 30 2e 30 29 20 69 73 0a 63 6f 6e 73 69 64 65   0.0) is.conside
153d0 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65 2e  red to be false.
153e0 20 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65   All other value
153f0 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
15400 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46   true.)^..<p>^(F
15410 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
15420 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e 30  values NULL, 0.0
15430 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20 61  , 0, 'english' a
15440 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20 63  nd '0' are all c
15450 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65 20  onsidered.to be 
15460 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75 65  false.)^ ^(Value
15470 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20 2d  s 1, 1.0, 0.1, -
15480 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69 73  0.1 and '1englis
15490 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  h' are considere
154a0 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29 5e  d to .be true.)^
154b0 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73 3c  ..<h3>Functions<
154c0 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b 63  /h3>.<p>^Both [c
154d0 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20  orefunc|simple] 
154e0 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67  and [aggfunc|agg
154f0 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f 6e  regate] function
15500 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e  s are supported.
15510 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74 69  .(For presentati
15520 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69 6d  on purposes, sim
15530 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ple functions ar
15540 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69 76  e further subdiv
15550 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65 66  ided into.[coref
15560 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63 74  unc | core funct
15570 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65 66  ions] and [datef
15580 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65 20  unc | date-time 
15590 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41 20  functions].).^A 
155a0 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
155b0 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 61  can be used in a
155c0 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  ny expression.  
155d0 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e  ^Simple function
155e0 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75 6c  s return.a resul
155f0 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 61  t immediately ba
15600 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e 70  sed on their inp
15610 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74 65  uts.  ^Aggregate
15620 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20 6f   functions.may o
15630 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 61  nly be used in a
15640 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
15650 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20 66  t.  ^Aggregate f
15660 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74 65  unctions compute
15670 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61 63  .their result ac
15680 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f 66  ross all rows of
15690 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
156a0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
156b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
156c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
156d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
156e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
156f0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
15700 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f  on {Core Functio
15710 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63  ns} corefunc {*c
15720 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66 75  orefunc}.proc fu
15730 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65  ncdef {syntax ke
15740 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20  ywords desc} {. 
15750 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d 0a   hd_puts {<tr>}.
15760 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c    regsub -all {\
15770 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  s+} [string trim
15780 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 3e 3c   $syntax] {<br><
15790 2f 62 72 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72  /br>} syntax.  r
157a0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b  egsub -all {\(([
157b0 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61  ^*)]+)\)} $synta
157c0 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20  x {(<i>\1</i>)} 
157d0 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
157e0 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78  -all {,} $syntax
157f0 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74   {</i>,<i>} synt
15800 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
15810 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d   {<i>\.\.\.</i>}
15820 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73   $syntax {...} s
15830 79 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20  yntax.  hd_puts 
15840 22 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  "<td valign=\"to
15850 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68  p\" align=\"righ
15860 74 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c  t\" width=\"120\
15870 22 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67  ">".  if {[lleng
15880 74 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30  th $keywords]==0
15890 7d 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b  } {.    regexp {
158a0 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78  [a-z_]+} $syntax
158b0 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61   name.    hd_fra
158c0 67 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61  gment $name *$na
158d0 6d 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51  me "${name}() SQ
158e0 4c 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20  L function".  } 
158f0 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66  else {.    set f
15900 72 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20  ragname [lindex 
15910 24 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20  $keywords 0].   
15920 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e   regsub -all {[^
15930 61 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20  a-z]} $fragname 
15940 7b 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20  {} fragname.    
15950 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61  hd_fragment $fra
15960 67 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68  gname.    eval h
15970 64 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69  d_keywords [stri
15980 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20  ng map {\n { }} 
15990 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20  $keywords].  }. 
159a0 20 68 64 5f 70 75 74 73 20 22 24 73 79 6e 74 61   hd_puts "$synta
159b0 78 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75 74  x</td>".  hd_put
159c0 73 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  s {<td valign="t
159d0 6f 70 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f 6c  op">}.  hd_resol
159e0 76 65 20 24 64 65 73 63 0a 20 20 68 64 5f 70 75  ve $desc.  hd_pu
159f0 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a  ts {</td></tr>}.
15a00 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  }.</tcl>..<p>The
15a10 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20   core functions 
15a20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20  shown below are 
15a30 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
15a40 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63  ault. .[datefunc
15a50 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69   | Date &amp; Ti
15a60 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e  me functions] an
15a70 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67  d.[aggfunc | agg
15a80 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
15a90 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64  ] are documented
15aa0 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 6e   separately.  An
15ab0 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79  .application may
15ac0 20 64 65 66 69 6e 65 20 61 64 64 69 74 69 6f 6e   define addition
15ad0 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72 69  al.functions wri
15ae0 74 74 65 6e 20 69 6e 20 43 20 61 6e 64 20 61 64  tten in C and ad
15af0 64 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ded to the datab
15b00 61 73 65 20 65 6e 67 69 6e 65 20 75 73 69 6e 67  ase engine using
15b10 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72  .the [sqlite3_cr
15b20 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
15b30 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c   API.</p>..<tabl
15b40 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
15b50 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e  adding=10>.<tcl>
15b60 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29  .funcdef {abs(X)
15b70 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62  } {} {.  ^The ab
15b80 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  s(X) function re
15b90 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75  turns the absolu
15ba0 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  te value of the 
15bb0 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65  numeric.  argume
15bc0 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72  nt X.  ^Abs(X) r
15bd0 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58  eturns NULL if X
15be0 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41   is NULL. .  ^(A
15bf0 62 73 28 58 29 20 72 65 74 75 72 6e 20 30 2e 30  bs(X) return 0.0
15c00 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69 6e   if X is a strin
15c10 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61 74  g or blob.  that
15c20 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
15c30 72 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72 69  rted to a numeri
15c40 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66 20  c value.)^  ^If 
15c50 58 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74 65  X is the .  inte
15c60 67 65 72 20 2d 39 32 32 33 33 37 32 30 33 36 38  ger -92233720368
15c70 35 34 37 37 35 38 30 37 20 74 68 65 6e 20 61 62  54775807 then ab
15c80 73 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20 69  s(X) throws an i
15c90 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 0a  nteger overflow.
15ca0 20 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74 68    error since th
15cb0 65 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76 61  ere is no equiva
15cc0 6c 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36 34  lent positive 64
15cd0 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65 6d  -bit two complem
15ce0 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75  ent value..}..fu
15cf0 6e 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28 29  ncdef {changes()
15d00 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68  } {} {.  ^The ch
15d10 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e  anges() function
15d20 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
15d30 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 20  ber of database 
15d40 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20 63  rows that were c
15d50 68 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73 65  hanged.  or inse
15d60 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20  rted or deleted 
15d70 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  by the most rece
15d80 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20 49  ntly completed I
15d90 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a 20  NSERT, DELETE,. 
15da0 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
15db0 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65 20  ment, exclusive 
15dc0 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  of statements in
15dd0 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72 69   lower-level tri
15de0 67 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63 68  ggers..  ^The ch
15df0 61 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e 63  anges() SQL func
15e00 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65  tion is a wrappe
15e10 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
15e20 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
15e30 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f  .  C/C++ functio
15e40 6e 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c 6c  n and hence foll
15e50 6f 77 73 20 74 68 65 20 73 61 6d 65 20 72 75 6c  ows the same rul
15e60 65 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20  es for counting 
15e70 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63  changes..}..func
15e80 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c  def {coalesce(X,
15e90 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e  Y,...)} {} {.  ^
15ea0 54 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20 66  The coalesce() f
15eb0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
15ec0 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69  a copy of its fi
15ed0 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67  rst non-NULL arg
15ee0 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c  ument, or.  NULL
15ef0 20 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74   if all argument
15f00 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f  s are NULL.  ^Co
15f10 61 6c 65 73 63 65 28 29 20 6d 75 73 74 20 62 65  alesce() must be
15f20 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32 20 61   at least .  2 a
15f30 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e  rguments..}..fun
15f40 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29 7d  cdef {glob(X,Y)}
15f50 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67 6c 6f   {} {.  ^The glo
15f60 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  b(X,Y) function 
15f70 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  is equivalent to
15f80 20 74 68 65 0a 20 20 65 78 70 72 65 73 73 69 6f   the.  expressio
15f90 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c 2f  n "<b>Y GLOB X</
15fa0 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74  b>"..  Note that
15fb0 20 74 68 65 20 58 20 61 6e 64 20 59 20 61 72 67   the X and Y arg
15fc0 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76 65 72  uments are rever
15fd0 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62 28  sed in the glob(
15fe0 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 6c  ) function.  rel
15ff0 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66  ative to the inf
16000 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74  ix [GLOB] operat
16010 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65 20 5b 73  or..  ^If the [s
16020 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
16030 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  nction()] interf
16040 61 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a 20  ace is used to. 
16050 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 67 6c   override the gl
16060 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  ob(X,Y) function
16070 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e 61   with an alterna
16080 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tive implementat
16090 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20 5b  ion then.  the [
160a0 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20 77  GLOB] operator w
160b0 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 61  ill invoke the a
160c0 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65  lternative imple
160d0 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75  mentation..}..fu
160e0 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c  ncdef {ifnull(X,
160f0 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
16100 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f  ifnull() functio
16110 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79  n returns a copy
16120 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f   of its first no
16130 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c  n-NULL argument,
16140 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f   or.  NULL if bo
16150 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  th arguments are
16160 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28   NULL.  ^Ifnull(
16170 29 20 6d 75 73 74 20 68 61 76 65 20 65 78 61 63  ) must have exac
16180 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73 2e  tly 2 arguments.
16190 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29  .  ^The ifnull()
161a0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75   function is equ
161b0 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c  ivalent to [coal
161c0 65 73 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f  esce()] with two
161d0 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66   arguments..}..f
161e0 75 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20  uncdef {hex(X)} 
161f0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78 28  {} {.  ^The hex(
16200 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72  ) function inter
16210 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65  prets its argume
16220 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e 64  nt as a BLOB and
16230 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72   returns.  a str
16240 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65  ing which is the
16250 20 75 70 70 65 72 2d 63 61 73 65 20 68 65 78 61   upper-case hexa
16260 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e  decimal renderin
16270 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  g of the content
16280 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e   of.  that blob.
16290 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73  .}..funcdef {las
162a0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
162b0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61  } {} {.  ^The la
162c0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
162d0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
162e0 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20  ns the [ROWID]. 
162f0 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77   of the last row
16300 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 65   insert from the
16310 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
16320 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b  tion which invok
16330 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69 6f  ed the.  functio
16340 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69  n..  ^The last_i
16350 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53 51  nsert_rowid() SQ
16360 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
16370 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
16380 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61  he.  [sqlite3_la
16390 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
163a0 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  )] C/C++ interfa
163b0 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a  ce function..}..
163c0 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28  funcdef {length(
163d0 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
163e0 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69  length(X) functi
163f0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c  on returns the l
16400 65 6e 67 74 68 20 6f 66 20 58 20 69 6e 20 0a 20  ength of X in . 
16410 20 63 68 61 72 61 63 74 65 72 73 20 69 66 20 58   characters if X
16420 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 6f 72   is a string, or
16430 20 69 6e 20 62 79 74 65 73 20 69 66 20 58 20 69   in bytes if X i
16440 73 20 61 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20  s a blob..  ^If 
16450 58 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c  X is NULL then l
16460 65 6e 67 74 68 28 58 29 20 69 73 20 4e 55 4c 4c  ength(X) is NULL
16470 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 6e 75 6d  ..  ^If X is num
16480 65 72 69 63 20 74 68 65 6e 20 6c 65 6e 67 74 68  eric then length
16490 28 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 20  (X) returns the 
164a0 6c 65 6e 67 74 68 20 6f 66 20 61 20 73 74 72 69  length of a stri
164b0 6e 67 0a 20 20 72 65 70 72 65 73 65 6e 74 61 74  ng.  representat
164c0 69 6f 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e  ion of X..}..fun
164d0 63 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20  cdef {like(X,Y) 
164e0 6c 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20  like(X,Y,Z)} {} 
164f0 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 28 29 20  {.  ^The like() 
16500 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
16510 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
16520 65 0a 20 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58  e.  "<b>Y LIKE X
16530 20 26 23 39 31 3b 45 53 43 41 50 45 20 5a 26 23   &#91;ESCAPE Z&#
16540 39 33 3b 3c 2f 62 3e 22 20 65 78 70 72 65 73 73  93;</b>" express
16550 69 6f 6e 2e 20 0a 20 20 5e 49 66 20 74 68 65 20  ion. .  ^If the 
16560 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20  optional ESCAPE 
16570 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
16580 74 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 6c 69  t, then the.  li
16590 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  ke() function is
165a0 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68   invoked with th
165b0 72 65 65 20 61 72 67 75 6d 65 6e 74 73 2e 20 20  ree arguments.  
165c0 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69  ^Otherwise, it i
165d0 73 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69 74 68  s.  invoked with
165e0 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f   two arguments o
165f0 6e 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  nly. Note that t
16600 68 65 20 58 20 61 6e 64 20 59 20 70 61 72 61 6d  he X and Y param
16610 65 74 65 72 73 20 61 72 65 0a 20 20 72 65 76 65  eters are.  reve
16620 72 73 65 64 20 69 6e 20 74 68 65 20 6c 69 6b 65  rsed in the like
16630 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61  () function rela
16640 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69  tive to the infi
16650 78 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f  x [LIKE] operato
16660 72 2e 0a 20 20 5e 54 68 65 20 5b 73 71 6c 69 74  r..  ^The [sqlit
16670 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
16680 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  on()] interface 
16690 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f  can be used to o
166a0 76 65 72 72 69 64 65 20 74 68 65 0a 20 20 6c 69  verride the.  li
166b0 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ke() function an
166c0 64 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65  d thereby change
166d0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
166e0 66 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f  f the.  [LIKE] o
166f0 70 65 72 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f  perator.  When o
16700 76 65 72 72 69 64 69 6e 67 20 74 68 65 20 6c 69  verriding the li
16710 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69  ke() function, i
16720 74 20 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61  t may be importa
16730 6e 74 0a 20 20 74 6f 20 6f 76 65 72 72 69 64 65  nt.  to override
16740 20 62 6f 74 68 20 74 68 65 20 74 77 6f 20 61 6e   both the two an
16750 64 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74  d three argument
16760 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65   versions of the
16770 20 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e 63 74   like() .  funct
16780 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ion. Otherwise, 
16790 64 69 66 66 65 72 65 6e 74 20 63 6f 64 65 20 6d  different code m
167a0 61 79 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20  ay be called to 
167b0 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20  implement the.  
167c0 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20  [LIKE] operator 
167d0 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
167e0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45  ther or not an E
167f0 53 43 41 50 45 20 63 6c 61 75 73 65 20 77 61 73  SCAPE clause was
16800 20 0a 20 20 73 70 65 63 69 66 69 65 64 2e 0a 7d   .  specified..}
16810 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f  ..funcdef {load_
16820 65 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61  extension(X) loa
16830 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29  d_extension(X,Y)
16840 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f  } {} {.  ^The lo
16850 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59  ad_extension(X,Y
16860 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 73  ) function loads
16870 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f   SQLite extensio
16880 6e 73 20 6f 75 74 20 6f 66 20 74 68 65 20 73 68  ns out of the sh
16890 61 72 65 64 0a 20 20 6c 69 62 72 61 72 79 20 66  ared.  library f
168a0 69 6c 65 20 6e 61 6d 65 64 20 58 20 75 73 69 6e  ile named X usin
168b0 67 20 74 68 65 20 65 6e 74 72 79 20 70 6f 69 6e  g the entry poin
168c0 74 20 59 2e 20 20 5e 54 68 65 20 72 65 73 75 6c  t Y.  ^The resul
168d0 74 20 6f 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73  t of load_extens
168e0 69 6f 6e 28 29 0a 20 20 69 73 20 61 6c 77 61 79  ion().  is alway
168f0 73 20 61 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59  s a NULL.  ^If Y
16900 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e   is omitted then
16910 20 74 68 65 20 64 65 66 61 75 6c 74 20 65 6e 74   the default ent
16920 72 79 20 70 6f 69 6e 74 0a 20 20 6f 66 20 3c 62  ry point.  of <b
16930 3e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69  >sqlite3_extensi
16940 6f 6e 5f 69 6e 69 74 3c 2f 62 3e 20 69 73 20 75  on_init</b> is u
16950 73 65 64 2e 20 20 5e 54 68 65 20 6c 6f 61 64 5f  sed.  ^The load_
16960 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63  extension() func
16970 74 69 6f 6e 0a 20 20 72 61 69 73 65 73 20 61 6e  tion.  raises an
16980 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68   exception if th
16990 65 20 65 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c  e extension fail
169a0 73 20 74 6f 20 6c 6f 61 64 20 6f 72 20 69 6e 69  s to load or ini
169b0 74 69 61 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c  tialize correctl
169c0 79 2e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f  y...  <p>^The lo
169d0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66  ad_extension() f
169e0 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69  unction will fai
169f0 6c 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69  l if the extensi
16a00 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20 0a  on attempts to .
16a10 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65    modify or dele
16a20 74 65 20 61 20 53 51 4c 20 66 75 6e 63 74 69 6f  te a SQL functio
16a30 6e 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  n or collating s
16a40 65 71 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20  equence.  ^The. 
16a50 20 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61   extension can a
16a60 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73  dd new functions
16a70 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
16a80 71 75 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e  quences, but can
16a90 6e 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20  not.  modify or 
16aa0 64 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  delete existing 
16ab0 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
16ac0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
16ad0 20 62 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65   because.  those
16ae0 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f   functions and/o
16af0 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
16b00 65 6e 63 65 73 20 6d 69 67 68 74 20 62 65 20 75  ences might be u
16b10 73 65 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20  sed elsewhere.  
16b20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  in the currently
16b30 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61   running SQL sta
16b40 74 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64  tement.  To load
16b50 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68   an extension th
16b60 61 74 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20  at.  changes or 
16b70 64 65 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e  deletes function
16b80 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  s or collating s
16b90 65 71 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68  equences, use th
16ba0 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61  e.  [sqlite3_loa
16bb0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43  d_extension()] C
16bc0 2d 6c 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f  -language API.</
16bd0 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  p>.}..funcdef {l
16be0 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  ower(X)} {} {.  
16bf0 5e 54 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75  ^The lower(X) fu
16c00 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
16c10 20 63 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20   copy of string 
16c20 58 20 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49  X with all ASCII
16c30 20 63 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f   characters.  co
16c40 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72  nverted to lower
16c50 20 63 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66   case.  ^The def
16c60 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f  ault built-in lo
16c70 77 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  wer() function w
16c80 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49  orks.  for ASCII
16c90 20 63 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79   characters only
16ca0 2e 20 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f  .  To do case co
16cb0 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e  nversions on non
16cc0 2d 41 53 43 49 49 0a 20 20 63 68 61 72 61 63 74  -ASCII.  charact
16cd0 65 72 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43  ers, load the IC
16ce0 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a  U extension..}..
16cf0 66 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58  funcdef {ltrim(X
16d00 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d  ) ltrim(X,Y)} {}
16d10 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28   {.  ^The ltrim(
16d20 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
16d30 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
16d40 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
16d50 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
16d60 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
16d70 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
16d80 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f   the left side o
16d90 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59  f X..  ^If the Y
16da0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69   argument is omi
16db0 74 74 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72  tted, ltrim(X) r
16dc0 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72  emoves spaces fr
16dd0 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64 65  om the left side
16de0 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  .  of X..}..func
16df0 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e  def {max(X,Y,...
16e00 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63  )} {*maxCoreFunc
16e10 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c   *max {max() SQL
16e20 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
16e30 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
16e40 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69  ent max() functi
16e50 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
16e60 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65  rgument with the
16e70 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75   .  maximum valu
16e80 65 2c 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c  e, or return NUL
16e90 4c 20 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e  L if any argumen
16ea0 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54  t is NULL. .  ^T
16eb0 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
16ec0 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e  t max() function
16ed0 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72   searches its ar
16ee0 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66  guments from lef
16ef0 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72  t to right.  for
16f00 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61   an argument tha
16f10 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  t defines a coll
16f20 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61  ating function a
16f30 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c  nd uses that col
16f40 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f  lating.  functio
16f50 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
16f60 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
16f70 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61  If none of the a
16f80 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28  rguments to max(
16f90 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c  ).  define a col
16fa0 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c  lating function,
16fb0 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59   then the BINARY
16fc0 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
16fd0 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e  ion is used..  N
16fe0 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28  ote that <b>max(
16ff0 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
17000 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
17010 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
17020 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
17030 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a   operates as an.
17040 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20    [minAggFunc | 
17050 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17060 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c  on] if given onl
17070 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  y a single argum
17080 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ent..}..funcdef 
17090 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  {min(X,Y,...)} {
170a0 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69  *minCoreFunc *mi
170b0 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e  n {min() SQL fun
170c0 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
170d0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
170e0 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  min() function r
170f0 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
17100 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20 20 6d  ent with the.  m
17110 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20  inimum value..  
17120 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
17130 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69  ent min() functi
17140 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73 20  on searches its 
17150 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c  arguments from l
17160 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66  eft to right.  f
17170 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74  or an argument t
17180 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  hat defines a co
17190 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
171a0 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63   and uses that c
171b0 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74  ollating.  funct
171c0 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
171d0 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  ng comparisons. 
171e0 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65   ^If none of the
171f0 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69   arguments to mi
17200 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63  n().  define a c
17210 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
17220 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41  n, then the BINA
17230 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  RY collating fun
17240 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20  ction is used.. 
17250 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69   Note that <b>mi
17260 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d  n()</b> is a sim
17270 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65  ple function whe
17280 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20  n.  it has 2 or 
17290 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62  more arguments b
172a0 75 74 20 6f 70 65 72 61 74 65 73 20 61 73 20 61  ut operates as a
172b0 6e 20 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e 63  n .  [maxAggFunc
172c0 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e   | aggregate fun
172d0 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a  ction] if given.
172e0 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20    only a single 
172f0 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e  argument..}..fun
17300 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59  cdef {nullif(X,Y
17310 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e  )} {} {.  ^The n
17320 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74  ullif(X,Y) funct
17330 69 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20  ion returns its 
17340 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
17350 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
17360 61 72 65 0a 20 20 64 69 66 66 65 72 65 6e 74 20  are.  different 
17370 61 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68 65 20  and NULL if the 
17380 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68  arguments are th
17390 65 20 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75  e same.  ^The nu
173a0 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69  llif(X,Y) functi
173b0 6f 6e 0a 20 20 73 65 61 72 63 68 65 73 20 69 74  on.  searches it
173c0 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  s arguments from
173d0 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 66   left to right f
173e0 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74  or an argument t
173f0 68 61 74 20 64 65 66 69 6e 65 73 20 61 0a 20 20  hat defines a.  
17400 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
17410 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74  on and uses that
17420 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
17430 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
17440 6e 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73  ng.  comparisons
17450 2e 20 20 5e 49 66 20 6e 65 69 74 68 65 72 20 61  .  ^If neither a
17460 72 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69  rgument to nulli
17470 66 28 29 20 64 65 66 69 6e 65 73 20 61 20 63 6f  f() defines a co
17480 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
17490 0a 20 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41  .  then the BINA
174a0 52 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66  RY is used..}..f
174b0 75 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29  uncdef {quote(X)
174c0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75  } {} {.  ^The qu
174d0 6f 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ote(X) function 
174e0 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
174f0 20 77 68 69 63 68 20 69 73 20 74 68 65 20 76 61   which is the va
17500 6c 75 65 20 6f 66 0a 20 20 69 74 73 20 61 72 67  lue of.  its arg
17510 75 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66  ument suitable f
17520 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74  or inclusion int
17530 6f 20 61 6e 6f 74 68 65 72 20 53 51 4c 20 73 74  o another SQL st
17540 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69  atement..  ^Stri
17550 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75 6e 64  ngs are surround
17560 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f  ed by single-quo
17570 74 65 73 20 77 69 74 68 20 65 73 63 61 70 65 73  tes with escapes
17580 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71 75 6f   on interior quo
17590 74 65 73 0a 20 20 61 73 20 6e 65 65 64 65 64 2e  tes.  as needed.
175a0 20 20 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e 63    ^BLOBs are enc
175b0 6f 64 65 64 20 61 73 20 68 65 78 61 64 65 63 69  oded as hexadeci
175c0 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 7d 0a  mal literals..}.
175d0 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d  .funcdef {random
175e0 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  ()} {} {.  ^The 
175f0 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69 6f  random() functio
17600 6e 20 72 65 74 75 72 6e 73 20 61 20 70 73 65 75  n returns a pseu
17610 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65  do-random intege
17620 72 0a 20 20 62 65 74 77 65 65 6e 20 2d 39 32 32  r.  between -922
17630 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
17640 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30 33 36   and +9223372036
17650 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a 66 75  854775807..}..fu
17660 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f  ncdef {randomblo
17670 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  b(N)} {} {.  ^Th
17680 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20  e randomblob(N) 
17690 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 20  function return 
176a0 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62 20 63  an N-byte blob c
176b0 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65 75 64 6f  ontaining pseudo
176c0 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65 73 2e  -random.  bytes.
176d0 20 5e 49 66 20 4e 20 69 73 20 6c 65 73 73 20 74   ^If N is less t
176e0 68 61 6e 20 31 20 74 68 65 6e 20 61 20 31 2d 62  han 1 then a 1-b
176f0 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f 62 20  yte random blob 
17700 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 20 20  is returned...  
17710 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69 63  <p>Hint:  applic
17720 61 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65 72  ations can gener
17730 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e 69  ate globally uni
17740 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 73 0a  que identifiers.
17750 20 20 75 73 69 6e 67 20 74 68 69 73 20 66 75 6e    using this fun
17760 63 74 69 6f 6e 20 74 6f 67 65 74 68 65 72 20 77  ction together w
17770 69 74 68 20 5b 68 65 78 28 29 5d 20 61 6e 64 2f  ith [hex()] and/
17780 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20 6c  or.  [lower()] l
17790 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20  ike this:</p>.. 
177a0 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20   <blockquote>.  
177b0 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31  hex(randomblob(1
177c0 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c  6))<br></br>.  l
177d0 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f 6d 62  ower(hex(randomb
177e0 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f 62 6c  lob(16))).  </bl
177f0 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e  ockquote>.}..fun
17800 63 64 65 66 20 7b 72 65 70 6c 61 63 65 28 58 2c  cdef {replace(X,
17810 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  Y,Z)} {} {.  ^Th
17820 65 20 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29  e replace(X,Y,Z)
17830 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
17840 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
17850 64 20 62 79 20 73 75 62 73 74 69 74 75 74 69 6e  d by substitutin
17860 67 0a 20 20 73 74 72 69 6e 67 20 5a 20 66 6f 72  g.  string Z for
17870 20 65 76 65 72 79 20 6f 63 63 75 72 72 65 6e 63   every occurrenc
17880 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20 69 6e  e of string Y in
17890 20 73 74 72 69 6e 67 20 58 2e 20 20 5e 54 68 65   string X.  ^The
178a0 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c   [BINARY].  coll
178b0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
178c0 73 20 75 73 65 64 20 66 6f 72 20 63 6f 6d 70 61  s used for compa
178d0 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59 20 69  risons.  ^If Y i
178e0 73 20 61 6e 20 65 6d 70 74 79 0a 20 20 73 74 72  s an empty.  str
178f0 69 6e 67 20 74 68 65 6e 20 72 65 74 75 72 6e 20  ing then return 
17900 58 20 75 6e 63 68 61 6e 67 65 64 2e 20 20 5e 49  X unchanged.  ^I
17910 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  f Z is not initi
17920 61 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e 67 2c  ally.  a string,
17930 20 69 74 20 69 73 20 63 61 73 74 20 74 6f 20 61   it is cast to a
17940 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 72   UTF-8 string pr
17950 69 6f 72 20 74 6f 20 70 72 6f 63 65 73 73 69 6e  ior to processin
17960 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  g..}..funcdef {r
17970 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64 28 58 2c  ound(X) round(X,
17980 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
17990 72 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e 63 74  round(X,Y) funct
179a0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
179b0 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
179c0 69 6f 6e 20 6f 66 20 74 68 65 20 66 6c 6f 61 74  ion of the float
179d0 69 6e 67 2d 70 6f 69 6e 74 0a 20 20 76 61 6c 75  ing-point.  valu
179e0 65 20 58 20 72 6f 75 6e 64 65 64 20 74 6f 20 59  e X rounded to Y
179f0 20 64 69 67 69 74 73 20 74 6f 20 74 68 65 20 72   digits to the r
17a00 69 67 68 74 20 6f 66 20 74 68 65 20 64 65 63 69  ight of the deci
17a10 6d 61 6c 20 70 6f 69 6e 74 2e 0a 20 20 5e 49 66  mal point..  ^If
17a20 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20   the Y argument 
17a30 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 20  is omitted, the 
17a40 58 20 76 61 6c 75 65 20 69 73 20 74 72 75 6e 63  X value is trunc
17a50 61 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  ated to an integ
17a60 65 72 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  er..}..funcdef {
17a70 72 74 72 69 6d 28 58 29 20 72 74 72 69 6d 28 58  rtrim(X) rtrim(X
17a80 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
17a90 20 72 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63   rtrim(X,Y) func
17aa0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
17ab0 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
17ac0 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64  removing any and
17ad0 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72   all.  character
17ae0 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
17af0 20 59 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68   Y from the righ
17b00 74 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e  t side of X..  ^
17b10 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
17b20 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 72 74  t is omitted, rt
17b30 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73  rim(X) removes s
17b40 70 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20 72  paces from the r
17b50 69 67 68 74 0a 20 20 73 69 64 65 20 6f 66 20 58  ight.  side of X
17b60 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 6f  ..}..funcdef {so
17b70 75 6e 64 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20  undex(X)} {} {. 
17b80 20 5e 54 68 65 20 73 6f 75 6e 64 65 78 28 58 29   ^The soundex(X)
17b90 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
17ba0 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
17bb0 69 73 20 74 68 65 20 73 6f 75 6e 64 65 78 20 65  is the soundex e
17bc0 6e 63 6f 64 69 6e 67 20 0a 20 20 6f 66 20 74 68  ncoding .  of th
17bd0 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 54  e string X..  ^T
17be0 68 65 20 73 74 72 69 6e 67 20 22 3f 30 30 30 22  he string "?000"
17bf0 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
17c00 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  the argument is 
17c10 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74 61 69 6e 73  NULL or contains
17c20 0a 20 20 6e 6f 20 41 53 43 49 49 20 61 6c 70 68  .  no ASCII alph
17c30 61 62 65 74 69 63 20 63 68 61 72 61 63 74 65 72  abetic character
17c40 73 2e 0a 20 20 5e 28 54 68 69 73 20 66 75 6e 63  s..  ^(This func
17c50 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64 20  tion is omitted 
17c60 66 72 6f 6d 20 53 51 4c 69 74 65 20 62 79 20 64  from SQLite by d
17c70 65 66 61 75 6c 74 2e 0a 20 20 49 74 20 69 73 20  efault..  It is 
17c80 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69  only available i
17c90 66 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 53 4f  f the [SQLITE_SO
17ca0 55 4e 44 45 58 5d 20 63 6f 6d 70 69 6c 65 2d 74  UNDEX] compile-t
17cb0 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20  ime option.  is 
17cc0 75 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74 65  used when SQLite
17cd0 20 69 73 20 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a   is built.)^.}..
17ce0 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f  funcdef {sqlite_
17cf0 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
17d00 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  t(N)} {} {.  ^Th
17d10 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65  e sqlite_compile
17d20 6f 70 74 69 6f 6e 5f 67 65 74 28 29 20 53 51 4c  option_get() SQL
17d30 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
17d40 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
17d50 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  e.  [sqlite3_com
17d60 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29  pileoption_get()
17d70 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e  ] C/C++ function
17d80 2e 0a 20 20 5e 54 68 69 73 20 72 6f 75 74 69 6e  ..  ^This routin
17d90 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 4e 2d  e returns the N-
17da0 74 68 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  th compile-time 
17db0 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 62  option used to b
17dc0 75 69 6c 64 20 53 51 4c 69 74 65 0a 20 20 6f 72  uild SQLite.  or
17dd0 20 4e 55 4c 4c 20 69 66 20 4e 20 69 73 20 6f 75   NULL if N is ou
17de0 74 20 6f 66 20 72 61 6e 67 65 2e 20 20 53 65 65  t of range.  See
17df0 20 61 6c 73 6f 20 74 68 65 20 5b 63 6f 6d 70 69   also the [compi
17e00 6c 65 5f 6f 70 74 69 6f 6e 73 20 70 72 61 67 6d  le_options pragm
17e10 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  a]..}..funcdef {
17e20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
17e30 74 69 6f 6e 5f 75 73 65 64 28 58 29 7d 20 7b 7d  tion_used(X)} {}
17e40 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65   {.  ^The sqlite
17e50 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
17e60 73 65 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69  sed() SQL functi
17e70 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
17e80 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71  around the.  [sq
17e90 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
17ea0 69 6f 6e 5f 75 73 65 64 28 29 5d 20 43 2f 43 2b  ion_used()] C/C+
17eb0 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 57  + function..  ^W
17ec0 68 65 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74  hen the argument
17ed0 20 58 20 74 6f 20 73 71 6c 69 74 65 5f 63 6f 6d   X to sqlite_com
17ee0 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
17ef0 58 29 20 69 73 20 61 20 73 74 72 69 6e 67 20 77  X) is a string w
17f00 68 69 63 68 0a 20 20 69 73 20 74 68 65 20 6e 61  hich.  is the na
17f10 6d 65 20 6f 66 20 61 20 63 6f 6d 70 69 6c 65 2d  me of a compile-
17f20 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 69  time option, thi
17f30 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
17f40 73 20 74 72 75 65 20 28 31 29 20 6f 72 0a 20 20  s true (1) or.  
17f50 66 61 6c 73 65 20 28 30 29 20 64 65 70 65 6e 64  false (0) depend
17f60 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f  ing on whether o
17f70 72 20 6e 6f 74 20 74 68 61 74 20 6f 70 74 69 6f  r not that optio
17f80 6e 20 77 61 73 20 75 73 65 64 20 64 75 72 69 6e  n was used durin
17f90 67 20 74 68 65 0a 20 20 62 75 69 6c 64 2e 0a 7d  g the.  build..}
17fa0 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74  ..funcdef {sqlit
17fb0 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 7d 20 7b  e_source_id()} {
17fc0 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74  } {.  ^The sqlit
17fd0 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 66 75  e_source_id() fu
17fe0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
17ff0 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 64 65   string that ide
18000 6e 74 69 66 69 65 73 20 74 68 65 0a 20 20 73 70  ntifies the.  sp
18010 65 63 69 66 69 63 20 76 65 72 73 69 6f 6e 20 6f  ecific version o
18020 66 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64  f the source cod
18030 65 20 74 68 61 74 20 77 61 73 20 75 73 65 64 20  e that was used 
18040 74 6f 20 62 75 69 6c 64 20 74 68 65 20 53 51 4c  to build the SQL
18050 69 74 65 0a 20 20 6c 69 62 72 61 72 79 2e 20 20  ite.  library.  
18060 5e 54 68 65 20 73 74 72 69 6e 67 20 72 65 74 75  ^The string retu
18070 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73  rned by sqlite_s
18080 6f 75 72 63 65 5f 69 64 28 29 20 62 65 67 69 6e  ource_id() begin
18090 73 20 77 69 74 68 0a 20 20 74 68 65 20 64 61 74  s with.  the dat
180a0 65 20 61 6e 64 20 74 69 6d 65 20 74 68 61 74 20  e and time that 
180b0 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20  the source code 
180c0 77 61 73 20 63 68 65 63 6b 65 64 20 69 6e 20 61  was checked in a
180d0 6e 64 20 69 73 20 66 6f 6c 6c 6f 77 73 20 62 79  nd is follows by
180e0 0a 20 20 61 6e 20 53 48 41 31 20 68 61 73 68 20  .  an SHA1 hash 
180f0 74 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64  that uniquely id
18100 65 6e 74 69 66 69 65 73 20 74 68 65 20 73 6f 75  entifies the sou
18110 72 63 65 20 74 72 65 65 2e 20 20 5e 54 68 69 73  rce tree.  ^This
18120 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a 20 20 61   function is.  a
18130 6e 20 53 51 4c 20 77 72 61 70 70 65 72 20 61 72  n SQL wrapper ar
18140 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
18150 33 5f 73 6f 75 72 63 65 69 64 28 29 5d 20 43 20  3_sourceid()] C 
18160 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
18170 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 76 65  ncdef {sqlite_ve
18180 72 73 69 6f 6e 28 29 7d 20 7b 7d 20 7b 0a 20 20  rsion()} {} {.  
18190 5e 54 68 65 20 73 71 6c 69 74 65 5f 76 65 72 73  ^The sqlite_vers
181a0 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ion() function r
181b0 65 74 75 72 6e 73 20 74 68 65 20 76 65 72 73 69  eturns the versi
181c0 6f 6e 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  on string for th
181d0 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61  e SQLite.  libra
181e0 72 79 20 74 68 61 74 20 69 73 20 72 75 6e 6e 69  ry that is runni
181f0 6e 67 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74  ng.  ^This funct
18200 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 0a 20 20  ion is an SQL.  
18210 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
18220 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 62 76  he [sqlite3_libv
18230 65 72 73 69 6f 6e 28 29 5d 20 43 2d 69 6e 74 65  ersion()] C-inte
18240 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  rface..}..funcde
18250 66 20 7b 73 75 62 73 74 72 28 58 2c 59 2c 5a 29  f {substr(X,Y,Z)
18260 20 73 75 62 73 74 72 28 58 2c 59 29 7d 20 7b 7d   substr(X,Y)} {}
18270 20 7b 0a 20 20 5e 54 68 65 20 73 75 62 73 74 72   {.  ^The substr
18280 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e  (X,Y,Z) function
18290 20 72 65 74 75 72 6e 73 20 61 20 73 75 62 73 74   returns a subst
182a0 72 69 6e 67 20 6f 66 20 69 6e 70 75 74 20 73 74  ring of input st
182b0 72 69 6e 67 20 58 20 74 68 61 74 20 62 65 67 69  ring X that begi
182c0 6e 73 0a 20 20 77 69 74 68 20 74 68 65 20 59 2d  ns.  with the Y-
182d0 74 68 20 63 68 61 72 61 63 74 65 72 20 61 6e 64  th character and
182e0 20 77 68 69 63 68 20 69 73 20 5a 20 63 68 61 72   which is Z char
182f0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a 20 20 5e  acters long..  ^
18300 49 66 20 5a 20 69 73 20 6f 6d 69 74 74 65 64 20  If Z is omitted 
18310 74 68 65 6e 20 73 75 62 73 74 72 28 58 2c 59 29  then substr(X,Y)
18320 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 63 68 61   returns all cha
18330 72 61 63 74 65 72 73 20 74 68 72 6f 75 67 68 20  racters through 
18340 74 68 65 20 65 6e 64 0a 20 20 6f 66 20 74 68 65  the end.  of the
18350 20 73 74 72 69 6e 67 20 58 20 62 65 67 69 6e 6e   string X beginn
18360 69 6e 67 20 77 69 74 68 20 74 68 65 20 59 2d 74  ing with the Y-t
18370 68 2e 0a 20 20 5e 54 68 65 20 6c 65 66 74 2d 6d  h..  ^The left-m
18380 6f 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  ost character of
18390 20 58 20 69 73 20 6e 75 6d 62 65 72 20 31 2e 20   X is number 1. 
183a0 20 5e 49 66 20 59 20 69 73 20 6e 65 67 61 74 69   ^If Y is negati
183b0 76 65 0a 20 20 74 68 65 6e 20 74 68 65 20 66 69  ve.  then the fi
183c0 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  rst character of
183d0 20 74 68 65 20 73 75 62 73 74 72 69 6e 67 20 69   the substring i
183e0 73 20 66 6f 75 6e 64 20 62 79 20 63 6f 75 6e 74  s found by count
183f0 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a 20 20 72  ing from the.  r
18400 69 67 68 74 20 72 61 74 68 65 72 20 74 68 61 6e  ight rather than
18410 20 74 68 65 20 6c 65 66 74 2e 20 20 5e 49 66 20   the left.  ^If 
18420 5a 20 69 73 20 6e 65 67 61 74 69 76 65 20 74 68  Z is negative th
18430 65 6e 0a 20 20 74 68 65 20 61 62 73 28 5a 29 20  en.  the abs(Z) 
18440 63 68 61 72 61 63 74 65 72 73 20 70 72 65 63 65  characters prece
18450 64 69 6e 67 20 74 68 65 20 59 2d 74 68 20 63 68  ding the Y-th ch
18460 61 72 61 63 74 65 72 20 61 72 65 20 72 65 74 75  aracter are retu
18470 72 6e 65 64 2e 0a 20 20 5e 49 66 20 58 20 69 73  rned..  ^If X is
18480 20 61 20 73 74 72 69 6e 67 20 74 68 65 6e 20 63   a string then c
18490 68 61 72 61 63 74 65 72 73 20 69 6e 64 69 63 65  haracters indice
184a0 73 20 72 65 66 65 72 20 74 6f 20 61 63 74 75 61  s refer to actua
184b0 6c 20 55 54 46 2d 38 20 0a 20 20 63 68 61 72 61  l UTF-8 .  chara
184c0 63 74 65 72 73 2e 20 20 5e 49 66 20 58 20 69 73  cters.  ^If X is
184d0 20 61 20 42 4c 4f 42 20 74 68 65 6e 20 74 68 65   a BLOB then the
184e0 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
184f0 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66 75 6e 63  o bytes..}..func
18500 64 65 66 20 7b 74 6f 74 61 6c 5f 63 68 61 6e 67  def {total_chang
18510 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  es()} {} {.  ^Th
18520 65 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  e total_changes(
18530 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
18540 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
18550 20 72 6f 77 20 63 68 61 6e 67 65 73 0a 20 20 63   row changes.  c
18560 61 75 73 65 64 20 62 79 20 49 4e 53 45 52 54 2c  aused by INSERT,
18570 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
18580 45 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 20 73  E.  statements s
18590 69 6e 63 65 20 74 68 65 20 63 75 72 72 65 6e 74  ince the current
185a0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
185b0 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64 2e  tion was opened.
185c0 0a 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f  .  ^This functio
185d0 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  n is a wrapper a
185e0 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
185f0 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
18600 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 69 6e 74 65  ()].  C/C++ inte
18610 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  rface..}..funcde
18620 66 20 7b 74 72 69 6d 28 58 29 20 74 72 69 6d 28  f {trim(X) trim(
18630 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
18640 65 20 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63  e trim(X,Y) func
18650 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
18660 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
18670 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64  removing any and
18680 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72   all.  character
18690 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
186a0 20 59 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64   Y from both end
186b0 73 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68  s of X..  ^If th
186c0 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
186d0 6f 6d 69 74 74 65 64 2c 20 74 72 69 6d 28 58 29  omitted, trim(X)
186e0 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20   removes spaces 
186f0 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f  from both ends o
18700 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
18710 7b 74 79 70 65 6f 66 28 58 29 7d 20 7b 7d 20 7b  {typeof(X)} {} {
18720 0a 20 20 5e 54 68 65 20 74 79 70 65 6f 66 28 58  .  ^The typeof(X
18730 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
18740 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  ns a string that
18750 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 5b   indicates the [
18760 64 61 74 61 74 79 70 65 5d 20 6f 66 0a 20 20 74  datatype] of.  t
18770 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 58 3a  he expression X:
18780 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74 65 67 65   "null", "intege
18790 72 22 2c 20 22 72 65 61 6c 22 2c 20 22 74 65 78  r", "real", "tex
187a0 74 22 2c 20 6f 72 20 22 62 6c 6f 62 22 2e 0a 7d  t", or "blob"..}
187b0 0a 0a 66 75 6e 63 64 65 66 20 7b 75 70 70 65 72  ..funcdef {upper
187c0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
187d0 20 75 70 70 65 72 28 58 29 20 66 75 6e 63 74 69   upper(X) functi
187e0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
187f0 79 20 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e  y of input strin
18800 67 20 58 20 69 6e 20 77 68 69 63 68 20 61 6c 6c  g X in which all
18810 20 0a 20 20 6c 6f 77 65 72 2d 63 61 73 65 20 41   .  lower-case A
18820 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20  SCII characters 
18830 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  are converted to
18840 20 74 68 65 69 72 20 75 70 70 65 72 2d 63 61 73   their upper-cas
18850 65 20 65 71 75 69 76 61 6c 65 6e 74 2e 0a 7d 0a  e equivalent..}.
18860 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72 6f 62 6c  .funcdef {zerobl
18870 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ob(N)} {} {.  ^T
18880 68 65 20 7a 65 72 6f 62 6c 6f 62 28 4e 29 20 66  he zeroblob(N) f
18890 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
188a0 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74 69 6e  a BLOB consistin
188b0 67 20 6f 66 20 4e 20 62 79 74 65 73 20 6f 66 20  g of N bytes of 
188c0 30 78 30 30 2e 0a 20 20 53 51 4c 69 74 65 20 6d  0x00..  SQLite m
188d0 61 6e 61 67 65 73 20 74 68 65 73 65 20 7a 65 72  anages these zer
188e0 6f 62 6c 6f 62 73 20 76 65 72 79 20 65 66 66 69  oblobs very effi
188f0 63 69 65 6e 74 6c 79 2e 20 20 5a 65 72 6f 62 6c  ciently.  Zerobl
18900 6f 62 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  obs can be used 
18910 74 6f 0a 20 20 72 65 73 65 72 76 65 20 73 70 61  to.  reserve spa
18920 63 65 20 66 6f 72 20 61 20 42 4c 4f 42 20 74 68  ce for a BLOB th
18930 61 74 20 69 73 20 6c 61 74 65 72 20 77 72 69 74  at is later writ
18940 74 65 6e 20 75 73 69 6e 67 20 0a 20 20 5b 73 71  ten using .  [sq
18950 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f 70 65 6e 28  lite3_blob_open(
18960 29 20 7c 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ) | incremental 
18970 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 20 20 5e 54 68  BLOB I/O]..  ^Th
18980 69 73 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  is SQL function 
18990 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 75  is implemented u
189a0 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65  sing the [sqlite
189b0 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f  3_result_zeroblo
189c0 62 28 29 5d 0a 20 20 72 6f 75 74 69 6e 65 20 66  b()].  routine f
189d0 72 6f 6d 20 74 68 65 20 43 2f 43 2b 2b 20 69 6e  rom the C/C++ in
189e0 74 65 72 66 61 63 65 2e 0a 7d 0a 3c 2f 74 63 6c  terface..}.</tcl
189f0 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c  >.</table>..<tcl
18a00 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
18a10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a50 0a 53 65 63 74 69 6f 6e 20 7b 44 61 74 65 20 41  .Section {Date A
18a60 6e 64 20 54 69 6d 65 20 46 75 6e 63 74 69 6f 6e  nd Time Function
18a70 73 7d 20 64 61 74 65 66 75 6e 63 20 7b 2a 64 61  s} datefunc {*da
18a80 74 65 66 75 6e 63 7d 0a 68 64 5f 6b 65 79 77 6f  tefunc}.hd_keywo
18a90 72 64 73 20 7b 64 61 74 65 28 29 20 53 51 4c 20  rds {date() SQL 
18aa0 66 75 6e 63 74 69 6f 6e 7d 20 7b 74 69 6d 65 28  function} {time(
18ab0 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a  ) SQL function}.
18ac0 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74  hd_keywords {dat
18ad0 65 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63  etime() SQL func
18ae0 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e 64 61 79  tion} {julianday
18af0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
18b00 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 73 74  .hd_keywords {st
18b10 72 66 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e  rftime() SQL fun
18b20 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  ction}.</tcl>..<
18b30 70 3e 0a 53 51 4c 69 74 65 20 73 75 70 70 6f 72  p>.SQLite suppor
18b40 74 73 20 66 69 76 65 20 64 61 74 65 20 61 6e 64  ts five date and
18b50 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
18b60 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e  as follows:.</p>
18b70 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  ..<p>.<ol>.<li> 
18b80 5e 28 3c 62 3e 64 61 74 65 28 3c 2f 62 3e 3c 69  ^(<b>date(</b><i
18b90 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
18ba0 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
18bb0 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
18bc0 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28  )^ </li>.<li> ^(
18bd0 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74  <b>time(</b><i>t
18be0 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
18bf0 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
18c00 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e  ..</i><b>)</b>)^
18c10 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62   </li>.<li> ^(<b
18c20 3e 64 61 74 65 74 69 6d 65 28 3c 2f 62 3e 3c 69  >datetime(</b><i
18c30 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
18c40 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
18c50 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
18c60 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28  )^ </li>.<li> ^(
18c70 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28 3c 2f 62  <b>julianday(</b
18c80 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
18c90 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
18ca0 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
18cb0 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
18cc0 20 5e 28 3c 62 3e 73 74 72 66 74 69 6d 65 28 3c   ^(<b>strftime(<
18cd0 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c 20 74 69  /b><i>format, ti
18ce0 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
18cf0 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
18d00 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20  .</i><b>)</b>)^ 
18d10 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </li>.</ol>..<p>
18d20 0a 5e 41 6c 6c 20 66 69 76 65 20 64 61 74 65 20  .^All five date 
18d30 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
18d40 6e 73 20 74 61 6b 65 20 61 20 74 69 6d 65 20 73  ns take a time s
18d50 74 72 69 6e 67 20 61 73 20 61 6e 20 61 72 67 75  tring as an argu
18d60 6d 65 6e 74 2e 20 0a 5e 54 68 65 20 74 69 6d 65  ment. .^The time
18d70 20 73 74 72 69 6e 67 20 69 73 20 66 6f 6c 6c 6f   string is follo
18d80 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d  wed by zero or m
18d90 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 2e 20 0a  ore modifiers. .
18da0 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28 29 20  ^The strftime() 
18db0 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20 74 61  function also ta
18dc0 6b 65 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72  kes a format str
18dd0 69 6e 67 20 61 73 20 69 74 73 20 66 69 72 73 74  ing as its first
18de0 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a   argument..</p>.
18df0 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65 20 61 6e  .<p>.The date an
18e00 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
18e10 20 75 73 65 20 61 20 73 75 62 73 65 74 20 6f 66   use a subset of
18e20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
18e30 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 49  pedia.org/wiki/I
18e40 53 4f 5f 38 36 30 31 20 7c 20 49 53 30 2d 38 36  SO_8601 | IS0-86
18e50 30 31 5d 20 64 61 74 65 20 61 6e 64 20 74 69 6d  01] date and tim
18e60 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54 68 65 20  e.formats..^The 
18e70 64 61 74 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  date() function 
18e80 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 65  returns the date
18e90 20 69 6e 20 74 68 69 73 20 66 6f 72 6d 61 74 3a   in this format:
18ea0 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20 0a 5e 54   YYYY-MM-DD. .^T
18eb0 68 65 20 74 69 6d 65 28 29 20 66 75 6e 63 74 69  he time() functi
18ec0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 74  on returns the t
18ed0 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a 53 53 2e  ime as HH:MM:SS.
18ee0 20 0a 5e 54 68 65 20 64 61 74 65 74 69 6d 65 28   .^The datetime(
18ef0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
18f00 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48  ns "YYYY-MM-DD H
18f10 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28 54 68 65  H:MM:SS". .^(The
18f20 20 6a 75 6c 69 61 6e 64 61 79 28 29 20 66 75 6e   julianday() fun
18f30 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
18f40 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  e .[http://en.wi
18f50 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
18f60 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75  /Julian_day | Ju
18f70 6c 69 61 6e 20 64 61 79 5d 20 2d 20 74 68 65 0a  lian day] - the.
18f80 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73  number of days s
18f90 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20 47 72 65  ince noon in Gre
18fa0 65 6e 77 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62  enwich on Novemb
18fb0 65 72 20 32 34 2c 20 34 37 31 34 20 42 2e 43 2e  er 24, 4714 B.C.
18fc0 20 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69   .([http://en.wi
18fd0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
18fe0 2f 50 72 6f 6c 65 70 74 69 63 5f 47 72 65 67 6f  /Proleptic_Grego
18ff0 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20  rian_calendar | 
19000 50 72 6f 6c 65 70 74 69 63 20 47 72 65 67 6f 72  Proleptic Gregor
19010 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 29 2e 29  ian calendar]).)
19020 5e 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28  ^.^The strftime(
19030 29 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  ) routine return
19040 73 20 74 68 65 20 64 61 74 65 20 66 6f 72 6d 61  s the date forma
19050 74 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  tted according t
19060 6f 20 0a 74 68 65 20 66 6f 72 6d 61 74 20 73 74  o .the format st
19070 72 69 6e 67 20 73 70 65 63 69 66 69 65 64 20 61  ring specified a
19080 73 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  s the first argu
19090 6d 65 6e 74 2e 0a 5e 54 68 65 20 66 6f 72 6d 61  ment..^The forma
190a0 74 20 73 74 72 69 6e 67 20 73 75 70 70 6f 72 74  t string support
190b0 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f  s the most commo
190c0 6e 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 20  n substitutions 
190d0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 0a 5b 68  found in the .[h
190e0 74 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e  ttp://opengroup.
190f0 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75 62 73 2f 30  org/onlinepubs/0
19100 30 37 39 30 38 37 39 39 2f 78 73 68 2f 73 74 72  07908799/xsh/str
19110 66 74 69 6d 65 2e 68 74 6d 6c 20 7c 20 73 74 72  ftime.html | str
19120 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  ftime() function
19130 5d 0a 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64  ].from the stand
19140 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 70 6c  ard C library pl
19150 75 73 20 74 77 6f 20 6e 65 77 20 73 75 62 73 74  us two new subst
19160 69 74 75 74 69 6f 6e 73 2c 20 25 66 20 61 6e 64  itutions, %f and
19170 20 25 4a 2e 0a 5e 28 54 68 65 20 66 6f 6c 6c 6f   %J..^(The follo
19180 77 69 6e 67 20 69 73 20 61 20 63 6f 6d 70 6c 65  wing is a comple
19190 74 65 20 6c 69 73 74 20 6f 66 20 76 61 6c 69 64  te list of valid
191a0 20 73 74 72 66 74 69 6d 65 28 29 20 73 75 62 73   strftime() subs
191b0 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a  titutions:.</p>.
191c0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
191d0 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20  able border="0" 
191e0 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20  cellpadding="0" 
191f0 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e  cellspacing="0">
19200 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77 69 64  .<tr><td><td wid
19210 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f 74 72  th="10"><td></tr
19220 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64 20 3c  >..<tr><td> %d <
19230 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 6d  td><td> day of m
19240 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c 74 64  onth: 00.<tr><td
19250 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20 66 72  > %f <td><td> fr
19260 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73  actional seconds
19270 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c 74 64  : SS.SSS.<tr><td
19280 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20 68 6f  > %H <td><td> ho
19290 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72 3e 3c  ur: 00-24 .<tr><
192a0 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64 3e 20  td> %j <td><td> 
192b0 64 61 79 20 6f 66 20 79 65 61 72 3a 20 30 30 31  day of year: 001
192c0 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a  -366.<tr><td> %J
192d0 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e   <td><td> Julian
192e0 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74 72 3e   day number.<tr>
192f0 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74 64 3e  <td> %m <td><td>
19300 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a 3c 74   month: 01-12.<t
19310 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e 3c 74  r><td> %M <td><t
19320 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d 35 39  d> minute: 00-59
19330 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c 74 64  .<tr><td> %s <td
19340 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20 73 69  ><td> seconds si
19350 6e 63 65 20 31 39 37 30 2d 30 31 2d 30 31 0a 3c  nce 1970-01-01.<
19360 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64 3e 3c  tr><td> %S <td><
19370 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30 30 2d  td> seconds: 00-
19380 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77 20 3c  59.<tr><td> %w <
19390 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 77  td><td> day of w
193a0 65 65 6b 20 30 2d 36 20 77 69 74 68 20 53 75 6e  eek 0-6 with Sun
193b0 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20  day==0.<tr><td> 
193c0 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65 65 6b  %W <td><td> week
193d0 20 6f 66 20 79 65 61 72 3a 20 30 30 2d 35 33 0a   of year: 00-53.
193e0 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74 64 3e  <tr><td> %Y <td>
193f0 3c 74 64 3e 20 79 65 61 72 3a 20 30 30 30 30 2d  <td> year: 0000-
19400 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 25  9999.<tr><td> %%
19410 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61   <td><td> %.</ta
19420 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ble>.</blockquot
19430 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e 6f 74 69  e>)^..<p>.^(Noti
19440 63 65 20 74 68 61 74 20 61 6c 6c 20 6f 74 68 65  ce that all othe
19450 72 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  r date and time 
19460 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 62 65  functions can be
19470 20 65 78 70 72 65 73 73 65 64 0a 69 6e 20 74 65   expressed.in te
19480 72 6d 73 20 6f 66 20 73 74 72 66 74 69 6d 65 28  rms of strftime(
19490 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ):.</p>..<blockq
194a0 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  uote>.<table bor
194b0 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64  der="0" cellpadd
194c0 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63  ing="0" cellspac
194d0 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64  ing="0">.<tr><td
194e0 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e  ><b>Function</b>
194f0 3c 74 64 20 77 69 64 74 68 3d 22 33 30 22 3e 3c  <td width="30"><
19500 74 64 3e 3c 62 3e 45 71 75 69 76 61 6c 65 6e 74  td><b>Equivalent
19510 20 73 74 72 66 74 69 6d 65 28 29 3c 2f 62 3e 0a   strftime()</b>.
19520 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 28  <tr><td>   date(
19530 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74  ...)      <td><t
19540 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59  d>  strftime('%Y
19550 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29 0a 3c 74  -%m-%d', ...).<t
19560 72 3e 3c 74 64 3e 20 20 20 74 69 6d 65 28 2e 2e  r><td>   time(..
19570 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e  .)      <td><td>
19580 20 20 73 74 72 66 74 69 6d 65 28 27 25 48 3a 25    strftime('%H:%
19590 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e  M:%S', ...).<tr>
195a0 3c 74 64 3e 20 20 20 64 61 74 65 74 69 6d 65 28  <td>   datetime(
195b0 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74 64 3e 20 20  ...)  <td><td>  
195c0 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d  strftime('%Y-%m-
195d0 25 64 20 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e  %d %H:%M:%S', ..
195e0 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 6a 75  .).<tr><td>   ju
195f0 6c 69 61 6e 64 61 79 28 2e 2e 2e 29 20 3c 74 64  lianday(...) <td
19600 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
19610 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62  '%J', ...).</tab
19620 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
19630 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20 6f 6e 6c  >)^..<p>.The onl
19640 79 20 72 65 61 73 6f 6e 73 20 66 6f 72 20 70 72  y reasons for pr
19650 6f 76 69 64 69 6e 67 20 66 75 6e 63 74 69 6f 6e  oviding function
19660 73 20 6f 74 68 65 72 20 74 68 61 6e 20 73 74 72  s other than str
19670 66 74 69 6d 65 28 29 20 69 73 0a 66 6f 72 20 63  ftime() is.for c
19680 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e 64 20 66  onvenience and f
19690 6f 72 20 65 66 66 69 63 69 65 6e 63 79 2e 0a 3c  or efficiency..<
196a0 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65 20 53 74  /p>..<h3>Time St
196b0 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  rings</h3>..<p>^
196c0 28 41 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63  (A time string c
196d0 61 6e 20 62 65 20 69 6e 20 61 6e 79 20 6f 66 20  an be in any of 
196e0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f  the following fo
196f0 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  rmats:</p>..<ol>
19700 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
19710 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  -DD</i>.<li> <i>
19720 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
19730 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
19740 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
19750 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
19760 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
19770 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  .SSS</i>.<li> <i
19780 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
19790 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c  b>T</b><i>HH:MM<
197a0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
197b0 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
197c0 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69  b><i>HH:MM:SS</i
197d0 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
197e0 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e  M-DD</i><b>T</b>
197f0 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  <i>HH:MM:SS.SSS<
19800 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d  /i>.<li> <i>HH:M
19810 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  M</i>.<li> <i>HH
19820 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  :MM:SS</i>.<li> 
19830 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  <i>HH:MM:SS.SSS<
19840 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c  /i>.<li> <b>now<
19850 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44 44 44 44  /b>.<li> <i>DDDD
19860 44 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e  DDDDDD</i>.</ol>
19870 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66 6f 72 6d  )^..<p>.^In form
19880 61 74 73 20 35 20 74 68 72 6f 75 67 68 20 37 2c  ats 5 through 7,
19890 20 74 68 65 20 22 54 22 20 69 73 20 61 20 6c 69   the "T" is a li
198a0 74 65 72 61 6c 20 63 68 61 72 61 63 74 65 72 20  teral character 
198b0 73 65 70 61 72 61 74 69 6e 67 20 0a 74 68 65 20  separating .the 
198c0 64 61 74 65 20 61 6e 64 20 74 68 65 20 74 69 6d  date and the tim
198d0 65 2c 20 61 73 20 72 65 71 75 69 72 65 64 20 62  e, as required b
198e0 79 20 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 77  y .[http://www.w
198f0 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54 45 2d 64  3c.org/TR/NOTE-d
19900 61 74 65 74 69 6d 65 20 7c 20 49 53 4f 2d 38 36  atetime | ISO-86
19910 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74 73 20 38  01]. .^Formats 8
19920 20 74 68 72 6f 75 67 68 20 31 30 20 74 68 61 74   through 10 that
19930 20 73 70 65 63 69 66 79 20 6f 6e 6c 79 20 61 20   specify only a 
19940 74 69 6d 65 20 61 73 73 75 6d 65 20 61 20 64 61  time assume a da
19950 74 65 20 6f 66 20 0a 32 30 30 30 2d 30 31 2d 30  te of .2000-01-0
19960 31 2e 20 46 6f 72 6d 61 74 20 31 31 2c 20 74 68  1. Format 11, th
19970 65 20 73 74 72 69 6e 67 20 27 6e 6f 77 27 2c 20  e string 'now', 
19980 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  is converted int
19990 6f 20 74 68 65 20 0a 63 75 72 72 65 6e 74 20 64  o the .current d
199a0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 61 73 20  ate and time as 
199b0 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68  obtained from th
199c0 65 20 78 43 75 72 72 65 6e 74 54 69 6d 65 20 6d  e xCurrentTime m
199d0 65 74 68 6f 64 0a 6f 66 20 74 68 65 20 5b 73 71  ethod.of the [sq
199e0 6c 69 74 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63  lite3_vfs] objec
199f0 74 20 69 6e 20 75 73 65 2e 0a 5e 5b 68 74 74 70  t in use..^[http
19a00 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
19a10 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69 6e  org/wiki/Coordin
19a20 61 74 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f 54  ated_Universal_T
19a30 69 6d 65 20 7c 20 55 6e 69 76 65 72 73 61 6c 20  ime | Universal 
19a40 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65  Coordinated Time
19a50 20 28 55 54 43 29 5d 20 69 73 20 75 73 65 64 2e   (UTC)] is used.
19a60 20 0a 5e 46 6f 72 6d 61 74 20 31 32 20 69 73 20   .^Format 12 is 
19a70 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  the .[http://en.
19a80 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
19a90 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20  ki/Julian_day | 
19aa0 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
19ab0 72 5d 0a 65 78 70 72 65 73 73 65 64 20 61 73 20  r].expressed as 
19ac0 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
19ad0 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68   value..</p>..<h
19ae0 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e  3>Modifiers</h3>
19af0 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73  ..<p>^The time s
19b00 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c  tring can be fol
19b10 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
19b20 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20   more modifiers 
19b30 74 68 61 74 20 0a 61 6c 74 65 72 20 64 61 74 65  that .alter date
19b40 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 45   and/or time. ^E
19b50 61 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20  ach modifier.is 
19b60 61 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  a transformation
19b70 20 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64   that is applied
19b80 20 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c   to the time val
19b90 75 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a  ue to its left..
19ba0 5e 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61  ^Modifiers are a
19bb0 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74  pplied from left
19bc0 20 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72   to right; order
19bd0 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e   is important..^
19be0 28 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d  (The available m
19bf0 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20  odifiers are as 
19c00 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f  follows.</p>..<o
19c10 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73  l>.<li> NNN days
19c20 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a  .<li> NNN hours.
19c30 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73  <li> NNN minutes
19c40 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73  .<li> NNN.NNNN s
19c50 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  econds.<li> NNN 
19c60 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  months.<li> NNN 
19c70 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74  years.<li> start
19c80 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73   of month.<li> s
19c90 74 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69  tart of year.<li
19ca0 3e 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c  > start of day.<
19cb0 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c  li> weekday N.<l
19cc0 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69  i> unixepoch.<li
19cd0 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e  > localtime.<li>
19ce0 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c   utc .</ol>)^..<
19cf0 70 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69 78  p>^The first six
19d00 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68   modifiers (1 th
19d10 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79  rough 6) .simply
19d20 20 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69   add the specifi
19d30 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  ed amount of tim
19d40 65 20 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e  e to the date an
19d50 64 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65  d time .specifie
19d60 64 20 62 79 20 74 68 65 20 70 72 65 63 65 64 69  d by the precedi
19d70 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e  ng timestring an
19d80 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 4e 6f  d modifiers..^No
19d90 74 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d 6e  te that "&plusmn
19da0 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72  ;NNN months" wor
19db0 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67 20  ks by rendering 
19dc0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
19dd0 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d  e into.the YYYY-
19de0 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61 64  MM-DD format, ad
19df0 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d 6e  ding the &plusmn
19e00 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d  ;NNN to the MM m
19e10 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65 6e  onth value, then
19e20 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65  .normalizing the
19e30 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c   result.  ^Thus,
19e40 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   for example, th
19e50 65 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d 33  e data 2001-03-3
19e60 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27 2b  1 modified.by '+
19e70 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c  1 month' initial
19e80 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d 30  ly yields 2001-0
19e90 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c 20  4-31, but April 
19ea0 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79 73  only has 30 days
19eb0 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69 73 20  .so the date is 
19ec0 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30  normalized to 20
19ed0 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73 69  01-05-01.  ^A si
19ee0 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63  milar effect occ
19ef0 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69  urs when.the ori
19f00 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65  ginal date is Fe
19f10 62 72 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c  bruary 29 of a l
19f20 65 61 70 79 65 61 72 20 61 6e 64 20 74 68 65 20  eapyear and the 
19f30 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75  modifier is.&plu
19f40 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72  smn;N years wher
19f50 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c  e N is not a mul
19f60 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f  tiple of four.</
19f70 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61  p>..<p>^The "sta
19f80 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73  rt of" modifiers
19f90 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73   (7 through 9) s
19fa0 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61  hift the date ba
19fb0 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20  ckwards .to the 
19fc0 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
19fd0 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20   current month, 
19fe0 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e  year or day.</p>
19ff0 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b 64  ..<p>^The "weekd
1a000 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76  ay" modifier adv
1a010 61 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66  ances the date f
1a020 6f 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65  orward to the ne
1a030 78 74 20 64 61 74 65 20 0a 77 68 65 72 65 20 74  xt date .where t
1a040 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65  he weekday numbe
1a050 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69  r is N. Sunday i
1a060 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31  s 0, Monday is 1
1a070 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c  , and so forth.<
1a080 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75 6e  /p>..<p>^The "un
1a090 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
1a0a0 72 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b  r (11) only work
1a0b0 73 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74  s if it immediat
1a0c0 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74  ely follows .a t
1a0d0 69 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65  imestring in the
1a0e0 20 44 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d   DDDDDDDDDD form
1a0f0 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69 66  at. .^This modif
1a100 69 65 72 20 63 61 75 73 65 73 20 74 68 65 20 44  ier causes the D
1a110 44 44 44 44 44 44 44 44 44 20 74 6f 20 62 65 20  DDDDDDDDD to be 
1a120 69 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74 20  interpreted not 
1a130 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61 79  .as a Julian day
1a140 20 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e 6f   number as it no
1a150 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c  rmally would be,
1a160 20 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f 2f   but as.[http://
1a170 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1a180 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 20  /wiki/Unix_time 
1a190 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20 74  | Unix Time] - t
1a1a0 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65  he .number of se
1a1b0 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30  conds since 1970
1a1c0 2e 20 20 49 66 20 74 68 65 20 22 75 6e 69 78 65  .  If the "unixe
1a1d0 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 64  poch" modifier d
1a1e0 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61  oes not.follow a
1a1f0 20 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20 74   timestring of t
1a200 68 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44 44  he form DDDDDDDD
1a210 44 44 20 77 68 69 63 68 20 65 78 70 72 65 73 73  DD which express
1a220 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  es the number.of
1a230 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
1a240 39 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72 20  970 or if other 
1a250 6d 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72 61  modifiers.separa
1a260 74 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63  te the "unixepoc
1a270 68 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d  h" modifier from
1a280 20 70 72 69 6f 72 20 44 44 44 44 44 44 44 44 44   prior DDDDDDDDD
1a290 44 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61 76  D then the.behav
1a2a0 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ior is undefined
1a2b0 2e 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73 69  ..Due to precisi
1a2c0 6f 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 69  on limitations i
1a2d0 6d 70 6f 73 65 64 20 62 79 20 74 68 65 20 69 6d  mposed by the im
1a2e0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73  plementations us
1a2f0 65 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74 65  e.of 64-bit inte
1a300 67 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78 65  gers, the "unixe
1a310 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f  poch" modifier o
1a320 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61  nly works for.da
1a330 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30  tes between 0000
1a340 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20  -01-01 00:00:00 
1a350 61 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31  and 5352-11-01 1
1a360 30 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69  0:52:47 (unix ti
1a370 6d 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39  mes.of -62167219
1a380 32 30 30 20 74 68 72 6f 75 67 68 20 31 30 36 37  200 through 1067
1a390 35 31 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c  5199167).</p>..<
1a3a0 70 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d  p>^The "localtim
1a3b0 65 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29  e" modifier (12)
1a3c0 20 61 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d   assumes the tim
1a3d0 65 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20  e string to its 
1a3e0 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65  left is in.Unive
1a3f0 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64  rsal Coordinated
1a400 20 54 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20   Time (UTC) and 
1a410 61 64 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65  adjusts the time
1a420 0a 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20  .string so that 
1a430 69 74 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61  it displays loca
1a440 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61  ltime.  If "loca
1a450 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61  ltime".follows a
1a460 20 74 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f   time that is no
1a470 74 20 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20  t UTC, then the 
1a480 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
1a490 66 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74  fined..^(The "ut
1a4a0 63 22 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69  c" is the opposi
1a4b0 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65  te of "localtime
1a4c0 22 2e 20 20 22 75 74 63 22 20 61 73 73 75 6d 65  ".  "utc" assume
1a4d0 73 20 74 68 61 74 20 74 68 65 20 73 74 72 69 6e  s that the strin
1a4e0 67 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73  g.to its left is
1a4f0 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69   in the local ti
1a500 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73  mezone and adjus
1a510 74 73 20 74 68 61 74 20 73 74 72 69 6e 67 20 74  ts that string t
1a520 6f 20 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49  o be in UTC.)^.I
1a530 66 20 74 68 65 20 70 72 69 6f 72 20 73 74 72 69  f the prior stri
1a540 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63  ng is not in loc
1a550 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65  altime, then the
1a560 20 72 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22   result of "utc"
1a570 20 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f   is.undefined.</
1a580 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73  p>..<h3>Examples
1a590 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  </h3>..^(<p>Comp
1a5a0 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ute the current 
1a5b0 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b  date.<p>..<block
1a5c0 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74  quote>SELECT dat
1a5d0 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b  e('now');</block
1a5e0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1a5f0 6f 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74 20  ompute the last 
1a600 64 61 79 20 6f 66 20 74 68 65 20 63 75 72 72 65  day of the curre
1a610 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c  nt month.</p>..<
1a620 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43  blockquote>SELEC
1a630 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74  T date('now','st
1a640 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b  art of month','+
1a650 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79  1 month','-1 day
1a660 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
1a670 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
1a680 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74  e the date and t
1a690 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78  ime given a unix
1a6a0 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39   timestamp 10929
1a6b0 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  41466.</p>..<blo
1a6c0 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c  ckquote>.    SEL
1a6d0 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39  ECT datetime(109
1a6e0 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70  2941466, 'unixep
1a6f0 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  och');.</blockqu
1a700 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1a710 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e  pute the date an
1a720 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75  d time given a u
1a730 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30  nix timestamp 10
1a740 39 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63  92941466, and .c
1a750 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f  ompensate for yo
1a760 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e  ur local timezon
1a770 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e.</p>..<blockqu
1a780 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61  ote>.  SELECT da
1a790 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36  tetime(109294146
1a7a0 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20  6, 'unixepoch', 
1a7b0 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f  'localtime');.</
1a7c0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1a7d0 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1a7e0 63 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d  current unix tim
1a7f0 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c  estamp.</p>..<bl
1a800 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1a810 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27  CT strftime('%s'
1a820 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  ,'now');.</block
1a830 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1a840 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65  ompute the numbe
1a850 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20  r of days since 
1a860 74 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20 74  the signing of t
1a870 68 65 20 55 53 20 44 65 63 6c 61 72 61 74 69 6f  he US Declaratio
1a880 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e 63  n.of Independenc
1a890 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e.</p>..<blockqu
1a8a0 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75  ote>.  SELECT ju
1a8b0 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d  lianday('now') -
1a8c0 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36   julianday('1776
1a8d0 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63  -07-04');.</bloc
1a8e0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1a8f0 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  Compute the numb
1a900 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
1a910 6e 63 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  nce a particular
1a920 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a   moment in 2004:
1a930 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1a940 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66  e>.  SELECT strf
1a950 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29  time('%s','now')
1a960 20 2d 20 73 74 72 66 74 69 6d 65 28 27 25 73 27   - strftime('%s'
1a970 2c 27 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a  ,'2004-01-01 02:
1a980 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  34:56');.</block
1a990 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a  quote>)^..^(<p>.
1a9a0 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65  Compute the date
1a9b0 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 54 75   of the first Tu
1a9c0 65 73 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72  esday in October
1a9d0 0a 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74  .for the current
1a9e0 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c   year..</p>..<bl
1a9f0 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1aa00 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73  CT date('now','s
1aa10 74 61 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b  tart of year','+
1aa20 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64  9 months','weekd
1aa30 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  ay 2');.</blockq
1aa40 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
1aa50 6d 70 75 74 65 20 74 68 65 20 74 69 6d 65 20 73  mpute the time s
1aa60 69 6e 63 65 20 74 68 65 20 75 6e 69 78 20 65 70  ince the unix ep
1aa70 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a  och in seconds .
1aa80 28 6c 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27  (like strftime('
1aa90 25 73 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70  %s','now') excep
1aaa0 74 20 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74  t includes fract
1aab0 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e  ional part):</p>
1aac0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1aad0 20 53 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64   SELECT (juliand
1aae0 61 79 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30  ay('now') - 2440
1aaf0 35 38 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a  587.5)*86400.0;.
1ab00 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1ab10 0a 3c 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64  .<h3>Caveats And
1ab20 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54   Bugs</h3>..<p>T
1ab30 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f  he computation o
1ab40 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70  f local time dep
1ab50 65 6e 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20  ends heavily on 
1ab60 74 68 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c  the whim .of pol
1ab70 69 74 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20  iticians and is 
1ab80 74 68 75 73 20 64 69 66 66 69 63 75 6c 74 20 74  thus difficult t
1ab90 6f 20 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f  o get correct fo
1aba0 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20  r .all locales. 
1abb0 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65  ^In this impleme
1abc0 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 73 74 61  ntation, the sta
1abd0 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 20  ndard C library 
1abe0 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74  .function localt
1abf0 69 6d 65 5f 72 28 29 20 69 73 20 75 73 65 64 20  ime_r() is used 
1ac00 74 6f 20 61 73 73 69 73 74 20 69 6e 20 74 68 65  to assist in the
1ac10 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20   calculation of 
1ac20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28  .local time.  ^(
1ac30 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72  The .localtime_r
1ac40 28 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f  () C function no
1ac50 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b  rmally only work
1ac60 73 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77  s for years.betw
1ac70 65 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33  een 1970 and 203
1ac80 37 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74  7. For dates out
1ac90 73 69 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c  side this range,
1aca0 20 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74   SQLite .attempt
1acb0 73 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61  s to map the yea
1acc0 72 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61  r into an equiva
1acd0 6c 65 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e  lent year within
1ace0 20 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f   .this range, do
1acf0 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e   the calculation
1ad00 2c 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79  , then map the y
1ad10 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a  ear back.)^</p>.
1ad20 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20 66 75 6e  ..<p>^(These fun
1ad30 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  ctions only work
1ad40 20 66 6f 72 20 64 61 74 65 73 20 62 65 74 77 65   for dates betwe
1ad50 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30  en 0000-01-01 00
1ad60 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d  :00:00.and 9999-
1ad70 31 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 20 28  12-31 23:59:59 (
1ad80 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d 62  julidan day numb
1ad90 65 72 73 20 31 37 32 31 30 35 39 2e 35 20 74 68  ers 1721059.5 th
1ada0 72 6f 75 67 68 20 35 33 37 33 34 38 34 2e 35 29  rough 5373484.5)
1adb0 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f 75  .)^.For dates ou
1adc0 74 73 69 64 65 20 74 68 61 74 20 72 61 6e 67 65  tside that range
1add0 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  , the results of
1ade0 20 74 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73   these.functions
1adf0 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c   are undefined.<
1ae00 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74  /p>..<p>Non-Vist
1ae10 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f  a Windows platfo
1ae20 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74  rms only support
1ae30 20 6f 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20   one set of DST 
1ae40 72 75 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e  rules. .Vista on
1ae50 6c 79 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e  ly supports two.
1ae60 20 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74   Therefore, on t
1ae70 68 65 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20  hese platforms, 
1ae80 0a 68 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20  .historical DST 
1ae90 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c  calculations wil
1aea0 6c 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20  l be incorrect. 
1aeb0 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e  .For example, in
1aec0 20 74 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37   the US, in 2007
1aed0 20 74 68 65 20 44 53 54 20 72 75 6c 65 73 20 63   the DST rules c
1aee0 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73  hanged. .Non-Vis
1aef0 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66  ta Windows platf
1af00 6f 72 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e  orms apply the n
1af10 65 77 20 32 30 30 37 20 44 53 54 20 72 75 6c 65  ew 2007 DST rule
1af20 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f  s .to all previo
1af30 75 73 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c  us years as well
1af40 2e 20 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d  . Vista does som
1af50 65 77 68 61 74 20 62 65 74 74 65 72 0a 67 65 74  ewhat better.get
1af60 74 69 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72  ting results cor
1af70 72 65 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38  rect back to 198
1af80 36 2c 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65  6, when the rule
1af90 73 20 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e  s were also chan
1afa0 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c  ged.</p>..<p>All
1afb0 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74   internal comput
1afc0 61 74 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68  ations assume th
1afd0 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  e .[http://en.wi
1afe0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1aff0 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e  /Gregorian_calen
1b000 64 61 72 20 7c 20 47 72 65 67 6f 72 69 61 6e 20  dar | Gregorian 
1b010 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d  calendar].system
1b020 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73  .  It is also as
1b030 73 75 6d 65 64 20 74 68 61 74 20 65 76 65 72 79  sumed that every
1b040 0a 64 61 79 20 69 73 20 65 78 61 63 74 6c 79 20  .day is exactly 
1b050 38 36 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e  86400 seconds in
1b060 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   duration.</p>..
1b070 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1b080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b0a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b0b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b0c0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67  ####.Section {Ag
1b0d0 67 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e  gregate Function
1b0e0 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67  s} aggfunc {*agg
1b0f0 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  func}.</tcl>..<p
1b100 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74 65 20  >.The aggregate 
1b110 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20  functions shown 
1b120 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61  below are availa
1b130 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ble by default. 
1b140 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72   Additional.aggr
1b150 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
1b160 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79  written in C may
1b170 20 62 65 20 61 64 64 65 64 20 75 73 69 6e 67 20   be added using 
1b180 74 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72  the .[sqlite3_cr
1b190 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
1b1a0 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c  </a>.API.</p>..<
1b1b0 70 3e 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72 65  p>.^In any aggre
1b1c0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68  gate function th
1b1d0 61 74 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c  at takes a singl
1b1e0 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74  e argument, that
1b1f0 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65   argument.can be
1b200 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65   preceded by the
1b210 20 6b 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43   keyword DISTINC
1b220 54 2e 20 20 5e 49 6e 20 73 75 63 68 20 63 61 73  T.  ^In such cas
1b230 65 73 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c  es, duplicate.el
1b240 65 6d 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65  ements are filte
1b250 72 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67  red before being
1b260 20 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65   passed into the
1b270 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1b280 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c  ion..^For exampl
1b290 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  e, the function 
1b2a0 22 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  "count(distinct 
1b2b0 58 29 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  X)" will return 
1b2c0 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69  the number.of di
1b2d0 73 74 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66  stinct values of
1b2e0 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61   column X instea
1b2f0 64 20 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e  d of the total n
1b300 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c  umber of non-nul
1b310 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75  l.values in colu
1b320 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62  mn X..</p>..<tab
1b330 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
1b340 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c  padding=10>.<tcl
1b350 3e 0a 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58  >.funcdef {avg(X
1b360 29 7d 20 7b 2a 61 76 67 20 7b 61 76 67 28 29 20  )} {*avg {avg() 
1b370 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1b380 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76  on}} {.  ^The av
1b390 67 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  g() function.  r
1b3a0 65 74 75 72 6e 73 20 74 68 65 20 61 76 65 72 61  eturns the avera
1b3b0 67 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20  ge value of all 
1b3c0 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69  non-NULL <i>X</i
1b3d0 3e 20 77 69 74 68 69 6e 20 61 0a 20 20 67 72 6f  > within a.  gro
1b3e0 75 70 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e 64  up.  ^String and
1b3f0 20 42 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61   BLOB values tha
1b400 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69  t do not look li
1b410 6b 65 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20  ke numbers are. 
1b420 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
1b430 30 2e 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74  0..  ^The result
1b440 20 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c 77   of avg() is alw
1b450 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  ays a floating p
1b460 6f 69 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f  oint value as lo
1b470 6e 67 20 61 73 0a 20 20 61 74 20 74 68 65 72 65  ng as.  at there
1b480 20 69 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65   is at least one
1b490 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20   non-NULL input 
1b4a0 65 76 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e  even if all.  in
1b4b0 70 75 74 73 20 61 72 65 20 69 6e 74 65 67 65 72  puts are integer
1b4c0 73 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20  s.  ^The result 
1b4d0 6f 66 20 61 76 67 28 29 20 69 73 20 4e 55 4c 4c  of avg() is NULL
1b4e0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a   if and only if.
1b4f0 20 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e    there are no n
1b500 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20  on-NULL inputs. 
1b510 20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f   .}..funcdef {co
1b520 75 6e 74 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d  unt(X) count(*)}
1b530 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28   {*count {count(
1b540 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1b550 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
1b560 63 6f 75 6e 74 28 58 29 20 66 75 6e 63 74 69 6f  count(X) functio
1b570 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20 63 6f  n returns.  a co
1b580 75 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  unt of the numbe
1b590 72 20 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61  r of times.  tha
1b5a0 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f  t <i>X</i> is no
1b5b0 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75  t NULL in a grou
1b5c0 70 2e 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a  p.  ^The count(*
1b5d0 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69  ) function.  (wi
1b5e0 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29  th no arguments)
1b5f0 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74   returns the tot
1b600 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  al number of row
1b610 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
1b620 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75  }..funcdef {grou
1b630 70 5f 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75  p_concat(X) grou
1b640 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b  p_concat(X,Y)} {
1b650 0a 20 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74  .  *group_concat
1b660 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29   {group_concat()
1b670 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1b680 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20  ion}.} {.  ^The 
1b690 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 66  group_concat() f
1b6a0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a  unction returns.
1b6b0 20 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68    a string which
1b6c0 20 69 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e   is the concaten
1b6d0 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e  ation of.  all n
1b6e0 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f  on-NULL values o
1b6f0 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66  f <i>X</i>.  ^If
1b700 20 70 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c   parameter <i>Y<
1b710 2f 69 3e 20 69 73 20 70 72 65 73 65 6e 74 20 74  /i> is present t
1b720 68 65 6e 0a 20 20 69 74 20 69 73 20 75 73 65 64  hen.  it is used
1b730 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74 6f   as the separato
1b740 72 0a 20 20 62 65 74 77 65 65 6e 20 69 6e 73 74  r.  between inst
1b750 61 6e 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69  ances of <i>X</i
1b760 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c  >.  ^A comma (",
1b770 22 29 20 69 73 20 75 73 65 64 20 61 73 20 74 68  ") is used as th
1b780 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 69 66  e separator.  if
1b790 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69   <i>Y</i> is omi
1b7a0 74 74 65 64 2e 20 20 54 68 65 20 6f 72 64 65 72  tted.  The order
1b7b0 20 6f 66 20 74 68 65 20 63 6f 6e 63 61 74 65 6e   of the concaten
1b7c0 61 74 65 64 20 65 6c 65 6d 65 6e 74 73 20 69 73  ated elements is
1b7d0 0a 20 20 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a  .  arbitrary..}.
1b7e0 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 29  .funcdef {max(X)
1b7f0 7d 20 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a  } {*maxAggFunc *
1b800 61 67 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61  agg_max {max() a
1b810 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1b820 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78  n}} {.  ^The max
1b830 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1b840 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20  ction.  returns 
1b850 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  the maximum valu
1b860 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20  e of all values 
1b870 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
1b880 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c  ^The maximum val
1b890 75 65 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ue is the value 
1b8a0 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65  that would be re
1b8b0 74 75 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61  turned last in a
1b8c0 6e 0a 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20  n.  ORDER BY on 
1b8d0 74 68 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e  the same column.
1b8e0 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 61 78    ^Aggregate max
1b8f0 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20  () returns NULL 
1b900 0a 20 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  .  if and only i
1b910 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e  f there are no n
1b920 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  on-NULL values i
1b930 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a  n the group..}..
1b940 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d  funcdef {min(X)}
1b950 20 7b 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61   {*minAggFunc *a
1b960 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67  gg_min {min() ag
1b970 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1b980 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28  }} {.  ^The min(
1b990 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1b9a0 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74  tion.  returns t
1b9b0 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e  he minimum non-N
1b9c0 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  ULL value of all
1b9d0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
1b9e0 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e  roup..  ^The min
1b9f0 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68  imum value is th
1ba00 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c  e first non-NULL
1ba10 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c   value that woul
1ba20 64 20 61 70 70 65 61 72 0a 20 20 69 6e 20 61 6e  d appear.  in an
1ba30 20 4f 52 44 45 52 20 42 59 20 6f 66 20 74 68 65   ORDER BY of the
1ba40 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72   column..  ^Aggr
1ba50 65 67 61 74 65 20 6d 69 6e 28 29 20 72 65 74 75  egate min() retu
1ba60 72 6e 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20  rns NULL if and 
1ba70 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61 72  only if there ar
1ba80 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20  e no non-NULL.  
1ba90 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
1baa0 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  oup..}..funcdef 
1bab0 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c 28 58 29  {sum(X) total(X)
1bac0 7d 20 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a  } {.  *sumFunc *
1bad0 73 75 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75  sum *total.  {su
1bae0 6d 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  m() aggregate fu
1baf0 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c  nction}.  {total
1bb00 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1bb10 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68  ction}.} {.  ^Th
1bb20 65 20 73 75 6d 28 29 20 61 6e 64 20 74 6f 74 61  e sum() and tota
1bb30 6c 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  l() aggregate fu
1bb40 6e 63 74 69 6f 6e 73 0a 20 20 72 65 74 75 72 6e  nctions.  return
1bb50 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d   sum of all non-
1bb60 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74  NULL values in t
1bb70 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66 20  he group..  ^If 
1bb80 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
1bb90 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73  -NULL input rows
1bba0 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75   then sum() retu
1bbb0 72 6e 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74  rns.  NULL but t
1bbc0 6f 74 61 6c 28 29 20 72 65 74 75 72 6e 73 20 30  otal() returns 0
1bbd0 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f  .0..  NULL is no
1bbe0 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c  t normally a hel
1bbf0 70 66 75 6c 20 72 65 73 75 6c 74 20 66 6f 72 20  pful result for 
1bc00 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f  the sum of no ro
1bc10 77 73 0a 20 20 62 75 74 20 74 68 65 20 53 51 4c  ws.  but the SQL
1bc20 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72   standard requir
1bc30 65 73 20 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f  es it and most o
1bc40 74 68 65 72 0a 20 20 53 51 4c 20 64 61 74 61 62  ther.  SQL datab
1bc50 61 73 65 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c  ase engines impl
1bc60 65 6d 65 6e 74 20 73 75 6d 28 29 20 74 68 61 74  ement sum() that
1bc70 20 77 61 79 20 73 6f 20 53 51 4c 69 74 65 20 64   way so SQLite d
1bc80 6f 65 73 20 69 74 20 69 6e 20 74 68 65 0a 20 20  oes it in the.  
1bc90 73 61 6d 65 20 77 61 79 20 69 6e 20 6f 72 64 65  same way in orde
1bca0 72 20 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62  r to be compatib
1bcb0 6c 65 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74  le.   The non-st
1bcc0 61 6e 64 61 72 64 20 74 6f 74 61 6c 28 29 20 66  andard total() f
1bcd0 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f  unction.  is pro
1bce0 76 69 64 65 64 20 61 73 20 61 20 63 6f 6e 76 65  vided as a conve
1bcf0 6e 69 65 6e 74 20 77 61 79 20 74 6f 20 77 6f 72  nient way to wor
1bd00 6b 20 61 72 6f 75 6e 64 20 74 68 69 73 20 64 65  k around this de
1bd10 73 69 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69  sign problem.  i
1bd20 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61  n the SQL langua
1bd30 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54  ge.</p>..  <p>^T
1bd40 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 6f 74  he result of tot
1bd50 61 6c 28 29 20 69 73 20 61 6c 77 61 79 73 20 61  al() is always a
1bd60 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
1bd70 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72 65  value..  ^The re
1bd80 73 75 6c 74 20 6f 66 20 73 75 6d 28 29 20 69 73  sult of sum() is
1bd90 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
1bda0 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  e if all non-NUL
1bdb0 4c 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74  L inputs are int
1bdc0 65 67 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e 79  egers..  ^If any
1bdd0 20 69 6e 70 75 74 20 74 6f 20 73 75 6d 28 29 20   input to sum() 
1bde0 69 73 20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e  is neither an in
1bdf0 74 65 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a  teger or a NULL.
1be00 20 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74    then sum() ret
1be10 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  urns a floating 
1be20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20 77 68  point value.  wh
1be30 69 63 68 20 6d 69 67 68 74 20 62 65 20 61 6e 20  ich might be an 
1be40 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f  approximation to
1be50 20 74 68 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f   the true sum.</
1be60 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29 20  p>..  <p>^Sum() 
1be70 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22 69  will throw an "i
1be80 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 22  nteger overflow"
1be90 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6c   exception if al
1bea0 6c 20 69 6e 70 75 74 73 0a 20 20 61 72 65 20 69  l inputs.  are i
1beb0 6e 74 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a  ntegers or NULL.
1bec0 20 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72    and an integer
1bed0 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73   overflow occurs
1bee0 20 61 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75   at any point du
1bef0 72 69 6e 67 20 74 68 65 20 63 6f 6d 70 75 74 61  ring the computa
1bf00 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28 29  tion..  ^Total()
1bf10 20 6e 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e   never throws an
1bf20 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f   integer overflo
1bf30 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61  w..}.</tcl>.</ta
1bf40 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  ble>..<tcl>.####
1bf50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bf60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bf70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bf80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bf90 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
1bfa0 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72 74  on INSERT insert
1bfb0 20 7b 49 4e 53 45 52 54 20 2a 49 4e 53 45 52 54   {INSERT *INSERT
1bfc0 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  s}..BubbleDiagra
1bfd0 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 20 31 0a  m insert-stmt 1.
1bfe0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49  </tcl>..<p>The I
1bff0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
1c000 63 6f 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62  comes in three b
1c010 61 73 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c 75  asic forms.  .<u
1c020 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 66  l>.<li><p>^The f
1c030 69 72 73 74 20 66 6f 72 6d 20 28 77 69 74 68 20  irst form (with 
1c040 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79  the "VALUES" key
1c050 77 6f 72 64 29 20 63 72 65 61 74 65 73 20 61 20  word) creates a 
1c060 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 69  single new row i
1c070 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  n.an existing ta
1c080 62 6c 65 2e 20 5e 49 66 20 6e 6f 20 63 6f 6c 75  ble. ^If no colu
1c090 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69  mn-list is speci
1c0a0 66 69 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75  fied then the nu
1c0b0 6d 62 65 72 20 6f 66 0a 76 61 6c 75 65 73 20 6d  mber of.values m
1c0c0 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
1c0d0 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
1c0e0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1c0f0 74 61 62 6c 65 2e 20 5e 49 6e 20 74 68 69 73 20  table. ^In this 
1c100 63 61 73 65 0a 74 68 65 20 72 65 73 75 6c 74 20  case.the result 
1c110 6f 66 20 65 76 61 6c 75 74 69 6e 67 20 74 68 65  of evaluting the
1c120 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65   left-most expre
1c130 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 56 41 4c  ssion in the VAL
1c140 55 45 53 20 6c 69 73 74 20 69 73 20 0a 69 6e 73  UES list is .ins
1c150 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 6c  erted into the l
1c160 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20  eft-most column 
1c170 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77 2c 20  of the new row, 
1c180 61 6e 64 20 73 6f 20 6f 6e 2e 20 5e 49 66 20 61  and so on. ^If a
1c190 0a 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20  .column-list is 
1c1a0 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
1c1b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61  the number of va
1c1c0 6c 75 65 73 20 6d 75 73 74 20 6d 61 74 63 68 20  lues must match 
1c1d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70  the number of.sp
1c1e0 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e  ecified columns.
1c1f0 20 5e 45 61 63 68 20 6f 66 20 74 68 65 20 6e 61   ^Each of the na
1c200 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  med columns of t
1c210 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f  he new row is po
1c220 70 75 6c 61 74 65 64 0a 77 69 74 68 20 74 68 65  pulated.with the
1c230 20 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c   results of eval
1c240 75 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65  uating the corre
1c250 73 70 6f 6e 64 69 6e 67 20 56 41 4c 55 45 53 20  sponding VALUES 
1c260 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 54 61 62  expression. ^Tab
1c270 6c 65 0a 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  le.columns that 
1c280 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e  do not appear in
1c290 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74   the column list
1c2a0 20 61 72 65 20 70 6f 70 75 6c 61 74 65 64 20 77   are populated w
1c2b0 69 74 68 20 74 68 65 20 64 65 66 61 75 6c 74 0a  ith the default.
1c2c0 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 28 73 70  column value (sp
1c2d0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
1c2e0 6f 66 20 74 68 65 20 43 52 45 41 54 45 20 54 41  of the CREATE TA
1c2f0 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 29 2c 20  BLE statement), 
1c300 6f 72 20 77 69 74 68 20 4e 55 4c 4c 20 69 66 0a  or with NULL if.
1c310 6e 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  no default value
1c320 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a   is specified...
1c330 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 65 63 6f 6e  <li><p>The secon
1c340 64 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e  d form of the IN
1c350 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63  SERT statement c
1c360 6f 6e 74 61 69 6e 73 20 61 20 53 45 4c 45 43 54  ontains a SELECT
1c370 20 73 74 61 74 65 6d 65 6e 74 0a 69 6e 73 74 65   statement.inste
1c380 61 64 20 6f 66 20 61 20 56 41 4c 55 45 53 20 63  ad of a VALUES c
1c390 6c 61 75 73 65 2e 20 5e 41 20 6e 65 77 20 65 6e  lause. ^A new en
1c3a0 74 72 79 20 69 73 20 69 6e 73 65 72 74 65 64 20  try is inserted 
1c3b0 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 66  into the table f
1c3c0 6f 72 20 65 61 63 68 0a 72 6f 77 20 6f 66 20 64  or each.row of d
1c3d0 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20  ata returned by 
1c3e0 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45  executing the SE
1c3f0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
1c400 5e 49 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73  ^If a column-lis
1c410 74 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20  t is.specified, 
1c420 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1c430 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73  lumns in the res
1c440 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43  ult of the SELEC
1c450 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  T must be the sa
1c460 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72  me.as the number
1c470 20 6f 66 20 69 74 65 6d 73 20 69 6e 20 74 68 65   of items in the
1c480 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 2e 20 5e 4f   column-list. ^O
1c490 74 68 65 72 77 69 73 65 2c 20 69 66 20 6e 6f 20  therwise, if no 
1c4a0 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73  column-list is.s
1c4b0 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75  pecified, the nu
1c4c0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1c4d0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  in the result of
1c4e0 20 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74   the SELECT must
1c4f0 20 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20   be the same.as 
1c500 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1c510 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
1c520 6c 65 2e 20 5e 41 6e 79 20 53 45 4c 45 43 54 20  le. ^Any SELECT 
1c530 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c 75  statement, inclu
1c540 64 69 6e 67 0a 63 6f 6d 70 6f 75 6e 64 20 53 45  ding.compound SE
1c550 4c 45 43 54 73 20 61 6e 64 20 53 45 4c 45 43 54  LECTs and SELECT
1c560 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
1c570 20 4f 52 44 45 52 20 42 59 20 61 6e 64 2f 6f 72   ORDER BY and/or
1c580 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 2c 20   LIMIT clauses, 
1c590 0a 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20  .may be used in 
1c5a0 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
1c5b0 65 6e 74 20 6f 66 20 74 68 69 73 20 66 6f 72 6d  ent of this form
1c5c0 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 74 68  ...<li><p>The th
1c5d0 69 72 64 20 66 6f 72 6d 20 6f 66 20 61 6e 20 49  ird form of an I
1c5e0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
1c5f0 69 73 20 77 69 74 68 20 44 45 46 41 55 4c 54 20  is with DEFAULT 
1c600 56 41 4c 55 45 53 2e 0a 5e 28 54 68 65 20 49 4e  VALUES..^(The IN
1c610 53 45 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54  SERT ... DEFAULT
1c620 20 56 41 4c 55 45 53 20 73 74 61 74 65 6d 65 6e   VALUES statemen
1c630 74 20 69 6e 73 65 72 74 73 20 61 20 73 69 6e 67  t inserts a sing
1c640 6c 65 20 6e 65 77 20 72 6f 77 20 69 6e 74 6f 20  le new row into 
1c650 74 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e  the.named table.
1c660 29 5e 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20  )^ ^Each column 
1c670 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69  of the new row i
1c680 73 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68  s populated with
1c690 20 69 74 73 20 64 65 66 61 75 6c 74 20 76 61 6c   its default val
1c6a0 75 65 2c 0a 6f 72 20 77 69 74 68 20 61 20 4e 55  ue,.or with a NU
1c6b0 4c 4c 20 69 66 20 6e 6f 20 64 65 66 61 75 6c 74  LL if no default
1c6c0 20 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66   value is specif
1c6d0 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
1c6e0 68 65 20 63 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69  he column.defini
1c6f0 74 69 6f 6e 20 69 6e 20 74 68 65 20 43 52 45 41  tion in the CREA
1c700 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
1c710 6e 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  nt...</ul>..<p>^
1c720 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e  The optional con
1c730 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c  flict-clause all
1c740 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63  ows the specific
1c750 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65  ation of an alte
1c760 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69  rnative.constrai
1c770 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  nt conflict reso
1c780 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
1c790 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74   to use during t
1c7a0 68 69 73 20 6f 6e 65 20 49 4e 53 45 52 54 20 63  his one INSERT c
1c7b0 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20  ommand..See the 
1c7c0 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 5b  section titled.[
1c7d0 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72  ON CONFLICT] for
1c7e0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
1c7f0 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d  rmation..For com
1c800 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
1c810 4d 79 53 51 4c 2c 20 5e 74 68 65 20 70 61 72 73  MySQL, ^the pars
1c820 65 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73  er allows the us
1c830 65 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20  e of the.single 
1c840 6b 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d  keyword <a href=
1c850 22 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68 74  "lang_replace.ht
1c860 6d 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e 20  ml">REPLACE</a> 
1c870 61 73 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f 72  as an .alias for
1c880 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c   "INSERT OR REPL
1c890 41 43 45 22 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  ACE"...<p>^(The 
1c8a0 6f 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 64 61 74  optional "<i>dat
1c8b0 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62  abase-name</i><b
1c8c0 3e 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78 20 6f  >.</b>" prefix o
1c8d0 6e 20 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e  n the <i>table-n
1c8e0 61 6d 65 3c 2f 69 3e 0a 69 73 20 73 75 70 70 6f  ame</i>.is suppo
1c8f0 72 74 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c  rt for top-level
1c900 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
1c910 74 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68 65  ts only.)^  ^The
1c920 20 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73 74   table name must
1c930 20 62 65 0a 75 6e 71 75 61 6c 69 66 69 65 64 20   be.unqualified 
1c940 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65  for INSERT state
1c950 6d 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72  ments that occur
1c960 20 77 69 74 68 69 6e 20 5b 43 52 45 41 54 45 20   within [CREATE 
1c970 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
1c980 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c  nts..^Similarly,
1c990 20 74 68 65 20 22 44 45 46 41 55 4c 54 20 56 41   the "DEFAULT VA
1c9a0 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68  LUES" form of th
1c9b0 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  e INSERT stateme
1c9c0 6e 74 20 69 73 20 73 75 70 70 6f 72 74 65 64 20  nt is supported 
1c9d0 66 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49 4e  for.top-level IN
1c9e0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20  SERT statements 
1c9f0 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f 72  only and not for
1ca00 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
1ca10 74 73 20 77 69 74 68 69 6e 0a 74 72 69 67 67 65  ts within.trigge
1ca20 72 73 2e 0a 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  rs..<p>..<tcl>.#
1ca30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca70 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1ca80 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49  ction {ON CONFLI
1ca90 43 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c  CT clause} confl
1caa0 69 63 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63  ict {{conflict c
1cab0 6c 61 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c  lause} {ON CONFL
1cac0 49 43 54 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  ICT}}..BubbleDia
1cad0 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  gram conflict-cl
1cae0 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause.</tcl>..<p>
1caf0 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
1cb00 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61 20  clause is not a 
1cb10 73 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f 6d  separate SQL com
1cb20 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a 6e  mand.  It is a.n
1cb30 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61 75  on-standard clau
1cb40 73 65 20 74 68 61 74 20 63 61 6e 20 61 70 70 65  se that can appe
1cb50 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72  ar in many other
1cb60 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49   SQL commands..I
1cb70 74 20 69 73 20 67 69 76 65 6e 20 69 74 73 20 6f  t is given its o
1cb80 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74 68  wn section in th
1cb90 69 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63 61  is document beca
1cba0 75 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70 61  use it is not.pa
1cbb0 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53  rt of standard S
1cbc0 51 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72 65  QL and therefore
1cbd0 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66 61   might not be fa
1cbe0 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  miliar.</p>..<p>
1cbf0 5e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20  ^The syntax for 
1cc00 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1cc10 63 6c 61 75 73 65 20 69 73 20 61 73 20 73 68 6f  clause is as sho
1cc20 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68 65  wn above for.the
1cc30 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
1cc40 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20 74 68 65  mmand.  ^For the
1cc50 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44 41   INSERT and.UPDA
1cc60 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65  TE commands, the
1cc70 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f   keywords "ON CO
1cc80 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65 70 6c  NFLICT" are repl
1cc90 61 63 65 64 20 62 79 20 22 4f 52 22 20 73 6f 20  aced by "OR" so 
1cca0 74 68 61 74 0a 74 68 65 20 73 79 6e 74 61 78 20  that.the syntax 
1ccb0 72 65 61 64 73 20 6d 6f 72 65 20 6e 61 74 75 72  reads more natur
1ccc0 61 6c 6c 79 2e 20 20 46 6f 72 20 65 78 61 6d 70  ally.  For examp
1ccd0 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22  le, instead of."
1cce0 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49  INSERT ON CONFLI
1ccf0 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61  CT IGNORE" we ha
1cd00 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47  ve "INSERT OR IG
1cd10 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f  NORE"..The keywo
1cd20 72 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74  rds change but t
1cd30 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
1cd40 65 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20  e clause is the 
1cd50 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e  same.either way.
1cd60 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20  </p>..<p>The ON 
1cd70 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1cd80 61 70 70 6c 69 65 73 20 74 6f 20 55 4e 49 51 55  applies to UNIQU
1cd90 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 0a 63  E and NOT NULL.c
1cda0 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6e 64 20  onstraints (and 
1cdb0 74 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  to PRIMARY KEY c
1cdc0 6f 6e 73 74 72 61 69 6e 74 73 20 77 68 69 63 68  onstraints which
1cdd0 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
1cde0 73 20 0a 6f 66 20 74 68 69 73 20 73 65 63 74 69  s .of this secti
1cdf0 6f 6e 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  on are the same 
1ce00 74 68 69 6e 67 20 61 73 20 55 4e 49 51 55 45 20  thing as UNIQUE 
1ce10 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 54 68  constraints)..Th
1ce20 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
1ce30 67 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74  gorithm does not
1ce40 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49  .apply to [FOREI
1ce50 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
1ce60 74 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66  ts]..There are f
1ce70 69 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ive conflict res
1ce80 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1ce90 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42  m choices:.ROLLB
1cea0 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c  ACK, ABORT, FAIL
1ceb0 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45  , IGNORE, and RE
1cec0 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61  PLACE..^The defa
1ced0 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
1cee0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1cef0 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69  m is ABORT.  Thi
1cf00 73 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d  s.is what they m
1cf10 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c  ean:</p>..<dl>.<
1cf20 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f  dt><b>ROLLBACK</
1cf30 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
1cf40 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
1cf50 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
1cf60 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
1cf70 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65   the ROLLBACK.re
1cf80 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
1cf90 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
1cfa0 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
1cfb0 65 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49  ent with.an SQLI
1cfc0 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
1cfd0 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61  ror and rolls ba
1cfe0 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
1cff0 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20  ransaction..^If 
1d000 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
1d010 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20  s.active (other 
1d020 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  than the implied
1d030 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61   transaction tha
1d040 74 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20  t is created on 
1d050 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74  every.command) t
1d060 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  hen the ROLLBACK
1d070 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1d080 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20  rithm works the 
1d090 73 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52  same as the.ABOR
1d0a0 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e  T algorithm.</p>
1d0b0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42  </dd>..<dt><b>AB
1d0c0 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORT</b></dt>.<dd
1d0d0 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
1d0e0 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
1d0f0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
1d100 63 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a  curs, the ABORT.
1d110 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
1d120 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
1d130 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
1d140 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51  ement.with an SQ
1d150 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 54 20 65  LITE_CONSTRAIT e
1d160 72 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20 6f  rror and backs o
1d170 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d  ut any changes.m
1d180 61 64 65 20 62 79 20 74 68 65 20 63 75 72 72 65  ade by the curre
1d190 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
1d1a0 3b 20 62 75 74 20 63 68 61 6e 67 65 73 20 63 61  ; but changes ca
1d1b0 75 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53 51  used.by prior SQ
1d1c0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  L statements wit
1d1d0 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61  hin the same tra
1d1e0 6e 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72 65  nsaction are pre
1d1f0 73 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a 74  served and the.t
1d200 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
1d210 6e 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73 20  ns active..This 
1d220 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  is the default b
1d230 65 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65 20  ehavior and the 
1d240 62 65 68 61 76 69 6f 72 20 70 72 6f 73 63 72 69  behavior proscri
1d250 62 65 64 20 74 68 65 20 53 51 4c 0a 73 74 61 6e  bed the SQL.stan
1d260 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  dard.</p></dd>..
1d270 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c  <dt><b>FAIL</b><
1d280 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
1d290 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65  en an applicable
1d2a0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1d2b0 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
1d2c0 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74 69 6f  e FAIL.resolutio
1d2d0 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72  n algorithm abor
1d2e0 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53  ts the current S
1d2f0 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74  QL statement wit
1d300 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e 53  h an.SQLITE_CONS
1d310 54 52 41 49 4e 54 20 65 72 72 6f 72 2e 20 20 5e  TRAINT error.  ^
1d320 42 75 74 20 74 68 65 20 46 41 49 4c 20 72 65 73  But the FAIL res
1d330 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  olution does not
1d340 0a 62 61 63 6b 20 6f 75 74 20 70 72 69 6f 72 20  .back out prior 
1d350 63 68 61 6e 67 65 73 20 6f 66 20 74 68 65 20 53  changes of the S
1d360 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  QL statement tha
1d370 74 20 66 61 69 6c 65 64 20 6e 6f 72 20 64 6f 65  t failed nor doe
1d380 73 0a 69 74 20 65 6e 64 20 74 68 65 20 74 72 61  s.it end the tra
1d390 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65  nsaction..^For e
1d3a0 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50  xample, if an UP
1d3b0 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65  DATE.statement e
1d3c0 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e  ncountered a con
1d3d0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
1d3e0 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72  n on the 100th r
1d3f0 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d  ow that.it attem
1d400 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74  pts to update, t
1d410 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 39 39  hen the first 99
1d420 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65   row changes are
1d430 20 70 72 65 73 65 72 76 65 64 0a 62 75 74 20 63   preserved.but c
1d440 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31  hanges to rows 1
1d450 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65  00 and beyond ne
1d460 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f  ver occur.</p></
1d470 64 64 3e 0a 0a 28 3c 64 74 3e 3c 62 3e 49 47 4e  dd>..(<dt><b>IGN
1d480 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORE</b></dt>.<dd
1d490 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
1d4a0 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
1d4b0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
1d4c0 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f 52  curs, .the IGNOR
1d4d0 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  E resolution alg
1d4e0 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74 68 65  orithm skips the
1d4f0 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f   one row that co
1d500 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74  ntains.the const
1d510 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
1d520 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 70 72  and continues pr
1d530 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65 71 75  ocessing subsequ
1d540 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68 65 20  ent rows.of the 
1d550 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 73  SQL statement as
1d560 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e 74   if nothing went
1d570 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72 6f   wrong..Other ro
1d580 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  ws before and af
1d590 74 65 72 20 74 68 65 20 72 6f 77 20 74 68 61 74  ter the row that
1d5a0 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63  .contained the c
1d5b0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
1d5c0 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74 65 64  ion are inserted
1d5d0 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d   or updated.norm
1d5e0 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72 20  ally. ^No error 
1d5f0 69 73 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  is returned when
1d600 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66   the IGNORE conf
1d610 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
1d620 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
1d630 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  d.</p></dd>..<dt
1d640 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c  ><b>REPLACE</b><
1d650 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
1d660 65 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  en a UNIQUE cons
1d670 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1d680 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50   occurs, the REP
1d690 4c 41 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a 64  LACE algorithm.d
1d6a0 65 6c 65 74 65 73 20 70 72 65 2d 65 78 69 73 74  eletes pre-exist
1d6b0 69 6e 67 20 72 6f 77 73 20 74 68 61 74 20 61 72  ing rows that ar
1d6c0 65 20 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f  e causing the co
1d6d0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1d6e0 6f 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73 65  on.prior to inse
1d6f0 72 74 69 6e 67 20 6f 72 20 75 70 64 61 74 69 6e  rting or updatin
1d700 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  g the current ro
1d710 77 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e  w and the comman
1d720 64 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78 65  d continues .exe
1d730 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e  cuting normally.
1d740 0a 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  .^If a NOT NULL 
1d750 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1d760 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
1d770 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
1d780 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 72 65 70  t.resolution rep
1d790 6c 61 63 65 73 20 74 68 65 20 4e 55 4c 4c 20 76  laces the NULL v
1d7a0 61 6c 75 65 20 77 69 74 68 0a 68 65 20 64 65 66  alue with.he def
1d7b0 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
1d7c0 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69  hat column, or i
1d7d0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73  f the column has
1d7e0 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75   no default.valu
1d7f0 65 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52  e, then the ABOR
1d800 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  T algorithm is u
1d810 73 65 64 2e 0a 5e 49 66 20 61 20 43 48 45 43 4b  sed..^If a CHECK
1d820 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1d830 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
1d840 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69  e REPLACE confli
1d850 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c  ct resolution.al
1d860 67 6f 72 69 74 68 6d 20 61 6c 77 61 79 73 20 77  gorithm always w
1d870 6f 72 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e  orks like ABORT.
1d880 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  </p>..<p>^When t
1d890 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
1d8a0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73  ict resolution s
1d8b0 74 72 61 74 65 67 79 20 64 65 6c 65 74 65 73 20  trategy deletes 
1d8c0 72 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  rows in order to
1d8d0 0a 73 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74  .satisfy a const
1d8e0 72 61 69 6e 74 2c 20 5b 43 52 45 41 54 45 20 54  raint, [CREATE T
1d8f0 52 49 47 47 45 52 20 7c 20 64 65 6c 65 74 65 20  RIGGER | delete 
1d900 74 72 69 67 67 65 72 73 5d 20 66 69 72 65 20 69  triggers] fire i
1d910 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72  f and only if.[r
1d920 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
1d930 73 20 70 72 61 67 6d 61 20 7c 20 72 65 63 75 72  s pragma | recur
1d940 73 69 76 65 20 74 72 69 67 67 65 72 73 5d 20 61  sive triggers] a
1d950 72 65 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a  re enabled.</p>.
1d960 0a 3c 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65  .<p>^The [sqlite
1d970 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20  3_update_hook | 
1d980 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20  update hook] is 
1d990 6e 6f 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20  not invoked for 
1d9a0 72 6f 77 73 20 74 68 61 74 0a 61 72 65 20 64 65  rows that.are de
1d9b0 6c 65 74 65 64 20 62 79 20 74 68 65 20 52 45 50  leted by the REP
1d9c0 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
1d9d0 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67  solution strateg
1d9e0 79 2e 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45  y.  ^Nor does.RE
1d9f0 50 4c 41 43 45 20 69 6e 63 72 65 6d 65 6e 74 20  PLACE increment 
1da00 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
1da10 6e 67 65 73 20 7c 20 63 68 61 6e 67 65 20 63 6f  nges | change co
1da20 75 6e 74 65 72 5d 2e 0a 54 68 65 20 65 78 63 65  unter]..The exce
1da30 70 74 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72  ptional behavior
1da40 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69  s defined in thi
1da50 73 20 70 61 72 61 67 72 61 70 68 20 6d 69 67 68  s paragraph migh
1da60 74 20 63 68 61 6e 67 65 20 0a 69 6e 20 61 20 66  t change .in a f
1da70 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f  uture release.</
1da80 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68  p>.</dl>..<p>^Th
1da90 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63  e algorithm spec
1daa0 69 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20  ified in the OR 
1dab0 63 6c 61 75 73 65 20 6f 66 20 61 20 49 4e 53 45  clause of a INSE
1dac0 52 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65  RT or UPDATE.ove
1dad0 72 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72  rrides any algor
1dae0 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69  ithm specified i
1daf0 6e 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  n a CREATE TABLE
1db00 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74  ..^If no algorit
1db10 68 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20  hm is specified 
1db20 61 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42  anywhere, the AB
1db30 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
1db40 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   used.</p>..<tcl
1db50 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
1db60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1db70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1db80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1db90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dba0 0a 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58  .Section REINDEX
1dbb0 20 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58   reindex REINDEX
1dbc0 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
1dbd0 72 65 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c  reindex-stmt 1.<
1dbe0 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  /tcl>..<p>^The R
1dbf0 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69  EINDEX command i
1dc00 73 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65  s used to delete
1dc10 20 61 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e   and recreate in
1dc20 64 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74  dices from scrat
1dc30 63 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66  ch..This is usef
1dc40 75 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66 69  ul when the defi
1dc50 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c  nition of a coll
1dc60 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68  ation sequence h
1dc70 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e  as changed..</p>
1dc80 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49  ..<p>^If the REI
1dc90 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20  NDEX keyword is 
1dca0 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  not followed by 
1dcb0 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75  a collation-sequ
1dcc0 65 6e 63 65 20 6f 72 20 64 61 74 61 62 61 73 65  ence or database
1dcd0 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e 74 69 66   .object identif
1dce0 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  ier, then all in
1dcf0 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74  dices in all att
1dd00 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
1dd10 61 72 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c 70  are rebuilt...<p
1dd20 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45 58  >^If the REINDEX
1dd30 20 6b 65 79 77 6f 72 64 20 69 73 20 66 6f 6c 6c   keyword is foll
1dd40 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74  owed by a collat
1dd50 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61 6d  ion-sequence nam
1dd60 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64 69  e, then.all indi
1dd70 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63  ces in all attac
1dd80 68 65 64 20 64 61 74 61 62 61 73 65 73 20 74 68  hed databases th
1dd90 61 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64  at use the named
1dda0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1ddb0 6e 63 65 73 0a 61 72 65 20 72 65 63 72 65 61 74  nces.are recreat
1ddc0 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69 66  ed. ..<p>^Or, if
1ddd0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 61 74   the argument at
1dde0 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 52 45  tached to the RE
1ddf0 49 4e 44 45 58 20 69 64 65 6e 74 69 66 69 65 73  INDEX identifies
1de00 20 61 20 73 70 65 63 69 66 69 63 20 0a 64 61 74   a specific .dat
1de10 61 62 61 73 65 20 74 61 62 6c 65 2c 20 74 68 65  abase table, the
1de20 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 61 74  n all indices at
1de30 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 64 61  tached to the da
1de40 74 61 62 61 73 65 20 74 61 62 6c 65 20 61 72 65  tabase table are
1de50 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20 69   rebuilt. .^If i
1de60 74 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 73  t identifies a s
1de70 70 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65  pecific database
1de80 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75 73   index, then jus
1de90 74 20 74 68 61 74 20 69 6e 64 65 78 20 69 73 20  t that index is 
1dea0 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e 5e  recreated...<p>^
1deb0 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61 73  If no <i>databas
1dec0 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73 70  e-name</i> is sp
1ded0 65 63 69 66 69 65 64 20 61 6e 64 20 74 68 65 72  ecified and ther
1dee0 65 20 65 78 69 73 74 73 20 62 6f 74 68 20 61 20  e exists both a 
1def0 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 61  table or.index a
1df00 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  nd a collation s
1df10 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 73  equence of the s
1df20 70 65 63 69 66 69 65 64 20 6e 61 6d 65 2c 20 53  pecified name, S
1df30 51 4c 69 74 65 20 69 6e 74 65 72 70 72 65 74 73  QLite interprets
1df40 0a 74 68 69 73 20 61 73 20 61 20 72 65 71 75 65  .this as a reque
1df50 73 74 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68  st to rebuild th
1df60 65 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 75  e indices that u
1df70 73 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c  se the named col
1df80 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e  lation sequence.
1df90 0a 54 68 69 73 20 61 6d 62 69 67 75 69 74 79 20  .This ambiguity 
1dfa0 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6d 61  in the syntax ma
1dfb0 79 20 62 65 20 61 76 6f 69 64 65 64 20 62 79 20  y be avoided by 
1dfc0 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69 6e  always specifyin
1dfd0 67 20 61 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  g a.<i>database-
1dfe0 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65  name</i> when re
1dff0 69 6e 64 65 78 69 6e 67 20 61 20 73 70 65 63 69  indexing a speci
1e000 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  fic table or ind
1e010 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ex...<tcl>.#####
1e020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e060 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
1e070 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61  on REPLACE repla
1e080 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63  ce REPLACE..</tc
1e090 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c  l>..<p>^The REPL
1e0a0 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61  ACE command is a
1e0b0 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
1e0c0 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20  "[ON CONFLICT | 
1e0d0 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43  INSERT OR REPLAC
1e0e0 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74  E]".variant of t
1e0f0 68 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d  he [INSERT] comm
1e100 61 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61  and.  .This alia
1e110 73 20 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f  s is provided fo
1e120 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
1e130 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
1e140 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65  se engines.  See
1e150 20 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63   the .[INSERT] c
1e160 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61  ommand documenta
1e170 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
1e180 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
1e190 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23  </p>  ..<tcl>.##
1e1a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e1b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e1c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e1d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e1e0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1e1f0 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c  ction SELECT sel
1e200 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72  ect {SELECT quer
1e210 79 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  y}..BubbleDiagra
1e220 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 20 31 0a  m select-stmt 1.
1e230 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65  BubbleDiagram se
1e240 6c 65 63 74 2d 63 6f 72 65 0a 42 75 62 62 6c 65  lect-core.Bubble
1e250 44 69 61 67 72 61 6d 20 72 65 73 75 6c 74 2d 63  Diagram result-c
1e260 6f 6c 75 6d 6e 0a 42 75 62 62 6c 65 44 69 61 67  olumn.BubbleDiag
1e270 72 61 6d 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a  ram join-source.
1e280 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
1e290 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 42 75 62 62  ngle-source.Bubb
1e2a0 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 6f  leDiagram join-o
1e2b0 70 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  p.BubbleDiagram 
1e2c0 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a  join-constraint.
1e2d0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6f 72  BubbleDiagram or
1e2e0 64 65 72 69 6e 67 2d 74 65 72 6d 0a 42 75 62 62  dering-term.Bubb
1e2f0 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75  leDiagram compou
1e300 6e 64 2d 6f 70 65 72 61 74 6f 72 0a 3c 2f 74 63  nd-operator.</tc
1e310 6c 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45  l>...<p>The SELE
1e320 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
1e330 75 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68  used to query th
1e340 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
1e350 0a 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c  .result of a SEL
1e360 45 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d  ECT is zero or m
1e370 6f 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61  ore rows of data
1e380 20 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a   where each row.
1e390 68 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62  has a fixed numb
1e3a0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20  er of columns.  
1e3b0 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20  ..<p>The SELECT 
1e3c0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65  statement is the
1e3d0 20 6d 6f 73 74 20 63 6f 6d 70 6c 69 63 61 74 65   most complicate
1e3e0 64 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65  d command in the
1e3f0 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 54   SQL language..T
1e400 6f 20 6d 61 6b 65 20 74 68 65 20 64 65 73 63 72  o make the descr
1e410 69 70 74 69 6f 6e 20 65 61 73 69 65 72 20 74 6f  iption easier to
1e420 20 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f 66   follow, some of
1e430 20 74 68 65 20 70 61 73 73 61 67 65 73 20 62 65   the passages be
1e440 6c 6f 77 20 64 65 73 63 72 69 62 65 0a 74 68 65  low describe.the
1e450 20 77 61 79 20 74 68 65 20 64 61 74 61 20 72 65   way the data re
1e460 74 75 72 6e 65 64 20 62 79 20 61 20 53 45 4c 45  turned by a SELE
1e470 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
1e480 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 61 20  determined as a 
1e490 73 65 72 69 65 73 20 6f 66 0a 73 74 65 70 73 2e  series of.steps.
1e4a0 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
1e4b0 20 74 6f 20 6b 65 65 70 20 69 6e 20 6d 69 6e 64   to keep in mind
1e4c0 20 74 68 61 74 20 74 68 69 73 20 69 73 20 70 75   that this is pu
1e4d0 72 65 6c 79 20 69 6c 6c 75 73 74 72 61 74 69 76  rely illustrativ
1e4e0 65 20 2d 0a 69 6e 20 70 72 61 63 74 69 63 65 20  e -.in practice 
1e4f0 6e 65 69 74 68 65 72 20 53 51 4c 69 74 65 20 6e  neither SQLite n
1e500 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c  or any other SQL
1e510 20 65 6e 67 69 6e 65 20 69 73 20 72 65 71 75 69   engine is requi
1e520 72 65 64 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a 74  red to follow .t
1e530 68 69 73 20 6f 72 20 61 6e 79 20 6f 74 68 65 72  his or any other
1e540 20 73 70 65 63 69 66 69 63 20 70 72 6f 63 65 73   specific proces
1e550 73 2e 0a 0a 3c 68 33 3e 53 69 6d 70 6c 65 20 53  s...<h3>Simple S
1e560 65 6c 65 63 74 20 50 72 6f 63 65 73 73 69 6e 67  elect Processing
1e570 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 79  </h3>..<p>The sy
1e580 6e 74 61 78 20 66 6f 72 20 61 20 73 69 6d 70 6c  ntax for a simpl
1e590 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1e5a0 6e 74 20 69 73 20 64 65 70 69 63 74 65 64 20 69  nt is depicted i
1e5b0 6e 20 74 68 65 20 0a 5b 73 65 6c 65 63 74 2d 63  n the .[select-c
1e5c0 6f 72 65 20 73 79 6e 74 61 78 20 64 69 61 67 72  ore syntax diagr
1e5d0 61 6d 5d 2e 20 47 65 6e 65 72 61 74 69 6e 67 20  am]. Generating 
1e5e0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  the results of a
1e5f0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73   simple SELECT.s
1e600 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 73  tatement is pres
1e610 65 6e 74 65 64 20 61 73 20 61 20 66 6f 75 72 20  ented as a four 
1e620 73 74 65 70 20 70 72 6f 63 65 73 73 20 69 6e 20  step process in 
1e630 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  the description 
1e640 62 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c  below:..<ol>.  <
1e650 6c 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61  li> <p>[FROM cla
1e660 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  use] processing:
1e670 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   The input data 
1e680 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53  for the simple S
1e690 45 4c 45 43 54 20 69 73 0a 20 20 20 20 20 20 20  ELECT is.       
1e6a0 64 65 74 65 72 6d 69 6e 65 64 2e 20 54 68 65 20  determined. The 
1e6b0 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 65 69  input data is ei
1e6c0 74 68 65 72 20 69 6d 70 6c 69 63 69 74 6c 79 20  ther implicitly 
1e6d0 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74  a single row wit
1e6e0 68 20 30 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d  h 0.       colum
1e6f0 6e 73 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ns (if there is 
1e700 6e 6f 20 46 52 4f 4d 20 63 6c 61 75 73 65 29 20  no FROM clause) 
1e710 6f 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  or is determined
1e720 20 62 79 20 61 6e 61 6c 79 7a 69 6e 67 20 74 68   by analyzing th
1e730 65 0a 20 20 20 20 20 20 20 5b 6a 6f 69 6e 2d 73  e.       [join-s
1e740 6f 75 72 63 65 20 73 79 6e 74 61 78 20 64 69 61  ource syntax dia
1e750 67 72 61 6d 7c 6a 6f 69 6e 2d 73 6f 75 72 63 65  gram|join-source
1e760 5d 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  ] specification 
1e770 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 0a 20 20  that follows .  
1e780 20 20 20 20 20 61 6e 20 65 78 70 6c 69 63 69 74       an explicit
1e790 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 20 20   FROM clause..  
1e7a0 3c 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20 63  <li> <p>[WHERE c
1e7b0 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e  lause] processin
1e7c0 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61 74  g: The input dat
1e7d0 61 20 69 73 20 66 69 6c 74 65 72 65 64 20 75 73  a is filtered us
1e7e0 69 6e 67 20 74 68 65 20 57 48 45 52 45 0a 20 20  ing the WHERE.  
1e7f0 20 20 20 20 20 63 6c 61 75 73 65 20 65 78 70 72       clause expr
1e800 65 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e  ession.  .  <li>
1e810 20 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47 52   <p>[GROUP BY|GR
1e820 4f 55 50 20 42 59 2c 20 48 41 56 49 4e 47 20 61  OUP BY, HAVING a
1e830 6e 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e  nd result-column
1e840 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 70 72 6f   expression] pro
1e850 63 65 73 73 69 6e 67 3a 20 0a 20 20 20 20 20 20  cessing: .      
1e860 20 54 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   The set of resu
1e870 6c 74 20 72 6f 77 73 20 69 73 20 63 6f 6d 70 75  lt rows is compu
1e880 74 65 64 20 62 79 20 61 67 67 72 65 67 61 74 69  ted by aggregati
1e890 6e 67 20 74 68 65 20 64 61 74 61 20 61 63 63 6f  ng the data acco
1e8a0 72 64 69 6e 67 20 74 6f 0a 20 20 20 20 20 20 20  rding to.       
1e8b0 61 6e 79 20 47 52 4f 55 50 20 42 59 20 63 6c 61  any GROUP BY cla
1e8c0 75 73 65 20 61 6e 64 20 63 61 6c 63 75 6c 61 74  use and calculat
1e8d0 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2d 73  ing the result-s
1e8e0 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 66  et expressions f
1e8f0 6f 72 20 74 68 65 0a 20 20 20 20 20 20 20 72 6f  or the.       ro
1e900 77 73 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72  ws of the filter
1e910 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74  ed input dataset
1e920 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44  .  .  <li> <p>[D
1e930 49 53 54 49 4e 43 54 7c 44 49 53 54 49 4e 43 54  ISTINCT|DISTINCT
1e940 2f 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70 72  /ALL keyword] pr
1e950 6f 63 65 73 73 69 6e 67 3a 20 49 66 20 74 68 65  ocessing: If the
1e960 20 71 75 65 72 79 20 69 73 20 61 20 22 53 45 4c   query is a "SEL
1e970 45 43 54 0a 20 20 20 20 20 20 20 44 49 53 54 49  ECT.       DISTI
1e980 4e 43 54 22 20 71 75 65 72 79 2c 20 64 75 70 6c  NCT" query, dupl
1e990 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72  icate rows are r
1e9a0 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
1e9b0 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
1e9c0 77 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68  ws..</ol>..<p>Th
1e9d0 65 72 65 20 61 72 65 20 74 77 6f 20 74 79 70 65  ere are two type
1e9e0 73 20 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c 45  s of simple SELE
1e9f0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 2d 20 61  CT statement - a
1ea00 67 67 72 65 67 61 74 65 20 61 6e 64 20 0a 6e 6f  ggregate and .no
1ea10 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n-aggregate quer
1ea20 69 65 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20 53  ies. ^A simple S
1ea30 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1ea40 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  is an aggregate 
1ea50 71 75 65 72 79 20 69 66 0a 69 74 20 63 6f 6e 74  query if.it cont
1ea60 61 69 6e 73 20 65 69 74 68 65 72 20 61 20 47 52  ains either a GR
1ea70 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 6f 72  OUP BY clause or
1ea80 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
1ea90 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1eaa0 0a 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73  .in the result-s
1eab0 65 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  et. ^Otherwise, 
1eac0 69 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  if a simple SELE
1ead0 43 54 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 61  CT contains no a
1eae0 67 67 72 65 67 61 74 65 0a 66 75 6e 63 74 69 6f  ggregate.functio
1eaf0 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59  ns or a GROUP BY
1eb00 20 63 6c 61 75 73 65 2c 20 69 74 20 69 73 20 61   clause, it is a
1eb10 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
1eb20 75 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20  uery...<p><b>1. 
1eb30 44 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f 66  Determination of
1eb40 20 69 6e 70 75 74 20 64 61 74 61 20 28 46 52 4f   input data (FRO
1eb50 4d 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73  M clause process
1eb60 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68  ing).</b>.<tcl>h
1eb70 64 5f 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d 63  d_fragment fromc
1eb80 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  lause</tcl>.<tcl
1eb90 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46 52  >hd_keywords {FR
1eba0 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e  OM clause}</tcl>
1ebb0 0a 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 20 64  ..<p>The input d
1ebc0 61 74 61 20 75 73 65 64 20 62 79 20 61 20 73 69  ata used by a si
1ebd0 6d 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72  mple SELECT quer
1ebe0 79 20 69 73 20 61 20 73 65 74 20 6f 66 20 3c 69  y is a set of <i
1ebf0 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61 63  >N</i> rows .eac
1ec00 68 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d  h <i>M</i> colum
1ec10 6e 73 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49  ns wide...<p>^(I
1ec20 66 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  f the FROM claus
1ec30 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  e is omitted fro
1ec40 6d 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  m a simple SELEC
1ec50 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  T statement, the
1ec60 6e 20 74 68 65 20 0a 69 6e 70 75 74 20 64 61 74  n the .input dat
1ec70 61 20 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20  a is implicitly 
1ec80 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65 72  a single row zer
1ec90 6f 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29 5e  o columns wide)^
1eca0 20 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d   (i.e. <i>N</i>=
1ecb0 31 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30  1 and.<i>M</i>=0
1ecc0 29 2e 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f 4d  )...<p>If a FROM
1ecd0 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
1ece0 66 69 65 64 2c 20 74 68 65 20 64 61 74 61 20 6f  fied, the data o
1ecf0 6e 20 77 68 69 63 68 20 61 20 73 69 6d 70 6c 65  n which a simple
1ed00 20 53 45 4c 45 43 54 20 71 75 65 72 79 0a 6f 70   SELECT query.op
1ed10 65 72 61 74 65 73 20 63 6f 6d 65 73 20 66 72 6f  erates comes fro
1ed20 6d 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  m the one or mor
1ed30 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  e tables or subq
1ed40 75 65 72 69 65 73 20 28 53 45 4c 45 43 54 20 73  ueries (SELECT s
1ed50 74 61 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61 72  tatements.in par
1ed60 65 6e 74 68 65 73 69 73 29 20 73 70 65 63 69 66  enthesis) specif
1ed70 69 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ied following th
1ed80 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20  e FROM keyword. 
1ed90 5e 41 20 73 75 62 2d 73 65 6c 65 63 74 20 73 70  ^A sub-select sp
1eda0 65 63 69 66 69 65 64 0a 69 6e 20 74 68 65 20 6a  ecified.in the j
1edb0 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f  oin-source follo
1edc0 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c  wing the FROM cl
1edd0 61 75 73 65 20 69 6e 20 61 20 73 69 6d 70 6c 65  ause in a simple
1ede0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1edf0 74 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73 20  t is.handled as 
1ee00 69 66 20 69 74 20 77 61 73 20 61 20 74 61 62 6c  if it was a tabl
1ee10 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
1ee20 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62   data returned b
1ee30 79 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 0a  y executing the.
1ee40 73 75 62 2d 73 65 6c 65 63 74 20 73 74 61 74 65  sub-select state
1ee50 6d 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75  ment. ^Each colu
1ee60 6d 6e 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65  mn of the sub-se
1ee70 6c 65 63 74 20 64 61 74 61 73 65 74 20 69 6e 68  lect dataset inh
1ee80 65 72 69 74 73 20 74 68 65 0a 5b 63 6f 6c 6c 61  erits the.[colla
1ee90 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73  tion|collation s
1eea0 65 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66  equence] and [af
1eeb0 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
1eec0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70  orresponding exp
1eed0 72 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73  ression.in the s
1eee0 75 62 2d 73 65 6c 65 63 74 20 73 74 61 74 65 6d  ub-select statem
1eef0 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  ent...<p>^If the
1ef00 72 65 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e  re is only a sin
1ef10 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65  gle table in the
1ef20 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c   join-source fol
1ef30 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 0a  lowing the FROM.
1ef40 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
1ef50 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
1ef60 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
1ef70 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
1ef80 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a  contents of the.
1ef90 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66  named table. ^If
1efa0 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74   there is more t
1efb0 68 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20 73 70  han one table sp
1efc0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
1efd0 6f 66 20 74 68 65 0a 6a 6f 69 6e 2d 73 6f 75 72  of the.join-sour
1efe0 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ce following the
1eff0 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2c 20 74   FROM keyword, t
1f000 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  hen the contents
1f010 20 6f 66 20 65 61 63 68 20 6e 61 6d 65 64 20 74   of each named t
1f020 61 62 6c 65 0a 61 72 65 20 6a 6f 69 6e 65 64 20  able.are joined 
1f030 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61  into a single da
1f040 74 61 73 65 74 20 66 6f 72 20 74 68 65 20 73 69  taset for the si
1f050 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
1f060 65 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61 74 65  ement to operate
1f070 20 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68 6f 77   on..Exactly how
1f080 20 74 68 65 20 64 61 74 61 20 69 73 20 63 6f 6d   the data is com
1f090 62 69 6e 65 64 20 64 65 70 65 6e 64 73 20 6f 6e  bined depends on
1f0a0 20 74 68 65 20 73 70 65 63 69 66 69 63 20 5b 6a   the specific [j
1f0b0 6f 69 6e 2d 6f 70 5d 20 61 6e 64 0a 5b 6a 6f 69  oin-op] and.[joi
1f0c0 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20 75 73  n-constraint] us
1f0d0 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68  ed to connect th
1f0e0 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  e tables or subq
1f0f0 75 65 72 69 65 73 20 74 6f 67 65 74 68 65 72 2e  ueries together.
1f100 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69  ..<p>All joins i
1f110 6e 20 53 51 4c 69 74 65 20 61 72 65 20 62 61 73  n SQLite are bas
1f120 65 64 20 6f 6e 20 74 68 65 20 63 61 72 74 65 73  ed on the cartes
1f130 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74  ian product of t
1f140 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68  he left and.righ
1f150 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e  t-hand datasets.
1f160 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66   ^The columns of
1f170 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
1f180 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 20 61  roduct dataset a
1f190 72 65 2c 20 69 6e 20 0a 6f 72 64 65 72 2c 20 61  re, in .order, a
1f1a0 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ll the columns o
1f1b0 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  f the left-hand 
1f1c0 64 61 74 61 73 65 74 20 66 6f 6c 6c 6f 77 65 64  dataset followed
1f1d0 20 62 79 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75   by all the colu
1f1e0 6d 6e 73 0a 6f 66 20 74 68 65 20 72 69 67 68 74  mns.of the right
1f1f0 2d 68 61 6e 64 20 64 61 74 61 73 65 74 2e 20 5e  -hand dataset. ^
1f200 54 68 65 72 65 20 69 73 20 61 20 72 6f 77 20 69  There is a row i
1f210 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  n the cartesian 
1f220 70 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 0a  product dataset.
1f230 66 6f 72 6d 65 64 20 62 79 20 63 6f 6d 62 69 6e  formed by combin
1f240 69 6e 67 20 65 61 63 68 20 75 6e 69 71 75 65 20  ing each unique 
1f250 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61  combination of a
1f260 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6c 65   row from the le
1f270 66 74 2d 68 61 6e 64 20 0a 61 6e 64 20 72 69 67  ft-hand .and rig
1f280 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73  ht-hand datasets
1f290 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72  . ^(In other wor
1f2a0 64 73 2c 20 69 66 20 74 68 65 20 6c 65 66 74 2d  ds, if the left-
1f2b0 68 61 6e 64 20 64 61 74 61 73 65 74 20 63 6f 6e  hand dataset con
1f2c0 73 69 73 74 73 20 6f 66 0a 3c 69 3e 4e 6c 68 73  sists of.<i>Nlhs
1f2d0 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e  </i> rows of <i>
1f2e0 4d 6c 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  Mlhs</i> columns
1f2f0 2c 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d  , and the right-
1f300 68 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a  hand dataset of.
1f310 3c 69 3e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77 73  <i>Nrhs</i> rows
1f320 20 6f 66 20 3c 69 3e 4d 72 68 73 3c 2f 69 3e 20   of <i>Mrhs</i> 
1f330 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68  columns, then th
1f340 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
1f350 75 63 74 20 69 73 20 61 0a 64 61 74 61 73 65 74  uct is a.dataset
1f360 20 6f 66 20 3c 69 3e 4e 6c 68 73 2e 4e 72 68 73   of <i>Nlhs.Nrhs
1f370 3c 2f 69 3e 20 72 6f 77 73 2c 20 65 61 63 68 20  </i> rows, each 
1f380 63 6f 6e 74 61 69 6e 69 6e 67 20 3c 69 3e 4d 6c  containing <i>Ml
1f390 68 73 2b 4d 72 68 73 3c 2f 69 3e 20 63 6f 6c 75  hs+Mrhs</i> colu
1f3a0 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74  mns.)^..<p>^If t
1f3b0 68 65 20 6a 6f 69 6e 2d 6f 70 20 69 73 20 22 43  he join-op is "C
1f3c0 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e  ROSS JOIN", "INN
1f3d0 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
1f3e0 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28 22 2c 22   or a comma.(","
1f3f0 29 20 61 6e 64 20 74 68 65 72 65 20 69 73 20 6e  ) and there is n
1f400 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  o ON or USING cl
1f410 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 72  ause, then the r
1f420 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6a 6f 69  esult of the joi
1f430 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74 68 65 20  n is.simply the 
1f440 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
1f450 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e  t of the left an
1f460 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  d right-hand dat
1f470 61 73 65 74 73 2e 20 0a 5e 54 68 65 72 65 20 69  asets. .^There i
1f480 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20  s no difference 
1f490 62 65 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e  between the "INN
1f4a0 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
1f4b0 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70   and "," join.op
1f4c0 65 72 61 74 6f 72 73 2e 20 5e 28 54 68 65 20 22  erators. ^(The "
1f4d0 43 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e  CROSS JOIN" join
1f4e0 20 6f 70 65 72 61 74 6f 72 20 70 72 6f 64 75 63   operator produc
1f4f0 65 73 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  es the same data
1f500 20 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20   as the ."INNER 
1f510 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e  JOIN", "JOIN" an
1f520 64 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29  d "," operators)
1f530 5e 2c 20 62 75 74 20 69 73 20 0a 3c 61 20 68 72  ^, but is .<a hr
1f540 65 66 3d 6f 70 74 6f 76 65 72 76 69 65 77 2e 68  ef=optoverview.h
1f550 74 6d 6c 23 6d 61 6e 63 74 72 6c 3e 68 61 6e 64  tml#manctrl>hand
1f560 6c 65 64 20 73 6c 69 67 68 74 6c 79 20 64 69 66  led slightly dif
1f570 66 65 72 65 6e 74 6c 79 20 62 79 20 74 68 65 20  ferently by the 
1f580 71 75 65 72 79 0a 6f 70 74 69 6d 69 7a 65 72 3c  query.optimizer<
1f590 2f 61 3e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  /a>. Otherwise, 
1f5a0 69 74 20 69 73 20 74 68 65 20 63 61 72 74 65 73  it is the cartes
1f5b0 69 61 6e 20 70 72 6f 64 75 63 74 20 6d 6f 64 69  ian product modi
1f5c0 66 69 65 64 20 0a 61 63 63 6f 72 64 69 6e 67 20  fied .according 
1f5d0 74 6f 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  to one or more o
1f5e0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1f5f0 62 75 6c 6c 65 74 20 70 6f 69 6e 74 73 3a 20 0a  bullet points: .
1f600 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  .<ul>.  <li> <p>
1f610 5e 28 49 66 20 74 68 65 72 65 20 69 73 20 61 6e  ^(If there is an
1f620 20 4f 4e 20 63 6c 61 75 73 65 20 73 70 65 63 69   ON clause speci
1f630 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 4f  fied, then the O
1f640 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 0a  N expression is.
1f650 20 20 20 20 20 20 20 65 76 61 6c 75 61 74 65 64         evaluated
1f660 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
1f670 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
1f680 72 6f 64 75 63 74 20 61 73 20 61 20 0a 20 20 20  roduct as a .   
1f690 20 20 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70      [boolean exp
1f6a0 72 65 73 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f  ression]. All ro
1f6b0 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
1f6c0 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
1f6d0 75 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20 20  uates to .      
1f6e0 20 66 61 6c 73 65 20 61 72 65 20 65 78 63 6c 75   false are exclu
1f6f0 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ded from the dat
1f700 61 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20  aset.)^..  <li> 
1f710 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20  <p>^If there is 
1f720 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 73  a USING clause s
1f730 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
1f740 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e   of the join-con
1f750 73 74 72 61 69 6e 74 2c 0a 20 20 20 20 20 20 20  straint,.       
1f760 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65  then each of the
1f770 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 73 70   column names sp
1f780 65 63 69 66 69 65 64 20 6d 75 73 74 20 65 78 69  ecified must exi
1f790 73 74 20 69 6e 20 74 68 65 20 64 61 74 61 73 65  st in the datase
1f7a0 74 73 20 74 6f 20 0a 20 20 20 20 20 20 20 62 6f  ts to .       bo
1f7b0 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  th the left and 
1f7c0 72 69 67 68 74 20 6f 66 20 74 68 65 20 6a 6f 69  right of the joi
1f7d0 6e 2d 6f 70 2e 20 5e 28 46 6f 72 20 65 61 63 68  n-op. ^(For each
1f7e0 20 70 61 69 72 20 6f 66 20 6e 61 6d 65 73 61 6b   pair of namesak
1f7f0 65 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73  e.       columns
1f800 2c 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  , the expression
1f810 20 22 6c 68 73 2e 58 20 3d 20 72 68 73 2e 58 22   "lhs.X = rhs.X"
1f820 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f   is evaluated fo
1f830 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 20 20  r each row of.  
1f840 20 20 20 20 20 74 68 65 20 63 61 72 74 65 73 69       the cartesi
1f850 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61 20  an product as a 
1f860 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
1f870 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20 66  ion]. All rows f
1f880 6f 72 20 77 68 69 63 68 20 6f 6e 65 0a 20 20 20  or which one.   
1f890 20 20 20 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74      or more of t
1f8a0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65  he expressions e
1f8b0 76 61 6c 75 61 74 65 73 20 74 6f 20 66 61 6c 73  valuates to fals
1f8c0 65 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 66  e are excluded f
1f8d0 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 20 72  rom the.       r
1f8e0 65 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68  esult set.)^ ^Wh
1f8f0 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c  en comparing val
1f900 75 65 73 20 61 73 20 61 20 72 65 73 75 6c 74 20  ues as a result 
1f910 6f 66 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73  of a USING claus
1f920 65 2c 20 74 68 65 0a 20 20 20 20 20 20 20 6e 6f  e, the.       no
1f930 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 68  rmal rules for h
1f940 61 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69 74 69  andling affiniti
1f950 65 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  es, collation se
1f960 71 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c  quences and NULL
1f970 0a 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69  .       values i
1f980 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70  n comparisons ap
1f990 70 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e  ply. ^The column
1f9a0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65   from the datase
1f9b0 74 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20  t on the.       
1f9c0 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f  left-hand side o
1f9d0 66 20 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61  f the join opera
1f9e0 74 6f 72 20 69 73 20 63 6f 6e 73 69 64 65 72 65  tor is considere
1f9f0 64 20 74 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c  d to be on the l
1fa00 65 66 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20  eft-hand.       
1fa10 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70  side of the comp
1fa20 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20  arison operator 
1fa30 28 3d 29 20 66 6f 72 20 74 68 65 20 70 75 72 70  (=) for the purp
1fa40 6f 73 65 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  oses of collatio
1fa50 6e 20 0a 20 20 20 20 20 20 20 73 65 71 75 65 6e  n .       sequen
1fa60 63 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79 20  ce and affinity 
1fa70 70 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20  precedence...   
1fa80 20 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68      <p>^For each
1fa90 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73   pair of columns
1faa0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
1fab0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74   USING clause, t
1fac0 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  he column.      
1fad0 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d   from the right-
1fae0 68 61 6e 64 20 64 61 74 61 73 65 74 20 69 73 20  hand dataset is 
1faf0 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
1fb00 20 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74 2e   joined dataset.
1fb10 20 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20 69   ^This .       i
1fb20 73 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66 65  s the only diffe
1fb30 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
1fb40 55 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e 64  USING clause and
1fb50 20 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20   its equivalent 
1fb60 4f 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 72  ON.       constr
1fb70 61 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  aint...  <li> <p
1fb80 3e 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52 41  >^(If the NATURA
1fb90 4c 20 6b 65 79 77 6f 72 64 20 69 73 20 61 64 64  L keyword is add
1fba0 65 64 20 74 6f 20 61 6e 79 20 6f 66 20 74 68 65  ed to any of the
1fbb0 20 6a 6f 69 6e 2d 6f 70 73 2c 20 74 68 65 6e 20   join-ops, then 
1fbc0 61 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c 69 63  an.       implic
1fbd0 69 74 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  it USING clause 
1fbe0 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  is added to the 
1fbf0 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 73  join-constraints
1fc00 2e 20 54 68 65 20 69 6d 70 6c 69 63 69 74 0a 20  . The implicit. 
1fc10 20 20 20 20 20 20 55 53 49 4e 47 20 63 6c 61 75        USING clau
1fc20 73 65 20 63 6f 6e 74 61 69 6e 73 20 65 61 63 68  se contains each
1fc30 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   of the column n
1fc40 61 6d 65 73 20 74 68 61 74 20 61 70 70 65 61 72  ames that appear
1fc50 20 69 6e 20 62 6f 74 68 0a 20 20 20 20 20 20 20   in both.       
1fc60 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
1fc70 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 64 61  ht-hand input da
1fc80 74 61 73 65 74 73 2e 29 5e 20 5e 49 66 20 74 68  tasets.)^ ^If th
1fc90 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
1fca0 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 69 6e 70  -hand.       inp
1fcb0 75 74 20 64 61 74 61 73 65 74 73 20 66 65 61 74  ut datasets feat
1fcc0 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63 6f  ure no common co
1fcd0 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68 65 6e  lumn names, then
1fce0 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79   the NATURAL key
1fcf0 77 6f 72 64 0a 20 20 20 20 20 20 20 68 61 73 20  word.       has 
1fd00 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65  no effect on the
1fd10 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
1fd20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47 20 6f  join. ^A USING o
1fd30 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61 79 0a  r ON clause may.
1fd40 20 20 20 20 20 20 20 6e 6f 74 20 62 65 20 61 64         not be ad
1fd50 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20 74 68  ded to a join th
1fd60 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
1fd70 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64   NATURAL keyword
1fd80 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49  ...  <li> <p>^(I
1fd90 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 20 69 73  f the join-op is
1fda0 20 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22 20 6f   a "LEFT JOIN" o
1fdb0 72 20 22 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f  r "LEFT OUTER JO
1fdc0 49 4e 22 2c 20 74 68 65 6e 20 61 66 74 65 72 0a  IN", then after.
1fdd0 20 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f 72         the ON or
1fde0 20 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e 67   USING filtering
1fdf0 20 63 6c 61 75 73 65 73 20 68 61 76 65 20 62 65   clauses have be
1fe00 65 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20 65  en applied, an e
1fe10 78 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20 20  xtra row is .   
1fe20 20 20 20 20 61 64 64 65 64 20 74 6f 20 74 68 65      added to the
1fe30 20 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63 68   output for each
1fe40 20 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69 67   row in the orig
1fe50 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69  inal left-hand i
1fe60 6e 70 75 74 20 0a 20 20 20 20 20 20 20 64 61 74  nput .       dat
1fe70 61 73 65 74 20 74 68 61 74 20 63 6f 72 72 65 73  aset that corres
1fe80 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73  ponds to no rows
1fe90 20 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20 63   at all in the c
1fea0 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20 20  omposite.       
1feb0 64 61 74 61 73 65 74 20 28 69 66 20 61 6e 79 29  dataset (if any)
1fec0 2e 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20 72  .)^ ^The added r
1fed0 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c  ows contain NULL
1fee0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63   values in the c
1fef0 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74 68  olumns.       th
1ff00 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  at would normall
1ff10 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73  y contain values
1ff20 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
1ff30 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75   right-hand inpu
1ff40 74 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74  t.       dataset
1ff50 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28  .  .</ul>..<p>^(
1ff60 57 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74  When more than t
1ff70 77 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a 6f  wo tables are jo
1ff80 69 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61 73  ined together as
1ff90 20 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d 20   part of a FROM 
1ffa0 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e  clause,.the join
1ffb0 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20   operations are 
1ffc0 70 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72 64  processed in ord
1ffd0 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  er from left to 
1ffe0 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20  right. In other 
1fff0 0a 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f 4d  .words, the FROM
20000 20 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d   clause (A join-
20010 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32  op-1 B join-op-2
20020 20 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64 20   C) is computed 
20030 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d  as .((A join-op-
20040 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43  1 B) join-op-2 C
20050 29 2e 29 5e 0a 20 20 20 20 20 20 20 0a 0a 3c 70  ).)^.       ..<p
20060 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20 63 6c 61  ><b>2. WHERE cla
20070 75 73 65 20 66 69 6c 74 65 72 69 6e 67 2e 3c 2f  use filtering.</
20080 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
20090 65 6e 74 20 77 68 65 72 65 63 6c 61 75 73 65 3c  ent whereclause<
200a0 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65  /tcl>.<tcl>hd_ke
200b0 79 77 6f 72 64 73 20 7b 57 48 45 52 45 20 63 6c  ywords {WHERE cl
200c0 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause}</tcl>..<p>
200d0 5e 28 49 66 20 61 20 57 48 45 52 45 20 63 6c 61  ^(If a WHERE cla
200e0 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
200f0 2c 20 74 68 65 20 57 48 45 52 45 20 65 78 70 72  , the WHERE expr
20100 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
20110 74 65 64 20 66 6f 72 20 0a 65 61 63 68 20 72 6f  ted for .each ro
20120 77 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64  w in the input d
20130 61 74 61 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61  ata as a [boolea
20140 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41  n expression]. A
20150 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  ll rows for whic
20160 68 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75  h the.WHERE clau
20170 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  se expression ev
20180 61 6c 75 61 74 65 73 20 74 6f 20 66 61 6c 73 65  aluates to false
20190 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 66 72   are excluded fr
201a0 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 62  om the dataset b
201b0 65 66 6f 72 65 0a 63 6f 6e 74 69 6e 75 69 6e 67  efore.continuing
201c0 2e 29 5e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47 65  .)^..<p><b>3. Ge
201d0 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  neration of the 
201e0 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
201f0 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f  ws.</b>.<tcl>hd_
20200 66 72 61 67 6d 65 6e 74 20 72 65 73 75 6c 74 73  fragment results
20210 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64  et</tcl>.<tcl>hd
20220 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65 73 75 6c  _keywords {resul
20230 74 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e  t-set expression
20240 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f 74  s} {GROUP BY}</t
20250 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68 65  cl>..<p>Once the
20260 20 69 6e 70 75 74 20 64 61 74 61 20 66 72 6f 6d   input data from
20270 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
20280 20 68 61 73 20 62 65 65 6e 20 66 69 6c 74 65 72   has been filter
20290 65 64 20 62 79 20 74 68 65 0a 57 48 45 52 45 20  ed by the.WHERE 
202a0 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
202b0 6e 20 28 69 66 20 61 6e 79 29 2c 20 74 68 65 20  n (if any), the 
202c0 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
202d0 77 73 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c  ws for the simpl
202e0 65 20 0a 53 45 4c 45 43 54 20 61 72 65 20 63 61  e .SELECT are ca
202f0 6c 63 75 6c 61 74 65 64 2e 20 45 78 61 63 74 6c  lculated. Exactl
20300 79 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f  y how this is do
20310 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68  ne depends on wh
20320 65 74 68 65 72 20 74 68 65 20 73 69 6d 70 6c 65  ether the simple
20330 20 0a 53 45 4c 45 43 54 20 69 73 20 61 6e 20 61   .SELECT is an a
20340 67 67 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e 2d  ggregate or non-
20350 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2c  aggregate query,
20360 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20   and whether or 
20370 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42 59 20 63  not a GROUP.BY c
20380 6c 61 75 73 65 20 77 61 73 20 73 70 65 63 69 66  lause was specif
20390 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c 69  ied...<p> The li
203a0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
203b0 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 53 45  s between the SE
203c0 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65  LECT and FROM ke
203d0 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e 20  ywords is known 
203e0 61 73 0a 74 68 65 20 72 65 73 75 6c 74 20 65 78  as.the result ex
203f0 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20 20  pression list.  
20400 5e 49 66 20 61 20 72 65 73 75 6c 74 20 65 78 70  ^If a result exp
20410 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 73  ression is the s
20420 70 65 63 69 61 6c 20 65 78 70 72 65 73 73 69 6f  pecial expressio
20430 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63  n."*" then all c
20440 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
20450 70 75 74 20 64 61 74 61 20 61 72 65 20 73 75 62  put data are sub
20460 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 61  stituted for tha
20470 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e  t one expression
20480 2e 0a 5e 28 49 66 20 74 68 65 20 65 78 70 72 65  ..^(If the expre
20490 73 73 69 6f 6e 20 69 73 20 74 68 65 20 61 6c 69  ssion is the ali
204a0 61 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72  as of a table or
204b0 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
204c0 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f 6c   FROM clause.fol
204d0 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22 20 74 68  lowed by ".*" th
204e0 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 66  en all columns f
204f0 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 74 61  rom the named ta
20500 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
20510 61 72 65 0a 73 75 62 73 74 69 74 75 74 65 64 20  are.substituted 
20520 66 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20 65  for the single e
20530 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28 49  xpression.)^ ^(I
20540 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f  t is an error to
20550 20 75 73 65 20 61 20 22 2a 22 20 6f 72 0a 22 61   use a "*" or."a
20560 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69  lias.*" expressi
20570 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78  on in any contex
20580 74 20 6f 74 68 65 72 20 74 68 61 6e 20 74 68 61  t other than tha
20590 6e 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65  n a result expre
205a0 73 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28  ssion list.)^.^(
205b0 49 74 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72  It is also an er
205c0 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22  ror to use a "*"
205d0 20 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78   or "alias.*" ex
205e0 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69  pression in a si
205f0 6d 70 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72  mple SELECT.quer
20600 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  y that does not 
20610 68 61 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75  have a FROM clau
20620 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65  se.)^..<p> ^(The
20630 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
20640 6e 73 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72  ns in the rows r
20650 65 74 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d  eturned by a sim
20660 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
20670 6d 65 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f  ment.is equal to
20680 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
20690 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
206a0 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
206b0 69 6f 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73  ion list after.s
206c0 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a  ubstitution of *
206d0 20 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70   and alias.* exp
206e0 72 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68  ressions.)^ Each
206f0 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63   result row is c
20700 61 6c 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61  alculated by.eva
20710 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78 70 72  luating the expr
20720 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72  essions in the r
20730 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
20740 20 6c 69 73 74 20 77 69 74 68 20 72 65 73 70 65   list with respe
20750 63 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72  ct to a.single r
20760 6f 77 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  ow of input data
20770 20 6f 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61   or, for aggrega
20780 74 65 20 71 75 65 72 69 65 73 2c 20 77 69 74 68  te queries, with
20790 20 72 65 73 70 65 63 74 20 74 6f 20 61 20 67 72   respect to a gr
207a0 6f 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75  oup.of rows...<u
207b0 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  l>.  <li><p>^If 
207c0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
207d0 6d 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e  ment is <b>a non
207e0 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
207f0 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20  </b>, then .    
20800 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
20810 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
20820 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73  pression list is
20830 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
20840 61 63 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74  ach row in.    t
20850 68 65 20 64 61 74 61 73 65 74 20 66 69 6c 74 65  he dataset filte
20860 72 65 64 20 62 79 20 74 68 65 20 57 48 45 52 45  red by the WHERE
20870 20 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e   clause...  <li>
20880 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43  <p>^If the SELEC
20890 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
208a0 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  b>an aggregate q
208b0 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47  uery without a G
208c0 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20  ROUP.    BY</b> 
208d0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63  clause, then eac
208e0 68 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  h aggregate expr
208f0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
20900 73 75 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20  sult-set is .   
20910 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
20920 61 63 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72  across the entir
20930 65 20 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68  e dataset. ^Each
20940 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
20950 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e  xpression.    in
20960 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20   the result-set 
20970 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  is evaluated onc
20980 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61  e for an arbitra
20990 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
209a0 77 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74  w of.    the dat
209b0 61 73 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20  aset. ^The same 
209c0 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65  arbitrarily sele
209d0 63 74 65 64 20 72 6f 77 20 69 73 20 75 73 65 64  cted row is used
209e0 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f   for each.    no
209f0 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
20a00 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20  ession. ^Or, if 
20a10 74 68 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74  the dataset cont
20a20 61 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20  ains zero rows, 
20a30 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e  then .    each n
20a40 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
20a50 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
20a60 61 74 65 64 20 61 67 61 69 6e 73 74 20 61 20 72  ated against a r
20a70 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20  ow consisting.  
20a80 20 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55    entirely of NU
20a90 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c  LL values...   <
20aa0 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f  p>^The single ro
20ab0 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  w of result-set 
20ac0 64 61 74 61 20 63 72 65 61 74 65 64 20 62 79 20  data created by 
20ad0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
20ae0 67 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64  ggregate.    and
20af0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
20b00 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
20b10 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72  e result-set for
20b20 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ms the result of
20b30 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74   an.    aggregat
20b40 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20  e query without 
20b50 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
20b60 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65  e. ^An aggregate
20b70 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61   query without a
20b80 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c  .    GROUP BY cl
20b90 61 75 73 65 20 61 6c 77 61 79 73 20 72 65 74 75  ause always retu
20ba0 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  rns exactly one 
20bb0 72 6f 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65  row of data, eve
20bc0 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 20  n if there are. 
20bd0 20 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20     zero rows of 
20be0 69 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c  input data...  <
20bf0 6c 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53  li><p>^(If the S
20c00 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
20c10 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61  is <b>an aggrega
20c20 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20  te query with a 
20c30 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e  GROUP.    BY</b>
20c40 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61   clause, then ea
20c50 63 68 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  ch of the expres
20c60 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20  sions specified 
20c70 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20  as part of the. 
20c80 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75     GROUP BY clau
20c90 73 65 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  se is evaluated 
20ca0 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
20cb0 74 68 65 20 64 61 74 61 73 65 74 2e 20 45 61 63  the dataset. Eac
20cc0 68 20 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65  h row.    is the
20cd0 6e 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20  n assigned to a 
20ce0 22 67 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e  "group" based on
20cf0 20 74 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f   the results; ro
20d00 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20  ws for which.   
20d10 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
20d20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47  evaluating the G
20d30 52 4f 55 50 20 42 59 20 65 78 70 72 65 73 73 69  ROUP BY expressi
20d40 6f 6e 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  ons are the same
20d50 20 61 72 65 0a 20 20 20 20 61 73 73 69 67 6e 65   are.    assigne
20d60 64 20 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72  d to the same gr
20d70 6f 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20  oup.)^ ^For the 
20d80 70 75 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75  purposes of grou
20d90 70 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20  ping rows, NULL 
20da0 0a 20 20 20 20 76 61 6c 75 65 73 20 61 72 65 20  .    values are 
20db0 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c  considered equal
20dc0 2e 20 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c  . ^The usual rul
20dd0 65 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f  es for [collatio
20de0 6e 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20  n|selecting a.  
20df0 20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75    collation sequ
20e00 65 6e 63 65 5d 20 77 69 74 68 20 77 68 69 63 68  ence] with which
20e10 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
20e20 20 76 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68   values apply wh
20e30 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20  en evaluating.  
20e40 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e    expressions in
20e50 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
20e60 73 65 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73  se.  ^The expres
20e70 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f  sions in the GRO
20e80 55 50 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20  UP BY clause.   
20e90 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e   do <em>not</em>
20ea0 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 70 72   have to be expr
20eb0 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70  essions that app
20ec0 65 61 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ear in the resul
20ed0 74 2e 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72  t. ^The.    expr
20ee0 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f  essions in a GRO
20ef0 55 50 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79  UP BY clause may
20f00 20 6e 6f 74 20 62 65 20 61 67 67 72 65 67 61 74   not be aggregat
20f10 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a  e expressions...
20f20 20 20 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41      <p>^(If a HA
20f30 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73  VING clause is s
20f40 70 65 63 69 66 69 65 64 2c 20 69 74 20 69 73 20  pecified, it is 
20f50 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
20f60 6f 72 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20  or each group . 
20f70 20 20 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20     of rows as a 
20f80 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
20f90 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73  ion]. If the res
20fa0 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
20fb0 67 20 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47  g the.    HAVING
20fc0 20 63 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65   clause is false
20fd0 2c 20 74 68 65 20 67 72 6f 75 70 20 69 73 20 64  , the group is d
20fe0 69 73 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20  iscarded.)^ ^If 
20ff0 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  the HAVING claus
21000 65 20 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72  e is.    an aggr
21010 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
21020 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
21030 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77  d across all row
21040 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  s in the group. 
21050 5e 49 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47  ^If.    a HAVING
21060 20 63 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e   clause is a non
21070 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
21080 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
21090 6c 75 61 74 65 64 20 77 69 74 68 20 72 65 73 70  luated with resp
210a0 65 63 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72  ect.    to an ar
210b0 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
210c0 65 64 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20  ed row from the 
210d0 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56  group.  ^The HAV
210e0 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ING expression m
210f0 61 79 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20  ay.    refer to 
21100 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67  values, even agg
21110 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
21120 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69  , that are not i
21130 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70  n the result.</p
21140 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20  >..    <p>^Each 
21150 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
21160 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20  e result-set is 
21170 74 68 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f  then evaluated o
21180 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20  nce for each.   
21190 20 67 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20   group of rows. 
211a0 5e 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69  ^If the expressi
211b0 6f 6e 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  on is an aggrega
211c0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
211d0 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61  t is .    evalua
211e0 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ted across all r
211f0 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ows in the group
21200 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74  . ^Otherwise, it
21210 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67   is evaluated ag
21220 61 69 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67  ainst.    a sing
21230 6c 65 20 61 72 62 69 74 72 61 72 69 6c 79 20 63  le arbitrarily c
21240 68 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77  hosen row from w
21250 69 74 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ithin the group.
21260 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f   ^If there is mo
21270 72 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20  re.    than one 
21280 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
21290 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
212a0 72 65 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e  result-set, then
212b0 20 61 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78   all such.    ex
212c0 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76  pressions are ev
212d0 61 6c 75 61 74 65 64 20 66 6f 72 20 74 68 65 20  aluated for the 
212e0 73 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c  same row...    <
212f0 70 3e 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66  p>^Each group of
21300 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 20 72   input dataset r
21310 6f 77 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20  ows contributes 
21320 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20  a single row to 
21330 74 68 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20  the .    set of 
21340 72 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75  result rows. ^Su
21350 62 6a 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69  bject to filteri
21360 6e 67 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ng associated wi
21370 74 68 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a  th the DISTINCT.
21380 20 20 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65      keyword, the
21390 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
213a0 72 65 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61  returned by an a
213b0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
213c0 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20  ith a GROUP.    
213d0 42 59 20 63 6c 61 75 73 65 20 69 73 20 74 68 65  BY clause is the
213e0 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d   same as the num
213f0 62 65 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66  ber of groups of
21400 20 72 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62   rows produced b
21410 79 20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74  y applying.    t
21420 68 65 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20  he GROUP BY and 
21430 48 41 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74  HAVING clauses t
21440 6f 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  o the filtered i
21450 6e 70 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f  nput dataset..</
21460 75 6c 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65  ul>..<p><b>4. Re
21470 6d 6f 76 61 6c 20 6f 66 20 64 75 70 6c 69 63 61  moval of duplica
21480 74 65 20 72 6f 77 73 20 28 44 49 53 54 49 4e 43  te rows (DISTINC
21490 54 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f  T processing).</
214a0 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
214b0 65 6e 74 20 64 69 73 74 69 6e 63 74 3c 2f 74 63  ent distinct</tc
214c0 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
214d0 72 64 73 20 7b 44 49 53 54 49 4e 43 54 7d 3c 2f  rds {DISTINCT}</
214e0 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66  tcl>..<p>^One of
214f0 20 74 68 65 20 41 4c 4c 20 6f 72 20 44 49 53 54   the ALL or DIST
21500 49 4e 43 54 20 6b 65 79 77 6f 72 64 73 20 6d 61  INCT keywords ma
21510 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 53 45 4c  y follow the SEL
21520 45 43 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 61  ECT keyword in a
21530 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20   .simple SELECT 
21540 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74  statement. ^If t
21550 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  he simple SELECT
21560 20 69 73 20 61 20 53 45 4c 45 43 54 20 41 4c 4c   is a SELECT ALL
21570 2c 20 74 68 65 6e 20 74 68 65 0a 65 6e 74 69 72  , then the.entir
21580 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
21590 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
215a0 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 2e  d by the SELECT.
215b0 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41 4c 4c   ^If neither ALL
215c0 20 6f 72 0a 44 49 53 54 49 4e 43 54 20 61 72 65   or.DISTINCT are
215d0 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
215e0 68 65 20 62 65 68 61 76 69 6f 75 72 20 69 73 20  he behaviour is 
215f0 61 73 20 69 66 20 41 4c 4c 20 77 65 72 65 20 73  as if ALL were s
21600 70 65 63 69 66 69 65 64 2e 20 0a 5e 49 66 20 74  pecified. .^If t
21610 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  he simple SELECT
21620 20 69 73 20 61 20 53 45 4c 45 43 54 20 44 49 53   is a SELECT DIS
21630 54 49 4e 43 54 2c 20 74 68 65 6e 20 64 75 70 6c  TINCT, then dupl
21640 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72  icate rows are r
21650 65 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68 65 20  emoved.from the 
21660 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
21670 77 73 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ws before it is 
21680 72 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72 20 74  returned. ^For t
21690 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 0a 64  he purposes of.d
216a0 65 74 65 63 74 69 6e 67 20 64 75 70 6c 69 63 61  etecting duplica
216b0 74 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e 55 4c  te rows, two NUL
216c0 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
216d0 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 65 71  sidered to be eq
216e0 75 61 6c 2e 20 5e 54 68 65 0a 6e 6f 72 6d 61 6c  ual. ^The.normal
216f0 20 72 75 6c 65 73 20 66 6f 72 20 73 65 6c 65 63   rules for selec
21700 74 69 6e 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  ting a collation
21710 20 73 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d   sequence to com
21720 70 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73  pare text values
21730 20 77 69 74 68 0a 61 70 70 6c 79 2e 0a 0a 3c 68   with.apply...<h
21740 33 3e 43 6f 6d 70 6f 75 6e 64 20 53 65 6c 65 63  3>Compound Selec
21750 74 20 53 74 61 74 65 6d 65 6e 74 73 0a 3c 74 63  t Statements.<tc
21760 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f  l>hd_fragment co
21770 6d 70 6f 75 6e 64 3c 2f 74 63 6c 3e 0a 3c 74 63  mpound</tcl>.<tc
21780 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 63  l>hd_keywords {c
21790 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 7d 20  ompound select} 
217a0 7b 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 7d  {compound query}
217b0 3c 2f 74 63 6c 3e 0a 3c 2f 68 33 3e 0a 0a 3c 70  </tcl>.</h3>..<p
217c0 3e 54 77 6f 20 6f 72 20 6d 6f 72 65 20 73 69 6d  >Two or more sim
217d0 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
217e0 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e  ments may be con
217f0 6e 65 63 74 65 64 20 74 6f 67 65 74 68 65 72 20  nected together 
21800 74 6f 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75  to form.a compou
21810 6e 64 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20  nd SELECT using 
21820 74 68 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e  the UNION, UNION
21830 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20   ALL, INTERSECT 
21840 6f 72 20 45 58 43 45 50 54 20 6f 70 65 72 61 74  or EXCEPT operat
21850 6f 72 2e 0a 5e 49 6e 20 61 20 63 6f 6d 70 6f 75  or..^In a compou
21860 6e 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74  nd SELECT, all t
21870 68 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53  he constituent S
21880 45 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74 75  ELECTs must retu
21890 72 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d  rn the same .num
218a0 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f  ber of result co
218b0 6c 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20 63  lumns. ^As the c
218c0 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63  omponents of a c
218d0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d  ompound SELECT m
218e0 75 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53 45  ust.be simple SE
218f0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c  LECT statements,
21900 20 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f   they may not co
21910 6e 74 61 69 6e 20 4f 52 44 45 52 20 42 59 20 6f  ntain ORDER BY o
21920 72 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 2e  r LIMIT clauses.
21930 0a 5e 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c  .^ORDER BY and L
21940 49 4d 49 54 20 63 6c 61 75 73 65 73 20 6d 61 79  IMIT clauses may
21950 20 6f 6e 6c 79 20 6f 63 63 75 72 20 61 74 20 74   only occur at t
21960 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 65 6e  he end of the en
21970 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64 0a 53 45  tire compound.SE
21980 4c 45 43 54 2e 20 20 0a 0a 3c 70 3e 5e 41 20 63  LECT.  ..<p>^A c
21990 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63  ompound SELECT c
219a0 72 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49  reated using UNI
219b0 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20  ON ALL operator 
219c0 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20  returns all the 
219d0 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45  rows.from the SE
219e0 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74  LECT to the left
219f0 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c   of the UNION AL
21a00 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20  L operator, and 
21a10 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f  all the rows.fro
21a20 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20  m the SELECT to 
21a30 74 68 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e  the right of it.
21a40 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72   ^The UNION oper
21a50 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73  ator works the s
21a60 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e  ame way as.UNION
21a70 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61   ALL, except tha
21a80 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  t duplicate rows
21a90 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
21aa0 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75  m the final resu
21ab0 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54  lt set..^The INT
21ac0 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20  ERSECT operator 
21ad0 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65  returns the inte
21ae0 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  rsection of the 
21af0 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c  results of the l
21b00 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45  eft and.right SE
21b10 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43  LECTs.  ^The EXC
21b20 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74  EPT operator ret
21b30 75 72 6e 73 20 74 68 65 20 73 75 62 73 65 74 20  urns the subset 
21b40 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  of rows returned
21b50 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c   by the.left SEL
21b60 45 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ECT that are not
21b70 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62   also returned b
21b80 79 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  y the right-hand
21b90 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63   SELECT. ^Duplic
21ba0 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d  ate.rows are rem
21bb0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  oved from the re
21bc0 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45  sults of INTERSE
21bd0 43 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70  CT and EXCEPT op
21be0 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74  erators before t
21bf0 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73  he.result set is
21c00 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e   returned...<p>^
21c10 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
21c20 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20   of determining 
21c30 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66  duplicate rows f
21c40 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  or the results o
21c50 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43  f compound.SELEC
21c60 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c  T operators, NUL
21c70 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
21c80 73 69 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f  sidered equal to
21c90 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
21ca0 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20  es and.distinct 
21cb0 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  from all non-NUL
21cc0 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63  L values. ^The c
21cd0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
21ce0 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  e used to compar
21cf0 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75  e .two text valu
21d00 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  es is determined
21d10 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d   as if the colum
21d20 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61  ns of the left a
21d30 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45  nd right-hand.SE
21d40 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
21d50 77 65 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e  were the left an
21d60 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65  d right-hand ope
21d70 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75  rands of the equ
21d80 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72  als (=).operator
21d90 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 67 72  , except that gr
21da0 65 61 74 65 72 20 70 72 65 63 65 64 65 6e 63 65  eater precedence
21db0 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64   is not assigned
21dc0 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20   to a collation 
21dd0 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63 69 66  .sequence specif
21de0 69 65 64 20 77 69 74 68 20 74 68 65 20 70 6f 73  ied with the pos
21df0 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65  tfix COLLATE ope
21e00 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e  rator. ^No affin
21e10 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69  ity.transformati
21e20 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64 20  ons are applied 
21e30 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68  to any values wh
21e40 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77  en comparing row
21e50 73 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63  s as part of a.c
21e60 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20  ompound SELECT. 
21e70 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65  ..<p>^(When thre
21e80 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65  e or more simple
21e90 20 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e   SELECTs are con
21ea0 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f  nected into a co
21eb0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74  mpound SELECT,.t
21ec0 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c  hey group from l
21ed0 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e  eft to right. In
21ee0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
21ef0 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43   "A", "B" and "C
21f00 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65  " are all.simple
21f10 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
21f20 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43  ts, (A op B op C
21f30 29 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61  ) is processed a
21f40 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43  s ((A op B) op C
21f50 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ).)^..</p>..<tcl
21f60 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64  >hd_fragment ord
21f70 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 3c  erby {order by}<
21f80 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 52 44 45 52 20  /tcl>.<h3>ORDER 
21f90 42 59 20 61 6e 64 20 4c 49 4d 49 54 2f 4f 46 46  BY and LIMIT/OFF
21fa0 53 45 54 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e  SET Clauses</h3>
21fb0 0a 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43 54  ..<p>If a SELECT
21fc0 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
21fd0 72 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68 61  returns more tha
21fe0 6e 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e  n one row does n
21ff0 6f 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45 52  ot have an.ORDER
22000 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 20   BY clause, the 
22010 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74  order in which t
22020 68 65 20 72 6f 77 73 20 61 72 65 20 72 65 74 75  he rows are retu
22030 72 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65  rned is undefine
22040 64 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c 45  d..Or, if a SELE
22050 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65  CT statement doe
22060 73 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20  s have an ORDER 
22070 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
22080 74 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70 72  the list of.expr
22090 65 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65 64  essions attached
220a0 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59   to the ORDER BY
220b0 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6f   determine the o
220c0 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
220d0 77 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20  ws.are returned 
220e0 74 6f 20 74 68 65 20 75 73 65 72 2e 20 5e 52 6f  to the user. ^Ro
220f0 77 73 20 61 72 65 20 66 69 72 73 74 20 73 6f 72  ws are first sor
22100 74 65 64 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ted based on the
22110 20 72 65 73 75 6c 74 73 20 6f 66 0a 65 76 61 6c   results of.eval
22120 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d  uating the left-
22130 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
22140 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  in the ORDER BY 
22150 6c 69 73 74 2c 20 74 68 65 6e 20 74 69 65 73 20  list, then ties 
22160 61 72 65 20 62 72 6f 6b 65 6e 0a 62 79 20 65 76  are broken.by ev
22170 61 6c 75 61 74 69 6e 67 20 74 68 65 20 73 65 63  aluating the sec
22180 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78  ond left-most ex
22190 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 73 6f 20  pression and so 
221a0 6f 6e 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e  on. The order in
221b0 20 77 68 69 63 68 0a 74 77 6f 20 72 6f 77 73 20   which.two rows 
221c0 66 6f 72 20 77 68 69 63 68 20 61 6c 6c 20 4f 52  for which all OR
221d0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
221e0 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 65  ns evaluate to e
221f0 71 75 61 6c 20 76 61 6c 75 65 73 20 61 72 65 0a  qual values are.
22200 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65  returned is unde
22210 66 69 6e 65 64 2e 20 5e 45 61 63 68 20 4f 52 44  fined. ^Each ORD
22220 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
22230 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
22240 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 6f  ly followed.by o
22250 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72  ne of the keywor
22260 64 73 20 41 53 43 20 28 73 6d 61 6c 6c 65 72 20  ds ASC (smaller 
22270 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72  values are retur
22280 6e 65 64 20 66 69 72 73 74 29 20 6f 72 20 44 45  ned first) or DE
22290 53 43 20 28 6c 61 72 67 65 72 0a 76 61 6c 75 65  SC (larger.value
222a0 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66  s are returned f
222b0 69 72 73 74 29 2e 20 5e 49 66 20 6e 65 69 74 68  irst). ^If neith
222c0 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 20 61  er ASC or DESC a
222d0 72 65 20 73 70 65 63 69 66 69 65 64 2c 20 72 6f  re specified, ro
222e0 77 73 0a 61 72 65 20 73 6f 72 74 65 64 20 69 6e  ws.are sorted in
222f0 20 61 73 63 65 6e 64 69 6e 67 20 28 73 6d 61 6c   ascending (smal
22300 6c 65 72 20 76 61 6c 75 65 73 20 66 69 72 73 74  ler values first
22310 29 20 6f 72 64 65 72 20 62 79 20 64 65 66 61 75  ) order by defau
22320 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68 20 4f 52 44  lt...<p>Each ORD
22330 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
22340 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73   is processed as
22350 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
22360 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ol>.<li><p>^If t
22370 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
22380 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73  ession is a cons
22390 74 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74  tant integer K t
223a0 68 65 6e 20 74 68 65 0a 65 78 70 72 65 73 73 69  hen the.expressi
223b0 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  on is considered
223c0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
223d0 65 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e K-th column of
223e0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a   the result set.
223f0 28 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 75 6d  (columns are num
22400 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  bered from left 
22410 74 6f 20 72 69 67 68 74 20 73 74 61 72 74 69 6e  to right startin
22420 67 20 77 69 74 68 20 31 29 2e 0a 0a 3c 6c 69 3e  g with 1)...<li>
22430 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52  <p>^If the ORDER
22440 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
22450 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  s an identifier 
22460 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
22470 20 74 6f 0a 74 68 65 20 61 6c 69 61 73 20 6f 66   to.the alias of
22480 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70   one of the outp
22490 75 74 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e  ut columns, then
224a0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
224b0 69 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 61 6e  is considered.an
224c0 20 61 6c 69 61 73 20 66 6f 72 20 74 68 61 74 20   alias for that 
224d0 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e  column...<li><p>
224e0 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74  ^Otherwise, if t
224f0 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
22500 65 73 73 69 6f 6e 20 69 73 20 61 6e 79 20 6f 74  ession is any ot
22510 68 65 72 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  her expression, 
22520 69 74 20 0a 69 73 20 65 76 61 6c 75 61 74 65 64  it .is evaluated
22530 20 61 6e 64 20 74 68 65 20 74 68 65 20 72 65 74   and the the ret
22540 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73 65 64  urned value used
22550 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20 6f 75   to order the ou
22560 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66 0a 74  tput rows. ^If.t
22570 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
22580 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c 65 20  ent is a simple 
22590 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61 6e 20  SELECT, then an 
225a0 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63 6f 6e  ORDER BY may con
225b0 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74 72 61  tain any.arbitra
225c0 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  ry expressions. 
225d0 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65  ^However, if the
225e0 20 53 45 4c 45 43 54 20 69 73 20 61 20 63 6f 6d   SELECT is a com
225f0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 74 68  pound SELECT, th
22600 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78 70 72  en.ORDER BY expr
22610 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65  essions that are
22620 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74 6f 20   not aliases to 
22630 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20 6d  output columns m
22640 75 73 74 20 62 65 20 65 78 61 63 74 6c 79 0a 74  ust be exactly.t
22650 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20 65 78  he same as an ex
22660 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20 61 73  pression used as
22670 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d   an output colum
22680 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f  n..</ol>..<p>^Fo
22690 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
226a0 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73 2c 20  f sorting rows, 
226b0 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
226c0 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  red in the same 
226d0 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f 6d 70  way.as for [comp
226e0 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73 69 6f  arison expressio
226f0 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61 74 69  ns]. The collati
22700 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64  on sequence used
22710 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77 6f 20   to compare.two 
22720 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64  text values is d
22730 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66 6f 6c  etermined as fol
22740 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c  lows:..<ol>.  <l
22750 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44  i><p>^If the ORD
22760 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
22770 20 69 73 20 61 73 73 69 67 6e 65 64 20 61 20 63   is assigned a c
22780 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
22790 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 70 6f  e using.  the po
227a0 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45 20 6f  stfix [COLLATE o
227b0 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74  perator], then t
227c0 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  he specified col
227d0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
227e0 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c 6c 69  is.  used..  <li
227f0 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
22800 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
22810 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
22820 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65 78 70   alias to an exp
22830 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74 20 68  ression.  that h
22840 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e 65 64  as been assigned
22850 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
22860 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68 65 20  uence using the 
22870 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f 4c 4c  postfix .  [COLL
22880 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74  ATE operator], t
22890 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  hen the collatio
228a0 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73 69 67  n sequence assig
228b0 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69 61 73  ned to the alias
228c0 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20  ed.  expression 
228d0 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c  is used..  <li><
228e0 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  p>^Otherwise, if
228f0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
22900 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f  pression is a co
22910 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69 61 73  lumn or an alias
22920 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65 73 73   of.  an express
22930 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20 63 6f  ion that is a co
22940 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20 64  lumn, then the d
22950 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
22960 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a 20 20   sequence for.  
22970 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  the column is us
22980 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f  ed. .  <li><p>^O
22990 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 5b 42  therwise, the [B
229a0 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e  INARY] collation
229b0 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65   sequence is use
229c0 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20  d..</ol>..<p>In 
229d0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
229e0 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c 6c  T statement, all
229f0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
22a00 73 69 6f 6e 73 20 61 72 65 20 68 61 6e 64 6c 65  sions are handle
22a10 64 0a 61 73 20 61 6c 69 61 73 65 73 20 66 6f 72  d.as aliases for
22a20 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75   one of the resu
22a30 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  lt columns of th
22a40 65 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  e compound SELEC
22a50 54 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52  T..^(If an ORDER
22a60 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
22a70 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
22a80 20 61 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c   alias, then SQL
22a90 69 74 65 20 73 65 61 72 63 68 65 73 0a 74 68 65  ite searches.the
22aa0 20 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43   left-most SELEC
22ab0 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e  T in the compoun
22ac0 64 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63  d for a result c
22ad0 6f 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68  olumn that match
22ae0 65 73 20 65 69 74 68 65 72 0a 74 68 65 20 73 65  es either.the se
22af0 63 6f 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75  cond or third ru
22b00 6c 65 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20  les above. If a 
22b10 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
22b20 74 68 65 20 73 65 61 72 63 68 20 73 74 6f 70 73  the search stops
22b30 20 61 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73   and.the express
22b40 69 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61  ion is handled a
22b50 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
22b60 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
22b70 20 74 68 61 74 20 69 74 20 68 61 73 20 62 65 65   that it has bee
22b80 6e 0a 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73  n.matched agains
22b90 74 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  t. Otherwise, th
22ba0 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f  e next SELECT to
22bb0 20 74 68 65 20 72 69 67 68 74 20 69 73 20 74 72   the right is tr
22bc0 69 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29  ied, and so on.)
22bd0 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e  ^.^If no matchin
22be0 67 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e  g expression can
22bf0 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   be found in the
22c00 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
22c10 6f 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65  of any.constitue
22c20 6e 74 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73  nt SELECT, it is
22c30 20 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68   an error. ^Each
22c40 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44   term of the ORD
22c50 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a  ER BY clause is.
22c60 70 72 6f 63 65 73 73 65 64 20 73 65 70 61 72 61  processed separa
22c70 74 65 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20  tely and may be 
22c80 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 20  matched against 
22c90 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66  result columns f
22ca0 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45  rom different.SE
22cb0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
22cc0 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  in the compound.
22cd0 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d  </p>..<p>The LIM
22ce0 49 54 20 63 6c 61 75 73 65 20 69 73 20 75 73 65  IT clause is use
22cf0 64 20 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70  d to place an up
22d00 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
22d10 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a   number of rows.
22d20 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 53 45  returned by a SE
22d30 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
22d40 5e 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72  ^Any scalar expr
22d50 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73  ession may be us
22d60 65 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54  ed in the .LIMIT
22d70 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67   clause, so long
22d80 20 61 73 20 69 74 20 65 76 61 6c 75 61 74 65 73   as it evaluates
22d90 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   to an integer o
22da0 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63  r a value that c
22db0 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79  an be.losslessly
22dc0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
22dd0 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68   integer. ^If th
22de0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
22df0 6c 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c  luates to a NULL
22e00 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f   .value or any o
22e10 74 68 65 72 20 76 61 6c 75 65 20 74 68 61 74 20  ther value that 
22e20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
22e30 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
22e40 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e  o an integer, an
22e50 0a 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e  .error is return
22e60 65 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49  ed. ^If the LIMI
22e70 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  T expression eva
22e80 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61  luates to a nega
22e90 74 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e  tive value,.then
22ea0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70   there is no upp
22eb0 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20  er bound on the 
22ec0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72  number of rows r
22ed0 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77  eturned. ^Otherw
22ee0 69 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20  ise, the.SELECT 
22ef0 72 65 74 75 72 6e 73 20 74 68 65 20 66 69 72 73  returns the firs
22f00 74 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20  t N rows of its 
22f10 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c  result set only,
22f20 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20   where N is the 
22f30 76 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c  value.that the L
22f40 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20  IMIT expression 
22f50 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f  evaluates to. ^O
22f60 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54  r, if the SELECT
22f70 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
22f80 0a 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61  .return less tha
22f90 6e 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74  n N rows without
22fa0 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
22fb0 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65   then the entire
22fc0 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72   result set is.r
22fd0 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54  eturned. ..<p>^T
22fe0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74  he expression at
22ff0 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70  tached to the op
23000 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c  tional OFFSET cl
23010 61 75 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f  ause that may fo
23020 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61  llow a.LIMIT cla
23030 75 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76  use must also ev
23040 61 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74  aluate to an int
23050 65 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65  eger, or a value
23060 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73   that can be.los
23070 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
23080 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e  d to an integer.
23090 20 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73 69   ^If an expressi
230a0 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  on has an OFFSET
230b0 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68   clause,.then th
230c0 65 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61  e first M rows a
230d0 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
230e0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 72  the result set r
230f0 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
23100 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20  ELECT.statement 
23110 61 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72  and the next N r
23120 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
23130 2c 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20  , where M and N 
23140 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
23150 68 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61  hat.the OFFSET a
23160 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
23170 20 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65   evaluate to, re
23180 73 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c  spectively. ^Or,
23190 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77   if the SELECT.w
231a0 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73  ould return less
231b0 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69   than M+N rows i
231c0 66 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76  f it did not hav
231d0 65 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  e a LIMIT clause
231e0 2c 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74  , then the.first
231f0 20 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70   M rows are skip
23200 70 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61  ped and the rema
23210 69 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61  ining rows (if a
23220 6e 79 29 20 61 72 65 20 72 65 74 75 72 6e 65 64  ny) are returned
23230 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54  . ^If the.OFFSET
23240 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65   clause evaluate
23250 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  s to a negative 
23260 76 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c  value, the resul
23270 74 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  ts are the same 
23280 61 73 20 69 66 20 69 74 0a 68 61 64 20 65 76 61  as if it.had eva
23290 6c 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a  luated to zero..
232a0 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20  .<p>^Instead of 
232b0 61 20 73 65 70 61 72 61 74 65 20 4f 46 46 53 45  a separate OFFSE
232c0 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49  T clause, the LI
232d0 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73  MIT clause may s
232e0 70 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61  pecify two.scala
232f0 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65  r expressions se
23300 70 61 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d  parated by a com
23310 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  ma. ^In this cas
23320 65 2c 20 74 68 65 20 66 69 72 73 74 20 65 78 70  e, the first exp
23330 72 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20  ression.is used 
23340 61 73 20 74 68 65 20 4f 46 46 53 45 54 20 65 78  as the OFFSET ex
23350 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
23360 20 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c   second as the L
23370 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  IMIT expression.
23380 0a 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72  .This is counter
23390 2d 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77  -intuitive, as w
233a0 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46  hen using the OF
233b0 46 53 45 54 20 63 6c 61 75 73 65 20 74 68 65 20  FSET clause the 
233c0 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77  second of.the tw
233d0 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73  o expressions is
233e0 20 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20   the OFFSET and 
233f0 74 68 65 20 66 69 72 73 74 20 74 68 65 20 4c 49  the first the LI
23400 4d 49 54 2e 20 54 68 69 73 20 69 73 20 69 6e 74  MIT. This is int
23410 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61  entional.- it ma
23420 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62  ximizes compatib
23430 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72  ility with other
23440 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 73 79   SQL database sy
23450 73 74 65 6d 73 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  stems...<tcl>.##
23460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
234a0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
234b0 74 69 6f 6e 20 55 50 44 41 54 45 20 75 70 64 61  tion UPDATE upda
234c0 74 65 20 7b 55 50 44 41 54 45 20 2a 55 50 44 41  te {UPDATE *UPDA
234d0 54 45 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  TEs}..BubbleDiag
234e0 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 20  ram update-stmt 
234f0 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
23500 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d  qualified-table-
23510 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  name.</tcl>..<p>
23520 5e 41 6e 20 55 50 44 41 54 45 20 73 74 61 74 65  ^An UPDATE state
23530 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
23540 6d 6f 64 69 66 79 20 61 20 73 75 62 73 65 74 20  modify a subset 
23550 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  of the values st
23560 6f 72 65 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72  ored in .zero or
23570 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68   more rows of th
23580 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
23590 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
235a0 68 65 20 0a 3c 69 3e 71 75 61 6c 69 66 69 65 64  he .<i>qualified
235b0 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  -table-name</i> 
235c0 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
235d0 74 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  t of the UPDATE 
235e0 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e  statement...<p>^
235f0 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  If the UPDATE st
23600 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
23610 20 68 61 76 65 20 61 20 57 48 45 52 45 20 63 6c   have a WHERE cl
23620 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69  ause, all rows i
23630 6e 20 74 68 65 0a 74 61 62 6c 65 20 61 72 65 20  n the.table are 
23640 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68 65 20  modified by the 
23650 55 50 44 41 54 45 2e 20 5e 4f 74 68 65 72 77 69  UPDATE. ^Otherwi
23660 73 65 2c 20 74 68 65 20 55 50 44 41 54 45 20 61  se, the UPDATE a
23670 66 66 65 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73  ffects only thos
23680 65 0a 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  e.rows for which
23690 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65   the result of e
236a0 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 57 48  valuating the WH
236b0 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65  ERE clause expre
236c0 73 73 69 6f 6e 20 61 73 20 61 20 0a 5b 62 6f 6f  ssion as a .[boo
236d0 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c  lean expression|
236e0 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
236f0 6f 6e 20 69 73 20 74 72 75 65 5d 2e 20 5e 49 74  on is true]. ^It
23700 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   is not an error
23710 20 69 66 20 74 68 65 0a 57 48 45 52 45 20 63 6c   if the.WHERE cl
23720 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 65 76  ause does not ev
23730 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65 20 66  aluate to true f
23740 6f 72 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68  or any row in th
23750 65 20 74 61 62 6c 65 20 2d 20 74 68 69 73 20 6a  e table - this j
23760 75 73 74 0a 6d 65 61 6e 73 20 74 68 61 74 20 74  ust.means that t
23770 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
23780 65 6e 74 20 61 66 66 65 63 74 73 20 7a 65 72 6f  ent affects zero
23790 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d   rows...<p>The m
237a0 6f 64 69 66 69 63 61 74 69 6f 6e 73 20 6d 61 64  odifications mad
237b0 65 20 74 6f 20 65 61 63 68 20 72 6f 77 20 61 66  e to each row af
237c0 66 65 63 74 65 64 20 62 79 20 61 6e 20 55 50 44  fected by an UPD
237d0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 72  ATE statement ar
237e0 65 0a 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  e.determined by 
237f0 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69  the list of assi
23800 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e  gnments followin
23810 67 20 74 68 65 20 53 45 54 20 6b 65 79 77 6f 72  g the SET keywor
23820 64 2e 20 45 61 63 68 0a 61 73 73 69 67 6e 6d 65  d. Each.assignme
23830 6e 74 20 73 70 65 63 69 66 69 65 73 20 61 20 63  nt specifies a c
23840 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68  olumn name to th
23850 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65 71  e left of the eq
23860 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 0a  uals sign and a.
23870 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
23880 6e 20 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20  n to the right. 
23890 5e 46 6f 72 20 65 61 63 68 20 61 66 66 65 63 74  ^For each affect
238a0 65 64 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65  ed row, the name
238b0 64 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65  d columns.are se
238c0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20  t to the values 
238d0 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74  found by evaluat
238e0 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
238f0 6e 64 69 6e 67 20 73 63 61 6c 61 72 20 0a 65 78  nding scalar .ex
23900 70 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61  pressions. ^If a
23910 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e   single column-n
23920 61 6d 65 20 61 70 70 65 61 72 73 20 6d 6f 72 65  ame appears more
23930 20 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68   than once in th
23940 65 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e  e list of.assign
23950 6d 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  ment expressions
23960 2c 20 61 6c 6c 20 62 75 74 20 74 68 65 20 72 69  , all but the ri
23970 67 68 74 6d 6f 73 74 20 6f 63 63 75 72 65 6e 63  ghtmost occurenc
23980 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43  e is ignored. ^C
23990 6f 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e  olumns.that do n
239a0 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ot appear in the
239b0 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d   list of assignm
239c0 65 6e 74 73 20 61 72 65 20 6c 65 66 74 20 75 6e  ents are left un
239d0 6d 6f 64 69 66 69 65 64 2e 20 5e 54 68 65 20 73  modified. ^The s
239e0 63 61 6c 61 72 0a 65 78 70 72 65 73 73 69 6f 6e  calar.expression
239f0 73 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20 63  s may refer to c
23a00 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f  olumns of the ro
23a10 77 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e  w being updated.
23a20 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 20 61   ^In this case a
23a30 6c 6c 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73  ll.scalar expres
23a40 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61  sions are evalua
23a50 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61  ted before any a
23a60 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d  ssignments are m
23a70 61 64 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70  ade...<p>^The op
23a80 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d  tional conflict-
23a90 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68  clause allows th
23aa0 65 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61  e user to nomina
23ab0 74 65 20 61 20 73 70 65 63 69 66 69 63 0a 63 6f  te a specific.co
23ac0 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63  nstraint conflic
23ad0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
23ae0 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75  orithm to use du
23af0 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50  ring this one UP
23b00 44 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65  DATE command..Re
23b10 66 65 72 20 74 6f 20 74 68 65 20 73 65 63 74 69  fer to the secti
23b20 6f 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20  on entitled [ON 
23b30 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64  CONFLICT] for ad
23b40 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
23b50 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72  tion...<h3>Restr
23b60 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54  ictions on UPDAT
23b70 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74  E Statements Wit
23b80 68 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47  hin CREATE TRIGG
23b90 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ER</h3>..<p>The 
23ba0 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69  following additi
23bb0 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74  onal syntax rest
23bc0 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74  rictions apply t
23bd0 6f 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  o UPDATE stateme
23be0 6e 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77  nts that.occur w
23bf0 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
23c00 66 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47  f a [CREATE TRIG
23c10 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  GER] statement. 
23c20 20 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70   ..<ul>.  <li><p
23c30 3e 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e  >^The <i>table-n
23c40 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66 69 65  ame</i> specifie
23c50 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
23c60 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
23c70 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20   within.      a 
23c80 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73  trigger body mus
23c90 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64  t be unqualified
23ca0 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72  . ^(In other wor
23cb0 64 73 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69  ds, the.      <i
23cc0 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
23cd0 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69  i><b>.</b> prefi
23ce0 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  x on the table n
23cf0 61 6d 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  ame of the UPDAT
23d00 45 20 69 73 0a 20 20 20 20 20 20 6e 6f 74 20 61  E is.      not a
23d10 6c 6c 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72  llowed within tr
23d20 69 67 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73  iggers.)^ ^Unles
23d30 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  s the table to w
23d40 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
23d50 0a 20 20 20 20 20 20 69 73 20 61 74 74 61 63 68  .      is attach
23d60 65 64 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d  ed is in the TEM
23d70 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 20  P database, the 
23d80 74 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61  table being upda
23d90 74 65 64 20 62 79 20 74 68 65 0a 20 20 20 20 20  ted by the.     
23da0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
23db0 20 6d 75 73 74 20 72 65 73 69 64 65 20 69 6e 20   must reside in 
23dc0 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
23dd0 65 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65  e as it. ^If the
23de0 20 74 61 62 6c 65 0a 20 20 20 20 20 20 74 6f 20   table.      to 
23df0 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
23e00 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73  r is attached is
23e10 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74   in the TEMP dat
23e20 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a  abase, then the.
23e30 20 20 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65        unqualifie
23e40 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
23e50 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65  ble being update
23e60 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e  d is resolved in
23e70 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a 20 20   the same way.  
23e80 20 20 20 20 61 73 20 69 74 20 69 73 20 66 6f 72      as it is for
23e90 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61   a top-level sta
23ea0 74 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63  tement (by searc
23eb0 68 69 6e 67 20 66 69 72 73 74 20 74 68 65 20 54  hing first the T
23ec0 45 4d 50 20 64 61 74 61 62 61 73 65 2c 0a 20 20  EMP database,.  
23ed0 20 20 20 20 74 68 65 6e 20 74 68 65 20 6d 61 69      then the mai
23ee0 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  n database, then
23ef0 20 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62   any other datab
23f00 61 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65  ases in the orde
23f10 72 20 74 68 65 79 20 77 65 72 65 0a 20 20 20 20  r they were.    
23f20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 0a 20 20    attached)...  
23f30 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45  <li><p>^The INDE
23f40 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49  XED BY and NOT I
23f50 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61  NDEXED clauses a
23f60 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f  re not allowed o
23f70 6e 20 55 50 44 41 54 45 0a 20 20 20 20 20 20 73  n UPDATE.      s
23f80 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
23f90 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a   triggers.</p>..
23fa0 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49    <li><p>^The LI
23fb0 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59  MIT and ORDER BY
23fc0 20 63 6c 61 75 73 65 73 20 66 6f 72 20 55 50 44   clauses for UPD
23fd0 41 54 45 20 61 72 65 20 75 6e 73 75 70 70 6f 72  ATE are unsuppor
23fe0 74 65 64 20 77 69 74 68 69 6e 0a 20 20 20 20 20  ted within.     
23ff0 20 74 72 69 67 67 65 72 73 2c 20 72 65 67 61 72   triggers, regar
24000 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d  dless of the com
24010 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  pilation options
24020 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53   used to build S
24030 51 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68  QLite..</ul>..<h
24040 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54  3>Optional LIMIT
24050 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c   and ORDER BY Cl
24060 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  auses</h3>..<p>^
24070 28 49 66 20 53 51 4c 69 74 65 20 69 73 20 62 75  (If SQLite is bu
24080 69 6c 74 20 77 69 74 68 20 74 68 65 20 5b 53 51  ilt with the [SQ
24090 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
240a0 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
240b0 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70  .compile-time op
240c0 74 69 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79  tion then the sy
240d0 6e 74 61 78 20 6f 66 20 74 68 65 20 55 50 44 41  ntax of the UPDA
240e0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
240f0 65 78 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70  extended.with op
24100 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20  tional ORDER BY 
24110 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
24120 73 29 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  s)^ as follows:<
24130 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65  /p>..<tcl>Bubble
24140 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73  Diagram update-s
24150 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c  tmt-limited</tcl
24160 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44  >..<p>^If an UPD
24170 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ATE statement ha
24180 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
24190 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  , the maximum nu
241a0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
241b0 74 0a 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65  t.will be update
241c0 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76  d is found by ev
241d0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63  aluating the acc
241e0 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73  ompanying expres
241f0 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67  sion and casting
24200 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  .it to an intege
24210 72 20 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61  r value. ^A nega
24220 74 69 76 65 20 76 61 6c 75 65 20 69 73 20 69 6e  tive value is in
24230 74 65 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f  terpreted as "no
24240 20 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66   limit"...<p>^If
24250 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65   the LIMIT expre
24260 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
24270 74 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  to non-negative 
24280 76 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61  value <i>N</i> a
24290 6e 64 20 74 68 65 0a 55 50 44 41 54 45 20 73 74  nd the.UPDATE st
242a0 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f  atement has an O
242b0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
242c0 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68  then all rows th
242d0 61 74 20 77 6f 75 6c 64 20 62 65 20 75 70 64 61  at would be upda
242e0 74 65 64 20 69 6e 0a 74 68 65 20 61 62 73 65 6e  ted in.the absen
242f0 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
24300 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65  clause are sorte
24310 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  d according to t
24320 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  he ORDER BY and 
24330 74 68 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f  the.first <i>N</
24340 69 3e 20 75 70 64 61 74 65 64 2e 20 5e 28 49 66  i> updated. ^(If
24350 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
24360 65 6d 65 6e 74 20 61 6c 73 6f 20 68 61 73 20 61  ement also has a
24370 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  n OFFSET clause,
24380 0a 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69  .then it is simi
24390 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20  larly evaluated 
243a0 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 20 69  and cast to an i
243b0 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
243c0 20 74 68 65 20 4f 46 46 53 45 54 0a 65 78 70 72   the OFFSET.expr
243d0 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
243e0 20 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69   to a non-negati
243f0 76 65 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69  ve value <i>M</i
24400 3e 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73  >, then the firs
24410 74 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20  t <i>M</i>.rows 
24420 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20  are skipped and 
24430 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69  the following <i
24440 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64 61  >N</i> rows upda
24450 74 65 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a  ted instead.)^..
24460 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54  <p>^If the UPDAT
24470 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
24480 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  no ORDER BY clau
24490 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77  se, then all row
244a0 73 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20  s that.would be 
244b0 75 70 64 61 74 65 64 20 69 6e 20 74 68 65 20 61  updated in the a
244c0 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49  bsence of the LI
244d0 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61  MIT clause are a
244e0 73 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61  ssembled in an.a
244f0 72 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62  rbitrary order b
24500 65 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74  efore applying t
24510 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46  he LIMIT and OFF
24520 53 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64  SET clauses to d
24530 65 74 65 72 6d 69 6e 65 20 0a 77 68 69 63 68 20  etermine .which 
24540 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 70 64  are actually upd
24550 61 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  ated...<p>^(The 
24560 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
24570 6f 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  on an UPDATE sta
24580 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f  tement is used o
24590 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  nly to determine
245a0 20 77 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c   which.rows fall
245b0 20 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49   within the LIMI
245c0 54 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20  T. The order in 
245d0 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d  which rows are m
245e0 6f 64 69 66 69 65 64 20 69 73 20 61 72 62 69 74  odified is arbit
245f0 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20  rary.and is not 
24600 69 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68  influenced by th
24610 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
24620 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  e.)^..<tcl>.####
24630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24670 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
24680 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d  on VACUUM vacuum
24690 20 56 41 43 55 55 4d 0a 0a 42 75 62 62 6c 65 44   VACUUM..BubbleD
246a0 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d 73 74  iagram vacuum-st
246b0 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
246c0 0a 20 20 54 68 65 20 56 41 43 55 55 4d 20 63 6f  .  The VACUUM co
246d0 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64 73 20 74  mmand rebuilds t
246e0 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  he entire databa
246f0 73 65 2e 20 54 68 65 72 65 20 61 72 65 20 73 65  se. There are se
24700 76 65 72 61 6c 20 0a 20 20 72 65 61 73 6f 6e 73  veral .  reasons
24710 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   an application 
24720 6d 69 67 68 74 20 64 6f 20 74 68 69 73 3a 0a 0a  might do this:..
24730 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20  <ul>.  <li> <p> 
24740 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69  ^Unless SQLite i
24750 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22 61 75  s running in "au
24760 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c 22 20  to_vacuum=FULL" 
24770 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c 61 72  mode, when a lar
24780 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74 20 6f  ge.     amount o
24790 66 20 64 61 74 61 20 69 73 20 64 65 6c 65 74 65  f data is delete
247a0 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
247b0 61 73 65 20 66 69 6c 65 20 69 74 20 6c 65 61 76  ase file it leav
247c0 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79 0a  es behind empty.
247d0 20 20 20 20 20 73 70 61 63 65 2c 20 6f 72 20 22       space, or "
247e0 66 72 65 65 22 20 64 61 74 61 62 61 73 65 20 70  free" database p
247f0 61 67 65 73 2e 20 54 68 69 73 20 6d 65 61 6e 73  ages. This means
24800 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
24810 6c 65 20 6d 69 67 68 74 0a 20 20 20 20 20 62 65  le might.     be
24820 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73 74 72   larger than str
24830 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79 2e  ictly necessary.
24840 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d   ^Running VACUUM
24850 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20   to rebuild the 
24860 0a 20 20 20 20 20 64 61 74 61 62 61 73 65 20 72  .     database r
24870 65 63 6c 61 69 6d 73 20 74 68 69 73 20 73 70 61  eclaims this spa
24880 63 65 20 61 6e 64 20 72 65 64 75 63 65 73 20 74  ce and reduces t
24890 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  he size of the d
248a0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 0a 20  atabase file... 
248b0 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65 71 75   <li> <p> ^Frequ
248c0 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75 70 64  ent inserts, upd
248d0 61 74 65 73 2c 20 61 6e 64 20 64 65 6c 65 74 65  ates, and delete
248e0 73 20 63 61 6e 20 63 61 75 73 65 20 74 68 65 20  s can cause the 
248f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20  database file.  
24900 20 20 20 74 6f 20 62 65 63 6f 6d 65 20 66 72 61     to become fra
24910 67 6d 65 6e 74 65 64 20 2d 20 77 68 65 72 65 20  gmented - where 
24920 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67 6c  data for a singl
24930 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
24940 20 69 73 20 73 63 61 74 74 65 72 65 64 20 0a 20   is scattered . 
24950 20 20 20 20 61 72 6f 75 6e 64 20 74 68 65 20 64      around the d
24960 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 52  atabase file. ^R
24970 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 65 6e  unning VACUUM en
24980 73 75 72 65 73 20 74 68 61 74 20 65 61 63 68 20  sures that each 
24990 74 61 62 6c 65 20 61 6e 64 0a 20 20 20 20 20 69  table and.     i
249a0 6e 64 65 78 20 69 73 20 6c 61 72 67 65 6c 79 20  ndex is largely 
249b0 73 74 6f 72 65 64 20 63 6f 6e 74 69 67 75 6f 75  stored contiguou
249c0 73 6c 79 20 77 69 74 68 69 6e 20 74 68 65 20 64  sly within the d
249d0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 49  atabase file. ^I
249e0 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63 61 73 65  n some.     case
249f0 73 2c 20 56 41 43 55 55 4d 20 6d 61 79 20 61 6c  s, VACUUM may al
24a00 73 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  so reduce the nu
24a10 6d 62 65 72 20 6f 66 20 70 61 72 74 69 61 6c 6c  mber of partiall
24a20 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 69  y filled pages i
24a30 6e 0a 20 20 20 20 20 74 68 65 20 64 61 74 61 62  n.     the datab
24a40 61 73 65 2c 20 72 65 64 75 63 69 6e 67 20 74 68  ase, reducing th
24a50 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  e size of the da
24a60 74 61 62 61 73 65 20 66 69 6c 65 20 66 75 72 74  tabase file furt
24a70 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  her...  <li> <p>
24a80 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 20   ^Normally, the 
24a90 64 61 74 61 62 61 73 65 20 5b 70 61 67 65 5f 73  database [page_s
24aa0 69 7a 65 5d 20 61 6e 64 20 77 68 65 74 68 65 72  ize] and whether
24ab0 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61 74 61   or not the data
24ac0 62 61 73 65 0a 20 20 20 20 20 73 75 70 70 6f 72  base.     suppor
24ad0 74 73 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  ts [auto_vacuum]
24ae0 20 6d 75 73 74 20 62 65 20 63 6f 6e 66 69 67 75   must be configu
24af0 72 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 64  red before the d
24b00 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a  atabase file is.
24b10 20 20 20 20 20 61 63 74 75 61 6c 6c 79 20 63 72       actually cr
24b20 65 61 74 65 64 2e 20 5e 48 6f 77 65 76 65 72 2c  eated. ^However,
24b30 20 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 77 72   when not in [wr
24b40 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d  ite-ahead log] m
24b50 6f 64 65 2c 20 74 68 65 20 0a 20 20 20 20 20 5b  ode, the .     [
24b60 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f  page_size] and/o
24b70 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  r [auto_vacuum] 
24b80 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20 61 6e  properties of an
24b90 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
24ba0 73 65 20 6d 61 79 20 62 65 0a 20 20 20 20 20 63  se may be.     c
24bb0 68 61 6e 67 65 64 20 62 79 20 75 73 69 6e 67 20  hanged by using 
24bc0 74 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 20 70  the [page_size p
24bd0 72 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a 65 5d  ragma|page_size]
24be0 20 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20 20 5b    and/or .     [
24bf0 61 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72 61 67  auto_vacuum|prag
24c00 6d 61 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  ma auto_vacuum] 
24c10 70 72 61 67 6d 61 73 20 61 6e 64 20 74 68 65 6e  pragmas and then
24c20 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41 43   immediately VAC
24c30 55 55 4d 69 6e 67 0a 20 20 20 20 20 74 68 65 20  UUMing.     the 
24c40 64 61 74 61 62 61 73 65 2e 20 5e 57 68 65 6e 20  database. ^When 
24c50 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20  in [write-ahead 
24c60 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c 79 20  log] mode, only 
24c70 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  the [auto_vacuum
24c80 5d 0a 20 20 20 20 20 73 75 70 70 6f 72 74 20 70  ].     support p
24c90 72 6f 70 65 72 74 79 20 63 61 6e 20 62 65 20 63  roperty can be c
24ca0 68 61 6e 67 65 64 20 75 73 69 6e 67 20 56 41 43  hanged using VAC
24cb0 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  UUM..</ul>..<p>^
24cc0 28 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72  (VACUUM only wor
24cd0 6b 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64  ks on the main d
24ce0 61 74 61 62 61 73 65 2e 20 49 74 20 69 73 20 6e  atabase. It is n
24cf0 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 56  ot possible to V
24d00 41 43 55 55 4d 20 61 6e 0a 61 74 74 61 63 68 65  ACUUM an.attache
24d10 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  d database file.
24d20 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55  )^..<p>^The VACU
24d30 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73  UM command works
24d40 20 62 79 20 63 6f 70 79 69 6e 67 20 74 68 65 20   by copying the 
24d50 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
24d60 64 61 74 61 62 61 73 65 20 69 6e 74 6f 0a 61 20  database into.a 
24d70 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
24d80 73 65 20 66 69 6c 65 20 61 6e 64 20 74 68 65 6e  se file and then
24d90 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68 65   overwriting the
24da0 20 6f 72 69 67 69 6e 61 6c 20 77 69 74 68 20 74   original with t
24db0 68 65 20 0a 63 6f 6e 74 65 6e 74 73 20 6f 66 20  he .contents of 
24dc0 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69  the temporary fi
24dd0 6c 65 2e 20 5e 57 68 65 6e 20 6f 76 65 72 77 72  le. ^When overwr
24de0 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e  iting the origin
24df0 61 6c 2c 20 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a  al, a rollback.j
24e00 6f 75 72 6e 61 6c 20 6f 72 20 5b 77 72 69 74 65  ournal or [write
24e10 2d 61 68 65 61 64 20 6c 6f 67 5d 20 57 41 4c 20  -ahead log] WAL 
24e20 66 69 6c 65 20 69 73 20 75 73 65 64 20 6a 75 73  file is used jus
24e30 74 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  t as it would be
24e40 20 66 6f 72 20 61 6e 79 0a 6f 74 68 65 72 20 64   for any.other d
24e50 61 74 61 62 61 73 65 20 74 72 61 6e 73 61 63 74  atabase transact
24e60 69 6f 6e 2e 20 5e 54 68 69 73 20 6d 65 61 6e 73  ion. ^This means
24e70 20 74 68 61 74 20 77 68 65 6e 20 56 41 43 55 55   that when VACUU
24e80 4d 69 6e 67 20 61 20 64 61 74 61 62 61 73 65 2c  Ming a database,
24e90 20 0a 61 73 20 6d 75 63 68 20 61 73 20 74 77 69   .as much as twi
24ea0 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ce the size of t
24eb0 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61  he original data
24ec0 62 61 73 65 20 66 69 6c 65 20 69 73 20 72 65 71  base file is req
24ed0 75 69 72 65 64 20 69 6e 20 66 72 65 65 0a 64 69  uired in free.di
24ee0 73 6b 20 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54  sk space...<p>^T
24ef0 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
24f00 64 20 6d 61 79 20 63 68 61 6e 67 65 20 74 68 65  d may change the
24f10 20 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49 44 73   [ROWID | ROWIDs
24f20 5d 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  ] of entries in 
24f30 61 6e 79 0a 74 61 62 6c 65 73 20 74 68 61 74 20  any.tables that 
24f40 64 6f 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 65  do not have an e
24f50 78 70 6c 69 63 69 74 20 5b 49 4e 54 45 47 45 52  xplicit [INTEGER
24f60 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c   PRIMARY KEY]..<
24f70 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43 55 55  /p>..<p>^A VACUU
24f80 4d 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74  M will fail if t
24f90 68 65 72 65 20 69 73 20 61 6e 20 6f 70 65 6e 20  here is an open 
24fa0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 6f 72 20  transaction, or 
24fb0 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 6e 65  if there are one
24fc0 20 6f 72 0a 6d 6f 72 65 20 61 63 74 69 76 65 20   or.more active 
24fd0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77  SQL statements w
24fe0 68 65 6e 20 69 74 20 69 73 20 72 75 6e 2e 0a 0a  hen it is run...
24ff0 3c 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c 69 74  <p>^(As of SQLit
25000 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61  e version 3.1, a
25010 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f  n alternative to
25020 20 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55   using the VACUU
25030 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65 63  M command to.rec
25040 6c 61 69 6d 20 73 70 61 63 65 20 61 66 74 65 72  laim space after
25050 20 64 61 74 61 20 68 61 73 20 62 65 65 6e 20 64   data has been d
25060 65 6c 65 74 65 64 20 69 73 20 61 75 74 6f 2d 76  eleted is auto-v
25070 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62  acuum mode, enab
25080 6c 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b 61  led using.the [a
25090 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67  uto_vacuum] prag
250a0 6d 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61 75 74  ma.)^ ^When [aut
250b0 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e 61  o_vacuum] is ena
250c0 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61 62  bled for a datab
250d0 61 73 65 0a 66 72 65 65 20 70 61 67 65 73 20 6d  ase.free pages m
250e0 61 79 20 62 65 20 72 65 63 6c 61 69 6d 65 64 20  ay be reclaimed 
250f0 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20 64  after deleting d
25100 61 74 61 2c 20 63 61 75 73 69 6e 67 20 74 68 65  ata, causing the
25110 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2c   file to shrink,
25120 0a 77 69 74 68 6f 75 74 20 72 65 62 75 69 6c 64  .without rebuild
25130 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20 64  ing the entire d
25140 61 74 61 62 61 73 65 20 75 73 69 6e 67 20 56 41  atabase using VA
25150 43 55 55 4d 2e 20 20 48 6f 77 65 76 65 72 2c 20  CUUM.  However, 
25160 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61 63 75  using.[auto_vacu
25170 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74 6f 20  um] can lead to 
25180 65 78 74 72 61 20 64 61 74 61 62 61 73 65 20 66  extra database f
25190 69 6c 65 20 66 72 61 67 6d 65 6e 74 61 74 69 6f  ile fragmentatio
251a0 6e 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f 76 61  n.  And [auto_va
251b0 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63  cuum].does not c
251c0 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c 79  ompact partially
251d0 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f 66   filled pages of
251e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 73   the database as
251f0 20 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a 3c   VACUUM does...<
25200 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /p>...<tcl>.####
25210 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25250 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
25260 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d 20  on {INDEXED BY} 
25270 69 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44 45  indexedby {{INDE
25280 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44  XED BY} {NOT IND
25290 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c  EXED}}..</tcl>.<
252a0 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42  p>^The INDEXED B
252b0 59 20 70 68 72 61 73 65 20 69 73 20 61 20 53 51  Y phrase is a SQ
252c0 4c 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 75 6e  L extension foun
252d0 64 20 6f 6e 6c 79 20 69 6e 20 53 51 4c 69 74 65  d only in SQLite
252e0 20 77 68 69 63 68 20 63 61 6e 0a 62 65 20 75 73   which can.be us
252f0 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ed to verify tha
25300 74 20 74 68 65 20 63 6f 72 72 65 63 74 20 69 6e  t the correct in
25310 64 69 63 65 73 20 61 72 65 20 62 65 69 6e 67 20  dices are being 
25320 75 73 65 64 20 6f 6e 20 61 20 5b 44 45 4c 45 54  used on a [DELET
25330 45 5d 2c 0a 5b 53 45 4c 45 43 54 5d 2c 20 6f 72  E],.[SELECT], or
25340 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d   [UPDATE] statem
25350 65 6e 74 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45  ent..^The INDEXE
25360 44 20 42 59 20 70 68 72 61 73 65 20 61 6c 77 61  D BY phrase alwa
25370 79 73 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 6e  ys follows the n
25380 61 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20 74  ame of a table t
25390 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a  hat SQLite will.
253a0 62 65 20 72 65 61 64 69 6e 67 2e 20 20 54 68 65  be reading.  The
253b0 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61   INDEXED BY phra
253c0 73 65 20 63 61 6e 20 62 65 20 73 65 65 6e 20 69  se can be seen i
253d0 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
253e0 73 79 6e 74 61 78 0a 64 69 61 67 72 61 6d 73 3a  syntax.diagrams:
253f0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 42 75 62 62  </p>..<tcl>.Bubb
25400 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66  leDiagram qualif
25410 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 42  ied-table-name.B
25420 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6e  ubbleDiagram sin
25430 67 6c 65 2d 73 6f 75 72 63 65 0a 3c 2f 74 63 6c  gle-source.</tcl
25440 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45  >..<p>^The "INDE
25450 58 45 44 20 42 59 20 69 6e 64 65 78 2d 6e 61 6d  XED BY index-nam
25460 65 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66  e" clause specif
25470 69 65 73 20 74 68 61 74 20 74 68 65 20 6e 61 6d  ies that the nam
25480 65 64 20 69 6e 64 65 78 0a 6d 75 73 74 20 62 65  ed index.must be
25490 20 75 73 65 64 20 69 6e 20 6f 72 64 65 72 20 74   used in order t
254a0 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73  o look up values
254b0 20 6f 6e 20 74 68 65 20 70 72 65 63 65 64 69 6e   on the precedin
254c0 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20 69 6e 64  g table..^If ind
254d0 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74  ex-name does not
254e0 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74   exist or cannot
254f0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
25500 20 71 75 65 72 79 2c 20 74 68 65 6e 0a 74 68 65   query, then.the
25510 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66 20   preparation of 
25520 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
25530 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22  t fails..^(The "
25540 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61  NOT INDEXED" cla
25550 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68  use specifies th
25560 61 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c  at no index shal
25570 6c 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61  l be used when.a
25580 63 63 65 73 73 69 6e 67 20 74 68 65 20 70 72 65  ccessing the pre
25590 63 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e  ceding table, in
255a0 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20  cluding implied 
255b0 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 20 62  indices create b
255c0 79 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49  y.UNIQUE and PRI
255d0 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
255e0 69 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20  ints.  However, 
255f0 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d  the INTEGER PRIM
25600 41 52 59 20 4b 45 59 0a 63 61 6e 20 73 74 69 6c  ARY KEY.can stil
25610 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f  l be used to loo
25620 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65 76 65  k up entries eve
25630 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45  n when "NOT INDE
25640 58 45 44 22 20 69 73 20 73 70 65 63 69 66 69 65  XED" is specifie
25650 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d  d.)^</p>..<p>Som
25660 65 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  e SQL database e
25670 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e  ngines provide n
25680 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e  on-standard "hin
25690 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68  t" mechanisms wh
256a0 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20  ich.can be used 
256b0 74 6f 20 67 69 76 65 20 74 68 65 20 71 75 65 72  to give the quer
256c0 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65  y optimizer clue
256d0 73 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64  s about what ind
256e0 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75  ices it should.u
256f0 73 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75  se for a particu
25700 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  lar statement.  
25710 54 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61  The INDEX BY cla
25720 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73  use of SQLite is
25730 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61   .<em>not</em> a
25740 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69   hinting mechani
25750 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64  sm and it should
25760 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20   not be used as 
25770 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58  such..^The INDEX
25780 45 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65  ED BY clause doe
25790 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f  s not give the o
257a0 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61  ptimizer hints a
257b0 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65 78  bout which index
257c0 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65  .to use; it give
257d0 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  s the optimizer 
257e0 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66  a requirement of
257f0 20 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20   which index to 
25800 75 73 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65  use..^If the que
25810 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20  ry optimizer is 
25820 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68  unable to use th
25830 65 20 69 6e 64 65 78 20 73 70 65 63 69 66 69 65  e index specifie
25840 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42  d by the.INDEX B
25850 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
25860 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61  he query will fa
25870 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  il with an error
25880 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  .</p>..<p>The IN
25890 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
258a0 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  is <em>not</em> 
258b0 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
258c0 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70   in tuning.the p
258d0 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20  erformance of a 
258e0 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65  query.  The inte
258f0 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45  nt of the INDEXE
25900 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74  D BY clause is.t
25910 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69  o raise a run-ti
25920 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20 73 63  me error if a sc
25930 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63  hema change, suc
25940 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72  h as dropping or
25950 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64  .creating an ind
25960 65 78 2c 20 63 61 75 73 65 73 20 74 68 65 20 71  ex, causes the q
25970 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20  uery plan for a 
25980 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71  time-sensitive q
25990 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20  uery.to change. 
259a0 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   The INDEXED BY 
259b0 63 6c 61 75 73 65 20 69 73 20 64 65 73 69 67 6e  clause is design
259c0 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63  ed to help detec
259d0 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75  t.undesirable qu
259e0 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73  ery plan changes
259f0 20 64 75 72 69 6e 67 20 72 65 67 72 65 73 73 69   during regressi
25a00 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 44 65 76 65  on testing..Deve
25a10 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e  lopers are admon
25a20 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c  ished to omit al
25a30 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44  l use of INDEXED
25a40 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69   BY during.appli
25a50 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69  cation design, i
25a60 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
25a70 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69  esting, and tuni
25a80 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20  ng.  If.INDEXED 
25a90 42 59 20 69 73 20 74 6f 20 62 65 20 75 73 65 64  BY is to be used
25aa0 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75   at all, it shou
25ab0 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64 20 61  ld be inserted a
25ac0 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f  t the very.end o
25ad0 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e  f the developmen
25ae0 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22  t process when "
25af0 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20  locking down" a 
25b00 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33  design.</p>..<h3
25b10 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a  >See Also:</h3>.
25b20 0a 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74 65 33  .<p>The [sqlite3
25b30 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20  _stmt_status()] 
25b40 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20  C/C++ interface 
25b50 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 68  together with th
25b60 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  e.[SQLITE_STMTST
25b70 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54  ATUS_FULLSCAN_ST
25b80 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f  EP] and [SQLITE_
25b90 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d  STMTSTATUS_SORT]
25ba0 20 76 65 72 62 73 0a 63 61 6e 20 62 65 20 75 73   verbs.can be us
25bb0 65 64 20 74 6f 20 64 65 74 65 63 74 20 61 74 20  ed to detect at 
25bc0 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e  run-time when an
25bd0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69   SQL statement i
25be0 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66  s not.making eff
25bf0 65 63 74 69 76 65 20 75 73 65 20 6f 66 20 69 6e  ective use of in
25c00 64 69 63 65 73 2e 20 20 4d 61 6e 79 20 61 70 70  dices.  Many app
25c10 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79 20 70 72  lications may pr
25c20 65 66 65 72 20 74 6f 0a 75 73 65 20 74 68 65 20  efer to.use the 
25c30 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74  [sqlite3_stmt_st
25c40 61 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63  atus()] interfac
25c50 65 20 74 6f 20 64 65 74 65 63 74 20 69 6e 64 65  e to detect inde
25c60 78 20 6d 69 73 75 73 65 0a 72 61 74 68 65 72 20  x misuse.rather 
25c70 74 68 61 6e 20 74 68 65 20 49 4e 44 45 58 45 44  than the INDEXED
25c80 20 42 59 20 70 68 72 61 73 65 20 64 65 73 63 72   BY phrase descr
25c90 69 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 0a  ibed here.</p>..
25ca0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
25cb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25cd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25cf0 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f 66 20  ###.# A list of 
25d00 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61 73 74  keywords.  A ast
25d10 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61 66 74  erisk occurs aft
25d20 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20 69  er the keyword i
25d30 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74 68 65  f it is on.# the
25d40 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a   fallback list..
25d50 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69  #.set keyword_li
25d60 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41  st [lsort {.   A
25d70 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20  BORT.   ACTION. 
25d80 20 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a 20    ADD.   AFTER. 
25d90 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20    ALL.   ALTER. 
25da0 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44    ANALYZE.   AND
25db0 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20 20  .   AS.   ASC.  
25dc0 20 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f 49   ATTACH.   AUTOI
25dd0 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f  NCREMENT.   BEFO
25de0 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20 42  RE.   BEGIN.   B
25df0 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20  ETWEEN.   BY.   
25e00 43 41 53 43 41 44 45 0a 20 20 20 43 41 53 45 0a  CASCADE.   CASE.
25e10 20 20 20 43 41 53 54 0a 20 20 20 43 48 45 43 4b     CAST.   CHECK
25e20 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43  .   COLLATE.   C
25e30 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a  OLUMN.   COMMIT.
25e40 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43     CONFLICT.   C
25e50 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45  ONSTRAINT.   CRE
25e60 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20  ATE.   CROSS.   
25e70 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20  CURRENT_DATE.   
25e80 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20  CURRENT_TIME.   
25e90 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
25ea0 50 0a 20 20 20 44 41 54 41 42 41 53 45 0a 20 20  P.   DATABASE.  
25eb0 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45   DEFAULT.   DEFE
25ec0 52 52 45 44 0a 20 20 20 44 45 46 45 52 52 41 42  RRED.   DEFERRAB
25ed0 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20  LE.   DELETE.   
25ee0 44 45 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20  DESC.   DETACH. 
25ef0 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52    DISTINCT.   DR
25f00 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43  OP.   END.   EAC
25f10 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43  H.   ELSE.   ESC
25f20 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20  APE.   EXCEPT.  
25f30 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58   EXCLUSIVE.   EX
25f40 49 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a  ISTS.   EXPLAIN.
25f50 20 20 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20     FAIL.   FOR. 
25f60 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f    FOREIGN.   FRO
25f70 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f  M.   FULL.   GLO
25f80 42 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41  B.   GROUP.   HA
25f90 56 49 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47  VING.   IF.   IG
25fa0 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54  NORE.   IMMEDIAT
25fb0 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58  E.   IN.   INDEX
25fc0 0a 20 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49  .   INDEXED.   I
25fd0 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45  NITIALLY.   INNE
25fe0 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49  R.   INSERT.   I
25ff0 4e 53 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53  NSTEAD.   INTERS
26000 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49  ECT.   INTO.   I
26010 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a  S.   ISNULL.   J
26020 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45  OIN.   KEY.   LE
26030 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49  FT.   LIKE.   LI
26040 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20  MIT.   MATCH.   
26050 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20  NATURAL.   NO.  
26060 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a   NOT.   NOTNULL.
26070 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20     NULL.   OF.  
26080 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20   OFFSET.   ON.  
26090 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20   OR.   ORDER.   
260a0 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20  OUTER.   PLAN.  
260b0 20 50 52 41 47 4d 41 0a 20 20 20 50 52 49 4d 41   PRAGMA.   PRIMA
260c0 52 59 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52  RY.   QUERY.   R
260d0 41 49 53 45 0a 20 20 20 52 45 46 45 52 45 4e 43  AISE.   REFERENC
260e0 45 53 0a 20 20 20 52 45 47 45 58 50 0a 20 20 20  ES.   REGEXP.   
260f0 52 45 49 4e 44 45 58 0a 20 20 20 52 45 4c 45 41  REINDEX.   RELEA
26100 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20 20  SE.   RENAME.   
26110 52 45 50 4c 41 43 45 0a 20 20 20 52 45 53 54 52  REPLACE.   RESTR
26120 49 43 54 0a 20 20 20 52 49 47 48 54 0a 20 20 20  ICT.   RIGHT.   
26130 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a  ROLLBACK.   ROW.
26140 20 20 20 53 41 56 45 50 4f 49 4e 54 0a 20 20 20     SAVEPOINT.   
26150 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20  SELECT.   SET.  
26160 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20   TABLE.   TEMP. 
26170 20 20 54 45 4d 50 4f 52 41 52 59 0a 20 20 20 54    TEMPORARY.   T
26180 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41  HEN.   TO.   TRA
26190 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47  NSACTION.   TRIG
261a0 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20  GER.   UNION.   
261b0 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54 45  UNIQUE.   UPDATE
261c0 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43  .   USING.   VAC
261d0 55 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20 20  UUM.   VALUES.  
261e0 20 56 49 45 57 0a 20 20 20 56 49 52 54 55 41 4c   VIEW.   VIRTUAL
261f0 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52  .   WHEN.   WHER
26200 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c  E.}]..hd_puts {<
26210 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73  DIV class="pdf_s
26220 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f  ection">}.Sectio
26230 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72  n {SQLite Keywor
26240 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a  ds} keywords {{*
26250 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51  SQL keyword} {SQ
26260 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f  L keywords}}.hd_
26270 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f  puts {</DIV>}.</
26280 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c  tcl>..<p>The SQL
26290 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69 66   standard specif
262a0 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65  ies a huge numbe
262b0 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68  r of keywords wh
262c0 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75  ich may not.be u
262d0 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73  sed as the names
262e0 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69   of tables, indi
262f0 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61  ces, columns, da
26300 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65  tabases, user-de
26310 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c  fined.functions,
26320 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72   collations, vir
26330 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
26340 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72  es, or any other
26350 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54   named object..T
26360 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f  he list of keywo
26370 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74  rds is so long t
26380 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63  hat few people c
26390 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d  an remember them
263a0 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53   all..For most S
263b0 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61  QL code, your sa
263c0 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e  fest bet is to n
263d0 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67  ever use any Eng
263e0 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f  lish language.wo
263f0 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f  rd as the name o
26400 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  f a user-defined
26410 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70   object.</p>..<p
26420 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20  >If you want to 
26430 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73  use a keyword as
26440 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65   a name, you nee
26450 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20  d to quote it.  
26460 54 68 65 72 65 0a 61 72 65 20 74 68 72 65 65 20  There.are three 
26470 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20  ways of quoting 
26480 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69  keywords in SQLi
26490 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c  te:</p>..<p>.<bl
264a0 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
264b0 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
264c0 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77  n="top"><b>'keyw
264d0 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord'</b></td><td
264e0 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
264f0 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
26500 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74  d in single quot
26510 65 73 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c  es is a string l
26520 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72  iteral.</td></tr
26530 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
26540 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79  gn="top"><b>"key
26550 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  word"</b></td><t
26560 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  d></td>..<td>^A 
26570 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c  keyword in doubl
26580 65 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69  e-quotes is an i
26590 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c  dentifier.</td><
265a0 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76  /tr>..<tr>.<td v
265b0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26  align="top"><b>&
265c0 23 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b  #91;keyword&#93;
265d0 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74  </b></td><td></t
265e0 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
265f0 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73  rd enclosed in s
26600 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 20 69  quare brackets i
26610 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64  s .        an id
26620 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20  entifier.  This 
26630 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  is not standard 
26640 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69  SQL.  This quoti
26650 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20  ng mechanism.   
26660 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by 
26670 4d 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51  MS Access and SQ
26680 4c 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20  L Server and is 
26690 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69  included in SQLi
266a0 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63  te for.        c
266b0 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74  ompatibility.</t
266c0 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74  d></tr>..<tr>.<t
266d0 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
266e0 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23  b>&#96;keyword&#
266f0 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  96;</b></td><td>
26700 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
26710 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69  yword enclosed i
26720 6e 20 67 72 61 76 65 20 61 63 63 65 6e 74 73 20  n grave accents 
26730 28 41 53 43 49 49 20 63 6f 64 65 20 39 36 29 20  (ASCII code 96) 
26740 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69  is .        an i
26750 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73  dentifier.  This
26760 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64   is not standard
26770 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74   SQL.  This quot
26780 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20  ing mechanism.  
26790 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79        is used by
267a0 20 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e   MySQL and is in
267b0 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65  cluded in SQLite
267c0 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d   for.        com
267d0 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e  patibility.</td>
267e0 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
267f0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70  /blockquote>.</p
26800 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69  >..<p>For resili
26810 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f  ence when confro
26820 6e 74 65 64 20 77 69 74 68 20 68 69 73 74 6f 72  nted with histor
26830 69 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65  ical SQL stateme
26840 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c  nts, SQLite.will
26850 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20   sometimes bend 
26860 74 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65  the quoting rule
26870 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75  s above:</p>..<u
26880 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20  l>.<li><p>^If a 
26890 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c  keyword in singl
268a0 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62  e.quotes (ex: <b
268b0 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62  >'key'</b> or <b
268c0 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20  >'glob'</b>) is 
268d0 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78  used in a contex
268e0 74 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74  t where.an ident
268f0 69 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64  ifier is allowed
26900 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72   but where a str
26910 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e  ing literal is n
26920 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e  ot allowed, then
26930 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e  .the token is un
26940 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61  derstood to be a
26950 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73  n identifier ins
26960 74 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67  tead of a string
26970 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f   literal..</p></
26980 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  li>..<li><p>^If 
26990 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75  a keyword in dou
269a0 62 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20  ble.quotes (ex: 
269b0 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20  <b>"key"</b> or 
269c0 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69  <b>"glob"</b>) i
269d0 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74  s used in a cont
269e0 65 78 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e  ext where.it can
269f0 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20  not be resolved 
26a00 74 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  to an identifier
26a10 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72   but where a str
26a20 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61  ing literal.is a
26a30 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65  llowed, then the
26a40 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73   token is unders
26a50 74 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72  tood to be a str
26a60 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74  ing literal inst
26a70 65 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69  ead.of an identi
26a80 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  fier.</p></li>.<
26a90 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d  /ul>..<p>Program
26aa0 6d 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e  mers are caution
26ab0 65 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68  ed not to use th
26ac0 65 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73  e two exceptions
26ad0 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68   described in.th
26ae0 65 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65  e previous bulle
26af0 74 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a  ts.  We emphasiz
26b00 65 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73  e that they exis
26b10 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f  t only so that o
26b20 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65  ld.and ill-forme
26b30 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  d SQL statements
26b40 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63   will run correc
26b50 74 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72  tly.  Future ver
26b60 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
26b70 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 6f 20  might change to 
26b80 72 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73  raise errors ins
26b90 74 65 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e  tead of acceptin
26ba0 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a  g the malformed.
26bb0 73 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72  statements cover
26bc0 65 64 20 62 79 20 74 68 65 20 65 78 63 65 70 74  ed by the except
26bd0 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a  ions above.</p>.
26be0 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73  .<p>.SQLite adds
26bf0 20 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72   new keywords fr
26c00 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20  om time to time 
26c10 77 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e  when it takes on
26c20 20 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53   new features..S
26c30 6f 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75  o to prevent you
26c40 72 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e  r code from bein
26c50 67 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75  g broken by futu
26c60 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c  re enhancements,
26c70 20 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d   you should.norm
26c80 61 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69  ally quote any i
26c90 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69  dentifier that i
26ca0 73 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e  s an English lan
26cb0 67 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e  guage word, even
26cc0 20 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68   if.you do not h
26cd0 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ave to..</p>..<p
26ce0 3e 0a 54 68 65 20 6c 69 73 74 20 62 65 6c 6f 77  >.The list below
26cf0 20 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69   shows all possi
26d00 62 6c 65 20 6b 65 79 77 6f 72 64 73 20 75 73 65  ble keywords use
26d10 64 20 62 79 20 61 6e 79 20 62 75 69 6c 64 20 6f  d by any build o
26d20 66 0a 53 51 4c 69 74 65 20 72 65 67 61 72 64 6c  f.SQLite regardl
26d30 65 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d  ess of [compile-
26d40 74 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20  time options].  
26d50 0a 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c 65  .Most reasonable
26d60 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20   configurations 
26d70 75 73 65 20 6d 6f 73 74 20 6f 72 20 61 6c 6c 20  use most or all 
26d80 6f 66 20 74 68 65 73 65 20 6b 65 79 77 6f 72 64  of these keyword
26d90 73 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79 77  s,.but some keyw
26da0 6f 72 64 73 20 6d 61 79 20 62 65 20 6f 6d 69 74  ords may be omit
26db0 74 65 64 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e  ted when SQL lan
26dc0 67 75 61 67 65 20 66 65 61 74 75 72 65 73 20 61  guage features a
26dd0 72 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52  re.disabled..^(R
26de0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
26df0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f   compile-time co
26e00 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79  nfiguration, any
26e10 20 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74   identifier that
26e20 20 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66   is not on.the f
26e30 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64  ollowing <tcl>hd
26e40 5f 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24  _puts [llength $
26e50 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74  keyword_list]</t
26e60 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74  cl> element.list
26e70 20 69 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72   is not a keywor
26e80 64 20 74 6f 20 74 68 65 20 53 51 4c 20 70 61 72  d to the SQL par
26e90 73 65 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c  ser in SQLite:.<
26ea0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
26eb0 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
26ec0 31 30 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20 61  100%"><tr>.<td a
26ed0 6c 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69  lign="left" vali
26ee0 67 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22  gn="top" width="
26ef0 32 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20  20%">.<tcl>.set 
26f00 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77  n [llength $keyw
26f10 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43  ord_list].set nC
26f20 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65  ol 5.set nRow [e
26f30 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31  xpr {($n+$nCol-1
26f40 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20  )/$nCol}].set i 
26f50 30 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24  0.foreach word $
26f60 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20  keyword_list {. 
26f70 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20   if {$i==$nRow} 
26f80 7b 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c  {.    hd_puts "<
26f90 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c  /td><td valign=\
26fa0 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c  "top\" align=\"l
26fb0 65 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30  eft\" width=\"20
26fc0 25 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20  %\">".    set i 
26fd0 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  1.  } else {.   
26fe0 20 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64   incr i.  }.  hd
26ff0 5f 70 75 74 73 20 22 24 77 6f 72 64 3c 62 72 3e  _puts "$word<br>
27000 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  \n".}.</tcl>.</t
27010 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c  d></tr></table><
27020 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a     /blockquote>)^.