Documentation Source Text

Hex Artifact Content
Login

Artifact 305a722a06652c9d593e26916b3afb4c5593306c:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f  .    {comment co
03d0: 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c  mment}.    {EXPL
03e0: 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20  AIN explain}.   
03f0: 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70   {expression exp
0400: 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54  r}.    {{BEGIN T
0410: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0420: 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43  saction}.    {{C
0430: 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f  OMMIT TRANSACTIO
0440: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43  N} transaction C
0450: 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44  OMMIT}.    {{END
0460: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
0470: 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54  ansaction COMMIT
0480: 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b  }.    {{ROLLBACK
0490: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
04a0: 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41  ansaction ROLLBA
04b0: 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49  CK}.    {SAVEPOI
04c0: 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20  NT savepoint}.  
04d0: 20 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45    {{RELEASE SAVE
04e0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
04f0: 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20   SAVEPOINT}.    
0500: 7b 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68  {PRAGMA pragma.h
0510: 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f  tml}.    {{ON CO
0520: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
0530: 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43  onflict}.    {{C
0540: 52 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61  REATE VIEW} crea
0550: 74 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52  teview}.    {{DR
0560: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
0570: 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20  w}.    {{CREATE 
0580: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
0590: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52  rigger}.    {{DR
05a0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
05b0: 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41  trigger}.    {{A
05c0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  TTACH DATABASE} 
05d0: 61 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45  attach}.    {{DE
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
05f0: 65 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45  etach}.      {RE
0600: 49 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20  INDEX reindex}. 
0610: 20 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45     {{ALTER TABLE
0620: 7d 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20  } altertable}.  
0630: 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61    {{ANALYZE} ana
0640: 6c 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45  lyze}.    {{INDE
0650: 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62  XED BY} indexedb
0660: 79 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61  y}.    {{aggrega
0670: 74 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67  te functions} ag
0680: 67 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20  gfunc aggfunc}. 
0690: 20 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69     {{core functi
06a0: 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f  ons} corefunc co
06b0: 72 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61  refunc}.    {{da
06c0: 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
06d0: 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20  tions} datefunc 
06e0: 64 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b  datefunc}.    {k
06f0: 65 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73  eywords keywords
0700: 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d   {SQL keywords}}
0710: 0a 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f  .  }.  set lang_
0720: 73 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65  section_break [e
0730: 78 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24  xpr {([llength $
0740: 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73  lang_section_lis
0750: 74 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65  t]+2)/3}].  fore
0760: 61 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c  ach {section} [l
0770: 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64  sort -index 0 -d
0780: 69 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f  ictionary $lang_
0790: 73 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a  section_list] {.
07a0: 20 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74    foreach {s_tit
07b0: 6c 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24  le s_tag s_kw} $
07c0: 73 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20  section {}.  if 
07d0: 7b 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a  {$s_kw == ""} {.
07e0: 20 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f      set s_kw $s_
07f0: 74 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b  title.  }.  if {
0800: 24 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e  $s_tag=="pragma.
0810: 68 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74  html"} {.    set
0820: 20 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20   url $s_tag.  } 
0830: 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75  else {.    set u
0840: 72 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68  rl lang_$s_tag.h
0850: 74 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73  tml.  }.  hd_res
0860: 6f 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b  olve "<li>\[$s_k
0870: 77 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69  w|$s_title\]</li
0880: 3e 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66  >".  incr i.  if
0890: 20 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74   {$i==$lang_sect
08a0: 69 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d  ion_break || $i=
08b0: 3d 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e  =2*$lang_section
08c0: 5f 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64  _break} {.    hd
08d0: 5f 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64  _puts "</ul></td
08e0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  ><td valign=\"to
08f0: 70 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a  p\"><ul>".  }.}.
0900: 3c 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64  </tcl>.</ul></td
0910: 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a  ></tr></table>..
0920: 3c 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73  <p>^The routines
0930: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0940: 65 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65  e_v2()], [sqlite
0950: 33 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73  3_prepare()],.[s
0960: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
0970: 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72  ()], [sqlite3_pr
0980: 65 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a  epare16_v2()], .
0990: 5b 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d  [sqlite3_exec()]
09a0: 2c 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67  , and [sqlite3_g
09b0: 65 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65  et_table()] acce
09c0: 70 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  pt.an SQL statem
09d0: 65 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74  ent list (sql-st
09e0: 6d 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69  mt-list) which i
09f0: 73 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65  s a semicolon-se
0a00: 70 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20  parated.list of 
0a10: 73 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a  statements.</p>.
0a20: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
0a30: 72 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73  ram sql-stmt-lis
0a40: 74 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68  t</tcl>..<p>Each
0a50: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69   SQL statement i
0a60: 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
0a70: 6c 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61  list is an insta
0a80: 6e 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f  nce of the.follo
0a90: 77 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  wing:</p>..<tcl>
0aa0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71  BubbleDiagram sq
0ab0: 6c 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74  l-stmt</tcl>..<t
0ac0: 63 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f  cl>.proc Operato
0ad0: 72 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74  r {name} {.  ret
0ae0: 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72  urn "<font color
0af0: 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69  =\"#2c2cf0\"><bi
0b00: 67 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66  g>$name</big></f
0b10: 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e  ont>".}.proc Non
0b20: 74 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20  terminal {name} 
0b30: 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c  {.  return "<i><
0b40: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66  font color=\"#ff
0b50: 33 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f  3434\">$name</fo
0b60: 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20  nt></i>".}.proc 
0b70: 4b 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b  Keyword {name} {
0b80: 0a 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74  .  return "<font
0b90: 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30   color=\"#2c2cf0
0ba0: 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22  \">$name</font>"
0bb0: 0a 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20  .}.proc Example 
0bc0: 7b 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75  {text} {.  hd_pu
0bd0: 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  ts "<blockquote>
0be0: 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e  <pre>$text</pre>
0bf0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d  </blockquote>".}
0c00: 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b  ..proc Section {
0c10: 6e 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f  name label keywo
0c20: 72 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  rds} {.  global 
0c30: 44 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d  DOC.  hd_close_m
0c40: 61 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61  ain.  hd_open_ma
0c50: 69 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68  in lang_$label.h
0c60: 74 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20  tml.  hd_header 
0c70: 22 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61  "SQLite Query La
0c80: 6e 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24  nguage: $name" $
0c90: 44 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69  DOC/pages/lang.i
0ca0: 6e 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77  n.  eval hd_keyw
0cb0: 6f 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20  ords $keywords. 
0cc0: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b   if {[lsearch $k
0cd0: 65 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d  eywords $name] =
0ce0: 3d 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68  = -1 && [lsearch
0cf0: 20 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d   $keywords *$nam
0d00: 65 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20  e] == -1} {.    
0d10: 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73  eval hd_keywords
0d20: 20 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20   { $name }.  }. 
0d30: 20 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c   hd_puts {<h1 al
0d40: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c  ign="center">SQL
0d50: 20 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42   As Understood B
0d60: 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20  y SQLite</h1>}. 
0d70: 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20   hd_puts {<p><a 
0d80: 68 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22  href="lang.html"
0d90: 3e 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a  >[Top]</a></p>}.
0da0: 20 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24    hd_puts "<h2>$
0db0: 6e 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23  name</h2>".}..##
0dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
0e10: 63 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42  ction {ALTER TAB
0e20: 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b  LE} altertable {
0e30: 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a  {ALTER TABLE} {*
0e40: 41 4c 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44  ALTER}}..BubbleD
0e50: 69 61 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62  iagram alter-tab
0e60: 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  le-stmt 1.</tcl>
0e70: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70  ..<p>SQLite supp
0e80: 6f 72 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73  orts a limited s
0e90: 75 62 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54  ubset of ALTER T
0ea0: 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20  ABLE..The ALTER 
0eb0: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  TABLE command in
0ec0: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74   SQLite allows t
0ed0: 68 65 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d  he user to renam
0ee0: 65 20 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20  e a table.or to 
0ef0: 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
0f00: 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20   to an existing 
0f10: 74 61 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74  table. It is not
0f20: 20 70 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e   possible.to ren
0f30: 61 6d 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 72 65  ame a column, re
0f40: 6d 6f 76 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f  move a column, o
0f50: 72 20 61 64 64 20 6f 72 20 72 65 6d 6f 76 65 20  r add or remove 
0f60: 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 72 6f 6d  constraints from
0f70: 20 61 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a   a table..</p>..
0f80: 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e 41 4d 45  <p> ^(The RENAME
0f90: 20 54 4f 20 73 79 6e 74 61 78 20 69 73 20 75 73   TO syntax is us
0fa0: 65 64 20 74 6f 20 72 65 6e 61 6d 65 20 74 68 65  ed to rename the
0fb0: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
0fc0: 64 20 62 79 20 0a 3c 69 3e 26 23 39 31 3b 64 61  d by .<i>&#91;da
0fd0: 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33  tabase-name.&#93
0fe0: 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  ;table-name</i> 
0ff0: 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62 6c 65 2d  to <i>new-table-
1000: 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54 68 69 73  name</i>.)^.This
1010: 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74   command .cannot
1020: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65   be used to move
1030: 20 61 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e   a table between
1040: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1050: 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e  ses, only to ren
1060: 61 6d 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74  ame .a table wit
1070: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
1080: 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  abase.</p>..<p> 
1090: 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20 62 65  ^If the table be
10a0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20  ing renamed has 
10b0: 74 72 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69  triggers or indi
10c0: 63 65 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20  ces, then these 
10d0: 72 65 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20  remain.attached 
10e0: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 66 74  to the table aft
10f0: 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20 72  er it has been r
1100: 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77 65 76 65  enamed.  ^Howeve
1110: 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  r, if there are.
1120: 61 6e 79 20 76 69 65 77 20 64 65 66 69 6e 69 74  any view definit
1130: 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65  ions, or stateme
1140: 6e 74 73 20 65 78 65 63 75 74 65 64 20 62 79 20  nts executed by 
1150: 74 72 69 67 67 65 72 73 20 74 68 61 74 20 72 65  triggers that re
1160: 66 65 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65  fer to.the table
1170: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20   being renamed, 
1180: 74 68 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75  these are not au
1190: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69  tomatically modi
11a0: 66 69 65 64 20 74 6f 20 75 73 65 20 74 68 65 20  fied to use the 
11b0: 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20  new.table name. 
11c0: 49 66 20 74 68 69 73 20 69 73 20 72 65 71 75 69  If this is requi
11d0: 72 65 64 2c 20 74 68 65 20 74 72 69 67 67 65 72  red, the trigger
11e0: 73 20 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69  s or view defini
11f0: 74 69 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72  tions must be.dr
1200: 6f 70 70 65 64 20 61 6e 64 20 72 65 63 72 65 61  opped and recrea
1210: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ted to use the n
1220: 65 77 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79  ew table name by
1230: 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   hand..</p>..<p>
1240: 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
1250: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
1260: 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  e .[foreign_keys
1270: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
1280: 64 5d 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20  d] when a table 
1290: 69 73 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e  is renamed, then
12a0: 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65   any.[foreign-ke
12b0: 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52  y-clause | REFER
12c0: 45 4e 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69  ENCES clauses] i
12d0: 6e 20 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74  n any table (eit
12e0: 68 65 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65  her the.table be
12f0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73  ing renamed or s
1300: 6f 6d 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29  ome other table)
1310: 0a 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74  .that refer to t
1320: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1330: 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66  enamed are modif
1340: 69 65 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f  ied to refer .to
1350: 20 74 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62   the renamed tab
1360: 6c 65 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61  le by its new na
1370: 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44  me...<p> ^The AD
1380: 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a  D COLUMN syntax.
1390: 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 61  is used to add a
13a0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   new column to a
13b0: 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
13c0: 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  ..^The new colum
13d0: 6e 20 69 73 20 61 6c 77 61 79 73 20 61 70 70 65  n is always appe
13e0: 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  nded to the end 
13f0: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  of the list of e
1400: 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  xisting columns.
1410: 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66  .The [column-def
1420: 5d 20 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74  ] rule defines t
1430: 68 65 20 63 68 61 72 61 63 74 65 72 69 73 74 69  he characteristi
1440: 63 73 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f  cs of the new co
1450: 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20  lumn..^(The new 
1460: 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20  column may take 
1470: 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73  any of the forms
1480: 20 70 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20   permissible in 
1490: 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  a [CREATE TABLE]
14a0: 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68  .statement, with
14b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
14c0: 65 73 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c  estrictions:)^.<
14d0: 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c  ul>.<li>^The col
14e0: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
14f0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f   a PRIMARY KEY o
1500: 72 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  r UNIQUE constra
1510: 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54  int.</li>.<li>^T
1520: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1530: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
1540: 20 76 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e   value of CURREN
1550: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
1560: 44 41 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45  DATE, .    CURRE
1570: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72  NT_TIMESTAMP, or
1580: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
1590: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f  n parentheses.</
15a0: 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f  li>.<li>^If a NO
15b0: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
15c0: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
15d0: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
15e0: 6d 75 73 74 20 68 61 76 65 20 61 0a 20 20 20 20  must have a.    
15f0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74  default value ot
1600: 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c  her than NULL..<
1610: 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  li>^If [foreign 
1620: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1630: 20 61 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65   are [foreign_ke
1640: 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62  ys pragma | enab
1650: 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63  led] and.    a c
1660: 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f  olumn with a [fo
1670: 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65  reign-key-clause
1680: 20 7c 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c   | REFERENCES cl
1690: 61 75 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64  ause].    is add
16a0: 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  ed, the column m
16b0: 75 73 74 20 68 61 76 65 20 61 20 64 65 66 61 75  ust have a defau
16c0: 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c  lt value of NULL
16d0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74  ..</ul>..<p>^Not
16e0: 65 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e  e also that when
16f0: 20 61 64 64 69 6e 67 20 61 20 5b 43 48 45 43 4b   adding a [CHECK
1700: 20 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68   constraint], th
1710: 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  e CHECK constrai
1720: 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64  nt.is not tested
1730: 20 61 67 61 69 6e 73 74 20 70 72 65 65 78 69 73   against preexis
1740: 74 69 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65  ting rows of the
1750: 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73 20 63 61   table..^This ca
1760: 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 74 61  n result in a ta
1770: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
1780: 73 20 64 61 74 61 20 74 68 61 74 0a 69 73 20 69  s data that.is i
1790: 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74  n violation of t
17a0: 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  he CHECK constra
17b0: 69 6e 74 2e 20 20 46 75 74 75 72 65 20 76 65 72  int.  Future ver
17c0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
17d0: 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 74 6f 20  might.change to 
17e0: 76 61 6c 69 64 61 74 65 20 43 48 45 43 4b 20 63  validate CHECK c
17f0: 6f 6e 73 74 72 61 69 6e 74 73 20 61 73 20 74 68  onstraints as th
1800: 65 79 20 61 72 65 20 61 64 64 65 64 2e 3c 2f 70  ey are added.</p
1810: 3e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 65 63 75  >..<p> The execu
1820: 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65  tion time of the
1830: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
1840: 6d 61 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64  mand is independ
1850: 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e  ent of.the amoun
1860: 74 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65  t of data in the
1870: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54   table.  The ALT
1880: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
1890: 20 72 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79   runs as quickly
18a0: 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68  .on a table with
18b0: 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73   10 million rows
18c0: 20 61 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61   as it does on a
18d0: 20 74 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f   table with 1 ro
18e0: 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65  w..</p>..<p>Afte
18f0: 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73  r ADD COLUMN has
1900: 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64   been run on a d
1910: 61 74 61 62 61 73 65 2c 20 74 68 61 74 20 64 61  atabase, that da
1920: 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a  tabase will not.
1930: 62 65 20 72 65 61 64 61 62 6c 65 20 62 79 20 53  be readable by S
1940: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1950: 31 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2e  1.3 and earlier.
1960: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
19c0: 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61  on {ANALYZE} ana
19d0: 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a 42 75  lyze ANALYZE..Bu
19e0: 62 62 6c 65 44 69 61 67 72 61 6d 20 61 6e 61 6c  bbleDiagram anal
19f0: 79 7a 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  yze-stmt 1.</tcl
1a00: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c  >..<p> ^The ANAL
1a10: 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68  YZE command gath
1a20: 65 72 73 20 73 74 61 74 69 73 74 69 63 73 20 61  ers statistics a
1a30: 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64 0a  bout tables and.
1a40: 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72  indices and stor
1a50: 65 73 20 74 68 65 20 63 6f 6c 6c 65 63 74 65 64  es the collected
1a60: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20   information.in 
1a70: 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73  [internal tables
1a80: 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
1a90: 65 20 77 68 65 72 65 20 74 68 65 20 71 75 65 72  e where the quer
1aa0: 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e 0a  y optimizer can.
1ab0: 61 63 63 65 73 73 20 74 68 65 20 69 6e 66 6f 72  access the infor
1ac0: 6d 61 74 69 6f 6e 20 61 6e 64 20 75 73 65 20 69  mation and use i
1ad0: 74 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20 62  t to help make b
1ae0: 65 74 74 65 72 20 71 75 65 72 79 20 70 6c 61 6e  etter query plan
1af0: 6e 69 6e 67 20 63 68 6f 69 63 65 73 2e 0a 5e 49  ning choices..^I
1b00: 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61  f no arguments a
1b10: 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 61 74  re given, all at
1b20: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1b30: 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20   are.analyzed.  
1b40: 5e 49 66 20 61 20 64 61 74 61 62 61 73 65 20 6e  ^If a database n
1b50: 61 6d 65 20 69 73 20 67 69 76 65 6e 20 61 73 20  ame is given as 
1b60: 74 68 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68  the argument, th
1b70: 65 6e 20 61 6c 6c 20 74 61 62 6c 65 73 0a 61 6e  en all tables.an
1b80: 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68 61  d indices in tha
1b90: 74 20 6f 6e 65 20 64 61 74 61 62 61 73 65 20 61  t one database a
1ba0: 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 0a 5e  re analyzed.  .^
1bb0: 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  If the argument 
1bc0: 69 73 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c  is a table name,
1bd0: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20   then only that 
1be0: 74 61 62 6c 65 20 61 6e 64 20 74 68 65 0a 69 6e  table and the.in
1bf0: 64 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64  dices associated
1c00: 20 77 69 74 68 20 74 68 61 74 20 74 61 62 6c 65   with that table
1c10: 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20   are analyzed.  
1c20: 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ^If the argument
1c30: 0a 69 73 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d  .is an index nam
1c40: 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61  e, then only tha
1c50: 74 20 6f 6e 65 20 69 6e 64 65 78 20 69 73 20 61  t one index is a
1c60: 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  nalyzed.</p>..<p
1c70: 3e 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 69  > ^The default i
1c80: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74  mplementation st
1c90: 6f 72 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74  ores all statist
1ca0: 69 63 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a  ics in a single.
1cb0: 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 5b 73 71  table named "[sq
1cc0: 6c 69 74 65 5f 73 74 61 74 31 5d 22 2e 20 20 5e  lite_stat1]".  ^
1cd0: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
1ce0: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a 5b  piled with the.[
1cf0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
1d00: 41 54 33 5d 20 6f 70 74 69 6f 6e 2c 20 74 68 65  AT3] option, the
1d10: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
1d20: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
1d30: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
1d40: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
1d50: 74 61 74 33 5d 2e 0a 4f 6c 64 65 72 20 76 65 72  tat3]..Older ver
1d60: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1d70: 77 6f 75 6c 64 20 6d 61 6b 65 20 75 73 65 20 6f  would make use o
1d80: 66 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 73 74  f the [sqlite_st
1d90: 61 74 32 5d 20 74 61 62 6c 65 0a 77 68 65 6e 20  at2] table.when 
1da0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 5b 53  compiled with [S
1db0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
1dc0: 54 32 5d 20 62 75 74 20 61 6c 6c 20 72 65 63 65  T2] but all rece
1dd0: 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53  nt versions of.S
1de0: 51 4c 69 74 65 20 69 67 6e 6f 72 65 20 74 68 65  QLite ignore the
1df0: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
1e00: 62 6c 65 2e 0a 46 75 74 75 72 65 20 65 6e 68 61  ble..Future enha
1e10: 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65  ncements may cre
1e20: 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 5b  ate.additional [
1e30: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 5d  internal tables]
1e40: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
1e50: 61 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63 65  ame pattern exce
1e60: 70 74 20 77 69 74 68 0a 66 69 6e 61 6c 20 64 69  pt with.final di
1e70: 67 69 74 20 6c 61 72 67 65 72 20 74 68 61 6e 20  git larger than 
1e80: 22 33 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54  "3".</p>..<p> ^T
1e90: 68 65 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d  he [ALTER TABLE]
1ea0: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 0a 6e 6f   command does.no
1eb0: 74 20 77 6f 72 6b 20 6f 6e 20 74 68 65 20 73 71  t work on the sq
1ec0: 6c 69 74 65 5f 73 74 61 74 31 20 6f 72 20 73 71  lite_stat1 or sq
1ed0: 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
1ee0: 73 2c 0a 62 75 74 20 61 6c 6c 20 74 68 65 20 63  s,.but all the c
1ef0: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 6f 73 65 20  ontent of those 
1f00: 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75  tables can be qu
1f10: 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c  eried using [SEL
1f20: 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20  ECT].and can be 
1f30: 64 65 6c 65 74 65 64 2c 20 61 75 67 6d 65 6e 74  deleted, augment
1f40: 65 64 2c 20 6f 72 20 6d 6f 64 69 66 69 65 64 20  ed, or modified 
1f50: 75 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54  using the [DELET
1f60: 45 5d 2c 0a 5b 49 4e 53 45 52 54 5d 2c 20 61 6e  E],.[INSERT], an
1f70: 64 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d 61  d [UPDATE] comma
1f80: 6e 64 73 2e 0a 5e 28 54 68 65 20 5b 44 52 4f 50  nds..^(The [DROP
1f90: 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20   TABLE] command 
1fa0: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 5f  works on sqlite_
1fb0: 73 74 61 74 31 20 61 6e 64 0a 73 71 6c 69 74 65  stat1 and.sqlite
1fc0: 5f 73 74 61 74 33 20 61 73 20 6f 66 20 53 51 4c  _stat3 as of SQL
1fd0: 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e  ite version 3.7.
1fe0: 39 2e 29 5e 0a 41 70 70 72 6f 70 72 69 61 74 65  9.)^.Appropriate
1ff0: 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20   care should be 
2000: 75 73 65 64 20 77 68 65 6e 20 63 68 61 6e 67 69  used when changi
2010: 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
2020: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
2030: 0a 74 61 62 6c 65 73 20 61 73 20 69 6e 76 61 6c  .tables as inval
2040: 69 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20 63  id content can c
2050: 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 73  ause SQLite to s
2060: 65 6c 65 63 74 20 69 6e 65 66 66 69 63 69 65 6e  elect inefficien
2070: 74 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e 20 20  t.query plans.  
2080: 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69  Generally speaki
2090: 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 20 6e  ng, one should n
20a0: 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f  ot modify the co
20b0: 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20 73 74 61  ntent of.the sta
20c0: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62  tistics tables b
20d0: 79 20 61 6e 79 20 6d 65 63 68 61 6e 69 73 6d 20  y any mechanism 
20e0: 6f 74 68 65 72 20 74 68 61 6e 20 69 6e 76 6f 6b  other than invok
20f0: 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a 45 20  ing the.ANALYZE 
2100: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  command.</p>..<p
2110: 3e 20 5e 53 74 61 74 69 73 74 69 63 73 20 67 61  > ^Statistics ga
2120: 74 68 65 72 65 64 20 62 79 20 41 4e 41 4c 59 5a  thered by ANALYZ
2130: 45 20 61 72 65 20 3c 75 3e 6e 6f 74 3c 2f 75 3e  E are <u>not</u>
2140: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75   automatically u
2150: 70 64 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f  pdated as.the co
2160: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74  ntent of the dat
2170: 61 62 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20  abase changes.  
2180: 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  If the content o
2190: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 63  f the database.c
21a0: 68 61 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61  hanges significa
21b0: 6e 74 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20  ntly, or if the 
21c0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
21d0: 63 68 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e  changes, then on
21e0: 65 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65  e should.conside
21f0: 72 20 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20  r rerunning the 
2200: 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20  ANALYZE command 
2210: 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61  in order to upda
2220: 74 65 20 74 68 65 20 73 74 61 74 69 73 74 69 63  te the statistic
2230: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20  s.</p>..<p> The 
2240: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69  query planner mi
2250: 67 68 74 20 6e 6f 74 20 6e 6f 74 69 63 65 20 6d  ght not notice m
2260: 61 6e 75 61 6c 20 63 68 61 6e 67 65 73 20 74 6f  anual changes to
2270: 20 74 68 65 0a 73 71 6c 69 74 65 5f 73 74 61 74   the.sqlite_stat
2280: 31 20 61 6e 64 2f 6f 72 20 73 71 6c 69 74 65 5f  1 and/or sqlite_
2290: 73 74 61 74 33 20 74 61 62 6c 65 73 2e 20 20 5e  stat3 tables.  ^
22a0: 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63  An application.c
22b0: 61 6e 20 66 6f 72 63 65 20 74 68 65 20 71 75 65  an force the que
22c0: 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20 72 65  ry planner to re
22d0: 72 65 61 64 20 74 68 65 20 73 74 61 74 69 73 74  read the statist
22e0: 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 72 75  ics tables by ru
22f0: 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59 5a 45  nning.<b>ANALYZE
2300: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f   sqlite_master</
2310: 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  b>. </p>..<tcl>.
2320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
2370: 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44  ection {ATTACH D
2380: 41 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20  ATABASE} attach 
2390: 2a 41 54 54 41 43 48 0a 0a 42 75 62 62 6c 65 44  *ATTACH..BubbleD
23a0: 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73 74  iagram attach-st
23b0: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
23c0: 20 5e 54 68 65 20 41 54 54 41 43 48 20 44 41 54   ^The ATTACH DAT
23d0: 41 42 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20  ABASE statement 
23e0: 61 64 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74  adds another dat
23f0: 61 62 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74  abase .file to t
2400: 68 65 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61  he current [data
2410: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
2420: 2e 20 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  . .^The filename
2430: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
2440: 65 20 74 6f 20 62 65 20 61 74 74 61 63 68 65 64  e to be attached
2450: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
2460: 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  .the expression 
2470: 74 68 61 74 20 6f 63 63 75 72 73 20 62 65 66 6f  that occurs befo
2480: 72 65 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72  re the AS keywor
2490: 64 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  d..^The filename
24a0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
24b0: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d   follows the sam
24c0: 65 20 73 65 6d 61 6e 74 69 63 73 20 61 73 20 74  e semantics as t
24d0: 68 65 0a 66 69 6c 65 6e 61 6d 65 20 61 72 67 75  he.filename argu
24e0: 6d 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74 65 33  ment to [sqlite3
24f0: 5f 6f 70 65 6e 28 29 5d 20 61 6e 64 20 5b 73 71  _open()] and [sq
2500: 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d  lite3_open_v2()]
2510: 3b 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61  ; the.special na
2520: 6d 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20  me "[:memory:]" 
2530: 72 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 5b 69  results in an [i
2540: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
2550: 65 5d 20 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20  e] and an.empty 
2560: 73 74 72 69 6e 67 20 72 65 73 75 6c 74 73 20 69  string results i
2570: 6e 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72  n a new temporar
2580: 79 20 64 61 74 61 62 61 73 65 2e 0a 5e 54 68 65  y database..^The
2590: 20 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65   filename argume
25a0: 6e 74 20 63 61 6e 20 62 65 20 61 20 5b 55 52 49  nt can be a [URI
25b0: 20 66 69 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52   filename] if UR
25c0: 49 20 66 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65  I filename proce
25d0: 73 73 69 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20  ssing.is enable 
25e0: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
25f0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
2600: 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f   default behavio
2610: 72 20 69 73 20 66 6f 72 0a 55 52 49 20 66 69 6c  r is for.URI fil
2620: 65 6e 61 6d 65 73 20 74 6f 20 62 65 20 64 69 73  enames to be dis
2630: 61 62 6c 65 64 2c 20 68 6f 77 65 76 65 72 20 74  abled, however t
2640: 68 61 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65  hat might change
2650: 20 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c   in a future rel
2660: 65 61 73 65 0a 6f 66 20 53 51 4c 69 74 65 2c 20  ease.of SQLite, 
2670: 73 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  so application d
2680: 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64  evelopers are ad
2690: 76 69 73 65 64 20 74 6f 20 70 6c 61 6e 20 61 63  vised to plan ac
26a0: 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 54  cordingly...<p>T
26b0: 68 65 20 6e 61 6d 65 20 74 68 61 74 20 6f 63 63  he name that occ
26c0: 75 72 73 20 61 66 74 65 72 20 74 68 65 20 41 53  urs after the AS
26d0: 20 6b 65 79 77 6f 72 64 20 69 73 20 74 68 65 20   keyword is the 
26e0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
26f0: 62 61 73 65 0a 75 73 65 64 20 69 6e 74 65 72 6e  base.used intern
2700: 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 0a  ally by SQLite..
2710: 5e 54 68 65 20 64 61 74 61 62 61 73 65 2d 6e 61  ^The database-na
2720: 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a  mes 'main' and .
2730: 27 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20  'temp' refer to 
2740: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2750: 65 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61  e and the databa
2760: 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d  se used for .tem
2770: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
2780: 5e 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65  ^The main and te
2790: 6d 70 20 64 61 74 61 62 61 73 65 73 20 63 61 6e  mp databases can
27a0: 6e 6f 74 20 62 65 20 61 74 74 61 63 68 65 64 20  not be attached 
27b0: 6f 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e  or.detached.</p>
27c0: 0a 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20 69  ..<p> ^(Tables i
27d0: 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
27e0: 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 72 65  tabase can be re
27f0: 66 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20  ferred to using 
2800: 74 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64  the syntax .<i>d
2810: 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62  atabase-name.tab
2820: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20  le-name</i>.)^  
2830: 5e 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ^If the name of 
2840: 74 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69  the table is uni
2850: 71 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61  que.across all a
2860: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2870: 73 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61  s and the main a
2880: 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  nd temp database
2890: 73 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64  s, then the.<i>d
28a0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
28b0: 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 72   prefix is not r
28c0: 65 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74 77  equired.  ^If tw
28d0: 6f 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  o or more tables
28e0: 20 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64 61   in.different da
28f0: 74 61 62 61 73 65 73 20 68 61 76 65 20 74 68 65  tabases have the
2900: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74   same name and t
2910: 68 65 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  he .<i>database-
2920: 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20  name</i> prefix 
2930: 69 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61  is not used on a
2940: 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65   table reference
2950: 2c 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65  , then the.table
2960: 20 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f   chosen is the o
2970: 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
2980: 73 65 20 74 68 61 74 20 77 61 73 20 6c 65 61 73  se that was leas
2990: 74 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63  t recently attac
29a0: 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54  hed.</p>..<p>.^T
29b0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f  ransactions invo
29c0: 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61  lving multiple a
29d0: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
29e0: 73 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73  s are atomic,.as
29f0: 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20  suming that the 
2a00: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
2a10: 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d   not "[:memory:]
2a20: 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72  " and the .[jour
2a30: 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74  nal_mode] is not
2a40: 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68   [WAL].  ^(If th
2a50: 65 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20  e main.database 
2a60: 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72  is ":memory:" or
2a70: 20 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f   if the journal_
2a80: 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65  mode is WAL, the
2a90: 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  n .transactions 
2aa0: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61  continue to be a
2ab0: 74 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63  tomic within eac
2ac0: 68 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74  h individual.dat
2ad0: 61 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20  abase file. But 
2ae0: 69 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70  if the host comp
2af0: 75 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20  uter crashes in 
2b00: 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20  the middle.of a 
2b10: 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74  [COMMIT] where t
2b20: 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62  wo or more datab
2b30: 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 75 70  ase files are up
2b40: 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74  dated,.some of t
2b50: 68 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74  hose files might
2b60: 20 67 65 74 20 74 68 65 20 63 68 61 6e 67 65 73   get the changes
2b70: 20 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69   where others.mi
2b80: 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a  ght not.)^.</p>.
2b90: 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61  .<p> ^There is a
2ba0: 20 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e   limit, set usin
2bb0: 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  g [sqlite3_limit
2bc0: 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45  ()] and .[SQLITE
2bd0: 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d  _LIMIT_ATTACHED]
2be0: 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  , to the number 
2bf0: 6f 66 20 64 61 74 61 62 61 73 65 73 20 74 68 61  of databases tha
2c00: 74 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61  t can be.simulta
2c10: 6e 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64  neously attached
2c20: 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74   to a single dat
2c30: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2c40: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
2c50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c90: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
2ca0: 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e  tion {BEGIN TRAN
2cb0: 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63  SACTION} transac
2cc0: 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d  tion {*BEGIN COM
2cd0: 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 42  MIT ROLLBACK}..B
2ce0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 62 65 67  ubbleDiagram beg
2cf0: 69 6e 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69  in-stmt.BubbleDi
2d00: 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d  agram commit-stm
2d10: 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  t.BubbleDiagram 
2d20: 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f  rollback-stmt.</
2d30: 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68  tcl>..<p>.^No ch
2d40: 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64  anges can be mad
2d50: 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
2d60: 65 20 65 78 63 65 70 74 20 77 69 74 68 69 6e 20  e except within 
2d70: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  a transaction..^
2d80: 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74  Any command that
2d90: 20 63 68 61 6e 67 65 73 20 74 68 65 20 64 61 74   changes the dat
2da0: 61 62 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79  abase (basically
2db0: 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e  , any SQL comman
2dc0: 64 0a 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 45  d.other than [SE
2dd0: 4c 45 43 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f  LECT]) will auto
2de0: 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20  matically start 
2df0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66  a transaction if
2e00: 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65  .one is not alre
2e10: 61 64 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20  ady in effect.  
2e20: 5e 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73  ^Automatically s
2e30: 74 61 72 74 65 64 20 74 72 61 6e 73 61 63 74 69  tarted transacti
2e40: 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65  ons.are committe
2e50: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
2e60: 71 75 65 72 79 20 66 69 6e 69 73 68 65 73 2e 0a  query finishes..
2e70: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73  </p>..<p>.^Trans
2e80: 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73  actions can be s
2e90: 74 61 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20  tarted manually 
2ea0: 75 73 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a  using the BEGIN.
2eb0: 63 6f 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68  command.  ^(Such
2ec0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73   transactions us
2ed0: 75 61 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e  ually persist un
2ee0: 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d  til the next.COM
2ef0: 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20  MIT or ROLLBACK 
2f00: 63 6f 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20  command.  But a 
2f10: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c  transaction will
2f20: 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20   also .ROLLBACK 
2f30: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2f40: 69 73 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20  is closed or if 
2f50: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a  an error occurs.
2f60: 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  and the ROLLBACK
2f70: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
2f80: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69  tion algorithm i
2f90: 73 20 73 70 65 63 69 66 69 65 64 2e 29 5e 0a 53  s specified.)^.S
2fa0: 65 65 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61  ee the documenta
2fb0: 74 69 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20  tion on the [ON 
2fc0: 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65  CONFLICT].clause
2fd0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
2fe0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
2ff0: 74 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63  t the ROLLBACK.c
3000: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
3010: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f  on algorithm..</
3020: 70 3e 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41  p>..<p>.^END TRA
3030: 4e 53 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61  NSACTION is an a
3040: 6c 69 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e  lias for COMMIT.
3050: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61  .</p>..<p> ^(Tra
3060: 6e 73 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65  nsactions create
3070: 64 20 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e  d using BEGIN...
3080: 43 4f 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65  COMMIT do not ne
3090: 73 74 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65  st.)^.^For neste
30a0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20  d transactions, 
30b0: 75 73 65 20 74 68 65 20 5b 53 41 56 45 50 4f 49  use the [SAVEPOI
30c0: 4e 54 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53 45  NT] and [RELEASE
30d0: 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20  ] commands..The 
30e0: 22 54 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c 69  "TO SAVEPOINT <i
30f0: 3e 6e 61 6d 65 3c 2f 69 3e 22 20 63 6c 61 75 73  >name</i>" claus
3100: 65 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43  e of the ROLLBAC
3110: 4b 20 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a  K command shown.
3120: 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64 69  in the syntax di
3130: 61 67 72 61 6d 20 61 62 6f 76 65 20 69 73 20 6f  agram above is o
3140: 6e 6c 79 20 61 70 70 6c 69 63 61 62 6c 65 20 74  nly applicable t
3150: 6f 20 5b 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72  o [SAVEPOINT].tr
3160: 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e  ansactions.  ^An
3170: 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f   attempt to invo
3180: 6b 65 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d  ke the BEGIN com
3190: 6d 61 6e 64 20 77 69 74 68 69 6e 0a 61 20 74 72  mand within.a tr
31a0: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66  ansaction will f
31b0: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
31c0: 72 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  r, regardless of
31d0: 20 77 68 65 74 68 65 72 0a 74 68 65 20 74 72 61   whether.the tra
31e0: 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 73 74 61  nsaction was sta
31f0: 72 74 65 64 20 62 79 20 5b 53 41 56 45 50 4f 49  rted by [SAVEPOI
3200: 4e 54 5d 20 6f 72 20 61 20 70 72 69 6f 72 20 42  NT] or a prior B
3210: 45 47 49 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49  EGIN..^The COMMI
3220: 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68  T command and th
3230: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
3240: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 54  nd without the T
3250: 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68  O clause.work th
3260: 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50  e same on [SAVEP
3270: 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63 74 69 6f  OINT] transactio
3280: 6e 73 20 61 73 20 74 68 65 79 20 64 6f 20 77 69  ns as they do wi
3290: 74 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a  th transactions.
32a0: 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49 4e  started by BEGIN
32b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e  .</p>..<p>.^Tran
32c0: 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  sactions can be 
32d0: 64 65 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69  deferred, immedi
32e0: 61 74 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76  ate, or exclusiv
32f0: 65 2e 20 20 0a 5e 54 68 65 20 64 65 66 61 75 6c  e.  .^The defaul
3300: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65  t transaction be
3310: 68 61 76 69 6f 72 20 69 73 20 64 65 66 65 72 72  havior is deferr
3320: 65 64 2e 0a 5e 44 65 66 65 72 72 65 64 20 6d 65  ed..^Deferred me
3330: 61 6e 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b  ans that no lock
3340: 73 20 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f  s are acquired.o
3350: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  n the database u
3360: 6e 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73  ntil the databas
3370: 65 20 69 73 20 66 69 72 73 74 20 61 63 63 65 73  e is first acces
3380: 73 65 64 2e 20 20 5e 54 68 75 73 20 77 69 74 68  sed.  ^Thus with
3390: 20 61 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e   a.deferred tran
33a0: 73 61 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47  saction, the BEG
33b0: 49 4e 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73  IN statement its
33c0: 65 6c 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67  elf does nothing
33d0: 20 74 6f 20 74 68 65 0a 66 69 6c 65 73 79 73 74   to the.filesyst
33e0: 65 6d 2e 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20  em.  ^Locks.are 
33f0: 6e 6f 74 20 61 63 71 75 69 72 65 64 20 75 6e 74  not acquired unt
3400: 69 6c 20 74 68 65 20 66 69 72 73 74 20 72 65 61  il the first rea
3410: 64 20 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61  d or write opera
3420: 74 69 6f 6e 2e 20 20 5e 54 68 65 20 66 69 72 73  tion.  ^The firs
3430: 74 20 72 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e  t read.operation
3440: 20 61 67 61 69 6e 73 74 20 61 20 64 61 74 61 62   against a datab
3450: 61 73 65 20 63 72 65 61 74 65 73 20 61 20 5b 53  ase creates a [S
3460: 48 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20  HARED] lock and 
3470: 74 68 65 20 66 69 72 73 74 0a 77 72 69 74 65 20  the first.write 
3480: 6f 70 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65  operation create
3490: 73 20 61 20 5b 52 45 53 45 52 56 45 44 5d 20 6c  s a [RESERVED] l
34a0: 6f 63 6b 2e 20 20 20 5e 42 65 63 61 75 73 65 20  ock.   ^Because 
34b0: 74 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e 20  the acquisition 
34c0: 6f 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66 65  of.locks is defe
34d0: 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79 20  rred until they 
34e0: 61 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20 69  are needed, it i
34f0: 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
3500: 61 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20 6f  another.thread o
3510: 72 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64 20  r process could 
3520: 63 72 65 61 74 65 20 61 20 73 65 70 61 72 61 74  create a separat
3530: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  e transaction an
3540: 64 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20 64  d write to.the d
3550: 61 74 61 62 61 73 65 20 61 66 74 65 72 20 74 68  atabase after th
3560: 65 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20 63  e BEGIN on the c
3570: 75 72 72 65 6e 74 20 74 68 72 65 61 64 20 68 61  urrent thread ha
3580: 73 20 65 78 65 63 75 74 65 64 2e 0a 5e 49 66 20  s executed..^If 
3590: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
35a0: 69 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68  is immediate, th
35b0: 65 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f  en [RESERVED] lo
35c0: 63 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64  cks.are acquired
35d0: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
35e0: 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  s as soon as the
35f0: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69   BEGIN command i
3600: 73 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68  s.executed, with
3610: 6f 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20  out waiting for 
3620: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
3630: 62 65 20 75 73 65 64 2e 20 20 5e 41 66 74 65 72  be used.  ^After
3640: 20 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41   a BEGIN IMMEDIA
3650: 54 45 2c 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64  TE, .no other [d
3660: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
3670: 6f 6e 5d 20 77 69 6c 6c 20 62 65 20 61 62 6c 65  on] will be able
3680: 20 74 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65   to write to the
3690: 20 64 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20   database or.do 
36a0: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
36b0: 45 20 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55  E or BEGIN EXCLU
36c0: 53 49 56 45 2e 20 20 5e 4f 74 68 65 72 20 70 72  SIVE.  ^Other pr
36d0: 6f 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74  ocesses can cont
36e0: 69 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f  inue.to read fro
36f0: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20  m the database, 
3700: 68 6f 77 65 76 65 72 2e 20 20 5e 41 6e 20 65 78  however.  ^An ex
3710: 63 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74  clusive transact
3720: 69 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c  ion causes.[EXCL
3730: 55 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20  USIVE] locks to 
3740: 62 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  be acquired on a
3750: 6c 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 5e  ll databases.  ^
3760: 41 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58  After a BEGIN.EX
3770: 43 4c 55 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65  CLUSIVE, no othe
3780: 72 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  r [database conn
3790: 65 63 74 69 6f 6e 5d 20 65 78 63 65 70 74 20 66  ection] except f
37a0: 6f 72 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69  or [read_uncommi
37b0: 74 74 65 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e  tted].connection
37c0: 73 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74  s will be able t
37d0: 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
37e0: 61 73 65 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72  ase and no other
37f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68   connection with
3800: 6f 75 74 0a 65 78 63 65 70 74 69 6f 6e 20 77 69  out.exception wi
3810: 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72  ll be able to wr
3820: 69 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ite the database
3830: 20 75 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73   until the trans
3840: 61 63 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65  action is.comple
3850: 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28  te..</p>..<p>.^(
3860: 41 6e 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e  An implicit tran
3870: 73 61 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73  saction (a trans
3880: 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73  action that is s
3890: 74 61 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63  tarted automatic
38a0: 61 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e  ally,.not a tran
38b0: 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20  saction started 
38c0: 62 79 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d  by BEGIN) is com
38d0: 6d 69 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63  mitted automatic
38e0: 61 6c 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61  ally when.the la
38f0: 73 74 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  st active statem
3900: 65 6e 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41  ent finishes.  A
3910: 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73   statement finis
3920: 68 65 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65  hes when its.pre
3930: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
3940: 69 73 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65  is [sqlite3_rese
3950: 74 28 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a  t() | reset] or.
3960: 5b 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  [sqlite3_finaliz
3970: 65 28 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d  e() | finalized]
3980: 2e 20 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69  .  An open [sqli
3990: 74 65 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66  te3_blob] used f
39a0: 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42  or.incremental B
39b0: 4c 4f 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61  LOB I/O counts a
39c0: 73 20 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20  s an unfinished 
39d0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
39e0: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66  [sqlite3_blob].f
39f0: 69 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 20  inishes when it 
3a00: 69 73 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  is [sqlite3_blob
3a10: 5f 63 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65  _close() | close
3a20: 64 5d 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  d].)^.</p>..<p>.
3a30: 5e 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f  ^The explicit CO
3a40: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  MMIT command run
3a50: 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65  s immediately, e
3a60: 76 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65  ven if there are
3a70: 0a 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54  .pending [SELECT
3a80: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e  ] statements.  ^
3a90: 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72  However, if ther
3aa0: 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72  e are pending.wr
3ab0: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20  ite operations, 
3ac0: 74 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61  the COMMIT comma
3ad0: 6e 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  nd.will fail wit
3ae0: 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
3af0: 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c  [SQLITE_BUSY]..<
3b00: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74  /p>..<p>.^An att
3b10: 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20  empt to execute 
3b20: 43 4f 4d 4d 49 54 20 6d 69 67 68 74 20 61 6c 73  COMMIT might als
3b30: 6f 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b  o result in an [
3b40: 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 72 65 74  SQLITE_BUSY] ret
3b50: 75 72 6e 20 63 6f 64 65 0a 69 66 20 61 6e 20 61  urn code.if an a
3b60: 6e 6f 74 68 65 72 20 74 68 72 65 61 64 20 6f 72  nother thread or
3b70: 20 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 5b   process has a [
3b80: 73 68 61 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20  shared lock] on 
3b90: 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 68 61  the database.tha
3ba0: 74 20 70 72 65 76 65 6e 74 65 64 20 74 68 65 20  t prevented the 
3bb0: 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65  database from be
3bc0: 69 6e 67 20 75 70 64 61 74 65 64 2e 20 20 5e 57  ing updated.  ^W
3bd0: 68 65 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73  hen COMMIT fails
3be0: 20 69 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68   in this.way, th
3bf0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65  e transaction re
3c00: 6d 61 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64  mains active and
3c10: 20 74 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20   the COMMIT can 
3c20: 62 65 20 72 65 74 72 69 65 64 20 6c 61 74 65 72  be retried later
3c30: 0a 61 66 74 65 72 20 74 68 65 20 72 65 61 64 65  .after the reade
3c40: 72 20 68 61 73 20 68 61 64 20 61 20 63 68 61 6e  r has had a chan
3c50: 63 65 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70  ce to clear..</p
3c60: 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 52 4f 4c 4c  >..<p>.^The ROLL
3c70: 42 41 43 4b 20 77 69 6c 6c 20 66 61 69 6c 20 77  BACK will fail w
3c80: 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  ith an error cod
3c90: 65 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 20  e [SQLITE_BUSY] 
3ca0: 69 66 20 74 68 65 72 65 0a 61 72 65 20 61 6e 79  if there.are any
3cb0: 20 70 65 6e 64 69 6e 67 20 71 75 65 72 69 65 73   pending queries
3cc0: 2e 20 20 5e 42 6f 74 68 20 72 65 61 64 2d 6f 6e  .  ^Both read-on
3cd0: 6c 79 20 61 6e 64 20 72 65 61 64 2f 77 72 69 74  ly and read/writ
3ce0: 65 20 71 75 65 72 69 65 73 20 77 69 6c 6c 0a 63  e queries will.c
3cf0: 61 75 73 65 20 61 20 52 4f 4c 4c 42 41 43 4b 20  ause a ROLLBACK 
3d00: 74 6f 20 66 61 69 6c 2e 20 20 41 20 52 4f 4c 4c  to fail.  A ROLL
3d10: 42 41 43 4b 20 6d 75 73 74 20 66 61 69 6c 20 69  BACK must fail i
3d20: 66 20 74 68 65 72 65 20 61 72 65 20 70 65 6e 64  f there are pend
3d30: 69 6e 67 0a 72 65 61 64 20 6f 70 65 72 61 74 69  ing.read operati
3d40: 6f 6e 73 20 28 75 6e 6c 69 6b 65 20 43 4f 4d 4d  ons (unlike COMM
3d50: 49 54 20 77 68 69 63 68 20 63 61 6e 20 73 75 63  IT which can suc
3d60: 63 65 65 64 29 20 62 65 63 61 75 73 65 20 62 61  ceed) because ba
3d70: 64 20 74 68 69 6e 67 73 0a 77 69 6c 6c 20 68 61  d things.will ha
3d80: 70 70 65 6e 20 69 66 20 74 68 65 20 69 6e 2d 6d  ppen if the in-m
3d90: 65 6d 6f 72 79 20 69 6d 61 67 65 20 6f 66 20 74  emory image of t
3da0: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63  he database is c
3db0: 68 61 6e 67 65 64 20 6f 75 74 20 66 72 6f 6d 20  hanged out from 
3dc0: 75 6e 64 65 72 0a 61 6e 20 61 63 74 69 76 65 20  under.an active 
3dd0: 71 75 65 72 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  query..</p>..<p>
3de0: 0a 49 66 20 5b 50 52 41 47 4d 41 20 6a 6f 75 72  .If [PRAGMA jour
3df0: 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 73 65 74  nal_mode] is set
3e00: 20 74 6f 20 4f 46 46 20 28 74 68 75 73 20 64 69   to OFF (thus di
3e10: 73 61 62 6c 69 6e 67 20 74 68 65 20 72 6f 6c 6c  sabling the roll
3e20: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c  back journal.fil
3e30: 65 29 20 74 68 65 6e 20 74 68 65 20 62 65 68 61  e) then the beha
3e40: 76 69 6f 72 20 6f 66 20 74 68 65 20 52 4f 4c 4c  vior of the ROLL
3e50: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 69 73 20  BACK command is 
3e60: 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a  undefined..</p>.
3e70: 0a 3c 68 33 3e 52 65 73 70 6f 6e 73 65 20 54 6f  .<h3>Response To
3e80: 20 45 72 72 6f 72 73 20 57 69 74 68 69 6e 20 41   Errors Within A
3e90: 20 54 72 61 6e 73 61 63 74 69 6f 6e 3c 2f 68 33   Transaction</h3
3ea0: 3e 0a 0a 3c 70 3e 20 5e 28 49 66 20 63 65 72 74  >..<p> ^(If cert
3eb0: 61 69 6e 20 6b 69 6e 64 73 20 6f 66 20 65 72 72  ain kinds of err
3ec0: 6f 72 73 20 6f 63 63 75 72 20 77 69 74 68 69 6e  ors occur within
3ed0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20   a transaction, 
3ee0: 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  the.transaction 
3ef0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
3f00: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75  e rolled back au
3f10: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 20 54 68  tomatically.  Th
3f20: 65 0a 65 72 72 6f 72 73 20 74 68 61 74 20 63 61  e.errors that ca
3f30: 75 73 65 20 74 68 65 20 62 65 68 61 76 69 6f 72  use the behavior
3f40: 20 69 6e 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c   include:</p>..<
3f50: 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ul>.<li> [SQLITE
3f60: 5f 46 55 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65  _FULL]: database
3f70: 20 6f 72 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c   or disk full.<l
3f80: 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52  i> [SQLITE_IOERR
3f90: 5d 3a 20 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f  ]: disk I/O erro
3fa0: 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42  r.<li> [SQLITE_B
3fb0: 55 53 59 5d 3a 20 64 61 74 61 62 61 73 65 20 69  USY]: database i
3fc0: 6e 20 75 73 65 20 62 79 20 61 6e 6f 74 68 65 72  n use by another
3fd0: 20 70 72 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53   process.<li> [S
3fe0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75  QLITE_NOMEM]: ou
3ff0: 74 20 6f 72 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e  t or memory.<li>
4000: 20 5b 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55   [SQLITE_INTERRU
4010: 50 54 5d 3a 20 70 72 6f 63 65 73 73 69 6e 67 20  PT]: processing 
4020: 5b 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75  [sqlite3_interru
4030: 70 74 7c 69 6e 74 65 72 72 75 70 74 65 64 5d 0a  pt|interrupted].
4040: 20 20 20 20 20 62 79 20 61 70 70 6c 69 63 61 74       by applicat
4050: 69 6f 6e 20 72 65 71 75 65 73 74 0a 3c 2f 75 6c  ion request.</ul
4060: 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c  >)^..<p>.^For al
4070: 6c 20 6f 66 20 74 68 65 73 65 20 65 72 72 6f 72  l of these error
4080: 73 2c 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70  s, SQLite attemp
4090: 74 73 20 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20  ts to undo just 
40a0: 74 68 65 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e  the one statemen
40b0: 74 0a 69 74 20 77 61 73 20 77 6f 72 6b 69 6e 67  t.it was working
40c0: 20 6f 6e 20 61 6e 64 20 6c 65 61 76 65 20 63 68   on and leave ch
40d0: 61 6e 67 65 73 20 66 72 6f 6d 20 70 72 69 6f 72  anges from prior
40e0: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
40f0: 69 6e 20 74 68 65 0a 73 61 6d 65 20 74 72 61 6e  in the.same tran
4100: 73 61 63 74 69 6f 6e 20 69 6e 74 61 63 74 20 61  saction intact a
4110: 6e 64 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68  nd continue with
4120: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4130: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65  .  ^However, .de
4140: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 73  pending on the s
4150: 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65  tatement being e
4160: 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
4170: 20 70 6f 69 6e 74 20 61 74 20 77 68 69 63 68 20   point at which 
4180: 74 68 65 0a 65 72 72 6f 72 20 6f 63 63 75 72 73  the.error occurs
4190: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 6e 65  , it might be ne
41a0: 63 65 73 73 61 72 79 20 66 6f 72 20 53 51 4c 69  cessary for SQLi
41b0: 74 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  te to rollback a
41c0: 6e 64 0a 63 61 6e 63 65 6c 20 74 68 65 20 65 6e  nd.cancel the en
41d0: 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tire transaction
41e0: 2e 20 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69  .  ^An applicati
41f0: 6f 6e 20 63 61 6e 20 74 65 6c 6c 20 77 68 69 63  on can tell whic
4200: 68 0a 63 6f 75 72 73 65 20 6f 66 20 61 63 74 69  h.course of acti
4210: 6f 6e 20 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62  on SQLite took b
4220: 79 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c  y using the.[sql
4230: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
4240: 6d 69 74 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  mit()] C-languag
4250: 65 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  e interface.</p>
4260: 0a 0a 3c 70 3e 49 74 20 69 73 20 72 65 63 6f 6d  ..<p>It is recom
4270: 6d 65 6e 64 65 64 20 74 68 61 74 20 61 70 70 6c  mended that appl
4280: 69 63 61 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64  ications respond
4290: 20 74 6f 20 74 68 65 20 65 72 72 6f 72 73 0a 6c   to the errors.l
42a0: 69 73 74 65 64 20 61 62 6f 76 65 20 62 79 20 65  isted above by e
42b0: 78 70 6c 69 63 69 74 6c 79 20 69 73 73 75 69 6e  xplicitly issuin
42c0: 67 20 61 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  g a ROLLBACK com
42d0: 6d 61 6e 64 2e 20 20 5e 49 66 20 74 68 65 20 0a  mand.  ^If the .
42e0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20  transaction has 
42f0: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 72 6f 6c  already been rol
4300: 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74  led back automat
4310: 69 63 61 6c 6c 79 0a 62 79 20 74 68 65 20 65 72  ically.by the er
4320: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c 20 74 68  ror response, th
4330: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
4340: 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69  command will fai
4350: 6c 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c  l with an.error,
4360: 20 62 75 74 20 6e 6f 20 68 61 72 6d 20 69 73 20   but no harm is 
4370: 63 61 75 73 65 64 20 62 79 20 74 68 69 73 2e 3c  caused by this.<
4380: 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76  /p>..<p>Future v
4390: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
43a0: 65 20 6d 61 79 20 65 78 74 65 6e 64 20 74 68 65  e may extend the
43b0: 20 6c 69 73 74 20 6f 66 20 65 72 72 6f 72 73 20   list of errors 
43c0: 77 68 69 63 68 0a 6d 69 67 68 74 20 63 61 75 73  which.might caus
43d0: 65 20 61 75 74 6f 6d 61 74 69 63 20 74 72 61 6e  e automatic tran
43e0: 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b  saction rollback
43f0: 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
4400: 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67  ns of.SQLite mig
4410: 68 74 20 63 68 61 6e 67 65 20 74 68 65 20 65 72  ht change the er
4420: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e 20 20 49  ror response.  I
4430: 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 77 65  n particular, we
4440: 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73   may.choose to s
4450: 69 6d 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65  implify the inte
4460: 72 66 61 63 65 20 69 6e 20 66 75 74 75 72 65 20  rface in future 
4470: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
4480: 74 65 20 62 79 0a 63 61 75 73 69 6e 67 20 74 68  te by.causing th
4490: 65 20 65 72 72 6f 72 73 20 61 62 6f 76 65 20 74  e errors above t
44a0: 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e  o force an uncon
44b0: 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63  ditional rollbac
44c0: 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  k.</p>..<tcl>.##
44d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
44e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
44f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4510: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
4520: 63 74 69 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54  ction {SAVEPOINT
4530: 7d 20 73 61 76 65 70 6f 69 6e 74 20 7b 53 41 56  } savepoint {SAV
4540: 45 50 4f 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a  EPOINT RELEASE}.
4550: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  .BubbleDiagram s
4560: 61 76 65 70 6f 69 6e 74 2d 73 74 6d 74 0a 42 75  avepoint-stmt.Bu
4570: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 6c 65  bbleDiagram rele
4580: 61 73 65 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44  ase-stmt.BubbleD
4590: 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d  iagram rollback-
45a0: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
45b0: 20 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65   ^SAVEPOINTs are
45c0: 20 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65   a method of cre
45d0: 61 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f  ating transactio
45e0: 6e 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b  ns, similar to.[
45f0: 42 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d  BEGIN] and [COMM
4600: 49 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74  IT], except that
4610: 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61   the SAVEPOINT a
4620: 6e 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  nd RELEASE comma
4630: 6e 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e  nds.are named an
4640: 64 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e  d may be nested.
4650: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53  </p>..<p> ^The S
4660: 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64  AVEPOINT command
4670: 20 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72   starts a new tr
4680: 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61  ansaction with a
4690: 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e   name..^The tran
46a0: 73 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65  saction names ne
46b0: 65 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65  ed not be unique
46c0: 2e 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20  ..^(A SAVEPOINT 
46d0: 63 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65  can be started e
46e0: 69 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20  ither within or 
46f0: 6f 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45  outside of.a [BE
4700: 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e  GIN]...[COMMIT].
4710: 29 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56  )^  ^(When a SAV
4720: 45 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75  EPOINT is the ou
4730: 74 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69  ter-most savepoi
4740: 6e 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74  nt.and it is not
4750: 20 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e   within a [BEGIN
4760: 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65  ]...[COMMIT] the
4770: 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
4780: 73 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45  s the.same as BE
4790: 47 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41  GIN DEFERRED TRA
47a0: 4e 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a  NSACTION.)^</p>.
47b0: 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43  .<p>^The ROLLBAC
47c0: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76  K TO command rev
47d0: 65 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f  erts the state o
47e0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  f the database b
47f0: 61 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77  ack to what.it w
4800: 61 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68  as just after th
4810: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
4820: 53 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74  SAVEPOINT.  ^Not
4830: 65 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68  e that unlike th
4840: 61 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41  at.plain [ROLLBA
4850: 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74  CK] command (wit
4860: 68 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77  hout the TO keyw
4870: 6f 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43  ord) the ROLLBAC
4880: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65  K TO command.doe
4890: 73 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65  s not cancel the
48a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
48b0: 49 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65  Instead of cance
48c0: 6c 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61  lling the transa
48d0: 63 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42  ction,.the ROLLB
48e0: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72  ACK TO command r
48f0: 65 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e  estarts the tran
4900: 73 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74  saction again at
4910: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
4920: 5e 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67  ^All intervening
4930: 20 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20   SAVEPOINTs are 
4940: 63 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65  canceled, howeve
4950: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
4960: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4970: 69 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49  is like a [COMMI
4980: 54 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49  T] for a SAVEPOI
4990: 4e 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45  NT..^The RELEASE
49a0: 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20   command causes 
49b0: 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62  all savepoints b
49c0: 61 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75  ack to and inclu
49d0: 64 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72  ding the .most r
49e0: 65 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  ecent savepoint 
49f0: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
4a00: 6e 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76  name to be remov
4a10: 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61  ed from the .tra
4a20: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20  nsaction stack. 
4a30: 20 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66   ^The RELEASE of
4a40: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
4a50: 63 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63  ction.does not c
4a60: 61 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73  ause any changes
4a70: 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74   to be written t
4a80: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
4a90: 69 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72  ile; it merely.r
4aa0: 65 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74  emoves savepoint
4ab0: 73 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73  s from the trans
4ac0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63  action stack suc
4ad0: 68 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20  h that it is.no 
4ae0: 6c 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20  longer possible 
4af0: 74 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74  to ROLLBACK TO t
4b00: 68 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e  hose savepoints.
4b10: 0a 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63  .^If a RELEASE c
4b20: 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ommand releases 
4b30: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
4b40: 76 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74  vepoint, so.that
4b50: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4b60: 20 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65   stack becomes e
4b70: 6d 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41  mpty, then RELEA
4b80: 53 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61  SE is the same.a
4b90: 73 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65  s [COMMIT]..^The
4ba0: 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e   [COMMIT] comman
4bb0: 64 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f  d may be used to
4bc0: 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76   release all sav
4bd0: 65 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d  epoints and.comm
4be0: 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  it the transacti
4bf0: 6f 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74  on even if the t
4c00: 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f  ransaction was o
4c10: 72 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65  riginally starte
4c20: 64 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54  d.by a SAVEPOINT
4c30: 20 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64   command instead
4c40: 20 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f   of a [BEGIN] co
4c50: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  mmand.</p>..<p>^
4c60: 49 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  If the savepoint
4c70: 2d 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41  -name in a RELEA
4c80: 53 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20  SE command does 
4c90: 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61  not match any.sa
4ca0: 76 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c  vepoint currentl
4cb0: 79 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63  y in the transac
4cc0: 74 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e  tion stack, then
4cd0: 20 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61   no savepoints a
4ce0: 72 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65  re.released, the
4cf0: 20 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63   database is unc
4d00: 68 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20  hanged, and the 
4d10: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4d20: 72 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72  returns.an error
4d30: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  .</p>..<p>^Note 
4d40: 74 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72  that an inner tr
4d50: 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20  ansaction might 
4d60: 63 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68  commit (using th
4d70: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4d80: 64 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65  d).but then late
4d90: 72 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20  r have its work 
4da0: 75 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c  undone by a ROLL
4db0: 42 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72  BACK in an outer
4dc0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41   transaction..^A
4dd0: 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f   power failure o
4de0: 72 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20  r program crash 
4df0: 6f 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c  or OS crash will
4e00: 20 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72   cause the outer
4e10: 2d 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f  -most.transactio
4e20: 6e 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75  n to rollback, u
4e30: 6e 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67  ndoing all chang
4e40: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
4e50: 75 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61  urred within.tha
4e60: 74 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  t outer transact
4e70: 69 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65  ion, even change
4e80: 73 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70  s that have supp
4e90: 6f 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d  osedly been "com
4ea0: 6d 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52  mitted".by the R
4eb0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20  ELEASE command. 
4ec0: 20 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74   ^Content is not
4ed0: 20 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74   actually commit
4ee0: 74 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20  ted on the disk 
4ef0: 0a 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72  .until the outer
4f00: 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  most transaction
4f10: 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c   commits.</p>..<
4f20: 70 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65  p>There are seve
4f30: 72 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e  ral ways of thin
4f40: 6b 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52  king about the R
4f50: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c  ELEASE command:<
4f60: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
4f70: 3e 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69  >.Some people vi
4f80: 65 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68  ew RELEASE as th
4f90: 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  e equivalent of 
4fa0: 43 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56  COMMIT for a SAV
4fb0: 45 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20  EPOINT..This is 
4fc0: 61 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f  an acceptable po
4fd0: 69 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c  int of view as l
4fe0: 6f 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d  ong as one remem
4ff0: 62 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68  bers that the.ch
5000: 61 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20  anges committed 
5010: 62 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e  by an inner tran
5020: 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61  saction might la
5030: 74 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79  ter be undone by
5040: 20 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61   a.rollback in a
5050: 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  n outer transact
5060: 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ion.</p></li>..<
5070: 6c 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76  li><p>.Another v
5080: 69 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69  iew of RELEASE i
5090: 73 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73  s that it merges
50a0: 20 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63   a named transac
50b0: 74 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61  tion into its.pa
50c0: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
50d0: 2c 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61  , so that the na
50e0: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
50f0: 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62  and its parent b
5100: 65 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74  ecome.the same t
5110: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74  ransaction.  Aft
5120: 65 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20  er RELEASE, the 
5130: 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f  named transactio
5140: 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74  n and its parent
5150: 0a 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20  .will commit or 
5160: 72 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65  rollback togethe
5170: 72 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69  r, whatever thei
5180: 72 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c  r fate may be..<
5190: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
51a0: 3e 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74  >.One can also t
51b0: 68 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e  hink of savepoin
51c0: 74 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e  ts as."marks" in
51d0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
51e0: 20 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74   timeline.  In t
51f0: 68 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41  his view, the SA
5200: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a  VEPOINT command.
5210: 63 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61  creates a new ma
5220: 72 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rk, the ROLLBACK
5230: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69   TO command rewi
5240: 6e 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65  nds the timeline
5250: 20 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74   back.to a point
5260: 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20   just after the 
5270: 6e 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20  named mark, and 
5280: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
5290: 61 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73  and.erases marks
52a0: 20 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69   from the timeli
52b0: 6e 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61  ne without actua
52c0: 6c 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63  lly making any.c
52d0: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
52e0: 74 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69  tabase..</p></li
52f0: 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54  >.</ul>....<h3>T
5300: 72 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69  ransaction Nesti
5310: 6e 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  ng Rules</h3>..<
5320: 70 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e  p>^The last tran
5330: 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20  saction started 
5340: 77 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73  will be the firs
5350: 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  t.transaction co
5360: 6d 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65  mmitted or rolle
5370: 64 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e  d back.</p>..<p>
5380: 5e 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  ^The [BEGIN] com
5390: 6d 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  mand only works 
53a0: 69 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  if the transacti
53b0: 6f 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74  on stack is empt
53c0: 79 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77  y, or.in other w
53d0: 6f 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72  ords if there ar
53e0: 65 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61  e no pending tra
53f0: 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20  nsactions.  ^If 
5400: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  the transaction.
5410: 73 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70  stack is not emp
5420: 74 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47  ty when the [BEG
5430: 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69  IN] command is i
5440: 6e 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65  nvoked, then the
5450: 20 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77   command.fails w
5460: 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70  ith an error.</p
5470: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d  >..<p>^The [COMM
5480: 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  IT] command comm
5490: 69 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64  its all outstand
54a0: 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ing transactions
54b0: 20 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20   and leaves.the 
54c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
54d0: 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70  k empty.</p>..<p
54e0: 3e 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f  >^The RELEASE co
54f0: 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74  mmand starts wit
5500: 68 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  h the most recen
5510: 74 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68  t addition to th
5520: 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e.transaction st
5530: 61 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73  ack and releases
5540: 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b   savepoints back
5550: 77 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75  wards .in time u
5560: 6e 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73  ntil it releases
5570: 20 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74   a savepoint wit
5580: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76  h a matching sav
5590: 65 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72  epoint-name..^Pr
55a0: 69 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20  ior savepoints, 
55b0: 65 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  even savepoints 
55c0: 77 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61  with matching sa
55d0: 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61  vepoint-names, a
55e0: 72 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49  re.unchanged..^I
55f0: 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  f the RELEASE co
5600: 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65  mmand causes the
5610: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
5620: 63 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70  ck to become emp
5630: 74 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41  ty (if the RELEA
5640: 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61  SE command relea
5650: 73 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73  ses the.outermos
5660: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72  t transaction fr
5670: 6f 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68  om the stack) th
5680: 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  en the transacti
5690: 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a  on commits.</p>.
56a0: 0a 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41  .<p>^The [ROLLBA
56b0: 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68  CK] command with
56c0: 6f 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20  out a TO clause 
56d0: 72 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20  rolls backs all 
56e0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64  transactions.and
56f0: 20 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e   leaves the tran
5700: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d  saction stack em
5710: 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  pty.</p>..<p>^Th
5720: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
5730: 6e 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61  nd with a TO cla
5740: 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74  use rolls back t
5750: 72 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e  ransactions goin
5760: 67 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74  g.backwards in t
5770: 69 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20  ime back to the 
5780: 6d 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45  most recent SAVE
5790: 50 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74  POINT with a mat
57a0: 63 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65  ching name..^The
57b0: 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20   SAVEPOINT with 
57c0: 74 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  the matching nam
57d0: 65 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65  e remains on the
57e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
57f0: 63 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61  ck,.but all data
5800: 62 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61  base changes tha
5810: 74 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72  t occurred after
5820: 20 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20   that SAVEPOINT 
5830: 77 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20  was created.are 
5840: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49  rolled back.  ^I
5850: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
5860: 6e 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41  name in a ROLLBA
5870: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f  CK TO command do
5880: 65 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79  es not.match any
5890: 20 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68   SAVEPOINT on th
58a0: 65 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68  e stack, then th
58b0: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
58c0: 6e 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  nd fails with an
58d0: 0a 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65  .error and leave
58e0: 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  s the state of t
58f0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68  he database unch
5900: 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  anged.</p>..<tcl
5910: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
5920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5960: 23 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e  #.Section commen
5970: 74 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65  t comment {comme
5980: 6e 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 42  nt *comments}..B
5990: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d  ubbleDiagram com
59a0: 6d 65 6e 74 2d 73 79 6e 74 61 78 0a 3c 2f 74 63  ment-syntax.</tc
59b0: 6c 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73  l>..<p>^Comments
59c0: 20 61 72 65 20 6e 6f 74 20 53 51 4c 20 63 6f 6d   are not SQL com
59d0: 6d 61 6e 64 73 2c 20 62 75 74 20 63 61 6e 20 6f  mands, but can o
59e0: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20  ccur within the 
59f0: 74 65 78 74 20 6f 66 0a 53 51 4c 20 71 75 65 72  text of.SQL quer
5a00: 69 65 73 20 70 61 73 73 65 64 20 74 6f 20 5b 73  ies passed to [s
5a10: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
5a20: 32 28 29 5d 20 61 6e 64 20 72 65 6c 61 74 65 64  2()] and related
5a30: 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 5e 43 6f   interfaces..^Co
5a40: 6d 6d 65 6e 74 73 20 61 72 65 20 74 72 65 61 74  mments are treat
5a50: 65 64 20 61 73 20 77 68 69 74 65 73 70 61 63 65  ed as whitespace
5a60: 20 62 79 20 74 68 65 20 70 61 72 73 65 72 2e 0a   by the parser..
5a70: 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65  ^Comments can be
5a80: 67 69 6e 20 61 6e 79 77 68 65 72 65 20 77 68 69  gin anywhere whi
5a90: 74 65 73 70 61 63 65 20 0a 63 61 6e 20 62 65 20  tespace .can be 
5aa0: 66 6f 75 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67  found, including
5ab0: 20 69 6e 73 69 64 65 20 65 78 70 72 65 73 73 69   inside expressi
5ac0: 6f 6e 73 20 74 68 61 74 20 73 70 61 6e 20 6d 75  ons that span mu
5ad0: 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f  ltiple lines..</
5ae0: 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d  p>..<p>^SQL comm
5af0: 65 6e 74 73 20 62 65 67 69 6e 20 77 69 74 68 20  ents begin with 
5b00: 74 77 6f 20 63 6f 6e 73 65 63 75 74 69 76 65 20  two consecutive 
5b10: 22 2d 22 20 63 68 61 72 61 63 74 65 72 73 20 28  "-" characters (
5b20: 41 53 43 49 49 20 30 78 32 64 29 0a 61 6e 64 20  ASCII 0x2d).and 
5b30: 65 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64  extend up to and
5b40: 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e   including the n
5b50: 65 78 74 20 6e 65 77 6c 69 6e 65 20 63 68 61 72  ext newline char
5b60: 61 63 74 65 72 20 28 41 53 43 49 49 20 30 78 30  acter (ASCII 0x0
5b70: 61 29 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  a).or until the 
5b80: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
5b90: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
5ba0: 72 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d  rst.</p>..<p>^C-
5bb0: 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 20 62  style comments b
5bc0: 65 67 69 6e 0a 77 69 74 68 20 22 2f 2a 22 20 61  egin.with "/*" a
5bd0: 6e 64 20 65 78 74 65 6e 64 20 75 70 20 74 6f 20  nd extend up to 
5be0: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
5bf0: 65 20 6e 65 78 74 20 22 2a 2f 22 20 63 68 61 72  e next "*/" char
5c00: 61 63 74 65 72 20 70 61 69 72 0a 6f 72 20 75 6e  acter pair.or un
5c10: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
5c20: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
5c30: 63 6f 6d 65 73 20 66 69 72 73 74 2e 20 20 5e 43  comes first.  ^C
5c40: 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a  -style comments.
5c50: 63 61 6e 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c  can span multipl
5c60: 65 20 6c 69 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c  e lines. </p>..<
5c70: 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20  p>^Comments can 
5c80: 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20  appear anywhere 
5c90: 77 68 69 74 65 73 70 61 63 65 20 63 61 6e 20 6f  whitespace can o
5ca0: 63 63 75 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20  ccur,.including 
5cb0: 69 6e 73 69 64 65 20 65 78 70 72 65 73 73 69 6f  inside expressio
5cc0: 6e 73 20 61 6e 64 20 69 6e 20 74 68 65 20 6d 69  ns and in the mi
5cd0: 64 64 6c 65 20 6f 66 20 6f 74 68 65 72 20 53 51  ddle of other SQ
5ce0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 43  L statements..^C
5cf0: 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e 6f 74 20 6e  omments do not n
5d00: 65 73 74 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  est..</p>...<tcl
5d10: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
5d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d60: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
5d70: 20 49 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e   INDEX} createin
5d80: 64 65 78 20 7b 7b 43 52 45 41 54 45 20 49 4e 44  dex {{CREATE IND
5d90: 45 58 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  EX}}..BubbleDiag
5da0: 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65 78  ram create-index
5db0: 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
5dc0: 61 67 72 61 6d 20 69 6e 64 65 78 65 64 2d 63 6f  agram indexed-co
5dd0: 6c 75 6d 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  lumn.</tcl>..<p>
5de0: 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e 44 45  ^The CREATE INDE
5df0: 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73  X command consis
5e00: 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72  ts of the keywor
5e10: 64 73 20 22 43 52 45 41 54 45 20 49 4e 44 45 58  ds "CREATE INDEX
5e20: 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68  " followed.by th
5e30: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  e name of the ne
5e40: 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b 65 79  w index, the key
5e50: 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e  word "ON", the n
5e60: 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69 6f 75  ame of a previou
5e70: 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61 62 6c  sly.created tabl
5e80: 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20  e that is to be 
5e90: 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61 20 70  indexed, and a p
5ea0: 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73  arenthesized lis
5eb0: 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66 0a 63 6f  t of names of.co
5ec0: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
5ed0: 6c 65 20 74 68 61 74 20 61 72 65 20 75 73 65 64  le that are used
5ee0: 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78 20 6b   for the index k
5ef0: 65 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ey.</p>..<tcl>hd
5f00: 5f 66 72 61 67 6d 65 6e 74 20 7b 64 65 73 63 69  _fragment {desci
5f10: 64 78 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67 20  dx} {descending 
5f20: 69 6e 64 69 63 65 73 7d 20 7b 64 65 73 63 65 6e  indices} {descen
5f30: 64 69 6e 67 20 69 6e 64 65 78 7d 3c 2f 74 63 6c  ding index}</tcl
5f40: 3e 0a 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d  >.<p>^Each colum
5f50: 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66 6f  n name can be fo
5f60: 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f 66  llowed by one of
5f70: 20 74 68 65 20 22 41 53 43 22 20 6f 72 20 22 44   the "ASC" or "D
5f80: 45 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74 6f  ESC" keywords.to
5f90: 20 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20 6f   indicate sort o
5fa0: 72 64 65 72 2e 20 20 5e 54 68 65 20 73 6f 72 74  rder.  ^The sort
5fb0: 20 6f 72 64 65 72 20 6d 61 79 20 6f 72 20 6d 61   order may or ma
5fc0: 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64  y not be ignored
5fd0: 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e 20 74 68   depending.on th
5fe0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
5ff0: 66 6f 72 6d 61 74 2c 20 61 6e 64 20 69 6e 20 70  format, and in p
6000: 61 72 74 69 63 75 6c 61 72 20 74 68 65 20 5b 73  articular the [s
6010: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d  chema format num
6020: 62 65 72 5d 2e 0a 5e 54 68 65 20 22 6c 65 67 61  ber]..^The "lega
6030: 63 79 22 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  cy" schema forma
6040: 74 20 28 31 29 20 69 67 6e 6f 72 65 73 20 69 6e  t (1) ignores in
6050: 64 65 78 0a 73 6f 72 74 20 6f 72 64 65 72 2e 20  dex.sort order. 
6060: 20 5e 54 68 65 20 64 65 73 63 65 6e 64 69 6e 67   ^The descending
6070: 20 69 6e 64 65 78 20 73 63 68 65 6d 61 20 66 6f   index schema fo
6080: 72 6d 61 74 20 28 34 29 20 74 61 6b 65 73 20 69  rmat (4) takes i
6090: 6e 64 65 78 20 73 6f 72 74 20 6f 72 64 65 72 0a  ndex sort order.
60a0: 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2e 20 20 5e  into account.  ^
60b0: 28 4f 6e 6c 79 20 63 6f 70 69 65 73 20 6f 66 20  (Only copies of 
60c0: 53 51 4c 69 74 65 20 6e 65 77 65 72 20 74 68 61  SQLite newer tha
60d0: 6e 20 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30  n [version 3.3.0
60e0: 5d 20 0a 28 72 65 6c 65 61 73 65 64 20 6f 6e 20  ] .(released on 
60f0: 32 30 30 36 2d 30 31 2d 31 30 29 20 61 72 65 20  2006-01-10) are 
6100: 61 62 6c 65 20 74 6f 20 75 6e 64 65 72 73 74 61  able to understa
6110: 6e 64 20 74 68 65 20 6e 65 77 65 72 20 64 65 73  nd the newer des
6120: 63 65 6e 64 69 6e 67 0a 69 6e 64 65 78 20 66 69  cending.index fi
6130: 6c 65 20 66 6f 72 6d 61 74 2e 29 5e 20 20 46 6f  le format.)^  Fo
6140: 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c  r compatibility,
6150: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69   version of SQLi
6160: 74 65 20 62 65 74 77 65 65 6e 20 33 2e 33 2e 30  te between 3.3.0
6170: 0a 61 6e 64 20 33 2e 37 2e 39 20 75 73 65 20 74  .and 3.7.9 use t
6180: 68 65 20 6c 65 67 61 63 79 20 73 63 68 65 6d 61  he legacy schema
6190: 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66 61 75   format by defau
61a0: 6c 74 2e 20 20 54 68 65 20 6e 65 77 65 72 20 73  lt.  The newer s
61b0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 0a  chema format is.
61c0: 75 73 65 64 20 62 79 20 64 65 66 61 75 6c 74 20  used by default 
61d0: 69 6e 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 31  in version 3.7.1
61e0: 30 20 61 6e 64 20 6c 61 74 65 72 2e 0a 5e 54 68  0 and later..^Th
61f0: 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66  e [legacy_file_f
6200: 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20 63 61  ormat pragma] ca
6210: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 68 61  n be used to cha
6220: 6e 67 65 20 73 65 74 20 74 68 65 20 73 70 65 63  nge set the spec
6230: 69 66 69 63 0a 62 65 68 61 76 69 6f 72 20 66 6f  ific.behavior fo
6240: 72 20 61 6e 79 20 76 65 72 73 69 6f 6e 20 6f 66  r any version of
6250: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70   SQLite.</p>..<p
6260: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
6270: 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  ause optionally 
6280: 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20 63  following each c
6290: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e  olumn name defin
62a0: 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73  es a.collating s
62b0: 65 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72  equence used for
62c0: 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e   text entries in
62d0: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54   that column..^T
62e0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
62f0: 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73  ting.sequence is
6300: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
6310: 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20  equence defined 
6320: 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20  for that column 
6330: 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54  in the.[CREATE T
6340: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
6350: 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c    ^Or if no coll
6360: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
6370: 73 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 69  s otherwise defi
6380: 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69  ned,.the built-i
6390: 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  n BINARY collati
63a0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
63b0: 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  sed.</p>..<p>The
63c0: 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72  re are no arbitr
63d0: 61 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68  ary limits on th
63e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 69  e number of indi
63f0: 63 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a  ces that can be.
6400: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 73 69  attached to a si
6410: 6e 67 6c 65 20 74 61 62 6c 65 2e 20 20 5e 28 54  ngle table.  ^(T
6420: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
6430: 75 6d 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  umns in an index
6440: 20 69 73 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20   is .limited to 
6450: 74 68 65 20 76 61 6c 75 65 20 73 65 74 20 62 79  the value set by
6460: 0a 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d  .[sqlite3_limit]
6470: 28 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43  ([SQLITE_LIMIT_C
6480: 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f  OLUMN],...).)^</
6490: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
64a0: 6d 65 6e 74 20 75 6e 69 71 75 65 69 64 78 20 7b  ment uniqueidx {
64b0: 75 6e 69 71 75 65 20 69 6e 64 65 78 7d 3c 2f 74  unique index}</t
64c0: 63 6c 3e 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55  cl>.<p>^If the U
64d0: 4e 49 51 55 45 20 6b 65 79 77 6f 72 64 20 61 70  NIQUE keyword ap
64e0: 70 65 61 72 73 20 62 65 74 77 65 65 6e 20 43 52  pears between CR
64f0: 45 41 54 45 20 61 6e 64 20 49 4e 44 45 58 20 74  EATE and INDEX t
6500: 68 65 6e 20 64 75 70 6c 69 63 61 74 65 0a 69 6e  hen duplicate.in
6510: 64 65 78 20 65 6e 74 72 69 65 73 20 61 72 65 20  dex entries are 
6520: 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e 20 20 5e 41  not allowed.  ^A
6530: 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e  ny attempt to in
6540: 73 65 72 74 20 61 20 64 75 70 6c 69 63 61 74 65  sert a duplicate
6550: 20 65 6e 74 72 79 0a 77 69 6c 6c 20 72 65 73 75   entry.will resu
6560: 6c 74 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 20  lt in an error. 
6570: 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
6580: 65 73 20 6f 66 20 75 6e 69 71 75 65 20 69 6e 64  es of unique ind
6590: 69 63 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76  ices, all NULL v
65a0: 61 6c 75 65 73 0a 61 72 65 20 63 6f 6e 73 69 64  alues.are consid
65b0: 65 72 65 64 20 74 6f 20 64 69 66 66 65 72 65 6e  ered to differen
65c0: 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72  t from all other
65d0: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64   NULL values and
65e0: 20 61 72 65 20 74 68 75 73 20 75 6e 69 71 75 65   are thus unique
65f0: 2e 0a 54 68 69 73 20 69 73 20 6f 6e 65 20 6f 66  ..This is one of
6600: 20 74 68 65 20 74 77 6f 20 70 6f 73 73 69 62 6c   the two possibl
6610: 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
6620: 73 20 6f 66 20 74 68 65 20 53 51 4c 2d 39 32 20  s of the SQL-92 
6630: 73 74 61 6e 64 61 72 64 0a 28 74 68 65 20 6c 61  standard.(the la
6640: 6e 67 75 61 67 65 20 69 6e 20 74 68 65 20 73 74  nguage in the st
6650: 61 6e 64 61 72 64 20 69 73 20 61 6d 62 69 67 75  andard is ambigu
6660: 6f 75 73 29 20 61 6e 64 20 69 73 20 74 68 65 20  ous) and is the 
6670: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 0a 66  interpretation.f
6680: 6f 6c 6c 6f 77 65 64 20 62 79 20 50 6f 73 74 67  ollowed by Postg
6690: 72 65 53 51 4c 2c 20 4d 79 53 51 4c 2c 20 46 69  reSQL, MySQL, Fi
66a0: 72 65 62 69 72 64 2c 20 61 6e 64 20 4f 72 61 63  rebird, and Orac
66b0: 6c 65 2e 20 20 49 6e 66 6f 72 6d 69 78 20 61 6e  le.  Informix an
66c0: 64 0a 4d 69 63 72 6f 73 6f 66 74 20 53 51 4c 20  d.Microsoft SQL 
66d0: 53 65 72 76 65 72 20 66 6f 6c 6c 6f 77 20 74 68  Server follow th
66e0: 65 20 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65  e other interpre
66f0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74  tation of the st
6700: 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  andard.</p>..<p>
6710: 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  ^If the optional
6720: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63   IF NOT EXISTS c
6730: 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
6740: 20 61 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e 64   and another ind
6750: 65 78 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65  ex.with the same
6760: 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78   name already ex
6770: 69 73 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20  ists, then this 
6780: 63 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20  command becomes 
6790: 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70  a no-op.</p>..<p
67a0: 3e 5e 49 6e 64 65 78 65 73 20 61 72 65 20 72 65  >^Indexes are re
67b0: 6d 6f 76 65 64 20 77 69 74 68 20 74 68 65 20 5b  moved with the [
67c0: 44 52 4f 50 20 49 4e 44 45 58 5d 20 63 6f 6d 6d  DROP INDEX] comm
67d0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  and.</p>...<tcl>
67e0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
67f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
6830: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
6840: 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61  TABLE} {createta
6850: 62 6c 65 7d 20 7b 7b 43 52 45 41 54 45 20 54 41  ble} {{CREATE TA
6860: 42 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  BLE}}..BubbleDia
6870: 67 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c  gram create-tabl
6880: 65 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44  e-stmt 1.BubbleD
6890: 69 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65  iagram column-de
68a0: 66 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  f.BubbleDiagram 
68b0: 74 79 70 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65  type-name.Bubble
68c0: 44 69 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63  Diagram column-c
68d0: 6f 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65  onstraint.Bubble
68e0: 44 69 61 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f  Diagram table-co
68f0: 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44  nstraint.BubbleD
6900: 69 61 67 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b  iagram foreign-k
6910: 65 79 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  ey-clause.</tcl>
6920: 0a 0a 3c 70 3e 54 68 65 20 22 43 52 45 41 54 45  ..<p>The "CREATE
6930: 20 54 41 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20   TABLE" command 
6940: 69 73 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  is used to creat
6950: 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
6960: 20 61 6e 20 53 51 4c 69 74 65 20 0a 64 61 74 61   an SQLite .data
6970: 62 61 73 65 2e 20 41 20 43 52 45 41 54 45 20 54  base. A CREATE T
6980: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65  ABLE command spe
6990: 63 69 66 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f  cifies the follo
69a0: 77 69 6e 67 20 61 74 74 72 69 62 75 74 65 73 20  wing attributes 
69b0: 6f 66 20 74 68 65 0a 6e 65 77 20 74 61 62 6c 65  of the.new table
69c0: 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ul>.  <li><p
69d0: 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  >The name of the
69e0: 20 6e 65 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   new table...  <
69f0: 6c 69 3e 3c 70 3e 20 54 68 65 20 64 61 74 61 62  li><p> The datab
6a00: 61 73 65 20 69 6e 20 77 68 69 63 68 20 74 68 65  ase in which the
6a10: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63 72   new table is cr
6a20: 65 61 74 65 64 2e 20 54 61 62 6c 65 73 20 6d 61  eated. Tables ma
6a30: 79 20 62 65 20 0a 20 20 20 20 20 20 63 72 65 61  y be .      crea
6a40: 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ted in the main 
6a50: 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 65  database, the te
6a60: 6d 70 20 64 61 74 61 62 61 73 65 2c 20 6f 72 20  mp database, or 
6a70: 69 6e 20 61 6e 79 20 61 74 74 61 63 68 65 64 0a  in any attached.
6a80: 20 20 20 20 20 20 64 61 74 61 62 61 73 65 2e 0a        database..
6a90: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e  .  <li><p> The n
6aa0: 61 6d 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ame of each colu
6ab0: 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  mn in the table.
6ac0: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20  ..  <li><p> The 
6ad0: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66  declared type of
6ae0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
6af0: 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c  the table...  <l
6b00: 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74 20  i><p> A default 
6b10: 76 61 6c 75 65 20 6f 72 20 65 78 70 72 65 73 73  value or express
6b20: 69 6f 6e 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  ion for each col
6b30: 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65  umn in the table
6b40: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64  ...  <li><p> A d
6b50: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
6b60: 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65   sequence to use
6b70: 20 77 69 74 68 20 65 61 63 68 20 63 6f 6c 75 6d   with each colum
6b80: 6e 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70  n...  <li><p> Op
6b90: 74 69 6f 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d  tionally, a PRIM
6ba0: 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20  ARY KEY for the 
6bb0: 74 61 62 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67  table. Both sing
6bc0: 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20  le column and.  
6bd0: 20 20 20 20 20 63 6f 6d 70 6f 73 69 74 65 20 28       composite (
6be0: 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29  multiple column)
6bf0: 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 61 72   primary keys ar
6c00: 65 20 73 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20  e supported...  
6c10: 3c 6c 69 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66  <li><p> A set of
6c20: 20 53 51 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73   SQL constraints
6c30: 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 2e   for each table.
6c40: 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
6c50: 20 55 4e 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20   UNIQUE, NOT.   
6c60: 20 20 20 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20      NULL, CHECK 
6c70: 61 6e 64 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  and FOREIGN KEY 
6c80: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 3c 2f 75  constraints..</u
6c90: 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 43 52 45  l>..<p>Every CRE
6ca0: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
6cb0: 65 6e 74 20 6d 75 73 74 20 73 70 65 63 69 66 79  ent must specify
6cc0: 20 61 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20   a name for the 
6cd0: 6e 65 77 20 74 61 62 6c 65 2e 0a 20 20 5e 28 54  new table..  ^(T
6ce0: 61 62 6c 65 20 6e 61 6d 65 73 20 74 68 61 74 20  able names that 
6cf0: 62 65 67 69 6e 20 77 69 74 68 20 22 73 71 6c 69  begin with "sqli
6d00: 74 65 5f 22 20 61 72 65 20 72 65 73 65 72 76 65  te_" are reserve
6d10: 64 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75  d for internal u
6d20: 73 65 2e 20 49 74 0a 20 20 69 73 20 61 6e 20 65  se. It.  is an e
6d30: 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20  rror to attempt 
6d40: 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c  to create a tabl
6d50: 65 20 77 69 74 68 20 61 20 6e 61 6d 65 20 74 68  e with a name th
6d60: 61 74 20 73 74 61 72 74 73 20 77 69 74 68 0a 20  at starts with. 
6d70: 20 22 73 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a 3c   "sqlite_".)^..<
6d80: 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74  p> ^If a &lt;dat
6d90: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
6da0: 73 20 73 70 65 63 69 66 69 65 64 2c 20 69 74 20  s specified, it 
6db0: 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 22  must be either "
6dc0: 6d 61 69 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22  main", .  "temp"
6dd0: 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66  , or the name of
6de0: 20 61 6e 20 5b 41 54 54 41 43 48 20 44 41 54 41   an [ATTACH DATA
6df0: 42 41 53 45 7c 61 74 74 61 63 68 65 64 20 64 61  BASE|attached da
6e00: 74 61 62 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69  tabase]. ^In thi
6e10: 73 20 63 61 73 65 0a 20 20 74 68 65 20 6e 65 77  s case.  the new
6e20: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
6e30: 64 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 64  d in the named d
6e40: 61 74 61 62 61 73 65 2e 20 5e 49 66 20 74 68 65  atabase. ^If the
6e50: 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50   "TEMP" or "TEMP
6e60: 4f 52 41 52 59 22 0a 20 20 6b 65 79 77 6f 72 64  ORARY".  keyword
6e70: 20 6f 63 63 75 72 73 20 62 65 74 77 65 65 6e 20   occurs between 
6e80: 74 68 65 20 22 43 52 45 41 54 45 22 20 61 6e 64  the "CREATE" and
6e90: 20 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74 68   "TABLE" then th
6ea0: 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 0a 20  e new table is. 
6eb0: 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20   created in the 
6ec0: 74 65 6d 70 20 64 61 74 61 62 61 73 65 2e 20 5e  temp database. ^
6ed0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
6ee0: 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61  o specify both a
6ef0: 20 0a 20 20 26 6c 74 3b 64 61 74 61 62 61 73 65   .  &lt;database
6f00: 2d 6e 61 6d 65 26 67 74 3b 20 61 6e 64 20 74 68  -name&gt; and th
6f10: 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52  e TEMP or TEMPOR
6f20: 41 52 59 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c  ARY keyword, unl
6f30: 65 73 73 20 74 68 65 0a 20 20 26 6c 74 3b 64 61  ess the.  &lt;da
6f40: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
6f50: 69 73 20 22 74 65 6d 70 22 2e 20 5e 49 66 20 6e  is "temp". ^If n
6f60: 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  o database name 
6f70: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 64  is specified and
6f80: 20 74 68 65 0a 20 20 54 45 4d 50 20 6b 65 79 77   the.  TEMP keyw
6f90: 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65  ord is not prese
6fa0: 6e 74 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  nt then the tabl
6fb0: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  e is created in 
6fc0: 74 68 65 20 6d 61 69 6e 0a 20 20 64 61 74 61 62  the main.  datab
6fd0: 61 73 65 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20  ase...<p>.  ^It 
6fe0: 69 73 20 75 73 75 61 6c 6c 79 20 61 6e 20 65 72  is usually an er
6ff0: 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74  ror to attempt t
7000: 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74  o create a new t
7010: 61 62 6c 65 20 69 6e 20 61 20 64 61 74 61 62 61  able in a databa
7020: 73 65 20 74 68 61 74 0a 20 20 61 6c 72 65 61 64  se that.  alread
7030: 79 20 63 6f 6e 74 61 69 6e 73 20 61 20 74 61 62  y contains a tab
7040: 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20 76 69 65  le, index or vie
7050: 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61  w of the same na
7060: 6d 65 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  me. ^However, if
7070: 20 74 68 65 0a 20 20 22 49 46 20 4e 4f 54 20 45   the.  "IF NOT E
7080: 58 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73  XISTS" clause is
7090: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
70a0: 72 74 20 6f 66 20 74 68 65 20 43 52 45 41 54 45  rt of the CREATE
70b0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
70c0: 20 61 6e 64 0a 20 20 61 20 74 61 62 6c 65 20 6f   and.  a table o
70d0: 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61  r view of the sa
70e0: 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20  me name already 
70f0: 65 78 69 73 74 73 2c 20 74 68 65 20 43 52 45 41  exists, the CREA
7100: 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  TE TABLE command
7110: 0a 20 20 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f  .  simply has no
7120: 20 65 66 66 65 63 74 20 28 61 6e 64 20 6e 6f 20   effect (and no 
7130: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73  error message is
7140: 20 72 65 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20   returned). ^An 
7150: 65 72 72 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20  error is still. 
7160: 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
7170: 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65   table cannot be
7180: 20 63 72 65 61 74 65 64 20 62 65 63 61 75 73 65   created because
7190: 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   of an existing 
71a0: 69 6e 64 65 78 2c 20 65 76 65 6e 20 0a 20 20 69  index, even .  i
71b0: 66 20 74 68 65 20 22 49 46 20 4e 4f 54 20 45 58  f the "IF NOT EX
71c0: 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73 20  ISTS" clause is 
71d0: 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e  specified...<p>^
71e0: 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72  It is not an err
71f0: 6f 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 74  or to create a t
7200: 61 62 6c 65 20 74 68 61 74 20 68 61 73 20 74 68  able that has th
7210: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
7220: 6e 20 0a 20 20 65 78 69 73 74 69 6e 67 20 5b 43  n .  existing [C
7230: 52 45 41 54 45 20 54 52 49 47 47 45 52 7c 74 72  REATE TRIGGER|tr
7240: 69 67 67 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62  igger]...<p>^Tab
7250: 6c 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  les are removed 
7260: 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20  using the [DROP 
7270: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
7280: 2e 20 20 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 52 45  .  </p>..<h3>CRE
7290: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
72a0: 20 53 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e   SELECT Statemen
72b0: 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  ts</h3>..<p>^(A 
72c0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  "CREATE TABLE ..
72d0: 2e 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61  . AS SELECT" sta
72e0: 74 65 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61  tement creates a
72f0: 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64  nd populates a d
7300: 61 74 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61  atabase.table ba
7310: 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  sed on the resul
7320: 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  ts of a SELECT s
7330: 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68  tatement.)^ ^(Th
7340: 65 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20  e table has the 
7350: 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63  same.number of c
7360: 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f  olumns as the ro
7370: 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ws returned by t
7380: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
7390: 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66  ent. The name of
73a0: 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20  .each column is 
73b0: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
73c0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72  name of the corr
73d0: 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e  esponding column
73e0: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73   in the result.s
73f0: 65 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et of the SELECT
7400: 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28   statement.)^ ^(
7410: 54 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  The declared typ
7420: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
7430: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62   is determined.b
7440: 79 20 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f  y the [expressio
7450: 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74  n affinity] of t
7460: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
7470: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
7480: 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66  he result set.of
7490: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
74a0: 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77  ement, as follow
74b0: 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  s:.</p>..<center
74c0: 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  ><table border=1
74d0: 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72  >.  <tr><th>Expr
74e0: 65 73 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20  ession Affinity 
74f0: 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63    <th>Column Dec
7500: 6c 61 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72  lared Type.  <tr
7510: 3e 3c 74 64 3e 54 45 58 54 20 20 20 20 20 20 20  ><td>TEXT       
7520: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
7530: 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e  TEXT".  <tr><td>
7540: 4e 55 4d 45 52 49 43 20 20 20 20 20 20 20 20 20  NUMERIC         
7550: 20 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a        <td>"NUM".
7560: 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45    <tr><td>INTEGE
7570: 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  R               
7580: 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e  <td>"INT".  <tr>
7590: 3c 74 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20  <td>REAL        
75a0: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52            <td>"R
75b0: 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e  EAL".  <tr><td>N
75c0: 4f 4e 45 20 20 20 20 20 20 20 20 20 20 20 20 20  ONE             
75d0: 20 20 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70       <td>"" (emp
75e0: 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62  ty string).</tab
75f0: 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  le></center>)^..
7600: 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65  <p>^(A table cre
7610: 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
7620: 45 20 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e  E TABLE AS has n
7630: 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  o PRIMARY KEY an
7640: 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73  d no.constraints
7650: 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68   of any kind. Th
7660: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
7670: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
7680: 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61  s NULL. The defa
7690: 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult.collation se
76a0: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
76b0: 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65  column of the ne
76c0: 77 20 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52  w table is BINAR
76d0: 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  Y.)^..<p>^Tables
76e0: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   created using C
76f0: 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 61  REATE TABLE AS a
7700: 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70  re initially pop
7710: 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 0a  ulated with the.
7720: 72 6f 77 73 20 6f 66 20 64 61 74 61 20 72 65 74  rows of data ret
7730: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
7740: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
7750: 52 6f 77 73 20 61 72 65 20 61 73 73 69 67 6e 65  Rows are assigne
7760: 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61  d contiguously.a
7770: 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d  scending [rowid]
7780: 20 76 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e   values, startin
7790: 67 20 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65  g with 1, in the
77a0: 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72   [order by|order
77b0: 5d 20 74 68 61 74 20 74 68 65 79 0a 61 72 65 20  ] that they.are 
77c0: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
77d0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
77e0: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
77f0: 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66  ent {tablecoldef
7800: 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  } {column defini
7810: 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65  tion} {column de
7820: 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e  finitions}</tcl>
7830: 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69  .<h3>Column Defi
7840: 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  nitions</h3>..<p
7850: 3e 55 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20  >Unless it is a 
7860: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
7870: 20 41 53 20 53 45 4c 45 43 54 20 73 74 61 74 65   AS SELECT state
7880: 6d 65 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54  ment, a CREATE T
7890: 41 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e  ABLE includes.on
78a0: 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d  e or more [colum
78b0: 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66  n-def|column def
78c0: 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f  initions], optio
78d0: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
78e0: 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62  y a list of.[tab
78f0: 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61  le-constraint|ta
7900: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  ble constraints]
7910: 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64  .  Each column d
7920: 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73  efinition consis
7930: 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f  ts of the.name o
7940: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70  f the column, op
7950: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
7960: 64 20 62 79 20 74 68 65 20 64 65 63 6c 61 72 65  d by the declare
7970: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  d type of the co
7980: 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f  lumn,.then one o
7990: 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20  r more optional 
79a0: 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69  [column-constrai
79b0: 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72  nt|column constr
79c0: 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64  aints]. Included
79d0: 20 69 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69   in.the definiti
79e0: 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f  on of "column co
79f0: 6e 73 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74  nstraints" for t
7a00: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
7a10: 68 65 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74  he previous.stat
7a20: 65 6d 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f  ement are the CO
7a30: 4c 4c 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c  LLATE and DEFAUL
7a40: 54 20 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20  T clauses, even 
7a50: 74 68 6f 75 67 68 20 74 68 65 73 65 20 61 72 65  though these are
7a60: 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73   not really.cons
7a70: 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73  traints in the s
7a80: 65 6e 73 65 20 74 68 61 74 20 74 68 65 79 20 64  ense that they d
7a90: 6f 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74  o not restrict t
7aa0: 68 65 20 64 61 74 61 20 74 68 61 74 20 74 68 65  he data that the
7ab0: 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61   table may.conta
7ac0: 69 6e 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f  in. The other co
7ad0: 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20  nstraints - NOT 
7ae0: 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49  NULL, CHECK, UNI
7af0: 51 55 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  QUE, PRIMARY KEY
7b00: 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59   and.FOREIGN KEY
7b10: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69   constraints - i
7b20: 6d 70 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f  mpose restrictio
7b30: 6e 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73  ns on the tables
7b40: 20 64 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61   data, and are a
7b50: 72 65 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64  re.described und
7b60: 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c  er [constraints|
7b70: 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61  SQL Data Constra
7b80: 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70  ints] below...<p
7b90: 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51  >^Unlike most SQ
7ba0: 4c 20 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c  L databases, SQL
7bb0: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ite does not res
7bc0: 74 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f  trict the type o
7bd0: 66 20 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20  f data that.may 
7be0: 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  be inserted into
7bf0: 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20   a column based 
7c00: 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64  on the columns d
7c10: 65 63 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e  eclared type. In
7c20: 73 74 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73  stead,.SQLite us
7c30: 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69  es [dynamic typi
7c40: 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72  ng]. ^The declar
7c50: 65 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c  ed type of a col
7c60: 75 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64  umn is used to.d
7c70: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66  etermine the [af
7c80: 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
7c90: 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 70 3e  olumn only...<p>
7ca0: 54 68 65 20 44 45 46 41 55 4c 54 20 63 6c 61 75  The DEFAULT clau
7cb0: 73 65 20 73 70 65 63 69 66 69 65 73 20 61 20 64  se specifies a d
7cc0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 74 6f 20  efault value to 
7cd0: 75 73 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  use for the colu
7ce0: 6d 6e 20 69 66 20 6e 6f 0a 76 61 6c 75 65 20 69  mn if no.value i
7cf0: 73 20 65 78 70 6c 69 63 69 74 6c 79 20 70 72 6f  s explicitly pro
7d00: 76 69 64 65 64 20 62 79 20 74 68 65 20 75 73 65  vided by the use
7d10: 72 20 77 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20  r when doing an 
7d20: 5b 49 4e 53 45 52 54 5d 2e 20 5e 49 66 20 74 68  [INSERT]. ^If th
7d30: 65 72 65 0a 69 73 20 6e 6f 20 65 78 70 6c 69 63  ere.is no explic
7d40: 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73  it DEFAULT claus
7d50: 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  e attached to a 
7d60: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
7d70: 6e 2c 20 74 68 65 6e 20 74 68 65 20 0a 64 65 66  n, then the .def
7d80: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
7d90: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c  e column is NULL
7da0: 2e 20 5e 28 41 6e 20 65 78 70 6c 69 63 69 74 20  . ^(An explicit 
7db0: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 6d  DEFAULT clause m
7dc0: 61 79 20 73 70 65 63 69 66 79 0a 74 68 61 74 20  ay specify.that 
7dd0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
7de0: 65 20 69 73 20 4e 55 4c 4c 2c 20 61 20 73 74 72  e is NULL, a str
7df0: 69 6e 67 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20  ing constant, a 
7e00: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2c 20 61  blob constant, a
7e10: 0a 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 2c 20  .signed-number, 
7e20: 6f 72 20 61 6e 79 20 63 6f 6e 73 74 61 6e 74 20  or any constant 
7e30: 65 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6c 6f  expression enclo
7e40: 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73  sed in parenthes
7e50: 65 73 2e 20 41 6e 20 65 78 70 6c 69 63 69 74 0a  es. An explicit.
7e60: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6d 61  default value ma
7e70: 79 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66  y also be one of
7e80: 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73   the special cas
7e90: 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65  e-independent ke
7ea0: 79 77 6f 72 64 73 0a 43 55 52 52 45 4e 54 5f 54  ywords.CURRENT_T
7eb0: 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54  IME, CURRENT_DAT
7ec0: 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d  E or CURRENT_TIM
7ed0: 45 53 54 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74  ESTAMP.)^ ^For t
7ee0: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
7ef0: 68 65 0a 44 45 46 41 55 4c 54 20 63 6c 61 75 73  he.DEFAULT claus
7f00: 65 2c 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  e, an expression
7f10: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 63   is considered c
7f20: 6f 6e 73 74 61 6e 74 20 70 72 6f 76 69 64 65 64  onstant provided
7f30: 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 6e 6f   that it does.no
7f40: 74 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20 73 75  t contain any su
7f50: 62 2d 71 75 65 72 69 65 73 20 6f 72 20 73 74 72  b-queries or str
7f60: 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 20 65 6e  ing constants en
7f70: 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62 6c 65  closed in double
7f80: 20 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45   quotes...<p>^(E
7f90: 61 63 68 20 74 69 6d 65 20 61 20 72 6f 77 20 69  ach time a row i
7fa0: 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
7fb0: 74 68 65 20 74 61 62 6c 65 20 62 79 20 61 6e 20  the table by an 
7fc0: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
7fd0: 20 74 68 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20   that .does not 
7fe0: 70 72 6f 76 69 64 65 20 65 78 70 6c 69 63 69 74  provide explicit
7ff0: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
8000: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68  table columns th
8010: 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20  e values stored 
8020: 69 6e 0a 74 68 65 20 6e 65 77 20 72 6f 77 20 61  in.the new row a
8030: 72 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  re determined by
8040: 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76   their default v
8050: 61 6c 75 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c  alues)^, as foll
8060: 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  ows:..<ul>.  <li
8070: 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61  ><p>^If the defa
8080: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ult value of the
8090: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e   column is a con
80a0: 73 74 61 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74  stant NULL, text
80b0: 2c 20 62 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69  , blob or.    si
80c0: 67 6e 65 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75  gned-number valu
80d0: 65 2c 20 74 68 65 6e 20 74 68 61 74 20 76 61 6c  e, then that val
80e0: 75 65 20 69 73 20 75 73 65 64 20 64 69 72 65 63  ue is used direc
80f0: 74 6c 79 20 69 6e 20 74 68 65 20 6e 65 77 20 72  tly in the new r
8100: 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49  ow...  <li><p>^I
8110: 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  f the default va
8120: 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  lue of a column 
8130: 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
8140: 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2c   in parentheses,
8150: 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20 65 78   then.    the ex
8160: 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
8170: 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65  uated once for e
8180: 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64  ach row inserted
8190: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 73   and the results
81a0: 0a 20 20 20 20 75 73 65 64 20 69 6e 20 74 68 65  .    used in the
81b0: 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69   new row...  <li
81c0: 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61  ><p>^If the defa
81d0: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63  ult value of a c
81e0: 6f 6c 75 6d 6e 20 69 73 20 43 55 52 52 45 4e 54  olumn is CURRENT
81f0: 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44  _TIME, CURRENT_D
8200: 41 54 45 20 6f 72 0a 20 20 20 20 43 55 52 52 45  ATE or.    CURRE
8210: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68  NT_TIMESTAMP, th
8220: 65 6e 20 74 68 65 20 76 61 6c 75 65 20 75 73 65  en the value use
8230: 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  d in the new row
8240: 20 69 73 20 61 20 74 65 78 74 0a 20 20 20 20 72   is a text.    r
8250: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
8260: 20 74 68 65 20 63 75 72 72 65 6e 74 20 55 54 43   the current UTC
8270: 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d   date and/or tim
8280: 65 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f  e. ^For CURRENT_
8290: 54 49 4d 45 2c 20 74 68 65 0a 20 20 20 20 66 6f  TIME, the.    fo
82a0: 72 6d 61 74 20 6f 66 20 74 68 65 20 76 61 6c 75  rmat of the valu
82b0: 65 20 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e  e is "HH:MM:SS".
82c0: 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 44 41   ^For CURRENT_DA
82d0: 54 45 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22  TE, "YYYY-MM-DD"
82e0: 2e 20 5e 54 68 65 0a 20 20 20 20 66 6f 72 6d 61  . ^The.    forma
82f0: 74 20 66 6f 72 20 43 55 52 52 45 4e 54 5f 54 49  t for CURRENT_TI
8300: 4d 45 53 54 41 4d 50 20 69 73 20 22 59 59 59 59  MESTAMP is "YYYY
8310: 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22  -MM-DD HH:MM:SS"
8320: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  ..</ul>..<p>^The
8330: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
8340: 73 70 65 63 69 66 69 65 73 20 74 68 65 20 6e 61  specifies the na
8350: 6d 65 20 6f 66 20 61 20 5b 63 6f 6c 6c 61 74 69  me of a [collati
8360: 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f 20  ng sequence] to 
8370: 75 73 65 20 61 73 0a 74 68 65 20 64 65 66 61 75  use as.the defau
8380: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
8390: 75 65 6e 63 65 20 66 6f 72 20 74 68 65 20 63 6f  uence for the co
83a0: 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c  lumn. ^If no COL
83b0: 4c 41 54 45 20 63 6c 61 75 73 65 20 69 73 0a 73  LATE clause is.s
83c0: 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 65  pecified, the de
83d0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
83e0: 73 65 71 75 65 6e 63 65 20 69 73 20 5b 42 49 4e  sequence is [BIN
83f0: 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e  ARY]...<p>^The n
8400: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
8410: 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c   in a table is l
8420: 69 6d 69 74 65 64 20 62 79 20 74 68 65 20 5b 53  imited by the [S
8430: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
8440: 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70  ].compile-time p
8450: 61 72 61 6d 65 74 65 72 2e 20 5e 41 20 73 69 6e  arameter. ^A sin
8460: 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62  gle row of a tab
8470: 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20  le cannot store 
8480: 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54  more than.[SQLIT
8490: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79  E_MAX_LENGTH] by
84a0: 74 65 73 20 6f 66 20 64 61 74 61 2e 20 5e 42 6f  tes of data. ^Bo
84b0: 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69  th of these limi
84c0: 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65  ts can be lowere
84d0: 64 20 61 74 0a 72 75 6e 74 69 6d 65 20 75 73 69  d at.runtime usi
84e0: 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
84f0: 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69  limit()] C/C++ i
8500: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
8510: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
8520: 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 20 7b 63  {constraints} {c
8530: 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c  onstraints}</tcl
8540: 3e 0a 3c 68 33 3e 53 51 4c 20 44 61 74 61 20 43  >.<h3>SQL Data C
8550: 6f 6e 73 74 72 61 69 6e 74 73 3c 2f 68 33 3e 0a  onstraints</h3>.
8560: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
8570: 74 20 70 72 69 6d 6b 65 79 63 6f 6e 73 74 20 7b  t primkeyconst {
8580: 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 7b 50 52  PRIMARY KEY} {PR
8590: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72  IMARY KEY constr
85a0: 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  aint}</tcl>.<p>^
85b0: 45 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53 51  Each table in SQ
85c0: 4c 69 74 65 20 6d 61 79 20 68 61 76 65 20 61 74  Lite may have at
85d0: 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52 49   most one <b>PRI
85e0: 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e 49  MARY KEY</b>. ^I
85f0: 66 20 74 68 65 0a 20 20 6b 65 79 77 6f 72 64 73  f the.  keywords
8600: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72 65   PRIMARY KEY are
8610: 20 61 64 64 65 64 20 74 6f 20 61 20 63 6f 6c 75   added to a colu
8620: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74  mn definition, t
8630: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
8640: 6b 65 79 0a 20 20 66 6f 72 20 74 68 65 20 74 61  key.  for the ta
8650: 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ble consists of 
8660: 74 68 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c 75  that single colu
8670: 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50 52  mn. ^Or, if a PR
8680: 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65  IMARY KEY clause
8690: 20 0a 20 20 69 73 20 73 70 65 63 69 66 69 65 64   .  is specified
86a0: 20 61 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f 6e   as a [table-con
86b0: 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20 74  straint], then t
86c0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  he primary key o
86d0: 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 63 6f  f the table.  co
86e0: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c 69  nsists of the li
86f0: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 70  st of columns sp
8700: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
8710: 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  of the PRIMARY K
8720: 45 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e 49 66  EY clause..  ^If
8730: 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74   there is more t
8740: 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20  han one PRIMARY 
8750: 4b 45 59 20 63 6c 61 75 73 65 20 69 6e 20 61 20  KEY clause in a 
8760: 73 69 6e 67 6c 65 20 43 52 45 41 54 45 20 54 41  single CREATE TA
8770: 42 4c 45 0a 20 20 73 74 61 74 65 6d 65 6e 74 2c  BLE.  statement,
8780: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e   it is an error.
8790: 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20  ..<p>If a table 
87a0: 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  has a single col
87b0: 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 2c  umn primary key,
87c0: 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65   and the declare
87d0: 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20  d type of that. 
87e0: 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45   column is "INTE
87f0: 47 45 52 22 2c 20 74 68 65 6e 20 74 68 65 20 63  GER", then the c
8800: 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61  olumn is known a
8810: 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52  s an [INTEGER PR
8820: 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65  IMARY KEY]..  Se
8830: 65 20 62 65 6c 6f 77 20 66 6f 72 20 61 20 64 65  e below for a de
8840: 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65  scription of the
8850: 20 73 70 65 63 69 61 6c 20 70 72 6f 70 65 72 74   special propert
8860: 69 65 73 20 61 6e 64 20 62 65 68 61 76 69 6f 72  ies and behavior
8870: 73 0a 20 20 61 73 73 6f 63 69 61 74 65 64 20 77  s.  associated w
8880: 69 74 68 20 61 6e 20 5b 49 4e 54 45 47 45 52 20  ith an [INTEGER 
8890: 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c  PRIMARY KEY]...<
88a0: 70 3e 5e 45 61 63 68 20 72 6f 77 20 69 6e 20 61  p>^Each row in a
88b0: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 70 72   table with a pr
88c0: 69 6d 61 72 79 20 6b 65 79 20 6d 75 73 74 20 66  imary key must f
88d0: 65 61 74 75 72 65 20 61 20 75 6e 69 71 75 65 20  eature a unique 
88e0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66  combination.  of
88f0: 20 76 61 6c 75 65 73 20 69 6e 20 69 74 73 20 70   values in its p
8900: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
8910: 6e 73 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72  ns. ^For the pur
8920: 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69  poses of determi
8930: 6e 69 6e 67 0a 20 20 74 68 65 20 75 6e 69 71 75  ning.  the uniqu
8940: 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61 72 79  eness of primary
8950: 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e 55 4c   key values, NUL
8960: 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
8970: 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63 74  sidered distinct
8980: 20 66 72 6f 6d 0a 20 20 61 6c 6c 20 6f 74 68 65   from.  all othe
8990: 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64  r values, includ
89a0: 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e  ing other NULLs.
89b0: 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d   ^If an [INSERT]
89c0: 20 6f 72 20 5b 55 50 44 41 54 45 5d 0a 20 20 73   or [UPDATE].  s
89d0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
89e0: 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20  s to modify the 
89f0: 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20 73 6f  table content so
8a00: 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72   that two or mor
8a10: 65 20 72 6f 77 73 0a 20 20 66 65 61 74 75 72 65  e rows.  feature
8a20: 20 69 64 65 6e 74 69 63 61 6c 20 70 72 69 6d 61   identical prima
8a30: 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 69  ry key values, i
8a40: 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61 69 6e  t is a constrain
8a50: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 41  t violation..  A
8a60: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
8a70: 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20 50 52  SQL standard, PR
8a80: 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75 6c 64  IMARY KEY should
8a90: 20 61 6c 77 61 79 73 20 69 6d 70 6c 79 20 4e 4f   always imply NO
8aa0: 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74  T NULL..  Unfort
8ab0: 75 6e 61 74 65 6c 79 2c 20 64 75 65 20 74 6f 20  unately, due to 
8ac0: 61 20 6c 6f 6e 67 2d 73 74 61 6e 64 69 6e 67 20  a long-standing 
8ad0: 63 6f 64 69 6e 67 20 6f 76 65 72 73 69 67 68 74  coding oversight
8ae0: 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 74 68  , this is not th
8af0: 65 0a 20 20 63 61 73 65 20 69 6e 20 53 51 4c 69  e.  case in SQLi
8b00: 74 65 2e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20  te. ^Unless the 
8b10: 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 5b 49 4e  column is an [IN
8b20: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
8b30: 59 5d 20 53 51 4c 69 74 65 0a 20 20 61 6c 6c 6f  Y] SQLite.  allo
8b40: 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  ws NULL values i
8b50: 6e 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  n a PRIMARY KEY 
8b60: 63 6f 6c 75 6d 6e 2e 20 20 57 65 20 63 6f 75 6c  column.  We coul
8b70: 64 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20  d change SQLite 
8b80: 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74 6f 20  to.  conform to 
8b90: 74 68 65 20 73 74 61 6e 64 61 72 64 20 28 61 6e  the standard (an
8ba0: 64 20 77 65 20 6d 69 67 68 74 20 64 6f 20 73 6f  d we might do so
8bb0: 20 69 6e 20 74 68 65 20 66 75 74 75 72 65 29 2c   in the future),
8bc0: 20 62 75 74 20 62 79 20 74 68 65 20 74 69 6d 65   but by the time
8bd0: 0a 20 20 74 68 65 20 6f 76 65 72 73 69 67 68 74  .  the oversight
8be0: 20 77 61 73 20 64 69 73 63 6f 76 65 72 65 64 2c   was discovered,
8bf0: 20 53 51 4c 69 74 65 20 77 61 73 20 69 6e 20 73   SQLite was in s
8c00: 75 63 68 20 77 69 64 65 20 75 73 65 20 74 68 61  uch wide use tha
8c10: 74 20 77 65 20 66 65 61 72 65 64 0a 20 20 62 72  t we feared.  br
8c20: 65 61 6b 69 6e 67 20 6c 65 67 61 63 79 20 63 6f  eaking legacy co
8c30: 64 65 20 69 66 20 77 65 20 66 69 78 65 64 20 74  de if we fixed t
8c40: 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20 53 6f 20  he problem.  So 
8c50: 66 6f 72 20 6e 6f 77 20 77 65 20 68 61 76 65 20  for now we have 
8c60: 63 68 6f 73 65 6e 20 74 6f 0a 20 20 63 6f 6e 74  chosen to.  cont
8c70: 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20 4e 55  inue allowing NU
8c80: 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52 59 20 4b  LLs in PRIMARY K
8c90: 45 59 20 63 6f 6c 75 6d 6e 73 2e 20 20 44 65 76  EY columns.  Dev
8ca0: 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 62  elopers should b
8cb0: 65 0a 20 20 61 77 61 72 65 2c 20 68 6f 77 65 76  e.  aware, howev
8cc0: 65 72 2c 20 74 68 61 74 20 77 65 20 6d 61 79 20  er, that we may 
8cd0: 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f  change SQLite to
8ce0: 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20   conform to the 
8cf0: 53 51 4c 20 73 74 61 6e 64 61 72 64 20 69 6e 0a  SQL standard in.
8d00: 20 20 66 75 74 75 72 65 20 61 6e 64 20 73 68 6f    future and sho
8d10: 75 6c 64 20 64 65 73 69 67 6e 20 6e 65 77 20 70  uld design new p
8d20: 72 6f 67 72 61 6d 73 20 61 63 63 6f 72 64 69 6e  rograms accordin
8d30: 67 6c 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  gly...<tcl>hd_fr
8d40: 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e  agment uniquecon
8d50: 73 74 20 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69  st {UNIQUE} {uni
8d60: 71 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c  que constraint}<
8d70: 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55  /tcl>.<p>^A <b>U
8d80: 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72  NIQUE</b> constr
8d90: 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72 20  aint is similar 
8da0: 74 6f 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  to a PRIMARY KEY
8db0: 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78 63   constraint, exc
8dc0: 65 70 74 0a 20 20 74 68 61 74 20 61 20 73 69 6e  ept.  that a sin
8dd0: 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61  gle table may ha
8de0: 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66  ve any number of
8df0: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
8e00: 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20  nts. ^For each. 
8e10: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
8e20: 6e 74 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c  nt on the table,
8e30: 20 65 61 63 68 20 72 6f 77 20 6d 75 73 74 20 66   each row must f
8e40: 65 61 74 75 72 65 20 61 20 75 6e 69 71 75 65 20  eature a unique 
8e50: 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66  combination.  of
8e60: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63   values in the c
8e70: 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65  olumns identifie
8e80: 64 20 62 79 20 74 68 65 20 55 4e 49 51 55 45 20  d by the UNIQUE 
8e90: 63 6f 6e 73 74 72 61 69 6e 74 2e 20 5e 41 73 20  constraint. ^As 
8ea0: 77 69 74 68 0a 20 20 50 52 49 4d 41 52 59 20 4b  with.  PRIMARY K
8eb0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  EY constraints, 
8ec0: 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
8ed0: 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74   of UNIQUE const
8ee0: 72 61 69 6e 74 73 20 4e 55 4c 4c 20 76 61 6c 75  raints NULL valu
8ef0: 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69 64 65  es.  are conside
8f00: 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f  red distinct fro
8f10: 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  m all other valu
8f20: 65 73 20 28 69 6e 63 6c 75 64 69 6e 67 20 6f 74  es (including ot
8f30: 68 65 72 20 4e 55 4c 4c 73 29 2e 0a 20 20 5e 49  her NULLs)..  ^I
8f40: 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72  f an [INSERT] or
8f50: 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d   [UPDATE] statem
8f60: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
8f70: 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65  modify the table
8f80: 20 63 6f 6e 74 65 6e 74 20 73 6f 0a 20 20 74 68   content so.  th
8f90: 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72  at two or more r
8fa0: 6f 77 73 20 66 65 61 74 75 72 65 20 69 64 65 6e  ows feature iden
8fb0: 74 69 63 61 6c 20 76 61 6c 75 65 73 20 69 6e 20  tical values in 
8fc0: 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d 6e 73  a set of columns
8fd0: 20 74 68 61 74 0a 20 20 61 72 65 20 73 75 62 6a   that.  are subj
8fe0: 65 63 74 20 74 6f 20 61 20 55 4e 49 51 55 45 20  ect to a UNIQUE 
8ff0: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74 20 69  constraint, it i
9000: 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  s a constraint v
9010: 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 5b  iolation...<p>^[
9020: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9030: 4b 45 59 5d 20 63 6f 6c 75 6d 6e 73 20 61 73 69  KEY] columns asi
9040: 64 65 2c 20 62 6f 74 68 20 55 4e 49 51 55 45 20  de, both UNIQUE 
9050: 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 0a  and PRIMARY KEY.
9060: 20 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72    constraints ar
9070: 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  e implemented by
9080: 20 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64   creating an ind
9090: 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ex in the databa
90a0: 73 65 20 28 69 6e 20 74 68 65 20 73 61 6d 65 0a  se (in the same.
90b0: 20 20 77 61 79 20 61 73 20 61 20 5b 43 52 45 41    way as a [CREA
90c0: 54 45 20 49 4e 44 45 58 7c 22 43 52 45 41 54 45  TE INDEX|"CREATE
90d0: 20 55 4e 49 51 55 45 20 49 4e 44 45 58 22 5d 20   UNIQUE INDEX"] 
90e0: 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 29  statement would)
90f0: 2e 20 5e 53 75 63 68 20 61 6e 20 0a 20 20 69 6e  . ^Such an .  in
9100: 64 65 78 20 69 73 20 75 73 65 64 20 6c 69 6b 65  dex is used like
9110: 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 64 65 78   any other index
9120: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
9130: 20 74 6f 20 5b 6f 70 74 69 6d 69 7a 65 72 7c 6f   to [optimizer|o
9140: 70 74 69 6d 69 7a 65 0a 20 20 71 75 65 72 69 65  ptimize.  querie
9150: 73 5d 2e 20 20 41 73 20 61 20 72 65 73 75 6c 74  s].  As a result
9160: 2c 20 74 68 65 72 65 20 6f 66 74 65 6e 20 6e 6f  , there often no
9170: 20 61 64 76 61 6e 74 61 67 65 20 28 62 75 74 20   advantage (but 
9180: 73 69 67 6e 69 66 69 63 61 6e 74 20 6f 76 65 72  significant over
9190: 68 65 61 64 29 0a 20 20 69 6e 20 63 72 65 61 74  head).  in creat
91a0: 69 6e 67 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20  ing an index on 
91b0: 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d 6e 73  a set of columns
91c0: 20 74 68 61 74 20 61 72 65 20 61 6c 72 65 61 64   that are alread
91d0: 79 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 0a 20  y collectively. 
91e0: 20 73 75 62 6a 65 63 74 20 74 6f 20 61 20 55 4e   subject to a UN
91f0: 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52 59 20  IQUE or PRIMARY 
9200: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a  KEY constraint..
9210: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9220: 74 20 7b 63 6b 63 6f 6e 73 74 7d 20 7b 43 48 45  t {ckconst} {CHE
9230: 43 4b 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74  CK} {CHECK const
9240: 72 61 69 6e 74 7d 20 7b 43 48 45 43 4b 20 63 6f  raint} {CHECK co
9250: 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e  nstraints}</tcl>
9260: 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48 45 43 4b  .<p>^(A <b>CHECK
9270: 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20  </b> constraint 
9280: 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64 20  may be attached 
9290: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
92a0: 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73 70 65 63  nition or.  spec
92b0: 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c 65  ified as a table
92c0: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 49 6e 20   constraint. In 
92d0: 70 72 61 63 74 69 63 65 20 69 74 20 6d 61 6b 65  practice it make
92e0: 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 2e  s no difference.
92f0: 29 5e 20 5e 28 45 61 63 68 0a 20 20 74 69 6d 65  )^ ^(Each.  time
9300: 20 61 20 6e 65 77 20 72 6f 77 20 69 73 20 69 6e   a new row is in
9310: 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
9320: 74 61 62 6c 65 20 6f 72 20 61 6e 20 65 78 69 73  table or an exis
9330: 74 69 6e 67 20 72 6f 77 20 69 73 20 75 70 64 61  ting row is upda
9340: 74 65 64 2c 0a 20 20 74 68 65 20 65 78 70 72 65  ted,.  the expre
9350: 73 73 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ssion associated
9360: 20 77 69 74 68 20 65 61 63 68 20 43 48 45 43 4b   with each CHECK
9370: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 65   constraint is e
9380: 76 61 6c 75 61 74 65 64 20 61 6e 64 0a 20 20 63  valuated and.  c
9390: 61 73 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43  ast to a NUMERIC
93a0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61   value in the sa
93b0: 6d 65 20 77 61 79 20 61 73 20 61 20 5b 43 41 53  me way as a [CAS
93c0: 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49  T expression]. I
93d0: 66 20 74 68 65 20 0a 20 20 72 65 73 75 6c 74 20  f the .  result 
93e0: 69 73 20 7a 65 72 6f 20 28 69 6e 74 65 67 65 72  is zero (integer
93f0: 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c   value 0 or real
9400: 20 76 61 6c 75 65 20 30 2e 30 29 2c 20 74 68 65   value 0.0), the
9410: 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20  n a constraint. 
9420: 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61 73 20 6f   violation has o
9430: 63 63 75 72 72 65 64 2e 29 5e 20 5e 49 66 20 74  ccurred.)^ ^If t
9440: 68 65 20 43 48 45 43 4b 20 65 78 70 72 65 73 73  he CHECK express
9450: 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
9460: 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61 6e 79 20   NULL, or.  any 
9470: 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76  other non-zero v
9480: 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f 74 20  alue, it is not 
9490: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
94a0: 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 65  lation..  ^The e
94b0: 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 61 20 43  xpression of a C
94c0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
94d0: 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  may not contain 
94e0: 61 20 73 75 62 71 75 65 72 79 2e 0a 0a 3c 70 3e  a subquery...<p>
94f0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
9500: 73 20 68 61 76 65 20 62 65 65 6e 20 73 75 70 70  s have been supp
9510: 6f 72 74 65 64 20 73 69 6e 63 65 20 5b 76 65 72  orted since [ver
9520: 73 69 6f 6e 20 33 2e 33 2e 30 5d 2e 20 50 72 69  sion 3.3.0]. Pri
9530: 6f 72 20 74 6f 0a 20 20 76 65 72 73 69 6f 6e 20  or to.  version 
9540: 33 2e 33 2e 30 2c 20 43 48 45 43 4b 20 63 6f 6e  3.3.0, CHECK con
9550: 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 70 61  straints were pa
9560: 72 73 65 64 20 62 75 74 20 6e 6f 74 20 65 6e 66  rsed but not enf
9570: 6f 72 63 65 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  orced...<tcl>hd_
9580: 66 72 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75 6c  fragment {notnul
9590: 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55 4c  lconst} {NOT NUL
95a0: 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  L} {NOT NULL con
95b0: 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c  straint}</tcl>.<
95c0: 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c  p>^A <b>NOT NULL
95d0: 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20  </b> constraint 
95e0: 6d 61 79 20 6f 6e 6c 79 20 62 65 20 61 74 74 61  may only be atta
95f0: 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  ched to a column
9600: 20 64 65 66 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e   definition,.  n
9610: 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ot specified as 
9620: 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  a table constrai
9630: 6e 74 2e 20 20 4e 6f 74 20 73 75 72 70 72 69 73  nt.  Not surpris
9640: 69 6e 67 6c 79 2c 20 5e 28 61 20 4e 4f 54 20 4e  ingly, ^(a NOT N
9650: 55 4c 4c 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74  ULL.  constraint
9660: 20 64 69 63 74 61 74 65 73 20 74 68 61 74 20 74   dictates that t
9670: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f  he associated co
9680: 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  lumn may not con
9690: 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75  tain a NULL valu
96a0: 65 2e 0a 20 20 41 74 74 65 6d 70 74 69 6e 67 20  e..  Attempting 
96b0: 74 6f 20 73 65 74 20 74 68 65 20 63 6f 6c 75 6d  to set the colum
96c0: 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20  n value to NULL 
96d0: 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67 20 61  when inserting a
96e0: 20 6e 65 77 20 72 6f 77 20 6f 72 0a 20 20 75 70   new row or.  up
96f0: 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69  dating an existi
9700: 6e 67 20 6f 6e 65 20 63 61 75 73 65 73 20 61 20  ng one causes a 
9710: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
9720: 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63  tion.)^..<p>Exac
9730: 74 6c 79 20 68 6f 77 20 61 20 63 6f 6e 73 74 72  tly how a constr
9740: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69  aint violation i
9750: 73 20 64 65 61 6c 74 20 77 69 74 68 20 69 73 20  s dealt with is 
9760: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
9770: 65 0a 20 20 5b 63 6f 6e 66 6c 69 63 74 20 63 6c  e.  [conflict cl
9780: 61 75 73 65 7c 63 6f 6e 73 74 72 61 69 6e 74 20  ause|constraint 
9790: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
97a0: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 2e 20  ion algorithm]. 
97b0: 45 61 63 68 20 0a 20 20 50 52 49 4d 41 52 59 20  Each .  PRIMARY 
97c0: 4b 45 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f 54  KEY, UNIQUE, NOT
97d0: 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20   NULL and CHECK 
97e0: 63 6f 6e 73 74 72 61 69 6e 74 20 68 61 73 20 61  constraint has a
97f0: 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
9800: 74 0a 20 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  t.  resolution a
9810: 6c 67 6f 72 69 74 68 6d 2e 20 5e 50 52 49 4d 41  lgorithm. ^PRIMA
9820: 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 20 61  RY KEY, UNIQUE a
9830: 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  nd NOT NULL cons
9840: 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65 0a 20  traints may be. 
9850: 20 65 78 70 6c 69 63 69 74 6c 79 20 61 73 73 69   explicitly assi
9860: 67 6e 65 64 20 61 20 64 65 66 61 75 6c 74 20 63  gned a default c
9870: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
9880: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 62 79 20  on algorithm by 
9890: 69 6e 63 6c 75 64 69 6e 67 0a 20 20 61 20 5b 63  including.  a [c
98a0: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20  onflict-clause] 
98b0: 69 6e 20 74 68 65 69 72 20 64 65 66 69 6e 69 74  in their definit
98c0: 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69 66 20 61 20  ions. ^Or, if a 
98d0: 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66 69 6e  constraint defin
98e0: 69 74 69 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f 74  ition.  does not
98f0: 20 69 6e 63 6c 75 64 65 20 61 20 5b 63 6f 6e 66   include a [conf
9900: 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 6f 72 20  lict-clause] or 
9910: 69 74 20 69 73 20 61 20 43 48 45 43 4b 20 63 6f  it is a CHECK co
9920: 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 64 65  nstraint, the de
9930: 66 61 75 6c 74 0a 20 20 63 6f 6e 66 6c 69 63 74  fault.  conflict
9940: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
9950: 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20  rithm is ABORT. 
9960: 5e 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74  ^Different const
9970: 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68  raints within th
9980: 65 0a 20 20 73 61 6d 65 20 74 61 62 6c 65 20 6d  e.  same table m
9990: 61 79 20 68 61 76 65 20 64 69 66 66 65 72 65 6e  ay have differen
99a0: 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  t default confli
99b0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
99c0: 67 6f 72 69 74 68 6d 73 2e 20 53 65 65 0a 20 20  gorithms. See.  
99d0: 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
99e0: 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
99f0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
9a00: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74  information...<t
9a10: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
9a20: 6f 77 69 64 20 7b 49 4e 54 45 47 45 52 20 50 52  owid {INTEGER PR
9a30: 49 4d 41 52 59 20 4b 45 59 7d 20 52 4f 57 49 44  IMARY KEY} ROWID
9a40: 20 72 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33   rowid</tcl>.<h3
9a50: 3e 52 4f 57 49 44 73 20 61 6e 64 20 74 68 65 20  >ROWIDs and the 
9a60: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9a70: 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 76  KEY</h3>..<p>^Ev
9a80: 65 72 79 20 72 6f 77 20 6f 66 20 65 76 65 72 79  ery row of every
9a90: 20 53 51 4c 69 74 65 20 74 61 62 6c 65 20 68 61   SQLite table ha
9aa0: 73 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  s a 64-bit signe
9ab0: 64 20 69 6e 74 65 67 65 72 20 6b 65 79 20 0a 74  d integer key .t
9ac0: 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64 65  hat uniquely ide
9ad0: 6e 74 69 66 69 65 73 20 74 68 65 20 72 6f 77 20  ntifies the row 
9ae0: 77 69 74 68 69 6e 20 69 74 73 20 74 61 62 6c 65  within its table
9af0: 2e 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 69  . This integer i
9b00: 73 20 75 73 75 61 6c 6c 79 0a 63 61 6c 6c 65 64  s usually.called
9b10: 20 74 68 65 20 22 72 6f 77 69 64 22 2e 20 5e 54   the "rowid". ^T
9b20: 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 63  he rowid value c
9b30: 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 75  an be accessed u
9b40: 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20  sing one of the 
9b50: 73 70 65 63 69 61 6c 0a 63 61 73 65 2d 69 6e 64  special.case-ind
9b60: 65 70 65 6e 64 65 6e 74 20 6e 61 6d 65 73 20 22  ependent names "
9b70: 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 2c 20 6f  rowid", "oid", o
9b80: 72 20 22 5f 72 6f 77 69 64 5f 22 20 69 6e 20 70  r "_rowid_" in p
9b90: 6c 61 63 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  lace of a column
9ba0: 20 6e 61 6d 65 2e 0a 5e 49 66 20 61 20 74 61 62   name..^If a tab
9bb0: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 75 73  le contains a us
9bc0: 65 72 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  er defined colum
9bd0: 6e 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22 2c  n named "rowid",
9be0: 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69   "oid" or "_rowi
9bf0: 64 5f 22 2c 0a 74 68 65 6e 20 74 68 61 74 20 6e  d_",.then that n
9c00: 61 6d 65 20 61 6c 77 61 79 73 20 72 65 66 65 72  ame always refer
9c10: 73 20 74 68 65 20 65 78 70 6c 69 63 69 74 6c 79  s the explicitly
9c20: 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e   declared column
9c30: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 75   and cannot be u
9c40: 73 65 64 0a 74 6f 20 72 65 74 72 69 65 76 65 20  sed.to retrieve 
9c50: 74 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77 69  the integer rowi
9c60: 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54 68 65  d value...<p>The
9c70: 20 64 61 74 61 20 66 6f 72 20 65 61 63 68 20 74   data for each t
9c80: 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 69  able in SQLite i
9c90: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 42 2d  s stored as a B-
9ca0: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 63  Tree structure c
9cb0: 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 20 65 6e 74  ontaining.an ent
9cc0: 72 79 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c  ry for each tabl
9cd0: 65 20 72 6f 77 2c 20 75 73 69 6e 67 20 74 68 65  e row, using the
9ce0: 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 73 20   rowid value as 
9cf0: 74 68 65 20 6b 65 79 2e 20 54 68 69 73 20 6d 65  the key. This me
9d00: 61 6e 73 20 74 68 61 74 0a 72 65 74 72 69 65 76  ans that.retriev
9d10: 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e 67 20 72  ing or sorting r
9d20: 65 63 6f 72 64 73 20 62 79 20 72 6f 77 69 64 20  ecords by rowid 
9d30: 69 73 20 66 61 73 74 2e 20 53 65 61 72 63 68 69  is fast. Searchi
9d40: 6e 67 20 66 6f 72 20 61 20 72 65 63 6f 72 64 20  ng for a record 
9d50: 77 69 74 68 20 61 0a 73 70 65 63 69 66 69 63 20  with a.specific 
9d60: 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72 20 61 6c  rowid, or for al
9d70: 6c 20 72 65 63 6f 72 64 73 20 77 69 74 68 20 72  l records with r
9d80: 6f 77 69 64 73 20 77 69 74 68 69 6e 20 61 20 73  owids within a s
9d90: 70 65 63 69 66 69 65 64 20 72 61 6e 67 65 20 69  pecified range i
9da0: 73 0a 61 72 6f 75 6e 64 20 74 77 69 63 65 20 61  s.around twice a
9db0: 73 20 66 61 73 74 20 61 73 20 61 20 73 69 6d 69  s fast as a simi
9dc0: 6c 61 72 20 73 65 61 72 63 68 20 6d 61 64 65 20  lar search made 
9dd0: 62 79 20 73 70 65 63 69 66 79 69 6e 67 20 61 6e  by specifying an
9de0: 79 20 6f 74 68 65 72 20 50 52 49 4d 41 52 59 0a  y other PRIMARY.
9df0: 4b 45 59 20 6f 72 20 69 6e 64 65 78 65 64 20 76  KEY or indexed v
9e00: 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68  alue...<p> ^With
9e10: 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 2c 20   one exception, 
9e20: 69 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 61  if a table has a
9e30: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61   primary key tha
9e40: 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
9e50: 73 69 6e 67 6c 65 0a 63 6f 6c 75 6d 6e 2c 20 61  single.column, a
9e60: 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  nd the declared 
9e70: 74 79 70 65 20 6f 66 20 74 68 61 74 20 63 6f 6c  type of that col
9e80: 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22  umn is "INTEGER"
9e90: 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20   in any mixture 
9ea0: 6f 66 0a 75 70 70 65 72 20 61 6e 64 20 6c 6f 77  of.upper and low
9eb0: 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20 74 68  er case, then th
9ec0: 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73  e column becomes
9ed0: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
9ee0: 65 20 72 6f 77 69 64 2e 20 53 75 63 68 20 61 0a  e rowid. Such a.
9ef0: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 75 61 6c 6c  column is usuall
9f00: 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61 73  y referred to as
9f10: 20 61 6e 20 22 69 6e 74 65 67 65 72 20 70 72 69   an "integer pri
9f20: 6d 61 72 79 20 6b 65 79 22 2e 20 41 20 50 52 49  mary key". A PRI
9f30: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a  MARY KEY column.
9f40: 6f 6e 6c 79 20 62 65 63 6f 6d 65 73 20 61 6e 20  only becomes an 
9f50: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
9f60: 6b 65 79 20 69 66 20 74 68 65 20 64 65 63 6c 61  key if the decla
9f70: 72 65 64 20 74 79 70 65 20 6e 61 6d 65 20 69 73  red type name is
9f80: 20 65 78 61 63 74 6c 79 0a 22 49 4e 54 45 47 45   exactly."INTEGE
9f90: 52 22 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74 65  R".  ^Other inte
9fa0: 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c  ger type names l
9fb0: 69 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49  ike "INT" or "BI
9fc0: 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20  GINT" or "SHORT 
9fd0: 49 4e 54 45 47 45 52 22 0a 6f 72 20 22 55 4e 53  INTEGER".or "UNS
9fe0: 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20 63  IGNED INTEGER" c
9ff0: 61 75 73 65 73 20 74 68 65 20 70 72 69 6d 61 72  auses the primar
a000: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20  y key column to 
a010: 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64  behave as an ord
a020: 69 6e 61 72 79 0a 74 61 62 6c 65 20 63 6f 6c 75  inary.table colu
a030: 6d 6e 20 77 69 74 68 20 69 6e 74 65 67 65 72 20  mn with integer 
a040: 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61  [affinity] and a
a050: 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e   unique index, n
a060: 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ot as an alias f
a070: 6f 72 0a 74 68 65 20 72 6f 77 69 64 2e 0a 0a 3c  or.the rowid...<
a080: 70 3e 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e  p> The exception
a090: 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65   mentioned above
a0a0: 20 69 73 20 74 68 61 74 20 5e 69 66 20 74 68 65   is that ^if the
a0b0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20   declaration of 
a0c0: 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 64 65  a column with.de
a0d0: 63 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e 54  clared type "INT
a0e0: 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20 61  EGER" includes a
a0f0: 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20 44  n "PRIMARY KEY D
a100: 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74 20  ESC" clause, it 
a110: 64 6f 65 73 20 6e 6f 74 0a 62 65 63 6f 6d 65 20  does not.become 
a120: 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
a130: 20 72 6f 77 69 64 20 61 6e 64 20 69 73 20 6e 6f   rowid and is no
a140: 74 20 63 6c 61 73 73 69 66 69 65 64 20 61 73 20  t classified as 
a150: 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
a160: 72 79 20 6b 65 79 2e 0a 54 68 69 73 20 71 75 69  ry key..This qui
a170: 72 6b 20 69 73 20 6e 6f 74 20 62 79 20 64 65 73  rk is not by des
a180: 69 67 6e 2e 20 49 74 20 69 73 20 64 75 65 20 74  ign. It is due t
a190: 6f 20 61 20 62 75 67 20 69 6e 20 65 61 72 6c 79  o a bug in early
a1a0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
a1b0: 69 74 65 2e 0a 42 75 74 20 66 69 78 69 6e 67 20  ite..But fixing 
a1c0: 74 68 65 20 62 75 67 20 63 6f 75 6c 64 20 72 65  the bug could re
a1d0: 73 75 6c 74 20 69 6e 20 76 65 72 79 20 73 65 72  sult in very ser
a1e0: 69 6f 75 73 20 62 61 63 6b 77 61 72 64 73 20 69  ious backwards i
a1f0: 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73  ncompatibilities
a200: 2e 0a 54 68 65 20 53 51 4c 69 74 65 20 64 65 76  ..The SQLite dev
a210: 65 6c 6f 70 65 72 73 20 66 65 65 6c 20 74 68 61  elopers feel tha
a220: 74 20 67 6f 6f 66 79 20 62 65 68 61 76 69 6f 72  t goofy behavior
a230: 20 69 6e 20 61 20 63 6f 72 6e 65 72 20 63 61 73   in a corner cas
a240: 65 20 69 73 20 66 61 72 20 62 65 74 74 65 72 0a  e is far better.
a250: 74 68 61 6e 20 61 20 63 6f 6d 70 61 74 69 62 69  than a compatibi
a260: 6c 69 74 79 20 62 72 65 61 6b 2c 20 73 6f 20 74  lity break, so t
a270: 68 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68 61  he original beha
a280: 76 69 6f 72 20 69 73 20 72 65 74 61 69 6e 65 64  vior is retained
a290: 2e 20 54 68 69 73 20 6d 65 61 6e 73 0a 74 68 61  . This means.tha
a2a0: 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  t ^(the followin
a2b0: 67 20 74 68 72 65 65 20 74 61 62 6c 65 20 64 65  g three table de
a2c0: 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63  clarations all c
a2d0: 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ause the column 
a2e0: 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61 6c 69  "x" to be an.ali
a2f0: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
a300: 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69   (an integer pri
a310: 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e  mary key):..<ul>
a320: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
a330: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
a340: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53  R PRIMARY KEY AS
a350: 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c  C, y, z);</tt>.<
a360: 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41  li><tt>CREATE TA
a370: 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c  BLE t(x INTEGER,
a380: 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b   y, z, PRIMARY K
a390: 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e  EY(x ASC));</tt>
a3a0: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
a3b0: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
a3c0: 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59  R, y, z, PRIMARY
a3d0: 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b 3c 2f   KEY(x DESC));</
a3e0: 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  tt>.</ul>)^..<p>
a3f0: 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77  But ^(the follow
a400: 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  ing declaration 
a410: 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c 74 20  does not result 
a420: 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61 6e 20  in "x" being an 
a430: 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f  alias for.the ro
a440: 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74  wid:.<ul>.<li><t
a450: 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  t>CREATE TABLE t
a460: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
a470: 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20  RY KEY DESC, y, 
a480: 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e  z);</tt>.</ul>)^
a490: 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61 6c 75  ..<p>^Rowid valu
a4a0: 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66 69  es may be modifi
a4b0: 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50 44 41  ed using an UPDA
a4c0: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  TE statement in 
a4d0: 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61 73 20  the same.way as 
a4e0: 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e  any other column
a4f0: 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69 74 68   value can, eith
a500: 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20  er using one of 
a510: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61 6c 69  the built-in ali
a520: 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c 20 22  ases.("rowid", "
a530: 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f  oid" or "_rowid_
a540: 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67 20 61  ") or by using a
a550: 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65 64 20  n alias created 
a560: 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a 70 72  by an integer.pr
a570: 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69 6d 69  imary key. ^Simi
a580: 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45 52 54  larly, an INSERT
a590: 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 70   statement may p
a5a0: 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65 20 74  rovide a value t
a5b0: 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77  o use as the.row
a5c0: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
a5d0: 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e 6c 69  inserted. ^(Unli
a5e0: 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65  ke normal SQLite
a5f0: 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e 74   columns, an int
a600: 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79  eger primary.key
a610: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
a620: 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e   must contain in
a630: 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20 49 6e  teger values. In
a640: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
a650: 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c 75 6d  y or rowid.colum
a660: 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c 65 20  ns are not able 
a670: 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67  to hold floating
a680: 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c 20 73   point values, s
a690: 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f  trings, BLOBs, o
a6a0: 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e  r NULLs.)^..<p>^
a6b0: 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  If an UPDATE sta
a6c0: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
a6d0: 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65 67 65  to set an intege
a6e0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72  r primary key or
a6f0: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f   rowid column.to
a700: 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62 20   a NULL or blob 
a710: 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61 20 73  value, or to a s
a720: 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20 76 61  tring or real va
a730: 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  lue that cannot 
a740: 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f  be losslessly.co
a750: 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
a760: 74 65 67 65 72 2c 20 61 20 22 64 61 74 61 74 79  teger, a "dataty
a770: 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72  pe mismatch" err
a780: 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68  or occurs and th
a790: 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 61  e statement.is a
a7a0: 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e 20 49  borted. ^If an I
a7b0: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
a7c0: 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65  attempts to inse
a7d0: 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 2c  rt a blob value,
a7e0: 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f 72 20   or a string.or 
a7f0: 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20  real value that 
a800: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
a810: 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
a820: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e 74  o an integer int
a830: 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70 72 69  o an.integer pri
a840: 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69  mary key or rowi
a850: 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64 61 74  d column, a "dat
a860: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20  atype mismatch" 
a870: 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64  error occurs and
a880: 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74 20 69   the.statement i
a890: 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e  s aborted...<p>^
a8a0: 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  If an INSERT sta
a8b0: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
a8c0: 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c  to insert a NULL
a8d0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f   value into a ro
a8e0: 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72 20 70  wid or.integer p
a8f0: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
a900: 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20 63 68  n, the system ch
a910: 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67 65 72  ooses an integer
a920: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73   value to use as
a930: 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74 6f 6d   the.rowid autom
a940: 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65 74 61  atically. A deta
a950: 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e  iled description
a960: 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69 73 20   of how this is 
a970: 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64 65 64  done is provided
a980: 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f 69 6e  .<a href="autoin
a990: 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61 74 65  c.html">separate
a9a0: 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ly</a>.</p>..<p>
a9b0: 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20 6b 65  ^(The [parent ke
a9c0: 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69 67 6e  y] of a [foreign
a9d0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d   key constraint]
a9e0: 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
a9f0: 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77 69 64  to.use the rowid
aa00: 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20 6b 65  .  The parent ke
aa10: 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61 6d 65  y must used name
aa20: 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29  d columns only.)
aa30: 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ^</p>..<tcl>.###
aa40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa80: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
aa90: 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47  ion {CREATE TRIG
aaa0: 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67 67  GER} createtrigg
aab0: 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47  er {{CREATE TRIG
aac0: 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  GER}}..BubbleDia
aad0: 67 72 61 6d 20 63 72 65 61 74 65 2d 74 72 69 67  gram create-trig
aae0: 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ger-stmt 1.</tcl
aaf0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54  >..<p>^The CREAT
ab00: 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d  E TRIGGER statem
ab10: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 61  ent is used to a
ab20: 64 64 20 74 72 69 67 67 65 72 73 20 74 6f 20 74  dd triggers to t
ab30: 68 65 20 0a 64 61 74 61 62 61 73 65 20 73 63 68  he .database sch
ab40: 65 6d 61 2e 20 5e 54 72 69 67 67 65 72 73 20 61  ema. ^Triggers a
ab50: 72 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 72  re database oper
ab60: 61 74 69 6f 6e 73 20 0a 74 68 61 74 20 61 72 65  ations .that are
ab70: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70   automatically p
ab80: 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20 61 20  erformed when a 
ab90: 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61  specified databa
aba0: 73 65 20 65 76 65 6e 74 0a 6f 63 63 75 72 73 2e  se event.occurs.
abb0: 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74 72    </p>..<p>^A tr
abc0: 69 67 67 65 72 20 6d 61 79 20 62 65 20 73 70 65  igger may be spe
abd0: 63 69 66 69 65 64 20 74 6f 20 66 69 72 65 20 77  cified to fire w
abe0: 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c 45 54  henever a [DELET
abf0: 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f 72  E], [INSERT],.or
ac00: 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61 0a 70   [UPDATE] of a.p
ac10: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
ac20: 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72 73 2c  se table occurs,
ac30: 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61 6e 20   or whenever an 
ac40: 5b 55 50 44 41 54 45 5d 20 6f 63 63 75 72 73 20  [UPDATE] occurs 
ac50: 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72  on.on one or mor
ac60: 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75  e specified colu
ac70: 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 3c  mns of a table.<
ac80: 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68 69 73  /p>..<p>^At this
ac90: 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73 75 70   time SQLite sup
aca0: 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52 20 45  ports only FOR E
acb0: 41 43 48 20 52 4f 57 20 74 72 69 67 67 65 72 73  ACH ROW triggers
acc0: 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48 0a 53  , not FOR EACH.S
acd0: 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67 65 72  TATEMENT trigger
ace0: 73 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c 69 63  s. ^Hence explic
acf0: 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e 67 20  itly specifying 
ad00: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 73 20  FOR EACH ROW is 
ad10: 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20 45  optional..^FOR E
ad20: 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65 73 20  ACH ROW implies 
ad30: 74 68 61 74 20 74 68 65 20 53 51 4c 20 73 74 61  that the SQL sta
ad40: 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
ad50: 64 20 69 6e 20 74 68 65 20 74 72 69 67 67 65 72  d in the trigger
ad60: 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64  .may be executed
ad70: 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   (depending on t
ad80: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29 20  he WHEN clause) 
ad90: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
ada0: 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65  e row being.inse
adb0: 72 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f 72  rted, updated or
adc0: 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
add0: 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e  statement causin
ade0: 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f  g the trigger to
adf0: 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   fire.</p>..<p>^
ae00: 28 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63  (Both the WHEN c
ae10: 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 74 72  lause and the tr
ae20: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 6d 61  igger actions ma
ae30: 79 20 61 63 63 65 73 73 20 65 6c 65 6d 65 6e 74  y access element
ae40: 73 20 6f 66 20 0a 74 68 65 20 72 6f 77 20 62 65  s of .the row be
ae50: 69 6e 67 20 69 6e 73 65 72 74 65 64 2c 20 64 65  ing inserted, de
ae60: 6c 65 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  leted or updated
ae70: 20 75 73 69 6e 67 20 72 65 66 65 72 65 6e 63 65   using reference
ae80: 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a 22  s of the form ."
ae90: 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  NEW.<i>column-na
aea0: 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44  me</i>" and "OLD
aeb0: 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
aec0: 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63  /i>", where.<i>c
aed0: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69  olumn-name</i> i
aee0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
aef0: 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20  column from the 
af00: 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 74  table that the t
af10: 72 69 67 67 65 72 0a 69 73 20 61 73 73 6f 63 69  rigger.is associ
af20: 61 74 65 64 20 77 69 74 68 2e 29 5e 20 5e 28 4f  ated with.)^ ^(O
af30: 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72  LD and NEW refer
af40: 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62  ences may only b
af50: 65 20 75 73 65 64 20 69 6e 20 74 72 69 67 67 65  e used in trigge
af60: 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66 6f 72  rs on.events for
af70: 20 77 68 69 63 68 20 74 68 65 79 20 61 72 65 20   which they are 
af80: 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c  relevant, as fol
af90: 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c  lows:</p>..<tabl
afa0: 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
afb0: 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a  adding=10>.<tr>.
afc0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
afd0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77   align="right" w
afe0: 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45  idth=120><i>INSE
aff0: 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20  RT</i></td>.<td 
b000: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57  valign="top">NEW
b010: 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20   references are 
b020: 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  valid</td>.</tr>
b030: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
b040: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
b050: 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c  ght" width=120><
b060: 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64  i>UPDATE</i></td
b070: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
b080: 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72  p">NEW and OLD r
b090: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61  eferences are va
b0a0: 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  lid</td>.</tr>.<
b0b0: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
b0c0: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
b0d0: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e  t" width=120><i>
b0e0: 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a  DELETE</i></td>.
b0f0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
b100: 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20  >OLD references 
b110: 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c  are valid</td>.<
b120: 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
b130: 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57  p>)^..<p>^If a W
b140: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
b150: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
b160: 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
b170: 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78  fied.are only ex
b180: 65 63 75 74 65 64 20 66 6f 72 20 72 6f 77 73 20  ecuted for rows 
b190: 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 57 48  for which the WH
b1a0: 45 4e 0a 63 6c 61 75 73 65 20 69 73 20 74 72 75  EN.clause is tru
b1b0: 65 2e 20 5e 49 66 20 6e 6f 20 57 48 45 4e 20 63  e. ^If no WHEN c
b1c0: 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65  lause is supplie
b1d0: 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  d, the SQL state
b1e0: 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63 75 74  ments.are execut
b1f0: 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77 73 2e  ed for all rows.
b200: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42 45  </p>..<p>^The BE
b210: 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20 6b 65  FORE or AFTER ke
b220: 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e 65 73  yword determines
b230: 20 77 68 65 6e 20 74 68 65 20 74 72 69 67 67 65   when the trigge
b240: 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62  r actions.will b
b250: 65 20 65 78 65 63 75 74 65 64 20 72 65 6c 61 74  e executed relat
b260: 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72  ive to the inser
b270: 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69  tion, modificati
b280: 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66  on or removal of
b290: 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20   the.associated 
b2a0: 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e  row.</p>..<p>^An
b2b0: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63   [ON CONFLICT] c
b2c0: 6c 61 75 73 65 20 6d 61 79 20 62 65 20 73 70 65  lause may be spe
b2d0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
b2e0: 66 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72  f an [UPDATE] or
b2f0: 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e   [INSERT].action
b300: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
b310: 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2e   of the trigger.
b320: 0a 5e 48 6f 77 65 76 65 72 20 69 66 20 61 6e 20  .^However if an 
b330: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c  [ON CONFLICT] cl
b340: 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
b350: 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74 68  d as part of .th
b360: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
b370: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
b380: 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 63 6f  to fire, then co
b390: 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a  nflict handling.
b3a0: 70 6f 6c 69 63 79 20 6f 66 20 74 68 65 20 6f 75  policy of the ou
b3b0: 74 65 72 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ter statement is
b3c0: 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f   used instead.</
b3d0: 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73  p>..<p>^Triggers
b3e0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
b3f0: 6c 79 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52  ly [DROP TRIGGER
b400: 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68 65 6e   | dropped].when
b410: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
b420: 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63 69  they are .associ
b430: 61 74 65 64 20 77 69 74 68 20 28 74 68 65 20 3c  ated with (the <
b440: 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e  i>table-name</i>
b450: 20 74 61 62 6c 65 29 20 69 73 20 0a 5b 44 52 4f   table) is .[DRO
b460: 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65  P TABLE | droppe
b470: 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20 69 66  d].  ^However if
b480: 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74   the trigger act
b490: 69 6f 6e 73 20 72 65 66 65 72 65 6e 63 65 0a 6f  ions reference.o
b4a0: 74 68 65 72 20 74 61 62 6c 65 73 2c 20 74 68 65  ther tables, the
b4b0: 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20   trigger is not 
b4c0: 64 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64 69 66  dropped or modif
b4d0: 69 65 64 20 69 66 20 74 68 6f 73 65 20 6f 74 68  ied if those oth
b4e0: 65 72 0a 74 61 62 6c 65 73 20 61 72 65 20 5b 44  er.tables are [D
b4f0: 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70  ROP TABLE | drop
b500: 70 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54  ped] or [ALTER T
b510: 41 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d  ABLE | modified]
b520: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67  .</p>..<p>^Trigg
b530: 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ers are removed 
b540: 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20  using the [DROP 
b550: 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
b560: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79 6e  nt.</p>..<h3>Syn
b570: 74 61 78 20 52 65 73 74 72 69 63 74 69 6f 6e 73  tax Restrictions
b580: 20 4f 6e 20 55 50 44 41 54 45 2c 20 44 45 4c 45   On UPDATE, DELE
b590: 54 45 2c 20 61 6e 64 20 49 4e 53 45 52 54 20 53  TE, and INSERT S
b5a0: 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
b5b0: 0a 20 20 20 20 54 72 69 67 67 65 72 73 3c 2f 68  .    Triggers</h
b5c0: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55 50 44  3>..<p>^The [UPD
b5d0: 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20  ATE], [DELETE], 
b5e0: 61 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73 74 61  and [INSERT].sta
b5f0: 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
b600: 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 20 73  riggers do not s
b610: 75 70 70 6f 72 74 0a 74 68 65 20 66 75 6c 6c 20  upport.the full 
b620: 73 79 6e 74 61 78 20 66 6f 72 20 5b 55 50 44 41  syntax for [UPDA
b630: 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61  TE], [DELETE], a
b640: 6e 64 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74  nd [INSERT] stat
b650: 65 6d 65 6e 74 73 2e 20 20 54 68 65 20 66 6f 6c  ements.  The fol
b660: 6c 6f 77 69 6e 67 0a 72 65 73 74 72 69 63 74 69  lowing.restricti
b670: 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a 0a  ons apply:</p>..
b680: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  <ul>.<li><p>.  ^
b690: 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  (The name of the
b6a0: 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64   table to be mod
b6b0: 69 66 69 65 64 20 69 6e 20 61 6e 20 5b 55 50 44  ified in an [UPD
b6c0: 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20  ATE], [DELETE], 
b6d0: 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20 73 74  or [INSERT].  st
b6e0: 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65 20  atement must be 
b6f0: 61 6e 20 75 6e 71 75 61 6c 69 66 69 65 64 20 74  an unqualified t
b700: 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e 20 6f  able name.  In o
b710: 74 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e 65 20  ther words, one 
b720: 6d 75 73 74 0a 20 20 75 73 65 20 6a 75 73 74 20  must.  use just 
b730: 22 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69  "<i>tablename</i
b740: 3e 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74 61 62  >" not "<i>datab
b750: 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c  ase</i><b>.</b><
b760: 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22  i>tablename</i>"
b770: 0a 20 20 77 68 65 6e 20 73 70 65 63 69 66 79 69  .  when specifyi
b780: 6e 67 20 74 68 65 20 74 61 62 6c 65 2e 29 5e 20  ng the table.)^ 
b790: 20 5e 54 68 65 20 74 61 62 6c 65 20 74 6f 20 62   ^The table to b
b7a0: 65 20 6d 6f 64 69 66 69 65 64 20 6d 75 73 74 20  e modified must 
b7b0: 65 78 69 73 74 20 69 6e 20 74 68 65 0a 20 20 73  exist in the.  s
b7c0: 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20  ame database as 
b7d0: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
b7e0: 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  w to which the t
b7f0: 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68  rigger is attach
b800: 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ed..  </p></li>.
b810: 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20  .<li><p>.  ^The 
b820: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 69 3e  "INSERT INTO <i>
b830: 74 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41 55 4c  table</i> DEFAUL
b840: 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f  T VALUES" form o
b850: 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 73  f the [INSERT] s
b860: 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 6e 6f  tatement.  is no
b870: 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 3c  t supported..  <
b880: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
b890: 3e 0a 20 20 5e 54 68 65 20 49 4e 44 45 58 45 44  >.  ^The INDEXED
b8a0: 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45   BY and NOT INDE
b8b0: 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20  XED clauses are 
b8c0: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f  not supported fo
b8d0: 72 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 0a 20  r [UPDATE] and. 
b8e0: 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d   [DELETE] statem
b8f0: 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  ents..  </p></li
b900: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54  >..<li><p>.  ^(T
b910: 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  he ORDER BY and 
b920: 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20 6f 6e  LIMIT clauses on
b930: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
b940: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
b950: 73 20 61 72 65 20 6e 6f 74 0a 20 20 73 75 70 70  s are not.  supp
b960: 6f 72 74 65 64 2e 20 20 4f 52 44 45 52 20 42 59  orted.  ORDER BY
b970: 20 61 6e 64 20 4c 49 4d 49 54 20 61 72 65 20 6e   and LIMIT are n
b980: 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75 70 70  ot normally supp
b990: 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54  orted for [UPDAT
b9a0: 45 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54 45 5d  E] or.  [DELETE]
b9b0: 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74 20   in any context 
b9c0: 62 75 74 20 63 61 6e 20 62 65 20 65 6e 61 62 6c  but can be enabl
b9d0: 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c  ed for top-level
b9e0: 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 75 73   statements.  us
b9f0: 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ing the [SQLITE_
ba00: 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
ba10: 4c 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70  LETE_LIMIT] comp
ba20: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e  ile-time option.
ba30: 20 20 48 6f 77 65 76 65 72 2c 0a 20 20 74 68 61    However,.  tha
ba40: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  t compile-time o
ba50: 70 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70 6c 69  ption only appli
ba60: 65 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65 6c 20  es to top-level 
ba70: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
ba80: 4c 45 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e  LETE].  statemen
ba90: 74 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54 45 5d  ts, not [UPDATE]
baa0: 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74   and [DELETE] st
bab0: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
bac0: 74 72 69 67 67 65 72 73 2e 29 5e 0a 20 20 3c 2f  triggers.)^.  </
bad0: 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  p></li>.</ul>..<
bae0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
baf0: 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69 67 67  instead_of_trigg
bb00: 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46 7d 20  er {INSTEAD OF} 
bb10: 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67  {INSTEAD OF trig
bb20: 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49  ger}</tcl>.<h3>I
bb30: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
bb40: 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67  r</h3>..<p>^Trig
bb50: 67 65 72 73 20 6d 61 79 20 62 65 20 63 72 65 61  gers may be crea
bb60: 74 65 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20  ted on [views], 
bb70: 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e  as well as ordin
bb80: 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79 0a 73  ary tables, by.s
bb90: 70 65 63 69 66 79 69 6e 67 20 49 4e 53 54 45 41  pecifying INSTEA
bba0: 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41  D OF in the CREA
bbb0: 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65  TE TRIGGER state
bbc0: 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f  ment. .^If one o
bbd0: 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54  r more ON INSERT
bbe0: 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f  , ON DELETE.or O
bbf0: 4e 20 55 50 44 41 54 45 20 74 72 69 67 67 65 72  N UPDATE trigger
bc00: 73 20 61 72 65 20 64 65 66 69 6e 65 64 20 6f 6e  s are defined on
bc10: 20 61 20 76 69 65 77 2c 20 74 68 65 6e 20 69 74   a view, then it
bc20: 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72   is not an.error
bc30: 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 20 49   to execute an I
bc40: 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72  NSERT, DELETE or
bc50: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
bc60: 74 20 6f 6e 20 74 68 65 20 76 69 65 77 2c 20 0a  t on the view, .
bc70: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 5e  respectively.  ^
bc80: 49 6e 73 74 65 61 64 2c 0a 65 78 65 63 75 74 69  Instead,.executi
bc90: 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  ng an INSERT, DE
bca0: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
bcb0: 6e 20 74 68 65 20 76 69 65 77 20 63 61 75 73 65  n the view cause
bcc0: 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  s the associated
bcd0: 0a 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72  .triggers to fir
bce0: 65 2e 20 5e 54 68 65 20 72 65 61 6c 20 74 61 62  e. ^The real tab
bcf0: 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67 20 74  les underlying t
bd00: 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f 74 20  he view are not 
bd10: 6d 6f 64 69 66 69 65 64 0a 28 65 78 63 65 70 74  modified.(except
bd20: 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c 69 63   possibly explic
bd30: 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69 67 67  itly, by a trigg
bd40: 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e  er program).</p>
bd50: 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
bd60: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
bd70: 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 73 71 6c  nges()] and [sql
bd80: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
bd90: 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73  es()] interfaces
bda0: 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e 74 20 49 4e  .do not count IN
bdb0: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
bdc0: 20 66 69 72 69 6e 67 73 2c 20 62 75 74 20 74 68   firings, but th
bdd0: 65 0a 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  e.[count_changes
bde0: 20 70 72 61 67 6d 61 5d 20 64 6f 65 73 20 63 6f   pragma] does co
bdf0: 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74  unt INSTEAD OF t
be00: 72 69 67 67 65 72 20 66 69 72 69 6e 67 2e 3c 2f  rigger firing.</
be10: 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73  p>..<h3>Examples
be20: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75  </h3>..<p>^(Assu
be30: 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d  ming that custom
be40: 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73  er records are s
be50: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 63 75  tored in the "cu
be60: 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20  stomers" table, 
be70: 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72  and.that order r
be80: 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65  ecords are store
be90: 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73  d in the "orders
bea0: 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c  " table, the fol
beb0: 6c 6f 77 69 6e 67 20 74 72 69 67 67 65 72 0a 65  lowing trigger.e
bec0: 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20  nsures that all 
bed0: 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72  associated order
bee0: 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65 64  s are redirected
bef0: 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72   when a customer
bf00: 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20   changes.his or 
bf10: 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e  her address:</p>
bf20: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
bf30: 0a 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20  .CREATE TRIGGER 
bf40: 75 70 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f  update_customer_
bf50: 61 64 64 72 65 73 73 20 55 50 44 41 54 45 20 4f  address UPDATE O
bf60: 46 20 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73  F address ON cus
bf70: 74 6f 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a  tomers .  BEGIN.
bf80: 20 20 20 20 55 50 44 41 54 45 20 6f 72 64 65 72      UPDATE order
bf90: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
bfa0: 6e 65 77 2e 61 64 64 72 65 73 73 20 57 48 45 52  new.address WHER
bfb0: 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20  E customer_name 
bfc0: 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e  = old.name;.  EN
bfd0: 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57  D;.}</tcl>..<p>W
bfe0: 69 74 68 20 74 68 69 73 20 74 72 69 67 67 65 72  ith this trigger
bff0: 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63   installed, exec
c000: 75 74 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d  uting the statem
c010: 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ent:</p>..<tcl>E
c020: 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20  xample {.UPDATE 
c030: 63 75 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64  customers SET ad
c040: 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20  dress = '1 Main 
c050: 53 74 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20  St.' WHERE name 
c060: 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a  = 'Jack Jones';.
c070: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73  }</tcl>..<p>caus
c080: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
c090: 20 74 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63   to be automatic
c0a0: 61 6c 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f  ally executed:</
c0b0: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
c0c0: 20 7b 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73   {.UPDATE orders
c0d0: 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 27   SET address = '
c0e0: 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52  1 Main St.' WHER
c0f0: 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20  E customer_name 
c100: 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a  = 'Jack Jones';.
c110: 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e  }</tcl>)^..<tcl>
c120: 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 64 65  hd_fragment unde
c130: 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64 65 66 69  f_before {undefi
c140: 6e 65 64 20 42 45 46 4f 52 45 20 74 72 69 67 67  ned BEFORE trigg
c150: 65 72 20 62 65 68 61 76 69 6f 72 7d 3c 2f 74 63  er behavior}</tc
c160: 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f 6e 73 20  l>.<h3>Cautions 
c170: 4f 6e 20 54 68 65 20 55 73 65 20 4f 66 20 42 45  On The Use Of BE
c180: 46 4f 52 45 20 74 72 69 67 67 65 72 73 3c 2f 68  FORE triggers</h
c190: 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42 45 46 4f  3>..<p>If a BEFO
c1a0: 52 45 20 55 50 44 41 54 45 20 6f 72 20 42 45 46  RE UPDATE or BEF
c1b0: 4f 52 45 20 44 45 4c 45 54 45 20 74 72 69 67 67  ORE DELETE trigg
c1c0: 65 72 20 6d 6f 64 69 66 69 65 73 20 6f 72 20 64  er modifies or d
c1d0: 65 6c 65 74 65 73 20 61 20 72 6f 77 0a 74 68 61  eletes a row.tha
c1e0: 74 20 77 61 73 20 74 6f 20 68 61 76 65 20 62 65  t was to have be
c1f0: 65 6e 20 75 70 64 61 74 65 64 20 6f 72 20 64 65  en updated or de
c200: 6c 65 74 65 64 2c 20 74 68 65 6e 20 74 68 65 20  leted, then the 
c210: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
c220: 62 73 65 71 75 65 6e 74 0a 75 70 64 61 74 65 20  bsequent.update 
c230: 6f 72 20 64 65 6c 65 74 65 20 6f 70 65 72 61 74  or delete operat
c240: 69 6f 6e 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ion is undefined
c250: 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20  .  Furthermore, 
c260: 69 66 20 61 20 42 45 46 4f 52 45 20 74 72 69 67  if a BEFORE trig
c270: 67 65 72 0a 6d 6f 64 69 66 69 65 73 20 6f 72 20  ger.modifies or 
c280: 64 65 6c 65 74 65 73 20 61 20 72 6f 77 2c 20 74  deletes a row, t
c290: 68 65 6e 20 69 74 20 69 73 20 75 6e 64 65 66 69  hen it is undefi
c2a0: 6e 65 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ned whether or n
c2b0: 6f 74 20 41 46 54 45 52 20 74 72 69 67 67 65 72  ot AFTER trigger
c2c0: 73 0a 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76  s.that would hav
c2d0: 65 20 6f 74 68 65 72 77 69 73 65 20 72 75 6e 20  e otherwise run 
c2e0: 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73 20 77 69  on those rows wi
c2f0: 6c 6c 20 69 6e 20 66 61 63 74 20 72 75 6e 2e 0a  ll in fact run..
c300: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c  </p>..<p>The val
c310: 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77 69 64 20  ue of NEW.rowid 
c320: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 20  is undefined in 
c330: 61 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20  a BEFORE INSERT 
c340: 74 72 69 67 67 65 72 20 69 6e 20 77 68 69 63 68  trigger in which
c350: 0a 74 68 65 20 72 6f 77 69 64 20 69 73 20 6e 6f  .the rowid is no
c360: 74 20 65 78 70 6c 69 63 69 74 6c 79 20 73 65 74  t explicitly set
c370: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 3c   to an integer.<
c380: 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20  /p>..<p>Because 
c390: 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f 72 73  of the behaviors
c3a0: 20 64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65   described above
c3b0: 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72  , programmers ar
c3c0: 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 0a  e encouraged to.
c3d0: 70 72 65 66 65 72 20 41 46 54 45 52 20 74 72 69  prefer AFTER tri
c3e0: 67 67 65 72 73 20 6f 76 65 72 20 42 45 46 4f 52  ggers over BEFOR
c3f0: 45 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  E triggers.</p>.
c400: 0a 3c 68 33 3e 54 68 65 20 52 41 49 53 45 28 29  .<h3>The RAISE()
c410: 20 66 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a   function</h3>..
c420: 3c 70 3e 5e 28 41 20 73 70 65 63 69 61 6c 20 53  <p>^(A special S
c430: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 52 41 49 53  QL function RAIS
c440: 45 28 29 20 6d 61 79 20 62 65 20 75 73 65 64 20  E() may be used 
c450: 77 69 74 68 69 6e 20 61 20 74 72 69 67 67 65 72  within a trigger
c460: 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a 77 69 74 68  -program,)^.with
c470: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
c480: 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63 6c  yntax</p> ..<tcl
c490: 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  >BubbleDiagram r
c4a0: 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f 74  aise-function</t
c4b0: 63 6c 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 6f 6e  cl>..<p>^When on
c4c0: 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 74  e of the first t
c4d0: 68 72 65 65 20 66 6f 72 6d 73 20 69 73 20 63 61  hree forms is ca
c4e0: 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72 69 67  lled during trig
c4f0: 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63  ger-program.exec
c500: 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65 63 69  ution, the speci
c510: 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  fied [ON CONFLIC
c520: 54 5d 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  T] processing is
c530: 20 70 65 72 66 6f 72 6d 65 64 0a 28 65 69 74 68   performed.(eith
c540: 65 72 20 41 42 4f 52 54 2c 20 46 41 49 4c 20 6f  er ABORT, FAIL o
c550: 72 20 52 4f 4c 4c 42 41 43 4b 29 20 61 6e 64 20  r ROLLBACK) and 
c560: 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65 72  the current quer
c570: 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 0a 41 6e  y terminates..An
c580: 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 5b   error code of [
c590: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
c5a0: 54 5d 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  T] is returned t
c5b0: 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  o the applicatio
c5c0: 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20 74 68  n,.along with th
c5d0: 65 20 73 70 65 63 69 66 69 65 64 20 65 72 72 6f  e specified erro
c5e0: 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a  r message.</p>..
c5f0: 3c 70 3e 5e 57 68 65 6e 20 52 41 49 53 45 28 49  <p>^When RAISE(I
c600: 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c 65 64  GNORE) is called
c610: 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  , the remainder 
c620: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  of the current t
c630: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 0a  rigger program,.
c640: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68  the statement th
c650: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72  at caused the tr
c660: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 74 6f  igger program to
c670: 20 65 78 65 63 75 74 65 20 61 6e 64 20 61 6e 79   execute and any
c680: 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72 69 67   subsequent.trig
c690: 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 68 61  ger programs tha
c6a0: 74 20 77 6f 75 6c 64 20 6f 66 20 62 65 65 6e 20  t would of been 
c6b0: 65 78 65 63 75 74 65 64 20 61 72 65 20 61 62 61  executed are aba
c6c0: 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61 74 61  ndoned. ^No data
c6d0: 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61 72 65  base.changes are
c6e0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e   rolled back.  ^
c6f0: 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
c700: 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
c710: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
c720: 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73 20 69  .to execute is i
c730: 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20  tself part of a 
c740: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c  trigger program,
c750: 20 74 68 65 6e 20 74 68 61 74 20 74 72 69 67 67   then that trigg
c760: 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d  er program.resum
c770: 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61 74 20  es execution at 
c780: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
c790: 20 74 68 65 20 6e 65 78 74 20 73 74 65 70 2e 0a   the next step..
c7a0: 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
c7b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7f0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
c800: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45  tion {CREATE VIE
c810: 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d 20  W} {createview} 
c820: 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 76  {{CREATE VIEW} v
c830: 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a 42 75 62  iew *views}..Bub
c840: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
c850: 65 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c 2f  e-view-stmt 1.</
c860: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52  tcl>..<p>^The CR
c870: 45 41 54 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e  EATE VIEW comman
c880: 64 20 61 73 73 69 67 6e 73 20 61 20 6e 61 6d 65  d assigns a name
c890: 20 74 6f 20 61 20 70 72 65 2d 70 61 63 6b 61 67   to a pre-packag
c8a0: 65 64 20 0a 5b 53 45 4c 45 43 54 5d 20 73 74 61  ed .[SELECT] sta
c8b0: 74 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20 74  tement. .^Once t
c8c0: 68 65 20 76 69 65 77 20 69 73 20 63 72 65 61 74  he view is creat
c8d0: 65 64 2c 20 69 74 20 63 61 6e 20 62 65 20 75 73  ed, it can be us
c8e0: 65 64 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ed in the FROM c
c8f0: 6c 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72  lause.of another
c900: 20 5b 53 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61   [SELECT] in pla
c910: 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
c920: 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  me..</p>..<p>^If
c930: 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22   the "TEMP" or "
c940: 54 45 4d 50 4f 52 41 52 59 22 20 6b 65 79 77 6f  TEMPORARY" keywo
c950: 72 64 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74  rd occurs in bet
c960: 77 65 65 6e 20 22 43 52 45 41 54 45 22 0a 61 6e  ween "CREATE".an
c970: 64 20 22 56 49 45 57 22 20 74 68 65 6e 20 74 68  d "VIEW" then th
c980: 65 20 76 69 65 77 20 74 68 61 74 20 69 73 20 63  e view that is c
c990: 72 65 61 74 65 64 20 69 73 20 6f 6e 6c 79 20 76  reated is only v
c9a0: 69 73 69 62 6c 65 20 74 6f 20 74 68 65 0a 70 72  isible to the.pr
c9b0: 6f 63 65 73 73 20 74 68 61 74 20 6f 70 65 6e 65  ocess that opene
c9c0: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  d the database a
c9d0: 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  nd is automatica
c9e0: 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e  lly deleted when
c9f0: 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73  .the database is
ca00: 20 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70   closed.</p>..<p
ca10: 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74 61  > ^If a &lt;data
ca20: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73  base-name&gt; is
ca30: 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
ca40: 20 74 68 65 20 76 69 65 77 20 69 73 20 63 72 65   the view is cre
ca50: 61 74 65 64 20 69 6e 20 0a 74 68 65 20 6e 61 6d  ated in .the nam
ca60: 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74  ed database. ^It
ca70: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
ca80: 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 26  specify both a &
ca90: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
caa0: 26 67 74 3b 0a 61 6e 64 20 74 68 65 20 54 45 4d  &gt;.and the TEM
cab0: 50 20 6b 65 79 77 6f 72 64 20 6f 6e 20 61 20 56  P keyword on a V
cac0: 49 45 57 2c 20 75 6e 6c 65 73 73 20 74 68 65 20  IEW, unless the 
cad0: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
cae0: 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e  e&gt; is "temp".
caf0: 0a 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65  .^If no database
cb00: 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69   name is specifi
cb10: 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50  ed, and the TEMP
cb20: 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20   keyword is not 
cb30: 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 56 49 45  present,.the VIE
cb40: 57 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  W is created in 
cb50: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
cb60: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75 20  e.</p>..<p>^You 
cb70: 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c  cannot [DELETE],
cb80: 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55   [INSERT], or [U
cb90: 50 44 41 54 45 5d 20 61 20 76 69 65 77 2e 20 20  PDATE] a view.  
cba0: 5e 56 69 65 77 73 20 61 72 65 20 72 65 61 64 2d  ^Views are read-
cbb0: 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e  only .in SQLite.
cbc0: 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d    ^However, in m
cbd0: 61 6e 79 20 63 61 73 65 73 20 79 6f 75 20 63 61  any cases you ca
cbe0: 6e 20 75 73 65 20 61 6e 0a 5b 49 4e 53 54 45 41  n use an.[INSTEA
cbf0: 44 20 4f 46 20 74 72 69 67 67 65 72 5d 20 6f 6e  D OF trigger] on
cc00: 20 74 68 65 20 76 69 65 77 20 74 6f 20 61 63 63   the view to acc
cc10: 6f 6d 70 6c 69 73 68 20 0a 74 68 65 20 73 61 6d  omplish .the sam
cc20: 65 20 74 68 69 6e 67 2e 20 20 5e 56 69 65 77 73  e thing.  ^Views
cc30: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 0a 77 69   are removed .wi
cc40: 74 68 20 74 68 65 20 5b 44 52 4f 50 20 56 49 45  th the [DROP VIE
cc50: 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  W] command.</p>.
cc60: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
cc70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cc80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cc90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ccb0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
ccc0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
ccd0: 42 4c 45 7d 20 7b 63 72 65 61 74 65 76 74 61 62  BLE} {createvtab
cce0: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 52 54 55  } {{CREATE VIRTU
ccf0: 41 4c 20 54 41 42 4c 45 7d 7d 0a 0a 42 75 62 62  AL TABLE}}..Bubb
cd00: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
cd10: 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73  -virtual-table-s
cd20: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
cd30: 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  >A [virtual tabl
cd40: 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61  e] is an interfa
cd50: 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61  ce to an externa
cd60: 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d  l storage or com
cd70: 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20  putation.engine 
cd80: 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20  that appears to 
cd90: 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20 64  be a table but d
cda0: 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  oes not actually
cdb0: 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69   store informati
cdc0: 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  on.in the databa
cdd0: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
cde0: 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75  >In general, you
cdf0: 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67   can do anything
ce00: 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61 6c   with a [virtual
ce10: 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61 6e   table] that can
ce20: 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e   be done.with an
ce30: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c   ordinary table,
ce40: 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79 6f   except that ^yo
ce50: 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20  u cannot create 
ce60: 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67 67  indices or trigg
ce70: 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c  ers on a.virtual
ce80: 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76   table.  ^Some v
ce90: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
cea0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67  lementations mig
ceb0: 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69  ht impose additi
cec0: 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e  onal.restriction
ced0: 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  s.  For example,
cee0: 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61   many virtual ta
cef0: 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e  bles are read-on
cf00: 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ly.</p>..<p>The 
cf10: 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26  &lt;module-name&
cf20: 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20  gt; is the name 
cf30: 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  of an object tha
cf40: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65  t implements.the
cf50: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
cf60: 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65   ^The &lt;module
cf70: 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62  -name&gt; must b
cf80: 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69 74  e registered wit
cf90: 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61 74  h.the SQLite dat
cfa0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
cfb0: 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f   using.[sqlite3_
cfc0: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d  create_module()]
cfd0: 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65   or [sqlite3_cre
cfe0: 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d  ate_module_v2()]
cff0: 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e  .prior to issuin
d000: 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  g the CREATE VIR
d010: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
d020: 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c  ment..^The modul
d030: 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20  e takes zero or 
d040: 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72  more comma-separ
d050: 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a  ated arguments..
d060: 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 63  ^The arguments c
d070: 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75 74  an be just about
d080: 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f 6e   any text as lon
d090: 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c 61  g as it has bala
d0a0: 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65 73  nced.parentheses
d0b0: 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  .  The argument 
d0c0: 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69 63  syntax is suffic
d0d0: 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20 74  iently general t
d0e0: 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e 74  hat the.argument
d0f0: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
d100: 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c 75   appear as [colu
d110: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20  mn definitions] 
d120: 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c  in a traditional
d130: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
d140: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51  statement.  .^SQ
d150: 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20  Lite passes the 
d160: 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73  module arguments
d170: 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65   directly.to the
d180: 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b   [xCreate] and [
d190: 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64  xConnect] method
d1a0: 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20  s of the module 
d1b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77  implementation.w
d1c0: 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
d1d0: 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69  pretation.  It i
d1e0: 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69  s the responsibi
d1f0: 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75  lity.of the modu
d200: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
d210: 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69  n to parse and i
d220: 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e  nterpret its own
d230: 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a   arguments.</p>.
d240: 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74  .<p>^A virtual t
d250: 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65  able is destroye
d260: 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69  d using the ordi
d270: 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45  nary.[DROP TABLE
d280: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
d290: 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56  ere is no.DROP V
d2a0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d2b0: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63  tement.</p>..<tc
d2c0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
d2d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d2e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d310: 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45  #.Section DELETE
d320: 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20   delete {DELETE 
d330: 2a 44 45 4c 45 54 45 73 7d 0a 0a 42 75 62 62 6c  *DELETEs}..Bubbl
d340: 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
d350: 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61  stmt 1.BubbleDia
d360: 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74  gram qualified-t
d370: 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e  able-name.</tcl>
d380: 0a 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20  ..<p>The DELETE 
d390: 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20  command removes 
d3a0: 72 65 63 6f 72 64 73 20 66 72 6f 6d 20 74 68 65  records from the
d3b0: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
d3c0: 64 20 62 79 20 74 68 65 0a 20 20 20 3c 69 3e 71  d by the.   <i>q
d3d0: 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
d3e0: 61 6d 65 3c 2f 69 3e 2e 20 0a 0a 3c 70 3e 5e 49  ame</i>. ..<p>^I
d3f0: 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  f the WHERE clau
d400: 73 65 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  se is not presen
d410: 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 69  t, all records i
d420: 6e 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20  n the table are 
d430: 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e 49 66 20  deleted..   ^If 
d440: 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
d450: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e  s supplied, then
d460: 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77 73   only those rows
d470: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 20   for which the. 
d480: 20 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c    result of eval
d490: 75 61 74 69 6e 67 20 74 68 65 20 57 48 45 52 45  uating the WHERE
d4a0: 20 63 6c 61 75 73 65 20 61 73 20 61 20 5b 62 6f   clause as a [bo
d4b0: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
d4c0: 7c 0a 20 20 20 62 6f 6f 6c 65 61 6e 20 65 78 70  |.   boolean exp
d4d0: 72 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d  ression is true]
d4e0: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
d4f0: 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20  h3>Restrictions 
d500: 6f 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d  on DELETE Statem
d510: 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41  ents Within CREA
d520: 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a  TE TRIGGER</h3>.
d530: 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
d540: 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61  g restrictions a
d550: 70 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73  pply to DELETE s
d560: 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f  tatements that o
d570: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a  ccur within the.
d580: 20 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52     body of a [CR
d590: 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
d5a0: 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20  atement:..<ul>. 
d5b0: 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e   <li><p>^The <i>
d5c0: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73  table-name</i> s
d5d0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
d5e0: 20 6f 66 20 61 20 44 45 4c 45 54 45 20 73 74 61   of a DELETE sta
d5f0: 74 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20  tement within.  
d600: 20 20 61 20 74 72 69 67 67 65 72 20 62 6f 64 79    a trigger body
d610: 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69   must be unquali
d620: 66 69 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65  fied.  ^(In othe
d630: 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20  r words, the.   
d640: 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
d650: 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72  e</i><b>.</b> pr
d660: 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c  efix on the tabl
d670: 65 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c  e name is not al
d680: 6c 6f 77 65 64 20 0a 20 20 20 20 77 69 74 68 69  lowed .    withi
d690: 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 49  n triggers.)^ ^I
d6a0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  f the table to w
d6b0: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
d6c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 0a   is attached is.
d6d0: 20 20 20 20 6e 6f 74 20 69 6e 20 74 68 65 20 74      not in the t
d6e0: 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20 74 68  emp database, th
d6f0: 65 6e 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  en DELETE statem
d700: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20  ents within the 
d710: 74 72 69 67 67 65 72 0a 20 20 20 20 62 6f 64 79  trigger.    body
d720: 20 6d 75 73 74 20 6f 70 65 72 61 74 65 20 6f 6e   must operate on
d730: 20 74 61 62 6c 65 73 20 77 69 74 68 69 6e 20 74   tables within t
d740: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
d750: 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20   as it. ^If the 
d760: 74 61 62 6c 65 0a 20 20 20 20 74 6f 20 77 68 69  table.    to whi
d770: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
d780: 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e  s attached is in
d790: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
d7a0: 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20  se, then the.   
d7b0: 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d   unqualified nam
d7c0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
d7d0: 65 69 6e 67 20 64 65 6c 65 74 65 64 20 69 73 20  eing deleted is 
d7e0: 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20  resolved in the 
d7f0: 73 61 6d 65 20 77 61 79 20 61 73 0a 20 20 20 20  same way as.    
d800: 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d  it is for a top-
d810: 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20  level statement 
d820: 28 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69  (by searching fi
d830: 72 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74  rst the TEMP dat
d840: 61 62 61 73 65 2c 20 74 68 65 6e 0a 20 20 20 20  abase, then.    
d850: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
d860: 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65  e, then any othe
d870: 72 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  r databases in t
d880: 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 77 65  he order they we
d890: 72 65 0a 20 20 20 20 61 74 74 61 63 68 65 64 29  re.    attached)
d8a0: 2e 0a 20 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e  ..    .  <li><p>
d8b0: 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
d8c0: 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
d8d0: 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
d8e0: 61 6c 6c 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54  allowed on DELET
d8f0: 45 0a 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73  E.    statements
d900: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
d910: 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  .</p>..  <li><p>
d920: 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f  ^The LIMIT and O
d930: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 20  RDER BY clauses 
d940: 28 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77  (described below
d950: 29 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  ) are unsupporte
d960: 64 20 66 6f 72 0a 20 20 20 20 44 45 4c 45 54 45  d for.    DELETE
d970: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
d980: 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
d990: 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69  .</ul>..<h3>Opti
d9a0: 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f  onal LIMIT and O
d9b0: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 3c  RDER BY clauses<
d9c0: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51  /h3>..<p>^(If SQ
d9d0: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
d9e0: 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54   with the [SQLIT
d9f0: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
da00: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f  DELETE_LIMIT].co
da10: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
da20: 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  n, then the synt
da30: 61 78 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  ax of the DELETE
da40: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 65 78   statement is.ex
da50: 74 65 6e 64 65 64 20 62 79 20 74 68 65 20 61 64  tended by the ad
da60: 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e  dition of option
da70: 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
da80: 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 3a 29 5e  LIMIT clauses:)^
da90: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
daa0: 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
dab0: 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63  stmt-limited</tc
dac0: 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c  l>..<p>^If a DEL
dad0: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ETE statement ha
dae0: 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
daf0: 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  , the maximum nu
db00: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
db10: 74 0a 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65  t.will be delete
db20: 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76  d is found by ev
db30: 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63  aluating the acc
db40: 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73  ompanying expres
db50: 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67  sion and casting
db60: 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  .it to an intege
db70: 72 20 76 61 6c 75 65 2e 20 5e 49 66 20 74 68 65  r value. ^If the
db80: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 65   result of the e
db90: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4c 49  valuating the LI
dba0: 4d 49 54 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f  MIT clause.canno
dbb0: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
dbc0: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
dbd0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69  integer value, i
dbe0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e  t is an error. ^
dbf0: 41 20 0a 6e 65 67 61 74 69 76 65 20 4c 49 4d 49  A .negative LIMI
dc00: 54 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72  T value is inter
dc10: 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69  preted as "no li
dc20: 6d 69 74 22 2e 20 5e 28 49 66 20 74 68 65 20 44  mit". ^(If the D
dc30: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
dc40: 0a 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46  .also has an OFF
dc50: 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  SET clause, then
dc60: 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79   it is similarly
dc70: 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63   evaluated and c
dc80: 61 73 74 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65  ast to an.intege
dc90: 72 20 76 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20  r value. Again, 
dca0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 69  it is an error i
dcb0: 66 20 74 68 65 20 76 61 6c 75 65 20 63 61 6e 6e  f the value cann
dcc0: 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ot be losslessly
dcd0: 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e  .converted to an
dce0: 20 69 6e 74 65 67 65 72 2e 29 5e 20 5e 49 66 20   integer.)^ ^If 
dcf0: 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53  there is no OFFS
dd00: 45 54 20 63 6c 61 75 73 65 2c 20 6f 72 20 74 68  ET clause, or th
dd10: 65 20 63 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74  e calculated.int
dd20: 65 67 65 72 20 76 61 6c 75 65 20 69 73 20 6e 65  eger value is ne
dd30: 67 61 74 69 76 65 2c 20 74 68 65 20 65 66 66 65  gative, the effe
dd40: 63 74 69 76 65 20 4f 46 46 53 45 54 20 76 61 6c  ctive OFFSET val
dd50: 75 65 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e  ue is zero...<p>
dd60: 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54 45 20  ^(If the DELETE 
dd70: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e  statement has an
dd80: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
dd90: 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
dda0: 74 68 61 74 20 77 6f 75 6c 64 20 0a 62 65 20 64  that would .be d
ddb0: 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
ddc0: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
ddd0: 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f  IT clause are so
dde0: 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  rted according t
ddf0: 6f 20 74 68 65 20 0a 4f 52 44 45 52 20 42 59 2e  o the .ORDER BY.
de00: 20 54 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c   The first <i>M<
de10: 2f 69 3e 20 72 6f 77 73 2c 20 77 68 65 72 65 20  /i> rows, where 
de20: 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20  <i>M</i> is the 
de30: 76 61 6c 75 65 20 66 6f 75 6e 64 20 62 79 0a 65  value found by.e
de40: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4f 46  valuating the OF
de50: 46 53 45 54 20 63 6c 61 75 73 65 20 65 78 70 72  FSET clause expr
de60: 65 73 73 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70  ession, are skip
de70: 70 65 64 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c  ped, and the fol
de80: 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e  lowing .<i>N</i>
de90: 2c 20 77 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e  , where <i>N</i>
dea0: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
deb0: 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65   the LIMIT expre
dec0: 73 73 69 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74  ssion, are delet
ded0: 65 64 2e 29 5e 0a 5e 49 66 20 74 68 65 72 65 20  ed.)^.^If there 
dee0: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 3c 69  are less than <i
def0: 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61  >N</i> rows rema
df00: 69 6e 69 6e 67 20 61 66 74 65 72 20 74 61 6b 69  ining after taki
df10: 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c  ng the OFFSET cl
df20: 61 75 73 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e  ause.into accoun
df30: 74 2c 20 6f 72 20 69 66 20 74 68 65 20 4c 49 4d  t, or if the LIM
df40: 49 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61  IT clause evalua
df50: 74 65 64 20 74 6f 20 61 20 6e 65 67 61 74 69 76  ted to a negativ
df60: 65 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c  e value, then al
df70: 6c 0a 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73  l.remaining rows
df80: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
df90: 70 3e 5e 49 66 20 74 68 65 20 44 45 4c 45 54 45  p>^If the DELETE
dfa0: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e   statement has n
dfb0: 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
dfc0: 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
dfd0: 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 64   that.would be d
dfe0: 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
dff0: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
e000: 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73  IT clause are as
e010: 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72  sembled in an.ar
e020: 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65  bitrary order be
e030: 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68  fore applying th
e040: 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
e050: 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65  ET clauses to de
e060: 74 65 72 6d 69 6e 65 20 0a 74 68 65 20 73 75 62  termine .the sub
e070: 73 65 74 20 74 68 61 74 20 61 72 65 20 61 63 74  set that are act
e080: 75 61 6c 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a  ually deleted...
e090: 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42  <p>^(The ORDER B
e0a0: 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 44 45  Y clause on a DE
e0b0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
e0c0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64  s used only to d
e0d0: 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72  etermine which.r
e0e0: 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20  ows fall within 
e0f0: 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f  the LIMIT. The o
e100: 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
e110: 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 20 69  ws are deleted i
e120: 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20  s arbitrary.and 
e130: 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65  is not influence
e140: 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42  d by the ORDER B
e150: 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63  Y clause.)^..<tc
e160: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72  l>hd_fragment tr
e170: 75 6e 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63  uncateopt {trunc
e180: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
e190: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
e1a0: 54 72 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a  Truncate Optimiz
e1b0: 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ation</h3>..<p>^
e1c0: 57 68 65 6e 20 74 68 65 20 57 48 45 52 45 20 69  When the WHERE i
e1d0: 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61  s omitted from a
e1e0: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
e1f0: 74 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a  t and the table.
e200: 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61  being deleted ha
e210: 73 20 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53  s no triggers,.S
e220: 51 4c 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70  QLite uses an op
e230: 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72  timization to er
e240: 61 73 65 20 74 68 65 20 65 6e 74 69 72 65 20 74  ase the entire t
e250: 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74  able content.wit
e260: 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76  hout having to v
e270: 69 73 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66  isit each row of
e280: 20 74 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76   the table indiv
e290: 69 64 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74  idually..This "t
e2a0: 72 75 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a  runcate" optimiz
e2b0: 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20  ation makes the 
e2c0: 64 65 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20  delete run much 
e2d0: 66 61 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f  faster..Prior to
e2e0: 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e   SQLite [version
e2f0: 20 33 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75   3.6.5], the tru
e300: 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
e310: 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68  on.also meant th
e320: 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  at the [sqlite3_
e330: 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b  changes()] and.[
e340: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
e350: 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61  anges()] interfa
e360: 63 65 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75  ces.and the [cou
e370: 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d  nt_changes pragm
e380: 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75  a].will not actu
e390: 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  ally return the 
e3a0: 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65  number of delete
e3b0: 64 20 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70  d rows.  .That p
e3c0: 72 6f 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20  roblem has been 
e3d0: 66 69 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72  fixed as of [ver
e3e0: 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70  sion 3.6.5]...<p
e3f0: 3e 5e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f  >^The truncate o
e400: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20  ptimization can 
e410: 62 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  be permanently d
e420: 69 73 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20  isabled for all 
e430: 71 75 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d  queries.by recom
e440: 70 69 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69  piling.SQLite wi
e450: 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f  th the [SQLITE_O
e460: 4d 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54  MIT_TRUNCATE_OPT
e470: 49 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69  IMIZATION] compi
e480: 6c 65 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c  le-time switch.<
e490: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e  /p>..<p>The trun
e4a0: 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
e4b0: 6e 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69  n can also be di
e4c0: 73 61 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d  sabled at runtim
e4d0: 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c  e using.the [sql
e4e0: 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69  ite3_set_authori
e4f0: 7a 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65  zer()] interface
e500: 2e 20 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72  .  ^If an author
e510: 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65  izer callback.re
e520: 74 75 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47  turns [SQLITE_IG
e530: 4e 4f 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51  NORE] for an [SQ
e540: 4c 49 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74  LITE_DELETE] act
e550: 69 6f 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74  ion code, then.t
e560: 68 65 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74  he DELETE operat
e570: 69 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64  ion will proceed
e580: 20 62 75 74 20 74 68 65 20 74 72 75 6e 63 61 74   but the truncat
e590: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77  e optimization w
e5a0: 69 6c 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20  ill.be bypassed 
e5b0: 61 6e 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65  and rows will be
e5c0: 20 64 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20   deleted one by 
e5d0: 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  one.</p>..<tcl>.
e5e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e5f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
e630: 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
e640: 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
e650: 20 2a 44 45 54 41 43 48 0a 0a 42 75 62 62 6c 65   *DETACH..Bubble
e660: 44 69 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73  Diagram detach-s
e670: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
e680: 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74  >^This statement
e690: 20 64 65 74 61 63 68 65 73 20 61 6e 20 61 64 64   detaches an add
e6a0: 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  itional database
e6b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76   connection prev
e6c0: 69 6f 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64  iously .attached
e6d0: 20 75 73 69 6e 67 20 74 68 65 20 5b 41 54 54 41   using the [ATTA
e6e0: 43 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  CH] statement.  
e6f0: 0a 5e 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65  .^It is possible
e700: 20 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d   to have the sam
e710: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
e720: 61 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c  attached multipl
e730: 65 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64  e times using .d
e740: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20  ifferent names, 
e750: 61 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e  and detaching on
e760: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
e770: 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76  a file will leav
e780: 65 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e  e the .others in
e790: 74 61 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  tact.</p>..<p>^T
e7a0: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69  his statement wi
e7b0: 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74  ll fail if SQLit
e7c0: 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64  e is in the midd
e7d0: 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74  le of a transact
e7e0: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  ion.</p>...<tcl>
e7f0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
e800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
e840: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e  Section {DROP IN
e850: 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b  DEX} dropindex {
e860: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 42  {DROP INDEX}}..B
e870: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
e880: 70 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c  p-index-stmt 1.<
e890: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
e8a0: 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ROP INDEX statem
e8b0: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69  ent removes an i
e8c0: 6e 64 65 78 20 61 64 64 65 64 0a 77 69 74 68 20  ndex added.with 
e8d0: 74 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45  the [CREATE INDE
e8e0: 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  X] statement.  T
e8f0: 68 65 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70  he index is comp
e900: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
e910: 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54  rom.the disk.  T
e920: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72  he only way to r
e930: 65 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78  ecover the index
e940: 20 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74   is to reenter t
e950: 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b  he.appropriate [
e960: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f  CREATE INDEX] co
e970: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  mmand.</p>..<tcl
e980: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
e990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9d0: 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54  .Section {DROP T
e9e0: 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20  ABLE} droptable 
e9f0: 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a  {{DROP TABLE}}..
ea00: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
ea10: 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a  op-table-stmt 1.
ea20: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
ea30: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
ea40: 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
ea50: 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20  able added with 
ea60: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
ea70: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
ea80: 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
ea90: 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
eaa0: 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70  ame.  ^The dropp
eab0: 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70  ed table is comp
eac0: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
ead0: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
eae0: 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65   .schema and the
eaf0: 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65   disk file.  The
eb00: 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
eb10: 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e  e recovered.  .^
eb20: 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
eb30: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
eb40: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
eb50: 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
eb60: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ted.</p>..<p>^Th
eb70: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58  e optional IF EX
eb80: 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70  ISTS clause supp
eb90: 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72  resses the error
eba0: 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
ebb0: 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74  ally.result if t
ebc0: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
ebd0: 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  t exist.</p>..<p
ebe0: 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
ebf0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
ec00: 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52  re enabled, a DR
ec10: 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
ec20: 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70   performs an.imp
ec30: 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20  licit [DELETE | 
ec40: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
ec50: 74 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64  tbl&gt;] command
ec60: 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67   before removing
ec70: 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20   the.table from 
ec80: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
ec90: 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65  ema. ^Any trigge
eca0: 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  rs attached to t
ecb0: 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f  he table are.dro
ecc0: 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  pped from the da
ecd0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65  tabase schema be
ece0: 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69  fore the implici
ecf0: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
ed00: 74 3b 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78  t;tbl&gt; .is ex
ed10: 65 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20  ecuted, so this 
ed20: 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79  cannot cause any
ed30: 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72   triggers to fir
ed40: 65 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20  e. By contrast, 
ed50: 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c  ^an.implicit DEL
ed60: 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c  ETE FROM &lt;tbl
ed70: 26 67 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20  &gt; does cause 
ed80: 61 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b  any configured.[
ed90: 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
eda0: 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61  ons] to take pla
edb0: 63 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70  ce. .^If the imp
edc0: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
edd0: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78  M &lt;tbl&gt; ex
ede0: 65 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f  ecuted.as part o
edf0: 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  f a DROP TABLE c
ee00: 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20  ommand violates 
ee10: 61 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  any immediate fo
ee20: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
ee30: 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20  aints,.an error 
ee40: 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  is returned and 
ee50: 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  the table is not
ee60: 20 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74   dropped. ^If .t
ee70: 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
ee80: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
ee90: 67 74 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a  gt; causes any .
eea0: 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
eeb0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
eec0: 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c   to be violated,
eed0: 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69   and the violati
eee0: 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20  ons still.exist 
eef0: 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  when the transac
ef00: 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65  tion is committe
ef10: 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  d, an error is r
ef20: 65 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74  eturned at the t
ef30: 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a  ime.of commit...
ef40: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
ef50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef90: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
efa0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
efb0: 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54  trigger {{DROP T
efc0: 52 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65  RIGGER}}..Bubble
efd0: 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69  Diagram drop-tri
efe0: 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  gger-stmt 1.</tc
eff0: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
f000: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
f010: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69  nt removes a tri
f020: 67 67 65 72 20 63 72 65 61 74 65 64 20 62 79 20  gger created by 
f030: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49  the .[CREATE TRI
f040: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
f050: 20 5e 4f 6e 63 65 20 72 65 6d 6f 76 65 64 2c 20   ^Once removed, 
f060: 74 68 65 20 74 72 69 67 67 65 72 20 64 65 66 69  the trigger defi
f070: 6e 69 74 69 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e  nition is no.lon
f080: 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
f090: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
f0a0: 20 28 6f 72 20 73 71 6c 69 74 65 5f 74 65 6d 70   (or sqlite_temp
f0b0: 5f 6d 61 73 74 65 72 29 20 74 61 62 6c 65 20 61  _master) table a
f0c0: 6e 64 20 69 73 0a 6e 6f 74 20 66 69 72 65 64 20  nd is.not fired 
f0d0: 62 79 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e  by any subsequen
f0e0: 74 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  t INSERT, UPDATE
f0f0: 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65   or DELETE state
f100: 6d 65 6e 74 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65  ments...<p>^Note
f110: 20 74 68 61 74 20 74 72 69 67 67 65 72 73 20 61   that triggers a
f120: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
f130: 20 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68   dropped when th
f140: 65 20 61 73 73 6f 63 69 61 74 65 64 20 74 61 62  e associated tab
f150: 6c 65 20 69 73 0a 64 72 6f 70 70 65 64 2e 0a 0a  le is.dropped...
f160: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
f170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1b0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
f1c0: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
f1d0: 77 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a  w {{DROP VIEW}}.
f1e0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  .BubbleDiagram d
f1f0: 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a  rop-view-stmt 1.
f200: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
f210: 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
f220: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69  ent removes a vi
f230: 65 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68  ew created by th
f240: 65 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20  e [CREATE VIEW] 
f250: 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54  .  statement. ^T
f260: 68 65 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  he view definiti
f270: 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72  on is removed fr
f280: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
f290: 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e  schema, but .  n
f2a0: 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e  o actual data in
f2b0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
f2c0: 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d  base tables is m
f2d0: 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54  odified...<p>^(T
f2e0: 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20  he view to drop 
f2f0: 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
f300: 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61   the view-name a
f310: 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 64  nd optional .  d
f320: 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 73 70 65  atabase-name spe
f330: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
f340: 66 20 74 68 65 20 44 52 4f 50 20 56 49 45 57 20  f the DROP VIEW 
f350: 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20  statement. This 
f360: 0a 20 20 72 65 66 65 72 65 6e 63 65 20 69 73 20  .  reference is 
f370: 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74  resolved using t
f380: 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63  he standard proc
f390: 65 64 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63  edure for [objec
f3a0: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e  t resolution].)^
f3b0: 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20  ..<p>.  ^If the 
f3c0: 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20 63  specified view c
f3d0: 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61  annot be found a
f3e0: 6e 64 20 74 68 65 20 49 46 20 45 58 49 53 54 53  nd the IF EXISTS
f3f0: 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a   clause is not .
f400: 20 20 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73    present, it is
f410: 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74   an error. ^If t
f420: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65  he specified vie
f430: 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e  w cannot be foun
f440: 64 20 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58  d and an IF.  EX
f450: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
f460: 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52  resent in the DR
f470: 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
f480: 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74 61 74  t, then the stat
f490: 65 6d 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d  ement.  is a no-
f4a0: 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  op....<tcl>.####
f4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4f0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
f500: 6f 6e 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a  on {Database Obj
f510: 65 63 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74  ect Name Resolut
f520: 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b  ion} {naming} {{
f530: 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f  object resolutio
f540: 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  n}}.</tcl>..<p>.
f550: 20 20 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64    In SQLite, a d
f560: 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28  atabase object (
f570: 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  a table, index, 
f580: 74 72 69 67 67 65 72 20 6f 72 20 76 69 65 77 29  trigger or view)
f590: 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20   is identified. 
f5a0: 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   by the name of 
f5b0: 74 68 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  the object and t
f5c0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
f5d0: 61 74 61 62 61 73 65 20 74 68 61 74 20 69 74 20  atabase that it 
f5e0: 72 65 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44  resides in. .  D
f5f0: 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20  atabase objects 
f600: 6d 61 79 20 72 65 73 69 64 65 20 69 6e 20 74 68  may reside in th
f610: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
f620: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
f630: 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b  se, or in.  an [
f640: 41 54 54 41 43 48 7c 61 74 74 61 63 68 65 64 20  ATTACH|attached 
f650: 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a  database]...<p>.
f660: 20 20 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20    The syntax of 
f670: 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  the [DROP TABLE]
f680: 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20  , [DROP INDEX], 
f690: 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52  [DROP VIEW], [DR
f6a0: 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b  OP TRIGGER],.  [
f6b0: 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52  REINDEX], [ALTER
f6c0: 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79   TABLE] and many
f6d0: 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20   other commands 
f6e0: 61 6c 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75  all permit the u
f6f0: 73 65 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79  ser to.  specify
f700: 20 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65   a database obje
f710: 63 74 20 65 69 74 68 65 72 20 62 79 20 69 74 73  ct either by its
f720: 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20   name alone, or 
f730: 62 79 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  by a combination
f740: 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61   of.  its name a
f750: 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69  nd the name of i
f760: 74 73 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49  ts database. ^(I
f770: 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73  f no database is
f780: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
f790: 72 74 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65  rt.  of the obje
f7a0: 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68  ct reference, th
f7b0: 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63 68  en SQLite search
f7c0: 65 73 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d  es the main, tem
f7d0: 70 20 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68  p and all attach
f7e0: 65 64 0a 20 20 64 61 74 61 62 61 73 65 73 20 66  ed.  databases f
f7f0: 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74  or an object wit
f800: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  h a matching nam
f810: 65 2e 20 54 68 65 20 74 65 6d 70 20 64 61 74 61  e. The temp data
f820: 62 61 73 65 20 69 73 20 73 65 61 72 63 68 65 64  base is searched
f830: 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77  .  first, follow
f840: 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64  ed by the main d
f850: 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65  atabase, followe
f860: 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  d all attached d
f870: 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a  atabases in the.
f880: 20 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65    order that the
f890: 79 20 77 65 72 65 20 61 74 74 61 63 68 65 64 2e  y were attached.
f8a0: 20 54 68 65 20 72 65 66 65 72 65 6e 63 65 20 72   The reference r
f8b0: 65 73 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66  esolves to the f
f8c0: 69 72 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75  irst match.  fou
f8d0: 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c  nd.)^ For exampl
f8e0: 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20  e:..<pre>^(.    
f8f0: 20 20 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65    /* Add a table
f900: 20 6e 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74   named 't1' to t
f910: 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e  he temp, main an
f920: 64 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  d an attached da
f930: 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  tabase */.      
f940: 41 54 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27  ATTACH 'file.db'
f950: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43   AS aux;.      C
f960: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
f970: 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , y);.      CREA
f980: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
f990: 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52  (x, y);.      CR
f9a0: 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74  EATE TABLE aux.t
f9b0: 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20  1(x, y);..      
f9c0: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20  DROP TABLE t1;  
f9d0: 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74         /* Drop t
f9e0: 61 62 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74  able in temp dat
f9f0: 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44  abase */.      D
fa00: 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20  ROP TABLE t1;   
fa10: 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61        /* Drop ta
fa20: 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61  ble in main data
fa30: 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52  base */.      DR
fa40: 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
fa50: 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
fa60: 6c 65 20 69 6e 20 61 75 78 20 64 61 74 61 62 61  le in aux databa
fa70: 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a  se */.)^</pre>..
fa80: 3c 70 3e 0a 20 20 5e 49 66 20 61 20 64 61 74 61  <p>.  ^If a data
fa90: 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73 70 65  base name is spe
faa0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
fab0: 66 20 61 6e 20 6f 62 6a 65 63 74 20 72 65 66 65  f an object refe
fac0: 72 65 6e 63 65 2c 20 69 74 20 6d 75 73 74 20 62  rence, it must b
fad0: 65 0a 20 20 65 69 74 68 65 72 20 22 6d 61 69 6e  e.  either "main
fae0: 22 2c 20 6f 72 20 22 74 65 6d 70 22 20 6f 72 20  ", or "temp" or 
faf0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 61  the name of an a
fb00: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
fb10: 2e 20 5e 4c 69 6b 65 20 6f 74 68 65 72 0a 20 20  . ^Like other.  
fb20: 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72 73 2c  SQL identifiers,
fb30: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 73 20   database names 
fb40: 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69  are case-insensi
fb50: 74 69 76 65 2e 20 5e 49 66 20 61 20 64 61 74 61  tive. ^If a data
fb60: 62 61 73 65 20 6e 61 6d 65 0a 20 20 69 73 20 73  base name.  is s
fb70: 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f  pecified, then o
fb80: 6e 6c 79 20 74 68 65 20 6e 61 6d 65 64 20 64 61  nly the named da
fb90: 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63 68  tabase is search
fba0: 65 64 20 66 6f 72 20 74 68 65 20 6e 61 6d 65 64  ed for the named
fbb0: 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20   object...<p>.  
fbc0: 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65  Most object refe
fbd0: 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20  rences may only 
fbe0: 72 65 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65  resolve to a spe
fbf0: 63 69 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62  cific type of ob
fc00: 6a 65 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d  ject (for.  exam
fc10: 70 6c 65 20 61 20 72 65 66 65 72 65 6e 63 65 20  ple a reference 
fc20: 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
fc30: 61 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61  a DROP TABLE sta
fc40: 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20  tement may only 
fc50: 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74  resolve.  to a t
fc60: 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74  able object, not
fc70: 20 61 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67   an index, trigg
fc80: 65 72 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77  er or view). How
fc90: 65 76 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e  ever in some con
fca0: 74 65 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b  texts .  (e.g. [
fcb0: 52 45 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a  REINDEX]) an obj
fcc0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61  ect reference ma
fcd0: 79 20 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20  y be resolve to 
fce0: 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79  more than one ty
fcf0: 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20  pe.  of object. 
fd00: 5e 57 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20  ^When searching 
fd10: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 73  database schemas
fd20: 20 66 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a   for a named obj
fd30: 65 63 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a  ect, objects of.
fd40: 20 20 74 79 70 65 73 20 74 68 61 74 20 63 61 6e    types that can
fd50: 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e 20 74  not be used in t
fd60: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68  he context of th
fd70: 65 20 72 65 66 65 72 65 6e 63 65 20 61 72 65 20  e reference are 
fd80: 61 6c 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65  always .  ignore
fd90: 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  d...<tcl>.######
fda0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fdb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fdc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fdd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fde0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
fdf0: 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e   EXPLAIN explain
fe00: 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65   EXPLAIN..Bubble
fe10: 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74  Diagram sql-stmt
fe20: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20  .</tcl>..<p>^An 
fe30: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61  SQL statement ca
fe40: 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  n be preceded by
fe50: 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58   the keyword "EX
fe60: 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65  PLAIN" or.by the
fe70: 20 70 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e   phrase "EXPLAIN
fe80: 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e   QUERY PLAN".  ^
fe90: 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74  Either modificat
fea0: 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53  ion causes the.S
feb0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  QL statement to 
fec0: 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72  behave as a quer
fed0: 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20  y and to return 
fee0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
fef0: 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74  t.how the SQL st
ff00: 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61  atement would ha
ff10: 76 65 20 6f 70 65 72 61 74 65 64 20 69 66 20 74  ve operated if t
ff20: 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
ff30: 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64  rd or.phrase had
ff40: 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f   been omitted.</
ff50: 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75  p>..<p>The outpu
ff60: 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61  t from EXPLAIN a
ff70: 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  nd EXPLAIN QUERY
ff80: 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65   PLAN is intende
ff90: 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76  d for.interactiv
ffa0: 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74  e analysis and t
ffb0: 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f  roubleshooting o
ffc0: 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c  nly.  The detail
ffd0: 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74  s of the .output
ffe0: 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a   format are subj
fff0: 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72  ect to change fr
10000 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f  om one release o
10010 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20  f SQLite to the 
10020 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f  next..Applicatio
10030 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73  ns should not us
10040 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50  e EXPLAIN or EXP
10050 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
10060 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63  since.their exac
10070 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 76 61  t behavior is va
10080 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20  riable and only 
10090 70 61 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65  partially docume
100a0 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57  nted.</p>..<p>^W
100b0 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
100c0 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20  keyword appears 
100d0 62 79 20 69 74 73 65 6c 66 20 69 74 20 63 61 75  by itself it cau
100e0 73 65 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ses the statemen
100f0 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  t.to behave as a
10100 20 71 75 65 72 79 20 74 68 61 74 20 72 65 74 75   query that retu
10110 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e 63 65  rns the sequence
10120 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61   of .[virtual ma
10130 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f  chine instructio
10140 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76  ns] it would hav
10150 65 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  e used to execut
10160 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61  e the command ha
10170 64 0a 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  d.the EXPLAIN ke
10180 79 77 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70  yword not been p
10190 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68  resent. ^When th
101a0 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  e EXPLAIN QUERY 
101b0 50 4c 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65  PLAN phrase.appe
101c0 61 72 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65  ars, the stateme
101d0 6e 74 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d  nt returns high-
101e0 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  level informatio
101f0 6e 20 72 65 67 61 72 64 69 6e 67 20 74 68 65 20  n regarding the 
10200 71 75 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20  query.plan that 
10210 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
10220 75 73 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41  used...The EXPLA
10230 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f  IN QUERY PLAN co
10240 6d 6d 61 6e 64 20 69 73 20 64 65 73 63 72 69 62  mmand is describ
10250 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20  ed in .[explain 
10260 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20  query plan|more 
10270 64 65 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c  detail here]...<
10280 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
10290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102d0 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72  ###.Section expr
102e0 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78  ession expr {*ex
102f0 70 72 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73  pression {expres
10300 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 42  sion syntax}}..B
10310 75 62 62 6c 65 44 69 61 67 72 61 6d 20 65 78 70  ubbleDiagram exp
10320 72 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  r 1.BubbleDiagra
10330 6d 20 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 0a  m literal-value.
10340 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
10350 67 6e 65 64 2d 6e 75 6d 62 65 72 0a 42 75 62 62  gned-number.Bubb
10360 6c 65 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d  leDiagram raise-
10370 66 75 6e 63 74 69 6f 6e 0a 3c 2f 74 63 6c 3e 0a  function.</tcl>.
10380 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e  .<p>This section
10390 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
103a0 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20  om the others.  
103b0 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74 69  Most other secti
103c0 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75  ons of.this docu
103d0 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74  ment talks about
103e0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 53 51   a particular SQ
103f0 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73  L command.  This
10400 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f   section does.no
10410 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73  t talk about a s
10420 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e  tandalone comman
10430 64 20 62 75 74 20 61 62 6f 75 74 20 22 65 78 70  d but about "exp
10440 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20  ressions" which 
10450 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e  are .subcomponen
10460 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72  ts of most other
10470 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a   commands.</p>..
10480 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
10490 20 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61   binaryops {bina
104a0 72 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74  ry operators}</t
104b0 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72  cl>.<h3>Operator
104c0 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69  s</h3>.<p>^(SQLi
104d0 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74  te understands t
104e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e  he following bin
104f0 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69  ary operators, i
10500 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67  n order from.hig
10510 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70  hest to lowest p
10520 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a  recedence:</p>..
10530 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10540 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
10550 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a  2c2cf0"><big>||.
10560 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20  *    /    %.+   
10570 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67   -.&lt;&lt;   &g
10580 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20  t;&gt;   &amp;  
10590 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b    |.&lt;    &lt;
105a0 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b  =   &gt;    &gt;
105b0 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20  =.=    ==   !=  
105c0 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69   &lt;&gt;   </bi
105d0 67 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20  g>IS   IS NOT   
105e0 49 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42  IN   LIKE   GLOB
105f0 20 20 20 4d 41 54 43 48 20 20 20 52 45 47 45 58     MATCH   REGEX
10600 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e  P.AND   .OR</fon
10610 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
10620 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53  quote>)^..<p>^(S
10630 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70  upported unary p
10640 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  refix operators 
10650 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a  are these:</p>..
10660 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10670 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
10680 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20  2c2cf0"><big>-  
10690 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c    +    ~    NOT<
106a0 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70  /big></font>.</p
106b0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
106c0 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
106d0 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b  ment collateop {
106e0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
106f0 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  }</tcl>.<p>^The 
10700 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
10710 20 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74   is a unary post
10720 66 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61  fix.operator tha
10730 74 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c  t assigns a [col
10740 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d  lating sequence]
10750 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f   to an expressio
10760 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  n..^The COLLATE 
10770 6f 70 65 72 61 74 6f 72 20 68 61 73 20 61 20 68  operator has a h
10780 69 67 68 65 72 20 70 72 65 63 65 64 65 6e 63 65  igher precedence
10790 20 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67   (binds more tig
107a0 68 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 70  htly) than any.p
107b0 72 65 66 69 78 20 75 6e 61 72 79 20 6f 70 65 72  refix unary oper
107c0 61 74 6f 72 20 6f 72 20 61 6e 79 20 62 69 6e 61  ator or any bina
107d0 72 79 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 54 68  ry operator..^Th
107e0 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
107f0 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 65 20  ence set by the 
10800 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
10810 20 6f 76 65 72 72 69 64 65 73 20 74 68 65 0a 63   overrides the.c
10820 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10830 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  e determined by 
10840 74 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  the COLLATE clau
10850 73 65 20 69 6e 20 61 20 74 61 62 6c 65 0a 5b 63  se in a table.[c
10860 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
10870 5d 2e 0a 53 65 65 20 74 68 65 20 5b 63 6f 6c 6c  ]..See the [coll
10880 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 7c 20  ating sequence| 
10890 64 65 74 61 69 6c 65 64 20 64 69 73 63 75 73 73  detailed discuss
108a0 69 6f 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e 67  ion on collating
108b0 20 73 65 71 75 65 6e 63 65 73 5d 0a 69 6e 20 74   sequences].in t
108c0 68 65 20 5b 64 61 74 61 74 79 70 65 20 7c 20 44  he [datatype | D
108d0 61 74 61 74 79 70 65 20 49 6e 20 53 51 4c 69 74  atatype In SQLit
108e0 65 33 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72  e3] document for
108f0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
10900 72 6d 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c  rmation..</p>..<
10910 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70  tcl>hd_puts ".<p
10920 3e 5e 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72  >^The unary oper
10930 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b  ator [Operator +
10940 5d 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e  ] is a no-op.  ^
10950 49 74 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65  It can be applie
10960 64 0a 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75  d.to strings, nu
10970 6d 62 65 72 73 2c 20 62 6c 6f 62 73 20 6f 72 20  mbers, blobs or 
10980 4e 55 4c 4c 20 61 6e 64 20 69 74 20 61 6c 77 61  NULL and it alwa
10990 79 73 20 72 65 74 75 72 6e 73 20 61 20 72 65 73  ys returns a res
109a0 75 6c 74 0a 77 69 74 68 20 74 68 65 20 73 61 6d  ult.with the sam
109b0 65 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 6f  e value as the o
109c0 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63  perand.</p>"</tc
109d0 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74  l>..<p>Note that
109e0 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 76   there are two v
109f0 61 72 69 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  ariations of the
10a00 20 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20   equals and not 
10a10 65 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73  equals.operators
10a20 2e 20 20 5e 45 71 75 61 6c 73 20 63 61 6e 20 62  .  ^Equals can b
10a30 65 20 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a  e either..<tcl>.
10a40 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74  hd_puts "[Operat
10a50 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74  or =] or [Operat
10a60 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f 6e  or ==]..^The non
10a70 2d 65 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72  -equals operator
10a80 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b   can be either.[
10a90 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20  Operator !=] or 
10aa0 5b 4f 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26  [Operator {&lt;&
10ab0 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70 65  gt;}]..^The [Ope
10ac0 72 61 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74  rator ||] operat
10ad0 6f 72 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e  or is \"concaten
10ae0 61 74 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73  ate\" - it joins
10af0 20 74 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77   together.the tw
10b00 6f 20 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73  o strings of its
10b10 20 6f 70 65 72 61 6e 64 73 2e 0a 5e 54 68 65 20   operands..^The 
10b20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74  operator [Operat
10b30 6f 72 20 25 5d 20 6f 75 74 70 75 74 73 20 74 68  or %] outputs th
10b40 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c  e value of its l
10b50 65 66 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64  eft .operand mod
10b60 75 6c 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70  ulo its right op
10b70 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  erand.</p>..<p>^
10b80 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e  The result of an
10b90 79 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  y binary operato
10ba0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 6e 75  r is either a nu
10bb0 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 72 20 0a  meric value or .
10bc0 4e 55 4c 4c 2c 20 65 78 63 65 70 74 20 66 6f 72  NULL, except for
10bd0 20 74 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c   the [Operator |
10be0 7c 5d 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e  |] concatenation
10bf0 20 6f 70 65 72 61 74 6f 72 20 77 68 69 63 68 20   operator which 
10c00 61 6c 77 61 79 73 20 0a 65 76 61 6c 75 61 74 65  always .evaluate
10c10 73 20 74 6f 20 65 69 74 68 65 72 20 4e 55 4c 4c  s to either NULL
10c20 20 6f 72 20 61 20 74 65 78 74 20 76 61 6c 75 65   or a text value
10c30 2e 3c 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67 6d  .</p>"..hd_fragm
10c40 65 6e 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b 49  ent {isisnot} {I
10c50 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53 20  S operator} {IS 
10c60 4e 4f 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a 68  NOT operator}..h
10c70 64 5f 70 75 74 73 20 22 3c 70 3e 5e 54 68 65 20  d_puts "<p>^The 
10c80 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e  [Operator IS] an
10c90 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20  d [Operator {IS 
10ca0 4e 4f 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73 20  NOT}] operators 
10cb0 77 6f 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72 61  work.like [Opera
10cc0 74 6f 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65 72  tor =] and [Oper
10cd0 61 74 6f 72 20 21 3d 5d 20 65 78 63 65 70 74 20  ator !=] except 
10ce0 77 68 65 6e 20 6f 6e 65 20 6f 72 20 62 6f 74 68  when one or both
10cf0 20 6f 66 20 74 68 65 0a 6f 70 65 72 61 6e 64 73   of the.operands
10d00 20 61 72 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20 74   are NULL. ^In t
10d10 68 69 73 20 63 61 73 65 2c 20 69 66 20 62 6f 74  his case, if bot
10d20 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
10d30 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 49 53  ULL, then the.IS
10d40 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
10d50 74 65 73 20 74 6f 20 31 20 28 74 72 75 65 29 20  tes to 1 (true) 
10d60 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f  and the IS NOT o
10d70 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
10d80 73 0a 74 6f 20 30 20 28 66 61 6c 73 65 29 2e 20  s.to 0 (false). 
10d90 5e 49 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ^If one operand 
10da0 69 73 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65 20  is NULL and the 
10db0 6f 74 68 65 72 20 69 73 20 6e 6f 74 2c 20 74 68  other is not, th
10dc0 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74  en the.IS operat
10dd0 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  or evaluates to 
10de0 30 20 28 66 61 6c 73 65 29 20 61 6e 64 20 74 68  0 (false) and th
10df0 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f  e IS NOT operato
10e00 72 20 69 73 20 31 20 28 74 72 75 65 29 2e 0a 5e  r is 1 (true)..^
10e10 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
10e20 6c 65 20 66 6f 72 20 61 6e 20 49 53 20 6f 72 20  le for an IS or 
10e30 49 53 20 4e 4f 54 20 65 78 70 72 65 73 73 69 6f  IS NOT expressio
10e40 6e 20 74 6f 20 65 76 61 6c 75 61 74 65 20 74 6f  n to evaluate to
10e50 20 4e 55 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f 72   NULL..^Operator
10e60 73 20 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20  s [Operator IS] 
10e70 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49  and [Operator {I
10e80 53 20 4e 4f 54 7d 5d 20 68 61 76 65 20 74 68 65  S NOT}] have the
10e90 20 73 61 6d 65 20 0a 70 72 65 63 65 64 65 6e 63   same .precedenc
10ea0 65 20 61 73 20 5b 4f 70 65 72 61 74 6f 72 20 3d  e as [Operator =
10eb0 5d 2e 22 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ]."..<tcl>hd_fra
10ec0 67 6d 65 6e 74 20 6c 69 74 76 61 6c 75 65 20 7b  gment litvalue {
10ed0 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 7d 3c 2f  literal value}</
10ee0 74 63 6c 3e 0a 3c 68 33 3e 4c 69 74 65 72 61 6c  tcl>.<h3>Literal
10ef0 20 56 61 6c 75 65 73 3c 2f 68 33 3e 0a 3c 70 3e   Values</h3>.<p>
10f00 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75  .^A literal valu
10f10 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  e is a constant 
10f20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 5e 4c  of some kind..^L
10f30 69 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61  iteral values ma
10f40 79 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66  y be integers, f
10f50 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
10f60 6d 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a  mbers, strings,.
10f70 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e  BLOBs, or NULLs.
10f80 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e  </p>..<p>The syn
10f90 74 61 78 20 66 6f 72 20 69 6e 74 65 67 65 72 20  tax for integer 
10fa0 61 6e 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  and floating poi
10fb0 6e 74 20 6c 69 74 65 72 61 6c 73 20 28 63 6f 6c  nt literals (col
10fc0 6c 65 63 74 69 76 65 6c 79 0a 22 6e 75 6d 65 72  lectively."numer
10fd0 69 63 20 6c 69 74 65 72 61 6c 73 22 29 20 69 73  ic literals") is
10fe0 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f   shown by the fo
10ff0 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a  llowing diagram:
11000 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
11010 65 44 69 61 67 72 61 6d 20 6e 75 6d 65 72 69 63  eDiagram numeric
11020 2d 6c 69 74 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a  -literal</tcl>..
11030 3c 70 3e 0a 5e 28 49 66 20 61 20 6e 75 6d 65 72  <p>.^(If a numer
11040 69 63 20 6c 69 74 65 72 61 6c 20 68 61 73 20 61  ic literal has a
11050 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 6f   decimal point o
11060 72 20 61 6e 20 65 78 70 6f 6e 65 6e 74 69 61 74  r an exponentiat
11070 69 6f 6e 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e  ion.clause, then
11080 20 69 74 20 69 73 20 61 20 66 6c 6f 61 74 69 6e   it is a floatin
11090 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 2e  g point literal.
110a0 20 20 4f 74 68 65 72 77 69 73 65 20 69 73 20 69    Otherwise is i
110b0 74 20 69 73 20 61 6e 20 0a 69 6e 74 65 67 65 72  t is an .integer
110c0 20 6c 69 74 65 72 61 6c 2e 29 5e 20 20 5e 54 68   literal.)^  ^Th
110d0 65 20 22 45 22 20 63 68 61 72 61 63 74 65 72 20  e "E" character 
110e0 74 68 61 74 20 62 65 67 69 6e 73 20 74 68 65 20  that begins the 
110f0 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63  exponentiation.c
11100 6c 61 75 73 65 20 6f 66 20 61 20 66 6c 6f 61 74  lause of a float
11110 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
11120 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  l can be either 
11130 75 70 70 65 72 20 6f 72 20 6c 6f 77 65 72 20 63  upper or lower c
11140 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63  ase..^(The "." c
11150 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77 61  haracter is alwa
11160 79 73 20 75 73 65 64 20 0a 61 73 20 74 68 65 20  ys used .as the 
11170 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76  decimal point ev
11180 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65  en if the locale
11190 20 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69   setting specifi
111a0 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20  es "," for.this 
111b0 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f  role - the use o
111c0 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65  f "," for the de
111d0 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c  cimal point woul
111e0 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74  d result in.synt
111f0 61 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e  actic ambiguity.
11200 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 41 20 73  )^</p>..<p> ^A s
11210 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69  tring constant i
11220 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c  s formed by encl
11230 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67  osing the.string
11240 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
11250 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c  s (').  ^A singl
11260 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74  e quote within t
11270 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65  he string can.be
11280 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74   encoded by putt
11290 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71  ing two single q
112a0 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d  uotes in a row -
112b0 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43   as in Pascal..C
112c0 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73 20 75  -style escapes u
112d0 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61  sing the backsla
112e0 73 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65  sh character are
112f0 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62   not supported b
11300 65 63 61 75 73 65 0a 74 68 65 79 20 61 72 65 20  ecause.they are 
11310 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
11320 2e 0a 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73  ..^BLOB literals
11330 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69 74 65   are string lite
11340 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20  rals containing 
11350 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61 74 61  hexadecimal data
11360 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20 62 79   and.preceded by
11370 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20 6f 72   a single "x" or
11380 20 22 58 22 20 63 68 61 72 61 63 74 65 72 2e 20   "X" character. 
11390 20 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65 3a 3c   ^(For example:<
113a0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
113b0 3e 3c 70 72 65 3e 0a 58 27 35 33 35 31 34 43 36  ><pre>.X'53514C6
113c0 39 37 34 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f 62  97465'.</pre></b
113d0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
113e0 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c  >.^A literal val
113f0 75 65 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74  ue can also be t
11400 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e  he token "NULL".
11410 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
11420 72 61 67 6d 65 6e 74 20 76 61 72 70 61 72 61 6d  ragment varparam
11430 20 70 61 72 61 6d 65 74 65 72 20 70 61 72 61 6d   parameter param
11440 65 74 65 72 73 20 7b 62 6f 75 6e 64 20 70 61 72  eters {bound par
11450 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20 70  ameter} {bound p
11460 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c 3e  arameters}</tcl>
11470 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65 72 73 3c  .<h3>Parameters<
11480 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69  /h3>.<p>.A "vari
11490 61 62 6c 65 22 20 6f 72 20 22 70 61 72 61 6d 65  able" or "parame
114a0 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69  ter" token.speci
114b0 66 69 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64  fies a placehold
114c0 65 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  er in the expres
114d0 73 69 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c 75  sion for a .valu
114e0 65 20 74 68 61 74 20 69 73 20 66 69 6c 6c 65 64  e that is filled
114f0 20 69 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75   in at runtime u
11500 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65  sing the.[sqlite
11510 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20  3_bind_blob() | 
11520 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20  sqlite3_bind()] 
11530 66 61 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20  family of C/C++ 
11540 69 6e 74 65 72 66 61 63 65 73 2e 0a 50 61 72 61  interfaces..Para
11550 6d 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20  meters can take 
11560 73 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c  several forms:.<
11570 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
11580 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c  >.<table>.<tr>.<
11590 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
115a0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
115b0 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e  >?</b><i>NNN</i>
115c0 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
115d0 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28  20"></td>.<td>^(
115e0 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  A question mark 
115f0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75  followed by a nu
11600 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20  mber <i>NNN</i> 
11610 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72  holds a spot for
11620 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61   the.NNN-th para
11630 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74  meter.  NNN must
11640 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
11650 64 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  d [SQLITE_MAX_VA
11660 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29  RIABLE_NUMBER].)
11670 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  ^.</td>.</tr>.<t
11680 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
11690 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
116a0 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c  "><b>?</b></td><
116b0 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
116c0 74 64 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73 74  td>.<td>^A quest
116d0 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74 20 69 73  ion mark that is
116e0 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79   not followed by
116f0 20 61 20 6e 75 6d 62 65 72 20 63 72 65 61 74 65   a number create
11700 73 20 61 20 70 61 72 61 6d 65 74 65 72 0a 77 69  s a parameter.wi
11710 74 68 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65 20  th a number one 
11720 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
11730 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65 74   largest paramet
11740 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64  er number alread
11750 79 20 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66 20  y assigned..^If 
11760 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70  this means the p
11770 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
11780 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a  is greater than.
11790 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49  [SQLITE_MAX_VARI
117a0 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74  ABLE_NUMBER], it
117b0 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 2f   is an error..</
117c0 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
117d0 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
117e0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
117f0 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >:</b><i>AAAA</i
11800 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
11810 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
11820 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64  A colon followed
11830 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65   by an identifie
11840 72 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73  r name holds a s
11850 70 6f 74 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69  pot for a .[sqli
11860 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
11870 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61  er_name|named pa
11880 72 61 6d 65 74 65 72 5d 20 77 69 74 68 20 74 68  rameter] with th
11890 65 20 6e 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a  e name :AAAA.  .
118a0 5e 28 4e 61 6d 65 64 20 70 61 72 61 6d 65 74 65  ^(Named paramete
118b0 72 73 20 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62  rs are also numb
118c0 65 72 65 64 2e 20 54 68 65 20 6e 75 6d 62 65 72  ered. The number
118d0 20 61 73 73 69 67 6e 65 64 20 69 73 20 6f 6e 65   assigned is one
118e0 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 74 68   greater than.th
118f0 65 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65  e largest parame
11900 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61  ter number alrea
11910 64 79 20 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e  dy assigned.)^ ^
11920 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68  If this means th
11930 65 20 70 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c  e parameter.woul
11940 64 20 62 65 20 61 73 73 69 67 6e 65 64 20 61 20  d be assigned a 
11950 6e 75 6d 62 65 72 20 67 72 65 61 74 65 72 20 74  number greater t
11960 68 61 6e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  han [SQLITE_MAX_
11970 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
11980 2c 20 69 74 20 69 73 0a 61 6e 20 65 72 72 6f 72  , it is.an error
11990 2e 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  . To avoid confu
119a0 73 69 6f 6e 2c 20 69 74 20 69 73 20 62 65 73 74  sion, it is best
119b0 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67   to avoid mixing
119c0 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65   named and numbe
119d0 72 65 64 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c  red.parameters.<
119e0 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
119f0 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
11a00 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
11a10 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>@</b><i>AAAA</
11a20 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
11a30 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
11a40 5e 41 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f  ^An "at" sign wo
11a50 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
11a60 20 61 20 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74   a colon, except
11a70 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 20 6f   that the name o
11a80 66 0a 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f.the parameter 
11a90 63 72 65 61 74 65 64 20 69 73 20 40 41 41 41 41  created is @AAAA
11aa0 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  .</td>.</tr>.<tr
11ab0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
11ac0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
11ad0 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41  ><b>$</b><i>AAAA
11ae0 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </i></td><td wid
11af0 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
11b00 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e  d>^A dollar-sign
11b10 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
11b20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20  identifier name 
11b30 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f  also holds a spo
11b40 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61  t for a named.pa
11b50 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68 65  rameter with the
11b60 20 6e 61 6d 65 20 24 41 41 41 41 2e 20 20 5e 28   name $AAAA.  ^(
11b70 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e  The identifier n
11b80 61 6d 65 20 69 6e 20 74 68 69 73 20 63 61 73 65  ame in this case
11b90 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65   can include.one
11ba0 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72 72 65   or more occurre
11bb0 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64  nces of "::" and
11bc0 20 61 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73   a suffix enclos
11bd0 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f  ed in "(...)" co
11be0 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78  ntaining.any tex
11bf0 74 20 61 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69  t at all.)^  Thi
11c00 73 20 73 79 6e 74 61 78 20 69 73 20 74 68 65 20  s syntax is the 
11c10 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62  form of a variab
11c20 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b  le name in the.[
11c30 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74  http://www.tcl.t
11c40 6b 2f 20 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d  k/ | Tcl program
11c50 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20  ming language]. 
11c60 20 54 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66   The presence.of
11c70 20 74 68 69 73 20 73 79 6e 74 61 78 20 72 65 73   this syntax res
11c80 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61  ults from the fa
11c90 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 69  ct that SQLite i
11ca0 73 20 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c  s really a .[Tcl
11cb0 20 65 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74   extension] that
11cc0 20 68 61 73 20 65 73 63 61 70 65 64 20 69 6e 74   has escaped int
11cd0 6f 20 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e  o the wild.</td>
11ce0 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
11cf0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
11d00 70 3e 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68  p>^Parameters th
11d10 61 74 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67  at are not assig
11d20 6e 65 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67  ned values using
11d30 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  .[sqlite3_bind_b
11d40 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f  lob() | sqlite3_
11d50 62 69 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61  bind()] are trea
11d60 74 65 64 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e  ted.as NULL.</p>
11d70 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
11d80 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  m parameter numb
11d90 65 72 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d  er is set at com
11da0 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65  pile-time by.the
11db0 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
11dc0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61  IABLE_NUMBER] ma
11dd0 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76  cro.  ^(An indiv
11de0 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20  idual [database 
11df0 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 0a 44 20 63  connections].D c
11e00 61 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d 61  an reduce its ma
11e10 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20  ximum parameter 
11e20 6e 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68 65  number below the
11e30 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61   compile-time ma
11e40 78 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65 20  ximum.using the 
11e50 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28  [sqlite3_limit](
11e60 44 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  D, [SQLITE_LIMIT
11e70 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
11e80 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  ],...) interface
11e90 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  .)^.</p>..<tcl>h
11ea0 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20  d_fragment like 
11eb0 4c 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c  LIKE ESCAPE</tcl
11ec0 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 20 61  >.<h3>The LIKE a
11ed0 6e 64 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72  nd GLOB operator
11ee0 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c  s</h3>.<p>^The L
11ef0 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65  IKE operator doe
11f00 73 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63  s a pattern matc
11f10 68 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  hing comparison.
11f20 20 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f   ^The operand.to
11f30 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68   the right of th
11f40 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
11f50 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74  contains the pat
11f60 74 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66  tern and the lef
11f70 74 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63  t hand.operand c
11f80 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72 69  ontains the stri
11f90 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69  ng to match agai
11fa0 6e 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e  nst the pattern.
11fb0 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22  ..<tcl>hd_puts "
11fc0 5e 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f  ^A percent symbo
11fd0 6c 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65  l (\"%\") in the
11fe0 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61   LIKE pattern ma
11ff0 74 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e  tches any.sequen
12000 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f  ce of zero or mo
12010 72 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  re characters in
12020 20 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41   the string.  ^A
12030 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22  n underscore.(\"
12040 5f 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45  _\") in the LIKE
12050 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73   pattern matches
12060 20 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72   any single char
12070 61 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72  acter in the.str
12080 69 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65  ing.  ^(Any othe
12090 72 20 63 68 61 72 61 63 74 65 72 20 6d 61 74 63  r character matc
120a0 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74  hes itself or it
120b0 73 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61  s lower/upper ca
120c0 73 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69  se.equivalent (i
120d0 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69  .e. case-insensi
120e0 74 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29  tive matching).)
120f0 5e 20 20 28 41 20 62 75 67 3a 20 5e 53 51 4c 69  ^  (A bug: ^SQLi
12100 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61  te only.understa
12110 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20  nds upper/lower 
12120 63 61 73 65 20 66 6f 72 20 41 53 43 49 49 20 63  case for ASCII c
12130 68 61 72 61 63 74 65 72 73 20 62 79 20 64 65 66  haracters by def
12140 61 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45  ault.  ^The.LIKE
12150 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73   operator is cas
12160 65 20 73 65 6e 73 69 74 69 76 65 20 62 79 20 64  e sensitive by d
12170 65 66 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f  efault for unico
12180 64 65 20 63 68 61 72 61 63 74 65 72 73 20 74 68  de characters th
12190 61 74 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68  at are.beyond th
121a0 65 20 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20  e ASCII range.  
121b0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68  For example,.^th
121c0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e  e expression <b>
121d0 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  'a'&nbsp;LIKE&nb
121e0 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52  sp;'A'</b>.is TR
121f0 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69  UE but <b>'&aeli
12200 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  g;'&nbsp;LIKE&nb
12210 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e  sp;'&AElig;'</b>
12220 20 69 73 20 46 41 4c 53 45 2e 29 3c 70 3e 22 3c   is FALSE.)<p>"<
12230 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  /tcl>..<p>^If th
12240 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50  e optional ESCAP
12250 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  E clause is pres
12260 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78  ent, then the ex
12270 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69  pression.followi
12280 6e 67 20 74 68 65 20 45 53 43 41 50 45 20 6b 65  ng the ESCAPE ke
12290 79 77 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75  yword must evalu
122a0 61 74 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20  ate to a string 
122b0 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20  consisting of.a 
122c0 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
122d0 2e 20 5e 54 68 69 73 20 63 68 61 72 61 63 74 65  . ^This characte
122e0 72 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e  r may be used in
122f0 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72   the LIKE patter
12300 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74  n.to include lit
12310 65 72 61 6c 20 70 65 72 63 65 6e 74 20 6f 72 20  eral percent or 
12320 75 6e 64 65 72 73 63 6f 72 65 20 63 68 61 72 61  underscore chara
12330 63 74 65 72 73 2e 20 5e 54 68 65 20 65 73 63 61  cters. ^The esca
12340 70 65 0a 63 68 61 72 61 63 74 65 72 20 66 6f 6c  pe.character fol
12350 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72 63 65  lowed by a perce
12360 6e 74 20 73 79 6d 62 6f 6c 20 28 25 29 2c 20 75  nt symbol (%), u
12370 6e 64 65 72 73 63 6f 72 65 20 28 5f 29 2c 20 6f  nderscore (_), o
12380 72 20 61 20 73 65 63 6f 6e 64 0a 69 6e 73 74 61  r a second.insta
12390 6e 63 65 20 6f 66 20 74 68 65 20 65 73 63 61 70  nce of the escap
123a0 65 20 63 68 61 72 61 63 74 65 72 20 69 74 73 65  e character itse
123b0 6c 66 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74  lf matches a.lit
123c0 65 72 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d  eral percent sym
123d0 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 2c  bol, underscore,
123e0 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 65 73 63   or a single esc
123f0 61 70 65 20 63 68 61 72 61 63 74 65 72 2c 0a 72  ape character,.r
12400 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70  espectively...<p
12410 3e 5e 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45  >^The infix LIKE
12420 20 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70   operator is imp
12430 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c  lemented by call
12440 69 6e 67 20 74 68 65 0a 61 70 70 6c 69 63 61 74  ing the.applicat
12450 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20  ion-defined SQL 
12460 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28  functions [like(
12470 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69  <i>Y</i>,<i>X</i
12480 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e  >)] or.[like(<i>
12490 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c  Y</i>,<i>X</i>,<
124a0 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f  i>Z</i>)]</a>.</
124b0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45  p>..<p>^The LIKE
124c0 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65   operator can be
124d0 20 6d 61 64 65 20 63 61 73 65 20 73 65 6e 73 69   made case sensi
124e0 74 69 76 65 20 75 73 69 6e 67 20 74 68 65 0a 5b  tive using the.[
124f0 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c  case_sensitive_l
12500 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e  ike pragma].</p>
12510 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
12520 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63  nt glob GLOB</tc
12530 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20  l>.<p>^The GLOB 
12540 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69  operator is simi
12550 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20  lar to LIKE but 
12560 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69  uses the Unix.fi
12570 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74  le globbing synt
12580 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63  ax for its wildc
12590 61 72 64 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c  ards.  ^Also, GL
125a0 4f 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69  OB is case.sensi
125b0 74 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b  tive, unlike LIK
125c0 45 2e 20 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61  E.  ^Both GLOB a
125d0 6e 64 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70  nd LIKE may be p
125e0 72 65 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e  receded by.the N
125f0 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e  OT keyword to in
12600 76 65 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f  vert the sense o
12610 66 20 74 68 65 20 74 65 73 74 2e 20 20 5e 54 68  f the test.  ^Th
12620 65 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70  e infix GLOB .op
12630 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d  erator is implem
12640 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
12650 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67   the function.[g
12660 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  lob(<i>Y</i>,<i>
12670 58 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20  X</i>)] and can 
12680 62 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 6f  be modified by o
12690 76 65 72 72 69 64 69 6e 67 0a 74 68 61 74 20 66  verriding.that f
126a0 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  unction.</p>..<t
126b0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
126c0 65 67 65 78 70 20 52 45 47 45 58 50 3c 2f 74 63  egexp REGEXP</tc
126d0 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52 45 47 45 58  l>.<p>^The REGEX
126e0 50 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  P operator is a 
126f0 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66  special syntax f
12700 6f 72 20 74 68 65 20 72 65 67 65 78 70 28 29 0a  or the regexp().
12710 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20  user function.  
12720 5e 4e 6f 20 72 65 67 65 78 70 28 29 20 75 73 65  ^No regexp() use
12730 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  r function is de
12740 66 69 6e 65 64 20 62 79 20 64 65 66 61 75 6c 74  fined by default
12750 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66 20 74  .and so use of t
12760 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74  he REGEXP operat
12770 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79  or will normally
12780 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72   result in an.er
12790 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20 5e 49  ror message.  ^I
127a0 66 20 61 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e  f a [application
127b0 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e  -defined SQL fun
127c0 63 74 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65  ction] named "re
127d0 67 65 78 70 22 0a 69 73 20 61 64 64 65 64 20 61  gexp".is added a
127e0 74 20 72 75 6e 2d 74 69 6d 65 2c 20 74 68 61 74  t run-time, that
127f0 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62   function will b
12800 65 20 63 61 6c 6c 65 64 20 69 6e 20 6f 72 64 65  e called in orde
12810 72 0a 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  r.to implement t
12820 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74  he REGEXP operat
12830 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  or.</p>..<tcl>hd
12840 5f 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20  _fragment match 
12850 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  MATCH</tcl>.<p>^
12860 54 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74  The MATCH operat
12870 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  or is a special 
12880 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d  syntax for the m
12890 61 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69  atch().applicati
128a0 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  on-defined funct
128b0 69 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ion.  ^The defau
128c0 6c 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74  lt match() funct
128d0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
128e0 6f 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63  on.raises an exc
128f0 65 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f  eption and is no
12900 74 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20  t really useful 
12910 66 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42  for anything..^B
12920 75 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61  ut extensions ca
12930 6e 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d  n override the m
12940 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  atch() function 
12950 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75  with more.helpfu
12960 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74  l logic.</p>..<t
12970 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
12980 65 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f  etween BETWEEN</
12990 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54  tcl>.<h3>The BET
129a0 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68  WEEN operator</h
129b0 33 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57  3>.<p>^(The BETW
129c0 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20  EEN operator is 
129d0 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61  logically equiva
129e0 6c 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f  lent to a pair o
129f0 66 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22  f comparisons.."
12a00 3c 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57  <i>x</i> <b>BETW
12a10 45 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e  EEN</b> <i>y</i>
12a20 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a   <b>AND</b> <i>z
12a30 3c 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61  </i>" is .equiva
12a40 6c 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f  lent to ."<i>x</
12a50 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69  i><b>&gt;=</b><i
12a60 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62  >y</i> <b>AND</b
12a70 3e 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74  > <i>x</i><b>&lt
12a80 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20  ;=</b><i>z</i>" 
12a90 65 78 63 65 70 74 0a 74 68 61 74 20 77 69 74 68  except.that with
12aa0 20 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69   BETWEEN, the <i
12ab0 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f  >x</i> expressio
12ac0 6e 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61  n is only evalua
12ad0 74 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65  ted once.)^.^The
12ae0 20 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74   precedence of t
12af0 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
12b00 74 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20  tor is the same 
12b10 61 73 20 74 68 65 20 70 72 65 63 65 64 65 6e 63  as the precedenc
12b20 65 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c  e.as operators <
12b30 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e  b>==</b> and <b>
12b40 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49  !=</b> and <b>LI
12b50 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70  KE</b> and group
12b60 73 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  s left to right.
12b70 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
12b80 6e 74 20 63 61 73 65 20 7b 43 41 53 45 20 65 78  nt case {CASE ex
12b90 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  pression}</tcl>.
12ba0 3c 68 33 3e 54 68 65 20 43 41 53 45 20 65 78 70  <h3>The CASE exp
12bb0 72 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e  ression</h3>.<p>
12bc0 41 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  A CASE expressio
12bd0 6e 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20  n serves a role 
12be0 73 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48  similar to IF-TH
12bf0 45 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72  EN-ELSE in other
12c00 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e  .programming lan
12c10 67 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68  guages.  ..<p>Th
12c20 65 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65  e optional expre
12c30 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72  ssion that occur
12c40 73 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  s in between the
12c50 20 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e   CASE keyword an
12c60 64 20 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e  d the.first WHEN
12c70 20 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c   keyword is call
12c80 65 64 20 74 68 65 20 22 62 61 73 65 22 20 65 78  ed the "base" ex
12c90 70 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65  pression. ^There
12ca0 20 61 72 65 20 74 77 6f 20 62 61 73 69 63 20 66   are two basic f
12cb0 6f 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45  orms.of the CASE
12cc0 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f   expression: tho
12cd0 73 65 20 77 69 74 68 20 61 20 62 61 73 65 20 65  se with a base e
12ce0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
12cf0 6f 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70  ose without...<p
12d00 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68  >^In a CASE with
12d10 6f 75 74 20 61 20 62 61 73 65 20 65 78 70 72 65  out a base expre
12d20 73 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e  ssion, each WHEN
12d30 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
12d40 76 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65  valuated.and the
12d50 20 72 65 73 75 6c 74 20 74 72 65 61 74 65 64 20   result treated 
12d60 61 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74  as a boolean, st
12d70 61 72 74 69 6e 67 20 77 69 74 68 20 74 68 65 20  arting with the 
12d80 6c 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e  leftmost and con
12d90 74 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72  tinuing.to the r
12da0 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c  ight. ^The resul
12db0 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  t of the CASE ex
12dc0 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
12dd0 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68  evaluation of th
12de0 65 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  e THEN.expressio
12df0 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  n that correspon
12e00 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ds to the first 
12e10 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
12e20 74 68 61 74 20 65 76 61 6c 75 61 74 65 73 20 74  that evaluates t
12e30 6f 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20  o.true. ^Or, if 
12e40 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
12e50 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61   expressions eva
12e60 6c 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74  luate to true, t
12e70 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61  he result of.eva
12e80 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45  luating the ELSE
12e90 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20   expression, if 
12ea0 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69  any. ^If there i
12eb0 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73  s no ELSE expres
12ec0 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66  sion and.none of
12ed0 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73   the WHEN expres
12ee0 73 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20  sions are true, 
12ef0 74 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c  then the overall
12f00 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
12f10 0a 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73  ..<p>^A NULL res
12f20 75 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ult is considere
12f30 64 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76  d untrue when ev
12f40 61 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65  aluating WHEN te
12f50 72 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43  rms...<p>^In a C
12f60 41 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20  ASE with a base 
12f70 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
12f80 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
12f90 69 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73  is evaluated jus
12fa0 74 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72  t.once and the r
12fb0 65 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65  esult is compare
12fc0 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 65 76  d against the ev
12fd0 61 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68  aluation of each
12fe0 20 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f   WHEN .expressio
12ff0 6e 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  n from left to r
13000 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c  ight. ^The resul
13010 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  t of the CASE ex
13020 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
13030 0a 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74  .evaluation of t
13040 68 65 20 54 48 45 4e 20 65 78 70 72 65 73 73 69  he THEN expressi
13050 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  on that correspo
13060 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nds to the first
13070 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   WHEN.expression
13080 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 63   for which the c
13090 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
130a0 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20  e. ^Or, if none 
130b0 6f 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72  of the WHEN.expr
130c0 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
130d0 20 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61   to a value equa
130e0 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78  l to the base ex
130f0 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65  pression, the re
13100 73 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69  sult.of evaluati
13110 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72  ng the ELSE expr
13120 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20  ession, if any. 
13130 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
13140 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
13150 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and.none of the 
13160 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
13170 20 70 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c   produce a resul
13180 74 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62  t equal to the b
13190 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a  ase expression,.
131a0 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75  the overall resu
131b0 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  lt is NULL...<p>
131c0 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20  ^When comparing 
131d0 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  a base expressio
131e0 6e 20 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e  n against a WHEN
131f0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65   expression, the
13200 20 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20   same.collating 
13210 73 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69  sequence, affini
13220 74 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e  ty, and NULL-han
13230 64 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c  dling rules appl
13240 79 20 61 73 20 69 66 20 74 68 65 0a 62 61 73 65  y as if the.base
13250 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
13260 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
13270 61 72 65 20 72 65 73 70 65 63 74 69 76 65 6c 79  are respectively
13280 20 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72   the left- and.r
13290 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e  ight-hand operan
132a0 64 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62  ds of an <big><b
132b0 3e 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65  >=</b></big> ope
132c0 72 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74  rator.</p> ^If t
132d0 68 65 20 62 61 73 65 20 0a 65 78 70 72 65 73 73  he base .express
132e0 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  ion is NULL then
132f0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
13300 68 65 20 43 41 53 45 20 69 73 20 61 6c 77 61 79  he CASE is alway
13310 73 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66  s the result .of
13320 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
13330 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
13340 69 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72  if it exists, or
13350 20 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73   NULL if it does
13360 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20   not...<p>^Both 
13370 66 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53  forms of the CAS
13380 45 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65  E expression use
13390 20 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d   lazy, or short-
133a0 63 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61  circuit, .evalua
133b0 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  tion...<p>^(The 
133c0 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20  only difference 
133d0 62 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c  between the foll
133e0 6f 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65  owing two CASE e
133f0 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68  xpressions is th
13400 61 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e  at .the <i>x</i>
13410 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
13420 76 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79  valuated exactly
13430 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72   once in the fir
13440 73 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a  st example but .
13450 6d 69 67 68 74 20 62 65 20 65 76 61 6c 75 61 74  might be evaluat
13460 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65  ed multiple time
13470 73 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a  s in the second:
13480 0a 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e  ..<ul><pre>.<li>
13490 43 41 53 45 20 78 20 57 48 45 4e 20 77 31 20 54  CASE x WHEN w1 T
134a0 48 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54  HEN r1 WHEN w2 T
134b0 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45  HEN r2 ELSE r3 E
134c0 4e 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e  ND.<li>CASE WHEN
134d0 20 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48   x=w1 THEN r1 WH
134e0 45 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20  EN x=w2 THEN r2 
134f0 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72  ELSE r3 END.</pr
13500 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c  e></ul>)^...<tcl
13510 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f  >hd_fragment in_
13520 6f 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d  op {IN operator}
13530 20 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f   {NOT IN operato
13540 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  r}</tcl>.<h3>The
13550 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f   IN and NOT IN o
13560 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70  perators</h3>.<p
13570 3e 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54  >^The IN and NOT
13580 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61   IN operators ta
13590 6b 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c  ke a single scal
135a0 61 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68  ar operand on th
135b0 65 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63  e.left and a vec
135c0 74 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74  tor operand on t
135d0 68 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20  he right.formed 
135e0 62 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c  by an explicit l
135f0 69 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d  ist of zero or m
13600 6f 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62  ore scalars or b
13610 79 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71  y a .single subq
13620 75 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20  uery..^When the 
13630 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66  right operand of
13640 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
13650 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
13660 75 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62  ubquery, the.sub
13670 71 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20  query must have 
13680 61 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20  a single result 
13690 63 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68  column..^When th
136a0 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  e right operand 
136b0 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c  is an empty set,
136c0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49   the result of I
136d0 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74  N is false and t
136e0 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54  he.result of NOT
136f0 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67   IN is true, reg
13700 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c  ardless of the l
13710 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20  eft operand and 
13720 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74  even if the.left
13730 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
13740 2e 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f  ..^(The result o
13750 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
13760 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65  N operator is de
13770 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
13780 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78  following.matrix
13790 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62  :..<center>.<tab
137a0 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  le border=1>.<tr
137b0 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61  >.<th>Left opera
137c0 6e 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c  nd <br>is NULL.<
137d0 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64  th>Right operand
137e0 20 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55   <br>contains NU
137f0 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65  LL.<th>Right ope
13800 72 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65  rand <br>is an e
13810 6d 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66  mpty set.<th>Lef
13820 74 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20  t operand found 
13830 3c 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74  <br>within right
13840 20 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73   operand.<th>Res
13850 75 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70  ult of <br>IN op
13860 65 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c  erator.<th>Resul
13870 74 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20  t of <br>NOT IN 
13880 6f 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74  operator.<tr>.<t
13890 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
138a0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
138b0 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
138c0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
138d0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
138e0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
138f0 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
13900 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13910 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20  ">true.<tr>.<td 
13920 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64  align="center">d
13930 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c  oes not matter.<
13940 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13950 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13960 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
13970 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13980 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13990 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61  ter">false.<td a
139a0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72  lign="center">tr
139b0 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  ue.<tr>.<td alig
139c0 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
139d0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
139e0 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
139f0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13a00 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
13a10 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
13a20 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13a30 3e 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d  >true.<td align=
13a40 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
13a50 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
13a60 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
13a70 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
13a80 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13a90 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
13aa0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
13ab0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13ac0 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  NULL.<td align="
13ad0 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72  center">NULL.<tr
13ae0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
13af0 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69  ter">yes.<td ali
13b00 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73  gn="center">does
13b10 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20   not matter.<td 
13b20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13b30 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13b40 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
13b50 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
13b60 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64  center">NULL.<td
13b70 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13b80 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  NULL.</table>.</
13b90 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e  center>)^..<p>^N
13ba0 6f 74 65 20 74 68 61 74 20 53 51 4c 69 74 65 20  ote that SQLite 
13bb0 61 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e  allows the paren
13bc0 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
13bd0 20 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f   scalar values o
13be0 6e 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  n.the right-hand
13bf0 20 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f   side of an IN o
13c00 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r NOT IN operato
13c10 72 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79  r to be an empty
13c20 20 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f   list but.most o
13c30 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
13c40 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  e database engin
13c50 65 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32  es and the SQL92
13c60 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72   standard requir
13c70 65 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f  e.the list to co
13c80 6e 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f  ntain at least o
13c90 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a  ne element.</p>.
13ca0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
13cb0 74 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20  t in_op {EXISTS 
13cc0 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45  operator} {NOT E
13cd0 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c  XISTS operator}<
13ce0 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58  /tcl>.<h3>The EX
13cf0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68  ISTS operator</h
13d00 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53  3>..<p>^The EXIS
13d10 54 53 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61  TS operator alwa
13d20 79 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  ys evaluates to 
13d30 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  one of the integ
13d40 65 72 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64  er values 0 .and
13d50 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e   1. ^If executin
13d60 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  g the SELECT sta
13d70 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64  tement specified
13d80 20 61 73 20 74 68 65 20 72 69 67 68 74 2d 68 61   as the right-ha
13d90 6e 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74  nd .operand of t
13da0 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
13db0 6f 72 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20  or would return 
13dc0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  one or more rows
13dd0 2c 20 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54  , then the.EXIST
13de0 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  S operator evalu
13df0 61 74 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65  ates to 1. ^If e
13e00 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c  xecuting the SEL
13e10 45 43 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e  ECT would return
13e20 0a 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c  .no rows at all,
13e30 20 74 68 65 6e 20 74 68 65 20 45 58 49 53 54 53   then the EXISTS
13e40 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
13e50 74 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e  tes to 0. ..<p>^
13e60 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
13e70 6c 75 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f  lumns in each ro
13e80 77 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  w returned by th
13e90 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
13ea0 6e 74 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20  nt.(if any) and 
13eb0 74 68 65 20 73 70 65 63 69 66 69 63 20 76 61 6c  the specific val
13ec0 75 65 73 20 72 65 74 75 72 6e 65 64 20 68 61 76  ues returned hav
13ed0 65 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74  e no effect on t
13ee0 68 65 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68  he results.of th
13ef0 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
13f00 72 2e 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61  r. ^In particula
13f10 72 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69  r, rows containi
13f20 6e 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  ng NULL values a
13f30 72 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61  re.not handled a
13f40 6e 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66  ny differently f
13f50 72 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74  rom rows without
13f60 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c   NULL values...<
13f70 68 33 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65  h3>Scalar Subque
13f80 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41  ries</h3>..<p>^A
13f90 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
13fa0 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ent enclosed in 
13fb0 70 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20  parentheses may 
13fc0 61 70 70 65 61 72 20 61 73 20 61 20 73 63 61 6c  appear as a scal
13fd0 61 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20  ar.quantity. ^A 
13fe0 5b 53 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73  [SELECT] used as
13ff0 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69   a scalar quanti
14000 74 79 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61  ty must return a
14010 20 72 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68   result set.with
14020 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
14030 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  . ^The result of
14040 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
14050 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  is the value of 
14060 74 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20  the.only column 
14070 69 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f 77  in the first row
14080 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
14090 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
140a0 74 2e 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43  t. ^If the SELEC
140b0 54 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74  T .yields more t
140c0 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72  han one result r
140d0 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74  ow, all rows aft
140e0 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72 65  er the first are
140f0 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68   ignored. ^If.th
14100 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20  e SELECT yields 
14110 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68  no rows, then th
14120 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65  e value of the e
14130 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c  xpression is NUL
14140 4c 2e 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f  L..^(The LIMIT o
14150 66 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75  f a scalar subqu
14160 65 72 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e  ery is always 1.
14170 0a 41 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54  .Any other LIMIT
14180 20 76 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20   value given in 
14190 74 68 65 20 53 51 4c 20 74 65 78 74 20 69 73 20  the SQL text is 
141a0 69 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e  ignored.)^..<p>^
141b0 41 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45  All types of [SE
141c0 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
141d0 20 69 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65   including aggre
141e0 67 61 74 65 20 61 6e 64 20 63 6f 6d 70 6f 75 6e  gate and compoun
141f0 64 20 53 45 4c 45 43 54 0a 71 75 65 72 69 65 73  d SELECT.queries
14200 20 28 71 75 65 72 69 65 73 20 77 69 74 68 20 6b   (queries with k
14210 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49  eywords like UNI
14220 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20 61 72  ON or EXCEPT) ar
14230 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63 61  e allowed as sca
14240 6c 61 72 0a 73 75 62 71 75 65 72 69 65 73 2e 0a  lar.subqueries..
14250 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d  .<h3>Table Colum
14260 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70  n Names</h3>..<p
14270 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  >^A column name 
14280 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68  can be any of th
14290 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20  e names defined 
142a0 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  in the [CREATE T
142b0 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
142c0 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  or one of the fo
142d0 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20  llowing special 
142e0 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62  identifiers: "<b
142f0 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62  >ROWID</b>",."<b
14300 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c  >OID</b>", or "<
14310 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a  b>_ROWID_</b>"..
14320 5e 54 68 65 73 65 20 73 70 65 63 69 61 6c 20 69  ^These special i
14330 64 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20 64  dentifiers all d
14340 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71  escribe the.uniq
14350 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28  ue integer key (
14360 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73  the [rowid]) ass
14370 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 76 65  ociated with eve
14380 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79  ry .row of every
14390 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65   table..^The spe
143a0 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
143b0 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74   only refer to t
143c0 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68  he row key if th
143d0 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
143e0 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20  .statement does 
143f0 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65 61  not define a rea
14400 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68  l column with th
14410 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68  e same name..^Th
14420 65 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75  e rowid can be u
14430 73 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72  sed anywhere a r
14440 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61  egular.column ca
14450 6e 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  n be used.</p>..
14460 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73  <p>^A [SELECT] s
14470 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73  tatement used as
14480 20 65 69 74 68 65 72 20 61 20 73 63 61 6c 61 72   either a scalar
14490 20 73 75 62 71 75 65 72 79 20 6f 72 20 61 73 20   subquery or as 
144a0 74 68 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20  the .right-hand 
144b0 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
144c0 2c 20 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53  , NOT IN or EXIS
144d0 54 53 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  TS expression ma
144e0 79 20 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72  y contain .refer
144f0 65 6e 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73  ences to columns
14500 20 69 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75   in the outer qu
14510 65 72 79 2e 20 53 75 63 68 20 61 20 73 75 62 71  ery. Such a subq
14520 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73  uery is known as
14530 0a 61 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75  .a correlated su
14540 62 71 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65  bquery. ^A corre
14550 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69  lated subquery i
14560 73 20 72 65 65 76 61 6c 75 61 74 65 64 20 65 61  s reevaluated ea
14570 63 68 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75  ch time.its resu
14580 6c 74 20 69 73 20 72 65 71 75 69 72 65 64 2e 20  lt is required. 
14590 5e 41 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64  ^An uncorrelated
145a0 20 73 75 62 71 75 65 72 79 20 69 73 20 65 76 61   subquery is eva
145b0 6c 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65  luated only once
145c0 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20  .and the result 
145d0 72 65 75 73 65 64 20 61 73 20 6e 65 63 65 73 73  reused as necess
145e0 61 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ary...<tcl>hd_fr
145f0 61 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20  agment castexpr 
14600 7b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  {CAST expression
14610 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54  }</tcl>.<h3>CAST
14620 20 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   expressions</h3
14630 3e 0a 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70  >..<p>A CAST exp
14640 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
14650 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76  to convert the v
14660 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72  alue of &lt;expr
14670 26 67 74 3b 20 74 6f 20 0a 61 20 64 69 66 66 65  &gt; to .a diffe
14680 72 65 6e 74 20 5b 73 74 6f 72 61 67 65 20 63 6c  rent [storage cl
14690 61 73 73 5d 20 69 6e 20 61 20 73 69 6d 69 6c 61  ass] in a simila
146a0 72 20 77 61 79 20 74 6f 20 74 68 65 20 63 6f 6e  r way to the con
146b0 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61 6b  version that tak
146c0 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61 20  es.place when a 
146d0 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79  [column affinity
146e0 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20  ] is applied to 
146f0 61 20 76 61 6c 75 65 2e 20 5e 41 70 70 6c 69 63  a value. ^Applic
14700 61 74 69 6f 6e 20 6f 66 20 61 20 43 41 53 54 0a  ation of a CAST.
14710 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 64 69  expression is di
14720 66 66 65 72 65 6e 74 20 74 6f 20 61 70 70 6c 69  fferent to appli
14730 63 61 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75  cation of a colu
14740 6d 6e 20 61 66 66 69 6e 69 74 79 2c 20 61 73 0a  mn affinity, as.
14750 77 69 74 68 20 61 20 43 41 53 54 20 65 78 70 72  with a CAST expr
14760 65 73 73 69 6f 6e 20 74 68 65 20 73 74 6f 72 61  ession the stora
14770 67 65 20 63 6c 61 73 73 20 63 6f 6e 76 65 72 73  ge class convers
14780 69 6f 6e 20 69 73 20 66 6f 72 63 65 64 20 65 76  ion is forced ev
14790 65 6e 20 0a 69 66 20 69 74 20 69 73 20 6c 6f 73  en .if it is los
147a0 73 79 20 61 6e 64 20 69 72 72 72 65 76 65 72 73  sy and irrrevers
147b0 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ible...<p>^If th
147c0 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65  e value of &lt;e
147d0 78 70 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c  xpr&gt; is NULL,
147e0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
147f0 20 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70   of the CAST.exp
14800 72 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20  ression is also 
14810 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65  NULL. ^Otherwise
14820 2c 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  , the storage cl
14830 61 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ass of the resul
14840 74 20 76 61 6c 75 65 0a 69 73 20 64 65 74 65 72  t value.is deter
14850 6d 69 6e 65 64 20 62 79 20 61 70 70 6c 79 69 6e  mined by applyin
14860 67 20 74 68 65 20 5b 72 75 6c 65 73 20 66 6f 72  g the [rules for
14870 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 63 6f 6c   determining col
14880 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 74 6f  umn affinity] to
14890 0a 74 68 65 20 26 6c 74 3b 74 79 70 65 2d 6e 61  .the &lt;type-na
148a0 6d 65 26 67 74 3b 20 73 70 65 63 69 66 69 65 64  me&gt; specified
148b0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
148c0 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  CAST expression.
148d0 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
148e0 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20 41  1>.<tr>.  <th> A
148f0 66 66 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b 74  ffinity of &lt;t
14900 79 70 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c  ype-name&gt;.  <
14910 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50  th> Conversion P
14920 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20  rocessing.<tr>. 
14930 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74   <td> NONE .  <t
14940 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61  d> ^Casting a va
14950 6c 75 65 20 74 6f 20 61 20 26 6c 74 3b 74 79 70  lue to a &lt;typ
14960 65 2d 6e 61 6d 65 26 67 74 3b 20 77 69 74 68 20  e-name&gt; with 
14970 6e 6f 20 61 66 66 69 6e 69 74 79 20 63 61 75 73  no affinity caus
14980 65 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a  es the value to.
14990 20 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69    be converted i
149a0 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61  nto a BLOB.  ^Ca
149b0 73 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20  sting to a BLOB 
149c0 63 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73  consists of firs
149d0 74 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20  t casting.  the 
149e0 76 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e  value to TEXT in
149f0 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20   the [encoding] 
14a00 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
14a10 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e  connection, then
14a20 0a 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  .  interpreting 
14a30 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79  the resulting by
14a40 74 65 20 73 65 71 75 65 6e 63 65 20 61 73 20 61  te sequence as a
14a50 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66   BLOB instead of
14a60 20 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a   as TEXT...<tr>.
14a70 20 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74    <td> TEXT.  <t
14a80 64 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c  d> ^To cast a BL
14a90 4f 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54  OB value to TEXT
14aa0 2c 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  , the sequence o
14ab0 66 20 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b  f bytes that mak
14ac0 65 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20  e up the.  BLOB 
14ad0 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
14ae0 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75  s text encoded u
14af0 73 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  sing the databas
14b00 65 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70  e encoding..  <p
14b10 3e 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e  >.   ^Casting an
14b20 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
14b30 20 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54   value into TEXT
14b40 20 72 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c   renders the val
14b50 75 65 20 61 73 20 69 66 20 76 69 61 20 0a 20 20  ue as if via .  
14b60 20 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69    [sqlite3_snpri
14b70 6e 74 66 28 29 5d 20 65 78 63 65 70 74 20 74 68  ntf()] except th
14b80 61 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67  at the resulting
14b90 20 54 45 58 54 20 75 73 65 73 20 74 68 65 20 5b   TEXT uses the [
14ba0 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20  encoding] of.   
14bb0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
14bc0 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a  nnection...<tr>.
14bd0 20 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74    <td> REAL.  <t
14be0 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  d> ^When casting
14bf0 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
14c00 20 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c   a REAL, the val
14c10 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76  ue is first conv
14c20 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20  erted to.       
14c30 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70   TEXT..       <p
14c40 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61  >^When casting a
14c50 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52   TEXT value to R
14c60 45 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74  EAL, the longest
14c70 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78   possible prefix
14c80 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20   of.        the 
14c90 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
14ca0 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
14cb0 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69   a real number i
14cc0 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  s extracted from
14cd0 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58  .        the TEX
14ce0 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  T value and the 
14cf0 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65  remainder ignore
14d00 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20  d. ^Any leading 
14d10 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20  spaces in the.  
14d20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65        TEXT value
14d30 20 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65   are ignored whe
14d40 6e 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f  n converging fro
14d50 6d 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20  m TEXT to REAL. 
14d60 5e 28 49 66 20 74 68 65 72 65 20 69 73 0a 20 20  ^(If there is.  
14d70 20 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20        no prefix 
14d80 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65  that can be inte
14d90 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61  rpreted as a rea
14da0 6c 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  l number, the re
14db0 73 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20  sult of the.    
14dc0 20 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69      conversion i
14dd0 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20  s 0.0.)^..<tr>. 
14de0 20 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20   <td> INTEGER.  
14df0 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69  <td> ^When casti
14e00 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20  ng a BLOB value 
14e10 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20  to INTEGER, the 
14e20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74 20 63  value is first c
14e30 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20  onverted to.    
14e40 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20      TEXT..      
14e50 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e   <p>^When castin
14e60 67 20 61 20 54 45 58 54 20 76 61 6c 75 65 20 74  g a TEXT value t
14e70 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c  o INTEGER, the l
14e80 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  ongest possible 
14e90 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20  prefix of.      
14ea0 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74    the value that
14eb0 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
14ec0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
14ed0 72 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72  r number is extr
14ee0 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20  acted from.     
14ef0 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75     the TEXT valu
14f00 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  e and the remain
14f10 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e  der ignored. ^An
14f20 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73  y leading spaces
14f30 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20   in the.        
14f40 54 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20  TEXT value when 
14f50 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20  converting from 
14f60 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20  TEXT to INTEGER 
14f70 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66  are ignored. ^If
14f80 20 74 68 65 72 65 0a 20 20 20 20 20 20 20 20 69   there.        i
14f90 73 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74  s no prefix that
14fa0 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
14fb0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
14fc0 72 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  r number, the re
14fd0 73 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20  sult.        of 
14fe0 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
14ff0 73 20 30 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e  s 0...      <p>^
15000 41 20 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c  A cast of a REAL
15010 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49   value into an I
15020 4e 54 45 47 45 52 20 77 69 6c 6c 20 74 72 75 6e  NTEGER will trun
15030 63 61 74 65 20 74 68 65 20 66 72 61 63 74 69 6f  cate the fractio
15040 6e 61 6c 0a 20 20 20 20 20 20 70 61 72 74 20 6f  nal.      part o
15050 66 20 74 68 65 20 52 45 41 4c 2e 20 20 5e 49 66  f the REAL.  ^If
15060 20 61 20 52 45 41 4c 20 69 73 20 74 6f 6f 20 6c   a REAL is too l
15070 61 72 67 65 20 74 6f 20 62 65 20 72 65 70 72 65  arge to be repre
15080 73 65 6e 74 65 64 20 61 73 20 61 6e 20 0a 20 20  sented as an .  
15090 20 20 20 20 49 4e 54 45 47 45 52 20 74 68 65 6e      INTEGER then
150a0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
150b0 68 65 20 63 61 73 74 20 69 73 20 74 68 65 20 6c  he cast is the l
150c0 61 72 67 65 73 74 20 6e 65 67 61 74 69 76 65 20  argest negative 
150d0 69 6e 74 65 67 65 72 3a 20 0a 20 20 20 20 20 20  integer: .      
150e0 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
150f0 35 38 30 38 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  5808...<tr>.  <t
15100 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64  d> NUMERIC.  <td
15110 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58  > ^Casting a TEX
15120 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20  T or BLOB value 
15130 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72  into NUMERIC fir
15140 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64  st does a forced
15150 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  .   conversion i
15160 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65  nto REAL but the
15170 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72  n further conver
15180 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  ts the result in
15190 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20  to INTEGER if.  
151a0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
151b0 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d   conversion from
151c0 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52   REAL to INTEGER
151d0 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64   is lossless and
151e0 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20   reversible..   
151f0 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
15200 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69   context in SQLi
15210 74 65 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d  te where the NUM
15220 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52  ERIC and INTEGER
15230 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20   [affinities].  
15240 20 62 65 68 61 76 65 20 64 69 66 66 65 72 65 6e   behave differen
15250 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73  tly..   <p> ^Cas
15260 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49  ting a REAL or I
15270 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20  NTEGER value to 
15280 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d  NUMERIC is a no-
15290 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65  op, even if a re
152a0 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c  al.   value coul
152b0 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  d be losslessly 
152c0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
152d0 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a  integer...</tr>.
152e0 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e  .</table>..<p>^N
152f0 6f 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73  ote that the res
15300 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67  ult from casting
15310 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61   any non-BLOB va
15320 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42  lue into a .BLOB
15330 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
15340 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79  from casting any
15350 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f   BLOB value into
15360 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75   a non-BLOB valu
15370 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  e.may be differe
15380 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  nt depending on 
15390 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61  whether the data
153a0 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20  base [encoding] 
153b0 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36  is UTF-8,.UTF-16
153c0 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e  be, or UTF-16le.
153d0 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
153e0 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20  ent booleanexpr 
153f0 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  {boolean express
15400 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42  ion}</tcl>.<h3>B
15410 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f  oolean Expressio
15420 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ns</h3>..<p>The 
15430 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61  SQL language fea
15440 74 75 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f  tures several co
15450 6e 74 65 78 74 73 20 77 68 65 72 65 20 61 6e 20  ntexts where an 
15460 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65  expression is .e
15470 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
15480 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65   result converte
15490 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28  d to a boolean (
154a0 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76  true or false) v
154b0 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74  alue. These.cont
154c0 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c  exts are:..  <ul
154d0 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57  >.    <li> the W
154e0 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61  HERE clause of a
154f0 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20   SELECT, UPDATE 
15500 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  or DELETE statem
15510 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68  ent,.    <li> th
15520 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  e ON or USING cl
15530 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69  ause of a join i
15540 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
15550 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
15560 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
15570 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
15580 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e  tement,.    <li>
15590 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
155a0 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67   of an SQL trigg
155b0 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e  er, and.    <li>
155c0 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
155d0 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73   or clauses of s
155e0 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65 73 73  ome CASE express
155f0 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c  ions..  </ul>..<
15600 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74  p>^(To convert t
15610 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e  he results of an
15620 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20   SQL expression 
15630 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  to a boolean val
15640 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74  ue, SQLite.first
15650 20 63 61 73 74 73 20 74 68 65 20 72 65 73 75 6c   casts the resul
15660 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76  t to a NUMERIC v
15670 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65  alue in the same
15680 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54   way as a .[CAST
15690 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20   expression]. A 
156a0 4e 55 4c 4c 20 6f 72 20 7a 65 72 6f 20 76 61 6c  NULL or zero val
156b0 75 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75  ue (integer valu
156c0 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75  e 0 or real valu
156d0 65 20 30 2e 30 29 20 69 73 0a 63 6f 6e 73 69 64  e 0.0) is.consid
156e0 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65  ered to be false
156f0 2e 20 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  . All other valu
15700 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
15710 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28  d true.)^..<p>^(
15720 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
15730 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e   values NULL, 0.
15740 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20  0, 0, 'english' 
15750 61 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20  and '0' are all 
15760 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65  considered.to be
15770 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75   false.)^ ^(Valu
15780 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20  es 1, 1.0, 0.1, 
15790 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69  -0.1 and '1engli
157a0 73 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72  sh' are consider
157b0 65 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29  ed to .be true.)
157c0 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73  ^..<h3>Functions
157d0 3c 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b  </h3>.<p>^Both [
157e0 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d  corefunc|simple]
157f0 20 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67   and [aggfunc|ag
15800 67 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f  gregate] functio
15810 6e 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ns are supported
15820 2e 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74  ..(For presentat
15830 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69  ion purposes, si
15840 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  mple functions a
15850 72 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69  re further subdi
15860 76 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65  vided into.[core
15870 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63  func | core func
15880 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65  tions] and [date
15890 66 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65  func | date-time
158a0 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41   functions].).^A
158b0 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
158c0 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
158d0 61 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  any expression. 
158e0 20 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f   ^Simple functio
158f0 6e 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75  ns return.a resu
15900 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62  lt immediately b
15910 61 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e  ased on their in
15920 70 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74  puts.  ^Aggregat
15930 65 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20  e functions.may 
15940 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20  only be used in 
15950 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
15960 6e 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  nt.  ^Aggregate 
15970 66 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74  functions comput
15980 65 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61  e.their result a
15990 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f  cross all rows o
159a0 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
159b0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
159c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15a00 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
15a10 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69  ion {Core Functi
15a20 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a  ons} corefunc {*
15a30 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66  corefunc}.proc f
15a40 75 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b  uncdef {syntax k
15a50 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a  eywords desc} {.
15a60 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d    hd_puts {<tr>}
15a70 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
15a80 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69  \s+} [string tri
15a90 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 3e  m $syntax] {<br>
15aa0 3c 2f 62 72 3e 7d 20 73 79 6e 74 61 78 0a 20 20  </br>} syntax.  
15ab0 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28  regsub -all {\((
15ac0 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74  [^*)]+)\)} $synt
15ad0 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d  ax {(<i>\1</i>)}
15ae0 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
15af0 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61   -all {,} $synta
15b00 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e  x {</i>,<i>} syn
15b10 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  tax.  regsub -al
15b20 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e  l {<i>\.\.\.</i>
15b30 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20  } $syntax {...} 
15b40 73 79 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73  syntax.  hd_puts
15b50 20 22 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74   "<td valign=\"t
15b60 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67  op\" align=\"rig
15b70 68 74 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30  ht\" width=\"120
15b80 5c 22 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e  \">".  if {[llen
15b90 67 74 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d  gth $keywords]==
15ba0 30 7d 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20  0} {.    regexp 
15bb0 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61  {[a-z_]+} $synta
15bc0 78 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72  x name.    hd_fr
15bd0 61 67 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e  agment $name *$n
15be0 61 6d 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53  ame "${name}() S
15bf0 51 4c 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d  QL function".  }
15c00 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20   else {.    set 
15c10 66 72 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78  fragname [lindex
15c20 20 24 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20   $keywords 0].  
15c30 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b    regsub -all {[
15c40 5e 61 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65  ^a-z]} $fragname
15c50 20 7b 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20   {} fragname.   
15c60 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72   hd_fragment $fr
15c70 61 67 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20  agname.    eval 
15c80 68 64 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72  hd_keywords [str
15c90 69 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d  ing map {\n { }}
15ca0 20 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a   $keywords].  }.
15cb0 20 20 68 64 5f 70 75 74 73 20 22 24 73 79 6e 74    hd_puts "$synt
15cc0 61 78 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75  ax</td>".  hd_pu
15cd0 74 73 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22  ts {<td valign="
15ce0 74 6f 70 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f  top">}.  hd_reso
15cf0 6c 76 65 20 24 64 65 73 63 0a 20 20 68 64 5f 70  lve $desc.  hd_p
15d00 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d  uts {</td></tr>}
15d10 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  .}.</tcl>..<p>Th
15d20 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73  e core functions
15d30 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65   shown below are
15d40 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65   available by de
15d50 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e  fault. .[datefun
15d60 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54  c | Date &amp; T
15d70 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61  ime functions] a
15d80 6e 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67  nd.[aggfunc | ag
15d90 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
15da0 73 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e 74 65  s] are documente
15db0 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41  d separately.  A
15dc0 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61  n.application ma
15dd0 79 20 64 65 66 69 6e 65 20 61 64 64 69 74 69 6f  y define additio
15de0 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72  nal.functions wr
15df0 69 74 74 65 6e 20 69 6e 20 43 20 61 6e 64 20 61  itten in C and a
15e00 64 64 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  dded to the data
15e10 62 61 73 65 20 65 6e 67 69 6e 65 20 75 73 69 6e  base engine usin
15e20 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  g.the [sqlite3_c
15e30 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
15e40 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62  ] API.</p>..<tab
15e50 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
15e60 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c  padding=10>.<tcl
15e70 3e 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58  >.funcdef {abs(X
15e80 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61  )} {} {.  ^The a
15e90 62 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  bs(X) function r
15ea0 65 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c  eturns the absol
15eb0 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ute value of the
15ec0 20 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d   numeric.  argum
15ed0 65 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20  ent X.  ^Abs(X) 
15ee0 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20  returns NULL if 
15ef0 58 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28  X is NULL. .  ^(
15f00 41 62 73 28 58 29 20 72 65 74 75 72 6e 20 30 2e  Abs(X) return 0.
15f10 30 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69  0 if X is a stri
15f20 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61  ng or blob.  tha
15f30 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  t cannot be conv
15f40 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72  erted to a numer
15f50 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66  ic value.)^  ^If
15f60 20 58 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74   X is the .  int
15f70 65 67 65 72 20 2d 39 32 32 33 33 37 32 30 33 36  eger -9223372036
15f80 38 35 34 37 37 35 38 30 37 20 74 68 65 6e 20 61  854775807 then a
15f90 62 73 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20  bs(X) throws an 
15fa0 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
15fb0 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74  .  error since t
15fc0 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76  here is no equiv
15fd0 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36  alent positive 6
15fe0 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65  4-bit two comple
15ff0 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66  ment value..}..f
16000 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28  uncdef {changes(
16010 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63  )} {} {.  ^The c
16020 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
16030 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
16040 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65  mber of database
16050 20 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20   rows that were 
16060 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73  changed.  or ins
16070 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  erted or deleted
16080 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
16090 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20  ently completed 
160a0 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a  INSERT, DELETE,.
160b0 20 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74    or UPDATE stat
160c0 65 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65  ement, exclusive
160d0 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69   of statements i
160e0 6e 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72  n lower-level tr
160f0 69 67 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63  iggers..  ^The c
16100 68 61 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e  hanges() SQL fun
16110 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
16120 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
16130 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
16140 5d 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69  ].  C/C++ functi
16150 6f 6e 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c  on and hence fol
16160 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20 72 75  lows the same ru
16170 6c 65 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67  les for counting
16180 20 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e   changes..}..fun
16190 63 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58  cdef {coalesce(X
161a0 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20  ,Y,...)} {} {.  
161b0 5e 54 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20  ^The coalesce() 
161c0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
161d0 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66   a copy of its f
161e0 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  irst non-NULL ar
161f0 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c  gument, or.  NUL
16200 4c 20 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e  L if all argumen
16210 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43  ts are NULL.  ^C
16220 6f 61 6c 65 73 63 65 28 29 20 6d 75 73 74 20 62  oalesce() must b
16230 65 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32 20  e at least .  2 
16240 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75  arguments..}..fu
16250 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29  ncdef {glob(X,Y)
16260 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67 6c  } {} {.  ^The gl
16270 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  ob(X,Y) function
16280 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74   is equivalent t
16290 6f 20 74 68 65 0a 20 20 65 78 70 72 65 73 73 69  o the.  expressi
162a0 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c  on "<b>Y GLOB X<
162b0 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68 61  /b>"..  Note tha
162c0 74 20 74 68 65 20 58 20 61 6e 64 20 59 20 61 72  t the X and Y ar
162d0 67 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76 65  guments are reve
162e0 72 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62  rsed in the glob
162f0 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  () function.  re
16300 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e  lative to the in
16310 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61  fix [GLOB] opera
16320 74 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65 20 5b  tor..  ^If the [
16330 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
16340 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72  unction()] inter
16350 66 61 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a  face is used to.
16360 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 67    override the g
16370 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lob(X,Y) functio
16380 6e 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e  n with an altern
16390 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61  ative implementa
163a0 74 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20  tion then.  the 
163b0 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20  [GLOB] operator 
163c0 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20  will invoke the 
163d0 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c  alternative impl
163e0 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66  ementation..}..f
163f0 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58  uncdef {ifnull(X
16400 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
16410 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69   ifnull() functi
16420 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
16430 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e  y of its first n
16440 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74  on-NULL argument
16450 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62  , or.  NULL if b
16460 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72  oth arguments ar
16470 65 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c  e NULL.  ^Ifnull
16480 28 29 20 6d 75 73 74 20 68 61 76 65 20 65 78 61  () must have exa
16490 63 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73  ctly 2 arguments
164a0 2e 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28  ..  ^The ifnull(
164b0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71  ) function is eq
164c0 75 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61  uivalent to [coa
164d0 6c 65 73 63 65 28 29 5d 20 77 69 74 68 20 74 77  lesce()] with tw
164e0 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a  o arguments..}..
164f0 66 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28 58  funcdef {instr(X
16500 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
16510 20 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e 63   instr(X,Y) func
16520 74 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20 66  tion finds the f
16530 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20  irst occurrence 
16540 6f 66 20 73 74 72 69 6e 67 20 58 20 77 69 74 68  of string X with
16550 69 6e 20 0a 20 20 73 74 72 69 6e 67 20 59 20 61  in .  string Y a
16560 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  nd returns the n
16570 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63  umber of prior c
16580 68 61 72 61 63 74 65 72 73 20 70 6c 75 73 20 31  haracters plus 1
16590 2c 20 6f 72 20 30 20 69 66 0a 20 20 58 20 69 73  , or 0 if.  X is
165a0 20 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20 77   nowhere found w
165b0 69 74 68 69 6e 20 59 2e 0a 20 20 5e 4f 72 2c 20  ithin Y..  ^Or, 
165c0 69 66 20 58 20 61 6e 64 20 59 20 61 72 65 20 62  if X and Y are b
165d0 6f 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20  oth BLOBs, then 
165e0 69 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75 72  instr(X,Y) retur
165f0 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68  ns one.  more th
16600 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62 79  an the number by
16610 74 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65  tes prior to the
16620 20 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63   first occurrenc
16630 65 20 6f 66 20 58 2c 20 6f 72 20 30 20 69 66 0a  e of X, or 0 if.
16640 20 20 58 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63    X does not occ
16650 63 75 72 20 61 6e 79 77 68 65 72 65 20 77 69 74  cur anywhere wit
16660 68 69 6e 20 59 2e 0a 20 20 5e 49 66 20 62 6f 74  hin Y..  ^If bot
16670 68 20 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e  h arguments X an
16680 64 20 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59  d Y to instr(X,Y
16690 29 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61  ) are non-NULL a
166a0 6e 64 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73  nd are not BLOBs
166b0 0a 20 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65  .  then both are
166c0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
166d0 73 74 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65  strings..  ^If e
166e0 69 74 68 65 72 20 58 20 6f 72 20 59 20 61 72 65  ither X or Y are
166f0 20 4e 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58   NULL in instr(X
16700 2c 59 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  ,Y) then the res
16710 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a  ult is NULL..}..
16720 66 75 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d  funcdef {hex(X)}
16730 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78   {} {.  ^The hex
16740 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65  () function inte
16750 72 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d  rprets its argum
16760 65 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e  ent as a BLOB an
16770 64 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74  d returns.  a st
16780 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
16790 65 20 75 70 70 65 72 2d 63 61 73 65 20 68 65 78  e upper-case hex
167a0 61 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69  adecimal renderi
167b0 6e 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ng of the conten
167c0 74 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62  t of.  that blob
167d0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61  ..}..funcdef {la
167e0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
167f0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
16800 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
16810 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
16820 72 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a  rns the [ROWID].
16830 20 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f    of the last ro
16840 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68  w insert from th
16850 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
16860 63 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f  ction which invo
16870 6b 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69  ked the.  functi
16880 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f  on..  ^The last_
16890 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53  insert_rowid() S
168a0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  QL function is a
168b0 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
168c0 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c  the.  [sqlite3_l
168d0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
168e0 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ()] C/C++ interf
168f0 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a  ace function..}.
16900 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68  .funcdef {length
16910 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72  (X)} {} {.  ^For
16920 20 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20   a string value 
16930 58 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  X, the length(X)
16940 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
16950 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
16960 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 28 6e  .  characters (n
16970 6f 74 20 62 79 74 65 73 29 20 69 6e 20 58 20 70  ot bytes) in X p
16980 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73  rior to the firs
16990 74 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e  t NUL character.
169a0 0a 20 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20  .  Since SQLite 
169b0 73 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e  strings do not n
169c0 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20  ormally contain 
169d0 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20  NUL characters, 
169e0 74 68 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20  the length(X).  
169f0 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73  function will us
16a00 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65  ually return the
16a10 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
16a20 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
16a30 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e  he string X..  ^
16a40 46 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65  For a blob value
16a50 20 58 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65   X, length(X) re
16a60 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
16a70 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
16a80 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69   blob..  ^If X i
16a90 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67  s NULL then leng
16aa0 74 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20  th(X) is NULL.. 
16ab0 20 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69   ^If X is numeri
16ac0 63 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29  c then length(X)
16ad0 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e   returns the len
16ae0 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a  gth of a string.
16af0 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e    representation
16b00 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
16b10 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b  f {like(X,Y) lik
16b20 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20  e(X,Y,Z)} {} {. 
16b30 20 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e   ^The like() fun
16b40 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
16b50 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20   implement the. 
16b60 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23   "<b>Y LIKE X &#
16b70 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b  91;ESCAPE Z&#93;
16b80 3c 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e  </b>" expression
16b90 2e 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74  . .  ^If the opt
16ba0 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
16bb0 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
16bc0 74 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28  then the.  like(
16bd0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  ) function is in
16be0 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65  voked with three
16bf0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74   arguments.  ^Ot
16c00 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20  herwise, it is. 
16c10 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77   invoked with tw
16c20 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79  o arguments only
16c30 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
16c40 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65  X and Y paramete
16c50 72 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65  rs are.  reverse
16c60 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20  d in the like() 
16c70 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76  function relativ
16c80 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b  e to the infix [
16c90 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a  LIKE] operator..
16ca0 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f    ^The [sqlite3_
16cb0 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
16cc0 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e  )] interface can
16cd0 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72   be used to over
16ce0 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28  ride the.  like(
16cf0 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  ) function and t
16d00 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68  hereby change th
16d10 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  e operation of t
16d20 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72  he.  [LIKE] oper
16d30 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72  ator.  When over
16d40 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28  riding the like(
16d50 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d  ) function, it m
16d60 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a  ay be important.
16d70 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f    to override bo
16d80 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74  th the two and t
16d90 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65  hree argument ve
16da0 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69  rsions of the li
16db0 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e  ke() .  function
16dc0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66  . Otherwise, dif
16dd0 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20  ferent code may 
16de0 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70  be called to imp
16df0 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49  lement the.  [LI
16e00 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70  KE] operator dep
16e10 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
16e20 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41  r or not an ESCA
16e30 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20  PE clause was . 
16e40 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 66   specified..}..f
16e50 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74  uncdef {load_ext
16e60 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65  ension(X) load_e
16e70 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b  xtension(X,Y)} {
16e80 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f  } {.  ^The load_
16e90 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66  extension(X,Y) f
16ea0 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20 53 51  unction loads SQ
16eb0 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 20  Lite extensions 
16ec0 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65  out of the share
16ed0 64 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65  d.  library file
16ee0 20 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74   named X using t
16ef0 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59  he entry point Y
16f00 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
16f10 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  f load_extension
16f20 28 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61  ().  is always a
16f30 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73   NULL.  ^If Y is
16f40 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68   omitted then th
16f50 65 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20  e default entry 
16f60 70 6f 69 6e 74 0a 20 20 6f 66 20 3c 62 3e 73 71  point.  of <b>sq
16f70 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f  lite3_extension_
16f80 69 6e 69 74 3c 2f 62 3e 20 69 73 20 75 73 65 64  init</b> is used
16f90 2e 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74  .  ^The load_ext
16fa0 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f  ension() functio
16fb0 6e 0a 20 20 72 61 69 73 65 73 20 61 6e 20 65 78  n.  raises an ex
16fc0 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65  ception if the e
16fd0 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74  xtension fails t
16fe0 6f 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61  o load or initia
16ff0 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a  lize correctly..
17000 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f  .  <p>^The load_
17010 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63  extension() func
17020 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69  tion will fail i
17030 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20  f the extension 
17040 61 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d  attempts to .  m
17050 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20  odify or delete 
17060 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
17070 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
17080 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65  uence.  ^The.  e
17090 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64  xtension can add
170a0 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f   new functions o
170b0 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
170c0 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f  ences, but canno
170d0 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65  t.  modify or de
170e0 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 66 75  lete existing fu
170f0 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61  nctions or colla
17100 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62  ting sequences b
17110 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66  ecause.  those f
17120 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20  unctions and/or 
17130 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
17140 63 65 73 20 6d 69 67 68 74 20 62 65 20 75 73 65  ces might be use
17150 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e  d elsewhere.  in
17160 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72   the currently r
17170 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65  unning SQL state
17180 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61  ment.  To load a
17190 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74  n extension that
171a0 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65  .  changes or de
171b0 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20  letes functions 
171c0 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
171d0 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a  uences, use the.
171e0 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f    [sqlite3_load_
171f0 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c  extension()] C-l
17200 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e  anguage API.</p>
17210 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77  .}..funcdef {low
17220 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  er(X)} {} {.  ^T
17230 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63  he lower(X) func
17240 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63  tion returns a c
17250 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20  opy of string X 
17260 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63  with all ASCII c
17270 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76  haracters.  conv
17280 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63  erted to lower c
17290 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ase.  ^The defau
172a0 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65  lt built-in lowe
172b0 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72  r() function wor
172c0 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63  ks.  for ASCII c
172d0 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20  haracters only. 
172e0 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76   To do case conv
172f0 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41  ersions on non-A
17300 53 43 49 49 0a 20 20 63 68 61 72 61 63 74 65 72  SCII.  character
17310 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20  s, load the ICU 
17320 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75  extension..}..fu
17330 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20  ncdef {ltrim(X) 
17340 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  ltrim(X,Y)} {} {
17350 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c  .  ^The ltrim(X,
17360 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
17370 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
17380 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
17390 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
173a0 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
173b0 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
173c0 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20  he left side of 
173d0 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  X..  ^If the Y a
173e0 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
173f0 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d  ed, ltrim(X) rem
17400 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d  oves spaces from
17410 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20   the left side. 
17420 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
17430 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d  f {max(X,Y,...)}
17440 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a   {*maxCoreFunc *
17450 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66  max {max() SQL f
17460 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
17470 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
17480 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e  t max() function
17490 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
174a0 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a  ument with the .
174b0 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c    maximum value,
174c0 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20   or return NULL 
174d0 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20  if any argument 
174e0 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65  is NULL. .  ^The
174f0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
17500 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73  max() function s
17510 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
17520 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
17530 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61  to right.  for a
17540 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
17550 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
17560 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
17570 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
17580 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20  ting.  function 
17590 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63  for all string c
175a0 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
175b0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67   none of the arg
175c0 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a  uments to max().
175d0 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61    define a colla
175e0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74  ting function, t
175f0 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63  hen the BINARY c
17600 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
17610 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74  n is used..  Not
17620 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c  e that <b>max()<
17630 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20  /b> is a simple 
17640 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20  function when.  
17650 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65  it has 2 or more
17660 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f   arguments but o
17670 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a 20 20  perates as an.  
17680 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20 61 67  [minAggFunc | ag
17690 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
176a0 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20  ] if given only 
176b0 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
176c0 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  t..}..funcdef {m
176d0 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d  in(X,Y,...)} {*m
176e0 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20  inCoreFunc *min 
176f0 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e 63 74  {min() SQL funct
17700 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d  ion}} {.  ^The m
17710 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69  ulti-argument mi
17720 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  n() function ret
17730 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e  urns the argumen
17740 74 20 77 69 74 68 20 74 68 65 0a 20 20 6d 69 6e  t with the.  min
17750 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54  imum value..  ^T
17760 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
17770 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e  t min() function
17780 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72   searches its ar
17790 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66  guments from lef
177a0 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72  t to right.  for
177b0 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61   an argument tha
177c0 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  t defines a coll
177d0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61  ating function a
177e0 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c  nd uses that col
177f0 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f  lating.  functio
17800 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
17810 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
17820 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61  If none of the a
17830 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28  rguments to min(
17840 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c  ).  define a col
17850 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c  lating function,
17860 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59   then the BINARY
17870 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
17880 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e  ion is used..  N
17890 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28  ote that <b>min(
178a0 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
178b0 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
178c0 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
178d0 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
178e0 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 20   operates as an 
178f0 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c  .  [maxAggFunc |
17900 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
17910 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20  ion] if given.  
17920 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72  only a single ar
17930 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64  gument..}..funcd
17940 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d  ef {nullif(X,Y)}
17950 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c   {} {.  ^The nul
17960 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lif(X,Y) functio
17970 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20 66 69  n returns its fi
17980 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20  rst argument if 
17990 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72  the arguments ar
179a0 65 0a 20 20 64 69 66 66 65 72 65 6e 74 20 61 6e  e.  different an
179b0 64 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 61 72  d NULL if the ar
179c0 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20  guments are the 
179d0 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c  same.  ^The null
179e0 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  if(X,Y) function
179f0 0a 20 20 73 65 61 72 63 68 65 73 20 69 74 73 20  .  searches its 
17a00 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c  arguments from l
17a10 65 66 74 20 74 6f 20 72 69 67 68 74 20 66 6f 72  eft to right for
17a20 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61   an argument tha
17a30 74 20 64 65 66 69 6e 65 73 20 61 0a 20 20 63 6f  t defines a.  co
17a40 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
17a50 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63   and uses that c
17a60 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
17a70 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
17a80 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  .  comparisons. 
17a90 20 5e 49 66 20 6e 65 69 74 68 65 72 20 61 72 67   ^If neither arg
17aa0 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28  ument to nullif(
17ab0 29 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  ) defines a coll
17ac0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20  ating function. 
17ad0 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59   then the BINARY
17ae0 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e   is used..}..fun
17af0 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20  cdef {quote(X)} 
17b00 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74  {} {.  ^The quot
17b10 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  e(X) function re
17b20 74 75 72 6e 73 20 74 68 65 20 74 65 78 74 20 6f  turns the text o
17b30 66 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  f an SQL literal
17b40 20 77 68 69 63 68 0a 20 20 69 73 20 74 68 65 20   which.  is the 
17b50 76 61 6c 75 65 20 6f 66 20 69 74 73 20 61 72 67  value of its arg
17b60 75 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66  ument suitable f
17b70 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74  or inclusion int
17b80 6f 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  o an SQL stateme
17b90 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 61  nt..  ^Strings a
17ba0 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79  re surrounded by
17bb0 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77   single-quotes w
17bc0 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69  ith escapes on i
17bd0 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 20  nterior quotes. 
17be0 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c   as needed.  ^BL
17bf0 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64 20  OBs are encoded 
17c00 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6c  as hexadecimal l
17c10 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74 72 69  iterals..  ^Stri
17c20 6e 67 73 20 77 69 74 68 20 65 6d 62 65 64 64 65  ngs with embedde
17c30 64 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73  d NUL characters
17c40 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 70 72 65   cannot be repre
17c50 73 65 6e 74 65 64 20 61 73 20 73 74 72 69 6e 67  sented as string
17c60 0a 20 20 6c 69 74 65 72 61 6c 73 20 69 6e 20 53  .  literals in S
17c70 51 4c 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65  QL and hence the
17c80 20 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e 67   returned string
17c90 20 6c 69 74 65 72 61 6c 20 69 73 20 74 72 75 6e   literal is trun
17ca0 63 61 74 65 64 20 70 72 69 6f 72 0a 20 20 74 6f  cated prior.  to
17cb0 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c 2e 0a   the first NUL..
17cc0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64  }..funcdef {rand
17cd0 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  om()} {} {.  ^Th
17ce0 65 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74  e random() funct
17cf0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 70 73  ion returns a ps
17d00 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65  eudo-random inte
17d10 67 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d 39  ger.  between -9
17d20 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
17d30 30 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30  08 and +92233720
17d40 33 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a  36854775807..}..
17d50 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62  funcdef {randomb
17d60 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e  lob(N)} {} {.  ^
17d70 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e  The randomblob(N
17d80 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
17d90 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62  n an N-byte blob
17da0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65 75   containing pseu
17db0 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65  do-random.  byte
17dc0 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65 73 73  s. ^If N is less
17dd0 20 74 68 61 6e 20 31 20 74 68 65 6e 20 61 20 31   than 1 then a 1
17de0 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f  -byte random blo
17df0 62 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a  b is returned...
17e00 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c    <p>Hint:  appl
17e10 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e  ications can gen
17e20 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75  erate globally u
17e30 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72  nique identifier
17e40 73 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20 66  s.  using this f
17e50 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65 72  unction together
17e60 20 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61 6e   with [hex()] an
17e70 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d  d/or.  [lower()]
17e80 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a   like this:</p>.
17e90 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  .  <blockquote>.
17ea0 20 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62    hex(randomblob
17eb0 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20  (16))<br></br>. 
17ec0 20 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f   lower(hex(rando
17ed0 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f  mblob(16))).  </
17ee0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66  blockquote>.}..f
17ef0 75 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65 28  uncdef {replace(
17f00 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e  X,Y,Z)} {} {.  ^
17f10 54 68 65 20 72 65 70 6c 61 63 65 28 58 2c 59 2c  The replace(X,Y,
17f20 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Z) function retu
17f30 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
17f40 6d 65 64 20 62 79 20 73 75 62 73 74 69 74 75 74  med by substitut
17f50 69 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a 20 66  ing.  string Z f
17f60 6f 72 20 65 76 65 72 79 20 6f 63 63 75 72 72 65  or every occurre
17f70 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20  nce of string Y 
17f80 69 6e 20 73 74 72 69 6e 67 20 58 2e 20 20 5e 54  in string X.  ^T
17f90 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f  he [BINARY].  co
17fa0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
17fb0 20 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f 6d   is used for com
17fc0 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59  parisons.  ^If Y
17fd0 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20 73   is an empty.  s
17fe0 74 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75 72  tring then retur
17ff0 6e 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 20 20  n X unchanged.  
18000 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69  ^If Z is not ini
18010 74 69 61 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e  tially.  a strin
18020 67 2c 20 69 74 20 69 73 20 63 61 73 74 20 74 6f  g, it is cast to
18030 20 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20   a UTF-8 string 
18040 70 72 69 6f 72 20 74 6f 20 70 72 6f 63 65 73 73  prior to process
18050 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ing..}..funcdef 
18060 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64 28  {round(X) round(
18070 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
18080 65 20 72 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e  e round(X,Y) fun
18090 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
180a0 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20  floating-point. 
180b0 20 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65 64   value X rounded
180c0 20 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f 20   to Y digits to 
180d0 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65  the right of the
180e0 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a   decimal point..
180f0 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
18100 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
18110 20 69 74 20 69 73 20 61 73 73 75 6d 65 64 20 74   it is assumed t
18120 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63 64  o be 0..}..funcd
18130 65 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74 72  ef {rtrim(X) rtr
18140 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  im(X,Y)} {} {.  
18150 5e 54 68 65 20 72 74 72 69 6d 28 58 2c 59 29 20  ^The rtrim(X,Y) 
18160 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
18170 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
18180 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
18190 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61   and all.  chara
181a0 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61  cters that appea
181b0 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65 20  r in Y from the 
181c0 72 69 67 68 74 20 73 69 64 65 20 6f 66 20 58 2e  right side of X.
181d0 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
181e0 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
181f0 2c 20 72 74 72 69 6d 28 58 29 20 72 65 6d 6f 76  , rtrim(X) remov
18200 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74  es spaces from t
18210 68 65 20 72 69 67 68 74 0a 20 20 73 69 64 65 20  he right.  side 
18220 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
18230 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b 7d   {soundex(X)} {}
18240 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e 64 65   {.  ^The sounde
18250 78 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  x(X) function re
18260 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
18270 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 6e 64  hat is the sound
18280 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20 20 6f  ex encoding .  o
18290 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a  f the string X..
182a0 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20 22 3f    ^The string "?
182b0 30 30 30 22 20 69 73 20 72 65 74 75 72 6e 65 64  000" is returned
182c0 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
182d0 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74   is NULL or cont
182e0 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49 49 20  ains.  no ASCII 
182f0 61 6c 70 68 61 62 65 74 69 63 20 63 68 61 72 61  alphabetic chara
18300 63 74 65 72 73 2e 0a 20 20 5e 28 54 68 69 73 20  cters..  ^(This 
18310 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74  function is omit
18320 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20  ted from SQLite 
18330 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49 74  by default..  It
18340 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62   is only availab
18350 6c 65 20 69 66 20 74 68 65 20 5b 53 51 4c 49 54  le if the [SQLIT
18360 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d 70 69  E_SOUNDEX] compi
18370 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20  le-time option. 
18380 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51   is used when SQ
18390 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e 29 5e  Lite is built.)^
183a0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c  .}..funcdef {sql
183b0 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
183c0 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20  n_get(N)} {} {. 
183d0 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d   ^The sqlite_com
183e0 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29  pileoption_get()
183f0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
18400 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
18410 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33  d the.  [sqlite3
18420 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67  _compileoption_g
18430 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63  et()] C/C++ func
18440 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20 72 6f  tion..  ^This ro
18450 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68  utine returns th
18460 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d 74  e N-th compile-t
18470 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20  ime option used 
18480 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 0a  to build SQLite.
18490 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e 20 69    or NULL if N i
184a0 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 20  s out of range. 
184b0 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b 63   See also the [c
184c0 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70  ompile_options p
184d0 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64  ragma]..}..funcd
184e0 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69  ef {sqlite_compi
184f0 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29  leoption_used(X)
18500 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
18510 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
18520 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c 20 66 75  on_used() SQL fu
18530 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
18540 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20  per around the. 
18550 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c   [sqlite3_compil
18560 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d 20  eoption_used()] 
18570 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a  C/C++ function..
18580 20 20 5e 57 68 65 6e 20 74 68 65 20 61 72 67 75    ^When the argu
18590 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c 69 74 65  ment X to sqlite
185a0 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
185b0 73 65 64 28 58 29 20 69 73 20 61 20 73 74 72 69  sed(X) is a stri
185c0 6e 67 20 77 68 69 63 68 0a 20 20 69 73 20 74 68  ng which.  is th
185d0 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6d 70  e name of a comp
185e0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c  ile-time option,
185f0 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65   this routine re
18600 74 75 72 6e 73 20 74 72 75 65 20 28 31 29 20 6f  turns true (1) o
18610 72 0a 20 20 66 61 6c 73 65 20 28 30 29 20 64 65  r.  false (0) de
18620 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
18630 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 6f  er or not that o
18640 70 74 69 6f 6e 20 77 61 73 20 75 73 65 64 20 64  ption was used d
18650 75 72 69 6e 67 20 74 68 65 0a 20 20 62 75 69 6c  uring the.  buil
18660 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  d..}..funcdef {s
18670 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
18680 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
18690 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
186a0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
186b0 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  ns a string that
186c0 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 0a   identifies the.
186d0 20 20 73 70 65 63 69 66 69 63 20 76 65 72 73 69    specific versi
186e0 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  on of the source
186f0 20 63 6f 64 65 20 74 68 61 74 20 77 61 73 20 75   code that was u
18700 73 65 64 20 74 6f 20 62 75 69 6c 64 20 74 68 65  sed to build the
18710 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61 72   SQLite.  librar
18720 79 2e 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20  y.  ^The string 
18730 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
18740 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 62  te_source_id() b
18750 65 67 69 6e 73 20 77 69 74 68 0a 20 20 74 68 65  egins with.  the
18760 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 74   date and time t
18770 68 61 74 20 74 68 65 20 73 6f 75 72 63 65 20 63  hat the source c
18780 6f 64 65 20 77 61 73 20 63 68 65 63 6b 65 64 20  ode was checked 
18790 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c 6c 6f 77  in and is follow
187a0 73 20 62 79 0a 20 20 61 6e 20 53 48 41 31 20 68  s by.  an SHA1 h
187b0 61 73 68 20 74 68 61 74 20 75 6e 69 71 75 65 6c  ash that uniquel
187c0 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  y identifies the
187d0 20 73 6f 75 72 63 65 20 74 72 65 65 2e 20 20 5e   source tree.  ^
187e0 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
187f0 0a 20 20 61 6e 20 53 51 4c 20 77 72 61 70 70 65  .  an SQL wrappe
18800 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
18810 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29  lite3_sourceid()
18820 5d 20 43 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d  ] C interface..}
18830 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74  ..funcdef {sqlit
18840 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b 7d 20  e_version()} {} 
18850 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
18860 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74 69  version() functi
18870 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 76  on returns the v
18880 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66 6f  ersion string fo
18890 72 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c  r the SQLite.  l
188a0 69 62 72 61 72 79 20 74 68 61 74 20 69 73 20 72  ibrary that is r
188b0 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73 20 66  unning.  ^This f
188c0 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20 53 51  unction is an SQ
188d0 4c 0a 20 20 77 72 61 70 70 65 72 20 61 72 6f 75  L.  wrapper arou
188e0 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  nd the [sqlite3_
188f0 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d 20 43 2d  libversion()] C-
18900 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
18910 6e 63 64 65 66 20 7b 73 75 62 73 74 72 28 58 2c  ncdef {substr(X,
18920 59 2c 5a 29 20 73 75 62 73 74 72 28 58 2c 59 29  Y,Z) substr(X,Y)
18930 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75  } {} {.  ^The su
18940 62 73 74 72 28 58 2c 59 2c 5a 29 20 66 75 6e 63  bstr(X,Y,Z) func
18950 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
18960 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75  ubstring of inpu
18970 74 20 73 74 72 69 6e 67 20 58 20 74 68 61 74 20  t string X that 
18980 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20 74 68  begins.  with th
18990 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72  e Y-th character
189a0 20 61 6e 64 20 77 68 69 63 68 20 69 73 20 5a 20   and which is Z 
189b0 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
189c0 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d 69 74  .  ^If Z is omit
189d0 74 65 64 20 74 68 65 6e 20 73 75 62 73 74 72 28  ted then substr(
189e0 58 2c 59 29 20 72 65 74 75 72 6e 73 20 61 6c 6c  X,Y) returns all
189f0 20 63 68 61 72 61 63 74 65 72 73 20 74 68 72 6f   characters thro
18a00 75 67 68 20 74 68 65 20 65 6e 64 0a 20 20 6f 66  ugh the end.  of
18a10 20 74 68 65 20 73 74 72 69 6e 67 20 58 20 62 65   the string X be
18a20 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 74 68 65  ginning with the
18a30 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20 6c 65   Y-th..  ^The le
18a40 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63 74 65  ft-most characte
18a50 72 20 6f 66 20 58 20 69 73 20 6e 75 6d 62 65 72  r of X is number
18a60 20 31 2e 20 20 5e 49 66 20 59 20 69 73 20 6e 65   1.  ^If Y is ne
18a70 67 61 74 69 76 65 0a 20 20 74 68 65 6e 20 74 68  gative.  then th
18a80 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65  e first characte
18a90 72 20 6f 66 20 74 68 65 20 73 75 62 73 74 72 69  r of the substri
18aa0 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63  ng is found by c
18ab0 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65  ounting from the
18ac0 0a 20 20 72 69 67 68 74 20 72 61 74 68 65 72 20  .  right rather 
18ad0 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20 20  than the left.  
18ae0 5e 49 66 20 5a 20 69 73 20 6e 65 67 61 74 69 76  ^If Z is negativ
18af0 65 20 74 68 65 6e 0a 20 20 74 68 65 20 61 62 73  e then.  the abs
18b00 28 5a 29 20 63 68 61 72 61 63 74 65 72 73 20 70  (Z) characters p
18b10 72 65 63 65 64 69 6e 67 20 74 68 65 20 59 2d 74  receding the Y-t
18b20 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20  h character are 
18b30 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49 66 20  returned..  ^If 
18b40 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68  X is a string th
18b50 65 6e 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  en characters in
18b60 64 69 63 65 73 20 72 65 66 65 72 20 74 6f 20 61  dices refer to a
18b70 63 74 75 61 6c 20 55 54 46 2d 38 20 0a 20 20 63  ctual UTF-8 .  c
18b80 68 61 72 61 63 74 65 72 73 2e 20 20 5e 49 66 20  haracters.  ^If 
18b90 58 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65 6e  X is a BLOB then
18ba0 20 74 68 65 20 69 6e 64 69 63 65 73 20 72 65 66   the indices ref
18bb0 65 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a  er to bytes..}..
18bc0 66 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f 63  funcdef {total_c
18bd0 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20  hanges()} {} {. 
18be0 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68 61 6e   ^The total_chan
18bf0 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ges() function r
18c00 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
18c10 72 20 6f 66 20 72 6f 77 20 63 68 61 6e 67 65 73  r of row changes
18c20 0a 20 20 63 61 75 73 65 64 20 62 79 20 49 4e 53  .  caused by INS
18c30 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
18c40 45 4c 45 54 45 0a 20 20 73 74 61 74 65 6d 65 6e  ELETE.  statemen
18c50 74 73 20 73 69 6e 63 65 20 74 68 65 20 63 75 72  ts since the cur
18c60 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f  rent database co
18c70 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f 70 65  nnection was ope
18c80 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20 66 75 6e  ned..  ^This fun
18c90 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
18ca0 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
18cb0 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
18cc0 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20  nges()].  C/C++ 
18cd0 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
18ce0 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20 74  ncdef {trim(X) t
18cf0 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
18d00 20 5e 54 68 65 20 74 72 69 6d 28 58 2c 59 29 20   ^The trim(X,Y) 
18d10 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
18d20 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
18d30 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
18d40 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61   and all.  chara
18d50 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61  cters that appea
18d60 72 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f 74 68  r in Y from both
18d70 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20 5e 49   ends of X..  ^I
18d80 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74  f the Y argument
18d90 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 72 69   is omitted, tri
18da0 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61  m(X) removes spa
18db0 63 65 73 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e  ces from both en
18dc0 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  ds of X..}..func
18dd0 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29 7d 20  def {typeof(X)} 
18de0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79 70 65  {} {.  ^The type
18df0 6f 66 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  of(X) function r
18e00 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
18e10 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
18e20 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f 66  he [datatype] of
18e30 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  .  the expressio
18e40 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22 69 6e  n X: "null", "in
18e50 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c 20  teger", "real", 
18e60 22 74 65 78 74 22 2c 20 6f 72 20 22 62 6c 6f 62  "text", or "blob
18e70 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75  "..}..funcdef {u
18e80 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  pper(X)} {} {.  
18e90 5e 54 68 65 20 75 70 70 65 72 28 58 29 20 66 75  ^The upper(X) fu
18ea0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
18eb0 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20 73   copy of input s
18ec0 74 72 69 6e 67 20 58 20 69 6e 20 77 68 69 63 68  tring X in which
18ed0 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d 63 61   all .  lower-ca
18ee0 73 65 20 41 53 43 49 49 20 63 68 61 72 61 63 74  se ASCII charact
18ef0 65 72 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65  ers are converte
18f00 64 20 74 6f 20 74 68 65 69 72 20 75 70 70 65 72  d to their upper
18f10 2d 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74  -case equivalent
18f20 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 7a 65  ..}..funcdef {ze
18f30 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a  roblob(N)} {} {.
18f40 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c 6f 62 28    ^The zeroblob(
18f50 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  N) function retu
18f60 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69  rns a BLOB consi
18f70 73 74 69 6e 67 20 6f 66 20 4e 20 62 79 74 65 73  sting of N bytes
18f80 20 6f 66 20 30 78 30 30 2e 0a 20 20 53 51 4c 69   of 0x00..  SQLi
18f90 74 65 20 6d 61 6e 61 67 65 73 20 74 68 65 73 65  te manages these
18fa0 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72 79 20   zeroblobs very 
18fb0 65 66 66 69 63 69 65 6e 74 6c 79 2e 20 20 5a 65  efficiently.  Ze
18fc0 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65 20 75  roblobs can be u
18fd0 73 65 64 20 74 6f 0a 20 20 72 65 73 65 72 76 65  sed to.  reserve
18fe0 20 73 70 61 63 65 20 66 6f 72 20 61 20 42 4c 4f   space for a BLO
18ff0 42 20 74 68 61 74 20 69 73 20 6c 61 74 65 72 20  B that is later 
19000 77 72 69 74 74 65 6e 20 75 73 69 6e 67 20 0a 20  written using . 
19010 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f   [sqlite3_blob_o
19020 70 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d 65 6e  pen() | incremen
19030 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 20  tal BLOB I/O].. 
19040 20 5e 54 68 69 73 20 53 51 4c 20 66 75 6e 63 74   ^This SQL funct
19050 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  ion is implement
19060 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71  ed using the [sq
19070 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72  lite3_result_zer
19080 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f 75 74 69  oblob()].  routi
19090 6e 65 20 66 72 6f 6d 20 74 68 65 20 43 2f 43 2b  ne from the C/C+
190a0 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 3c  + interface..}.<
190b0 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  /tcl>.</table>..
190c0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
190d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
190e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
190f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19110 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 61  ####.Section {Da
19120 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75 6e 63  te And Time Func
19130 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20  tions} datefunc 
19140 7b 2a 64 61 74 65 66 75 6e 63 7d 0a 68 64 5f 6b  {*datefunc}.hd_k
19150 65 79 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20  eywords {date() 
19160 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74  SQL function} {t
19170 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ime() SQL functi
19180 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  on}.hd_keywords 
19190 7b 64 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20  {datetime() SQL 
191a0 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61  function} {julia
191b0 6e 64 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74  nday() SQL funct
191c0 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73  ion}.hd_keywords
191d0 20 7b 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c   {strftime() SQL
191e0 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c   function}.</tcl
191f0 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75  >..<p>.SQLite su
19200 70 70 6f 72 74 73 20 66 69 76 65 20 64 61 74 65  pports five date
19210 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
19220 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  ons as follows:.
19230 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c  </p>..<p>.<ol>.<
19240 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f  li> ^(<b>date(</
19250 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
19260 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
19270 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
19280 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
19290 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e  > ^(<b>time(</b>
192a0 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
192b0 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
192c0 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
192d0 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
192e0 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f  ^(<b>datetime(</
192f0 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
19300 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
19310 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
19320 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
19330 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79  > ^(<b>julianday
19340 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
19350 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
19360 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
19370 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
19380 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69  <li> ^(<b>strfti
19390 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74  me(</b><i>format
193a0 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f  , timestring, mo
193b0 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72  difier, modifier
193c0 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62  , ...</i><b>)</b
193d0 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  >)^ </li>.</ol>.
193e0 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64  .<p>.^All five d
193f0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
19400 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69  ctions take a ti
19410 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20  me string as an 
19420 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20  argument. .^The 
19430 74 69 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66  time string is f
19440 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
19450 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72  or more modifier
19460 73 2e 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d  s. .^The strftim
19470 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73  e() function als
19480 6f 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74  o takes a format
19490 20 73 74 72 69 6e 67 20 61 73 20 69 74 73 20 66   string as its f
194a0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c  irst argument..<
194b0 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74  /p>..<p>.The dat
194c0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
194d0 69 6f 6e 73 20 75 73 65 20 61 20 73 75 62 73 65  ions use a subse
194e0 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  t of.[http://en.
194f0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
19500 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53  ki/ISO_8601 | IS
19510 30 2d 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64  0-8601] date and
19520 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e   time.formats..^
19530 54 68 65 20 64 61 74 65 28 29 20 66 75 6e 63 74  The date() funct
19540 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
19550 64 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72  date in this for
19560 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e  mat: YYYY-MM-DD.
19570 20 0a 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75   .^The time() fu
19580 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
19590 68 65 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d  he time as HH:MM
195a0 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74  :SS. .^The datet
195b0 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ime() function r
195c0 65 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d  eturns "YYYY-MM-
195d0 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e  DD HH:MM:SS". .^
195e0 28 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29  (The julianday()
195f0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
19600 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65  s the .[http://e
19610 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
19620 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20  wiki/Julian_day 
19630 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20  | Julian day] - 
19640 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61  the.number of da
19650 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e  ys since noon in
19660 20 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f   Greenwich on No
19670 76 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20  vember 24, 4714 
19680 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65  B.C. .([http://e
19690 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
196a0 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47  wiki/Proleptic_G
196b0 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61  regorian_calenda
196c0 72 20 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72  r | Proleptic Gr
196d0 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72  egorian calendar
196e0 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74  ]).)^.^The strft
196f0 69 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ime() routine re
19700 74 75 72 6e 73 20 74 68 65 20 64 61 74 65 20 66  turns the date f
19710 6f 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69  ormatted accordi
19720 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61  ng to .the forma
19730 74 20 73 74 72 69 6e 67 20 73 70 65 63 69 66 69  t string specifi
19740 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ed as the first 
19750 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66  argument..^The f
19760 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70  ormat string sup
19770 70 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63  ports the most c
19780 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69  ommon substituti
19790 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  ons found in the
197a0 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72   .[http://opengr
197b0 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75  oup.org/onlinepu
197c0 62 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68  bs/007908799/xsh
197d0 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c  /strftime.html |
197e0 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63   strftime() func
197f0 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73  tion].from the s
19800 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72  tandard C librar
19810 79 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73  y plus two new s
19820 75 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66  ubstitutions, %f
19830 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66   and %J..^(The f
19840 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f  ollowing is a co
19850 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76  mplete list of v
19860 61 6c 69 64 20 73 74 72 66 74 69 6d 65 28 29 20  alid strftime() 
19870 73 75 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c  substitutions:.<
19880 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
19890 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
198a0 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "0" cellpadding=
198b0 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  "0" cellspacing=
198c0 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64  "0">.<tr><td><td
198d0 20 77 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e   width="10"><td>
198e0 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20  </tr>..<tr><td> 
198f0 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %d <td><td> day 
19900 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72  of month: 00.<tr
19910 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64  ><td> %f <td><td
19920 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63  > fractional sec
19930 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72  onds: SS.SSS.<tr
19940 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64  ><td> %H <td><td
19950 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c  > hour: 00-24 .<
19960 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c  tr><td> %j <td><
19970 74 64 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a  td> day of year:
19980 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64   001-366.<tr><td
19990 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75  > %J <td><td> Ju
199a0 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a  lian day number.
199b0 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e  <tr><td> %m <td>
199c0 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31  <td> month: 01-1
199d0 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74  2.<tr><td> %M <t
199e0 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30  d><td> minute: 0
199f0 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73  0-59.<tr><td> %s
19a00 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64   <td><td> second
19a10 73 20 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d  s since 1970-01-
19a20 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c  01.<tr><td> %S <
19a30 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a  td><td> seconds:
19a40 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20   00-59.<tr><td> 
19a50 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %w <td><td> day 
19a60 6f 66 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68  of week 0-6 with
19a70 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c   Sunday==0.<tr><
19a80 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20  td> %W <td><td> 
19a90 77 65 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30  week of year: 00
19aa0 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20  -53.<tr><td> %Y 
19ab0 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30  <td><td> year: 0
19ac0 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64  000-9999.<tr><td
19ad0 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a  > %% <td><td> %.
19ae0 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
19af0 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28  quote>)^..<p>.^(
19b00 4e 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20  Notice that all 
19b10 6f 74 68 65 72 20 64 61 74 65 20 61 6e 64 20 74  other date and t
19b20 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61  ime functions ca
19b30 6e 20 62 65 20 65 78 70 72 65 73 73 65 64 0a 69  n be expressed.i
19b40 6e 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74  n terms of strft
19b50 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  ime():.</p>..<bl
19b60 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
19b70 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c   border="0" cell
19b80 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c  padding="0" cell
19b90 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72  spacing="0">.<tr
19ba0 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e  ><td><b>Function
19bb0 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33  </b><td width="3
19bc0 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61  0"><td><b>Equiva
19bd0 6c 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c  lent strftime()<
19be0 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64  /b>.<tr><td>   d
19bf0 61 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74  ate(...)      <t
19c00 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
19c10 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e  ('%Y-%m-%d', ...
19c20 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d  ).<tr><td>   tim
19c30 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e  e(...)      <td>
19c40 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
19c50 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a  %H:%M:%S', ...).
19c60 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74  <tr><td>   datet
19c70 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74  ime(...)  <td><t
19c80 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59  d>  strftime('%Y
19c90 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27  -%m-%d %H:%M:%S'
19ca0 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
19cb0 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29    julianday(...)
19cc0 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
19cd0 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c  ime('%J', ...).<
19ce0 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
19cf0 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65  uote>)^..<p>.The
19d00 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f   only reasons fo
19d10 72 20 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63  r providing func
19d20 74 69 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e  tions other than
19d30 20 73 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66   strftime() is.f
19d40 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61  or convenience a
19d50 6e 64 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63  nd for efficienc
19d60 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d  y..</p>..<h3>Tim
19d70 65 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a  e Strings</h3>..
19d80 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69  <p>^(A time stri
19d90 6e 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79  ng can be in any
19da0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
19db0 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a  g formats:</p>..
19dc0 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  <ol>.<li> <i>YYY
19dd0 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e  Y-MM-DD</i>.<li>
19de0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
19df0 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
19e00 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
19e10 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
19e20 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
19e30 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
19e40 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
19e50 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
19e60 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
19e70 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
19e80 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53  >T</b><i>HH:MM:S
19e90 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  S</i>.<li> <i>YY
19ea0 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54  YY-MM-DD</i><b>T
19eb0 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  </b><i>HH:MM:SS.
19ec0 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  SSS</i>.<li> <i>
19ed0 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  HH:MM</i>.<li> <
19ee0 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c  i>HH:MM:SS</i>.<
19ef0 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  li> <i>HH:MM:SS.
19f00 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e  SSS</i>.<li> <b>
19f10 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e  now</b>.<li> <i>
19f20 44 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c  DDDDDDDDDD</i>.<
19f30 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20  /ol>)^..<p>.^In 
19f40 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67  formats 5 throug
19f50 68 20 37 2c 20 74 68 65 20 22 54 22 20 69 73 20  h 7, the "T" is 
19f60 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63  a literal charac
19f70 74 65 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a  ter separating .
19f80 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 68 65  the date and the
19f90 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72   time, as requir
19fa0 65 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77  ed by .[http://w
19fb0 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f  ww.w3c.org/TR/NO
19fc0 54 45 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53  TE-datetime | IS
19fd0 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61  O-8601]. .^Forma
19fe0 74 73 20 38 20 74 68 72 6f 75 67 68 20 31 30 20  ts 8 through 10 
19ff0 74 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c  that specify onl
1a000 79 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20  y a time assume 
1a010 61 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d  a date of .2000-
1a020 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31  01-01. Format 11
1a030 2c 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f  , the string 'no
1a040 77 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64  w', is converted
1a050 20 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65   into the .curre
1a060 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  nt date and time
1a070 20 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f   as obtained fro
1a080 6d 20 74 68 65 20 78 43 75 72 72 65 6e 74 54 69  m the xCurrentTi
1a090 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65  me method.of the
1a0a0 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f   [sqlite3_vfs] o
1a0b0 62 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 5b  bject in use..^[
1a0c0 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1a0d0 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f  dia.org/wiki/Coo
1a0e0 72 64 69 6e 61 74 65 64 5f 55 6e 69 76 65 72 73  rdinated_Univers
1a0f0 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69 76 65 72  al_Time | Univer
1a100 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20  sal Coordinated 
1a110 54 69 6d 65 20 28 55 54 43 29 5d 20 69 73 20 75  Time (UTC)] is u
1a120 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74 20 31 32  sed. .^Format 12
1a130 20 69 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f   is the .[http:/
1a140 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1a150 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61  g/wiki/Julian_da
1a160 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e  y | Julian day n
1a170 75 6d 62 65 72 5d 0a 65 78 70 72 65 73 73 65 64  umber].expressed
1a180 20 61 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   as a floating p
1a190 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e  oint value..</p>
1a1a0 0a 0a 3c 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61  ..<p>.^(In forma
1a1b0 74 73 20 34 2c 20 37 2c 20 61 6e 64 20 31 30 2c  ts 4, 7, and 10,
1a1c0 20 74 68 65 20 66 72 61 63 74 69 6f 6e 61 6c 20   the fractional 
1a1d0 73 65 63 6f 6e 64 73 20 76 61 6c 75 65 20 53 53  seconds value SS
1a1e0 2e 53 53 53 20 63 61 6e 20 68 61 76 65 0a 6f 6e  .SSS can have.on
1a1f0 65 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74 73  e or more digits
1a200 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64   following the d
1a210 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 45  ecimal point.  E
1a220 78 61 63 74 6c 79 20 74 68 72 65 65 20 64 69 67  xactly three dig
1a230 69 74 73 20 61 72 65 0a 73 68 6f 77 6e 20 69 6e  its are.shown in
1a240 20 74 68 65 20 65 78 61 6d 70 6c 65 73 20 62 65   the examples be
1a250 63 61 75 73 65 20 6f 6e 6c 79 20 74 68 65 20 66  cause only the f
1a260 69 72 73 74 20 74 68 72 65 65 20 64 69 67 69 74  irst three digit
1a270 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e  s are significan
1a280 74 0a 74 6f 20 74 68 65 20 72 65 73 75 6c 74 2c  t.to the result,
1a290 20 62 75 74 20 74 68 65 20 69 6e 70 75 74 20 73   but the input s
1a2a0 74 72 69 6e 67 20 63 61 6e 20 68 61 76 65 20 66  tring can have f
1a2b0 65 77 65 72 20 6f 72 20 6d 6f 72 65 20 74 68 61  ewer or more tha
1a2c0 6e 20 74 68 72 65 65 20 64 69 67 69 74 73 0a 61  n three digits.a
1a2d0 6e 64 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65  nd the date/time
1a2e0 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
1a2f0 73 74 69 6c 6c 20 6f 70 65 72 61 74 65 20 63 6f  still operate co
1a300 72 72 65 63 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c  rrectly.)^.Simil
1a310 61 72 6c 79 2c 20 66 6f 72 6d 61 74 20 31 32 20  arly, format 12 
1a320 69 73 20 73 68 6f 77 6e 20 77 69 74 68 20 31 30  is shown with 10
1a330 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67   significant dig
1a340 69 74 73 2c 20 62 75 74 20 74 68 65 20 64 61 74  its, but the dat
1a350 65 2f 74 69 6d 65 0a 66 75 6e 63 74 69 6f 6e 73  e/time.functions
1a360 20 77 69 6c 6c 20 72 65 61 6c 6c 79 20 61 63 63   will really acc
1a370 65 70 74 20 61 73 20 6d 61 6e 79 20 6f 72 20 61  ept as many or a
1a380 73 20 66 65 77 20 64 69 67 69 74 73 20 61 73 20  s few digits as 
1a390 61 72 65 20 6e 65 63 65 73 73 61 72 79 20 74 6f  are necessary to
1a3a0 0a 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 4a  .represent the J
1a3b0 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  ulian day number
1a3c0 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69  ..</p>..<h3>Modi
1a3d0 66 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  fiers</h3>..<p>^
1a3e0 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20  The time string 
1a3f0 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  can be followed 
1a400 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  by zero or more 
1a410 6d 6f 64 69 66 69 65 72 73 20 74 68 61 74 20 0a  modifiers that .
1a420 61 6c 74 65 72 20 64 61 74 65 20 61 6e 64 2f 6f  alter date and/o
1a430 72 20 74 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f  r time. ^Each mo
1a440 64 69 66 69 65 72 0a 69 73 20 61 20 74 72 61 6e  difier.is a tran
1a450 73 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  sformation that 
1a460 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68  is applied to th
1a470 65 20 74 69 6d 65 20 76 61 6c 75 65 20 74 6f 20  e time value to 
1a480 69 74 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66  its left..^Modif
1a490 69 65 72 73 20 61 72 65 20 61 70 70 6c 69 65 64  iers are applied
1a4a0 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
1a4b0 67 68 74 3b 20 6f 72 64 65 72 20 69 73 20 69 6d  ght; order is im
1a4c0 70 6f 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61  portant..^(The a
1a4d0 76 61 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65  vailable modifie
1a4e0 72 73 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77  rs are as follow
1a4f0 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s.</p>..<ol>.<li
1a500 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20  > NNN days.<li> 
1a510 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e  NNN hours.<li> N
1a520 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20  NN minutes.<li> 
1a530 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73  NNN.NNNN seconds
1a540 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73  .<li> NNN months
1a550 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a  .<li> NNN years.
1a560 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f  <li> start of mo
1a570 6e 74 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  nth.<li> start o
1a580 66 20 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72  f year.<li> star
1a590 74 20 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65  t of day.<li> we
1a5a0 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69  ekday N.<li> uni
1a5b0 78 65 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61  xepoch.<li> loca
1a5c0 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a  ltime.<li> utc .
1a5d0 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  </ol>)^..<p>^The
1a5e0 20 66 69 72 73 74 20 73 69 78 20 6d 6f 64 69 66   first six modif
1a5f0 69 65 72 73 20 28 31 20 74 68 72 6f 75 67 68 20  iers (1 through 
1a600 36 29 20 0a 73 69 6d 70 6c 79 20 61 64 64 20 74  6) .simply add t
1a610 68 65 20 73 70 65 63 69 66 69 65 64 20 61 6d 6f  he specified amo
1a620 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 74  unt of time to t
1a630 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
1a640 20 0a 73 70 65 63 69 66 69 65 64 20 62 79 20 74   .specified by t
1a650 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d  he preceding tim
1a660 65 73 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69  estring and modi
1a670 66 69 65 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61  fiers..^Note tha
1a680 74 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d  t "&plusmn;NNN m
1a690 6f 6e 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20  onths" works by 
1a6a0 72 65 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72  rendering the or
1a6b0 69 67 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f  iginal date into
1a6c0 0a 74 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20  .the YYYY-MM-DD 
1a6d0 66 6f 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74  format, adding t
1a6e0 68 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74  he &plusmn;NNN t
1a6f0 6f 20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76  o the MM month v
1a700 61 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61  alue, then.norma
1a710 6c 69 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c  lizing the resul
1a720 74 2e 20 20 5e 54 68 75 73 2c 20 66 6f 72 20 65  t.  ^Thus, for e
1a730 78 61 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61  xample, the data
1a740 20 32 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69   2001-03-31 modi
1a750 66 69 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74  fied.by '+1 mont
1a760 68 27 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65  h' initially yie
1a770 6c 64 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20  lds 2001-04-31, 
1a780 62 75 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68  but April only h
1a790 61 73 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68  as 30 days.so th
1a7a0 65 20 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c  e date is normal
1a7b0 69 7a 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d  ized to 2001-05-
1a7c0 30 31 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72 20  01.  ^A similar 
1a7d0 65 66 66 65 63 74 20 6f 63 63 75 72 73 20 77 68  effect occurs wh
1a7e0 65 6e 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  en.the original 
1a7f0 64 61 74 65 20 69 73 20 46 65 62 72 75 61 72 79  date is February
1a800 20 32 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61   29 of a leapyea
1a810 72 20 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69  r and the modifi
1a820 65 72 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20  er is.&plusmn;N 
1a830 79 65 61 72 73 20 77 68 65 72 65 20 4e 20 69 73  years where N is
1a840 20 6e 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20   not a multiple 
1a850 6f 66 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70  of four.</p>..<p
1a860 3e 5e 54 68 65 20 22 73 74 61 72 74 20 6f 66 22  >^The "start of"
1a870 20 6d 6f 64 69 66 69 65 72 73 20 28 37 20 74 68   modifiers (7 th
1a880 72 6f 75 67 68 20 39 29 20 73 68 69 66 74 20 74  rough 9) shift t
1a890 68 65 20 64 61 74 65 20 62 61 63 6b 77 61 72 64  he date backward
1a8a0 73 20 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e  s .to the beginn
1a8b0 69 6e 67 20 6f 66 20 74 68 65 20 63 75 72 72 65  ing of the curre
1a8c0 6e 74 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f  nt month, year o
1a8d0 72 20 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  r day.</p>..<p>^
1a8e0 54 68 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f  The "weekday" mo
1a8f0 64 69 66 69 65 72 20 61 64 76 61 6e 63 65 73 20  difier advances 
1a900 74 68 65 20 64 61 74 65 20 66 6f 72 77 61 72 64  the date forward
1a910 20 74 6f 20 74 68 65 20 6e 65 78 74 20 64 61 74   to the next dat
1a920 65 20 0a 77 68 65 72 65 20 74 68 65 20 77 65 65  e .where the wee
1a930 6b 64 61 79 20 6e 75 6d 62 65 72 20 69 73 20 4e  kday number is N
1a940 2e 20 53 75 6e 64 61 79 20 69 73 20 30 2c 20 4d  . Sunday is 0, M
1a950 6f 6e 64 61 79 20 69 73 20 31 2c 20 61 6e 64 20  onday is 1, and 
1a960 73 6f 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c  so forth.</p>..<
1a970 70 3e 5e 54 68 65 20 22 75 6e 69 78 65 70 6f 63  p>^The "unixepoc
1a980 68 22 20 6d 6f 64 69 66 69 65 72 20 28 31 31 29  h" modifier (11)
1a990 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 69   only works if i
1a9a0 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  t immediately fo
1a9b0 6c 6c 6f 77 73 20 0a 61 20 74 69 6d 65 73 74 72  llows .a timestr
1a9c0 69 6e 67 20 69 6e 20 74 68 65 20 44 44 44 44 44  ing in the DDDDD
1a9d0 44 44 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e  DDDDD format. .^
1a9e0 54 68 69 73 20 6d 6f 64 69 66 69 65 72 20 63 61  This modifier ca
1a9f0 75 73 65 73 20 74 68 65 20 44 44 44 44 44 44 44  uses the DDDDDDD
1aa00 44 44 44 20 74 6f 20 62 65 20 69 6e 74 65 72 70  DDD to be interp
1aa10 72 65 74 65 64 20 6e 6f 74 20 0a 61 73 20 61 20  reted not .as a 
1aa20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
1aa30 72 20 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79  r as it normally
1aa40 20 77 6f 75 6c 64 20 62 65 2c 20 62 75 74 20 61   would be, but a
1aa50 73 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  s.[http://en.wik
1aa60 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
1aa70 55 6e 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78  Unix_time | Unix
1aa80 20 54 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75   Time] - the .nu
1aa90 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20  mber of seconds 
1aaa0 73 69 6e 63 65 20 31 39 37 30 2e 20 20 49 66 20  since 1970.  If 
1aab0 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  the "unixepoch" 
1aac0 6d 6f 64 69 66 69 65 72 20 64 6f 65 73 20 6e 6f  modifier does no
1aad0 74 0a 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73  t.follow a times
1aae0 74 72 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 72  tring of the for
1aaf0 6d 20 44 44 44 44 44 44 44 44 44 44 20 77 68 69  m DDDDDDDDDD whi
1ab00 63 68 20 65 78 70 72 65 73 73 65 73 20 74 68 65  ch expresses the
1ab10 20 6e 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e   number.of secon
1ab20 64 73 20 73 69 6e 63 65 20 31 39 37 30 20 6f 72  ds since 1970 or
1ab30 20 69 66 20 6f 74 68 65 72 20 6d 6f 64 69 66 69   if other modifi
1ab40 65 72 73 0a 73 65 70 61 72 61 74 65 20 74 68 65  ers.separate the
1ab50 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
1ab60 69 66 69 65 72 20 66 72 6f 6d 20 70 72 69 6f 72  ifier from prior
1ab70 20 44 44 44 44 44 44 44 44 44 44 20 74 68 65 6e   DDDDDDDDDD then
1ab80 20 74 68 65 0a 62 65 68 61 76 69 6f 72 20 69 73   the.behavior is
1ab90 20 75 6e 64 65 66 69 6e 65 64 2e 0a 44 75 65 20   undefined..Due 
1aba0 74 6f 20 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d  to precision lim
1abb0 69 74 61 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64  itations imposed
1abc0 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
1abd0 74 61 74 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36  tations use.of 6
1abe0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 73 2c 20  4-bit integers, 
1abf0 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  the "unixepoch" 
1ac00 6d 6f 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f  modifier only wo
1ac10 72 6b 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65  rks for.dates be
1ac20 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31  tween 0000-01-01
1ac30 20 30 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33   00:00:00 and 53
1ac40 35 32 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34  52-11-01 10:52:4
1ac50 37 20 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66  7 (unix times.of
1ac60 20 2d 36 32 31 36 37 32 31 39 32 30 30 20 74 68   -62167219200 th
1ac70 72 6f 75 67 68 20 31 30 36 37 35 31 39 39 31 36  rough 1067519916
1ac80 37 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  7).</p>..<p>^The
1ac90 20 22 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64   "localtime" mod
1aca0 69 66 69 65 72 20 28 31 32 29 20 61 73 73 75 6d  ifier (12) assum
1acb0 65 73 20 74 68 65 20 74 69 6d 65 20 73 74 72 69  es the time stri
1acc0 6e 67 20 74 6f 20 69 74 73 20 6c 65 66 74 20 69  ng to its left i
1acd0 73 20 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43  s in.Universal C
1ace0 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20  oordinated Time 
1acf0 28 55 54 43 29 20 61 6e 64 20 61 64 6a 75 73 74  (UTC) and adjust
1ad00 73 20 74 68 65 20 74 69 6d 65 0a 73 74 72 69 6e  s the time.strin
1ad10 67 20 73 6f 20 74 68 61 74 20 69 74 20 64 69 73  g so that it dis
1ad20 70 6c 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e  plays localtime.
1ad30 20 20 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22    If "localtime"
1ad40 0a 66 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20  .follows a time 
1ad50 74 68 61 74 20 69 73 20 6e 6f 74 20 55 54 43 2c  that is not UTC,
1ad60 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69   then the behavi
1ad70 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
1ad80 0a 5e 28 54 68 65 20 22 75 74 63 22 20 69 73 20  .^(The "utc" is 
1ad90 74 68 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20  the opposite of 
1ada0 22 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22 75  "localtime".  "u
1adb0 74 63 22 20 61 73 73 75 6d 65 73 20 74 68 61 74  tc" assumes that
1adc0 20 74 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69   the string.to i
1add0 74 73 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68  ts left is in th
1ade0 65 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65  e local timezone
1adf0 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61   and adjusts tha
1ae00 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69  t string to be i
1ae10 6e 20 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20  n UTC.)^.If the 
1ae20 70 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20  prior string is 
1ae30 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65  not in localtime
1ae40 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
1ae50 74 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e  t of "utc" is.un
1ae60 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68  defined.</p>..<h
1ae70 33 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a  3>Examples</h3>.
1ae80 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1ae90 65 20 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c  e current date.<
1aea0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1aeb0 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77  SELECT date('now
1aec0 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  ');</blockquote>
1aed0 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1aee0 20 74 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66   the last day of
1aef0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e   the current mon
1af00 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  th.</p>..<blockq
1af10 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65  uote>SELECT date
1af20 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66  ('now','start of
1af30 20 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74   month','+1 mont
1af40 68 27 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f  h','-1 day');.</
1af50 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1af60 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1af70 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69  date and time gi
1af80 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73  ven a unix times
1af90 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e  tamp 1092941466.
1afa0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1afb0 65 3e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61  e>.    SELECT da
1afc0 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36  tetime(109294146
1afd0 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b  6, 'unixepoch');
1afe0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1aff0 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1b000 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
1b010 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69   given a unix ti
1b020 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31 34  mestamp 10929414
1b030 36 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73  66, and .compens
1b040 61 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63  ate for your loc
1b050 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e  al timezone.</p>
1b060 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1b070 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65   SELECT datetime
1b080 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e  (1092941466, 'un
1b090 69 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c  ixepoch', 'local
1b0a0 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  time');.</blockq
1b0b0 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
1b0c0 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e  mpute the curren
1b0d0 74 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  t unix timestamp
1b0e0 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1b0f0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72  te>.  SELECT str
1b100 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
1b110 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1b120 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1b130 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
1b140 61 79 73 20 73 69 6e 63 65 20 74 68 65 20 73 69  ays since the si
1b150 67 6e 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20  gning of the US 
1b160 44 65 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49  Declaration.of I
1b170 6e 64 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e  ndependence.</p>
1b180 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1b190 20 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61   SELECT julianda
1b1a0 79 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61  y('now') - julia
1b1b0 6e 64 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34  nday('1776-07-04
1b1c0 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
1b1d0 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
1b1e0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
1b1f0 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20  seconds since a 
1b200 70 61 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e  particular momen
1b210 74 20 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a  t in 2004:</p>..
1b220 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1b230 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27  ELECT strftime('
1b240 25 73 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72  %s','now') - str
1b250 66 74 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34  ftime('%s','2004
1b260 2d 30 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27  -01-01 02:34:56'
1b270 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1b280 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74  )^..^(<p>.Comput
1b290 65 20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68  e the date of th
1b2a0 65 20 66 69 72 73 74 20 54 75 65 73 64 61 79 20  e first Tuesday 
1b2b0 69 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74  in October.for t
1b2c0 68 65 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e  he current year.
1b2d0 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1b2e0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74  te>.  SELECT dat
1b2f0 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
1b300 66 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74  f year','+9 mont
1b310 68 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29  hs','weekday 2')
1b320 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1b330 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1b340 74 68 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74  the time since t
1b350 68 65 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e  he unix epoch in
1b360 20 73 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20   seconds .(like 
1b370 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e  strftime('%s','n
1b380 6f 77 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c  ow') except incl
1b390 75 64 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20  udes fractional 
1b3a0 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  part):</p>..<blo
1b3b0 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
1b3c0 54 20 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f  T (julianday('no
1b3d0 77 27 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29  w') - 2440587.5)
1b3e0 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63  *86400.0;.</bloc
1b3f0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43  kquote>)^..<h3>C
1b400 61 76 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c  aveats And Bugs<
1b410 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d  /h3>..<p>The com
1b420 70 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61  putation of loca
1b430 6c 20 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68  l time depends h
1b440 65 61 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68  eavily on the wh
1b450 69 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61  im .of politicia
1b460 6e 73 20 61 6e 64 20 69 73 20 74 68 75 73 20 64  ns and is thus d
1b470 69 66 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20  ifficult to get 
1b480 63 6f 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c  correct for .all
1b490 20 6c 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68   locales. ^In th
1b4a0 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  is implementatio
1b4b0 6e 2c 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  n, the standard 
1b4c0 43 20 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74  C library .funct
1b4d0 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28  ion localtime_r(
1b4e0 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 73 73  ) is used to ass
1b4f0 69 73 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75  ist in the calcu
1b500 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c  lation of .local
1b510 20 74 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c   time.  ^(The .l
1b520 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66  ocaltime_r() C f
1b530 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79  unction normally
1b540 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
1b550 79 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39  years.between 19
1b560 37 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72  70 and 2037. For
1b570 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74   dates outside t
1b580 68 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74  his range, SQLit
1b590 65 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d  e .attempts to m
1b5a0 61 70 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f  ap the year into
1b5b0 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79   an equivalent y
1b5c0 65 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73  ear within .this
1b5d0 20 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63   range, do the c
1b5e0 61 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e  alculation, then
1b5f0 20 6d 61 70 20 74 68 65 20 79 65 61 72 20 62 61   map the year ba
1b600 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e  ck.)^</p>...<p>^
1b610 28 54 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73  (These functions
1b620 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64   only work for d
1b630 61 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30  ates between 000
1b640 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30  0-01-01 00:00:00
1b650 0a 61 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20  .and 9999-12-31 
1b660 32 33 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64 61  23:59:59 (julida
1b670 6e 20 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37  n day numbers 17
1b680 32 31 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20  21059.5 through 
1b690 35 33 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f  5373484.5).)^.Fo
1b6a0 72 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20  r dates outside 
1b6b0 74 68 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20  that range, the 
1b6c0 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65  results of these
1b6d0 0a 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75  .functions are u
1b6e0 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c  ndefined.</p>..<
1b6f0 70 3e 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64  p>Non-Vista Wind
1b700 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e  ows platforms on
1b710 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73  ly support one s
1b720 65 74 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e  et of DST rules.
1b730 20 0a 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70   .Vista only sup
1b740 70 6f 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65  ports two. There
1b750 66 6f 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70  fore, on these p
1b760 6c 61 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f  latforms, .histo
1b770 72 69 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c  rical DST calcul
1b780 61 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69  ations will be i
1b790 6e 63 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65  ncorrect. .For e
1b7a0 78 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55  xample, in the U
1b7b0 53 2c 20 69 6e 20 32 30 30 37 20 74 68 65 20 44  S, in 2007 the D
1b7c0 53 54 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64  ST rules changed
1b7d0 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e  . .Non-Vista Win
1b7e0 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61  dows platforms a
1b7f0 70 70 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30  pply the new 200
1b800 37 20 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20  7 DST rules .to 
1b810 61 6c 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61  all previous yea
1b820 72 73 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74  rs as well. Vist
1b830 61 20 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20  a does somewhat 
1b840 62 65 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72  better.getting r
1b850 65 73 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62  esults correct b
1b860 61 63 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65  ack to 1986, whe
1b870 6e 20 74 68 65 20 72 75 6c 65 73 20 77 65 72 65  n the rules were
1b880 20 61 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f   also changed.</
1b890 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72  p>..<p>All inter
1b8a0 6e 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  nal computations
1b8b0 20 61 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74   assume the .[ht
1b8c0 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1b8d0 61 2e 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f  a.org/wiki/Grego
1b8e0 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20  rian_calendar | 
1b8f0 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64  Gregorian calend
1b900 61 72 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20  ar].system.  It 
1b910 69 73 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20  is also assumed 
1b920 74 68 61 74 20 65 76 65 72 79 0a 64 61 79 20 69  that every.day i
1b930 73 20 65 78 61 63 74 6c 79 20 38 36 34 30 30 20  s exactly 86400 
1b940 73 65 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74  seconds in durat
1b950 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ion.</p>..<tcl>.
1b960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b9a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
1b9b0 65 63 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74  ection {Aggregat
1b9c0 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e Functions} agg
1b9d0 66 75 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a  func {*aggfunc}.
1b9e0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20  </tcl>..<p>.The 
1b9f0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1ba00 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
1ba10 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
1ba20 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74   default.  Addit
1ba30 69 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20  ional.aggregate 
1ba40 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65  functions writte
1ba50 6e 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64  n in C may be ad
1ba60 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b  ded using the .[
1ba70 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
1ba80 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41  unction()]</a>.A
1ba90 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e  PI.</p>..<p>.^In
1baa0 20 61 6e 79 20 61 67 67 72 65 67 61 74 65 20 66   any aggregate f
1bab0 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b  unction that tak
1bac0 65 73 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  es a single argu
1bad0 6d 65 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d  ment, that argum
1bae0 65 6e 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65  ent.can be prece
1baf0 64 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f  ded by the keywo
1bb00 72 64 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49  rd DISTINCT.  ^I
1bb10 6e 20 73 75 63 68 20 63 61 73 65 73 2c 20 64 75  n such cases, du
1bb20 70 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73  plicate.elements
1bb30 20 61 72 65 20 66 69 6c 74 65 72 65 64 20 62 65   are filtered be
1bb40 66 6f 72 65 20 62 65 69 6e 67 20 70 61 73 73 65  fore being passe
1bb50 64 20 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65  d into the aggre
1bb60 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e  gate function..^
1bb70 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
1bb80 20 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74   function "count
1bb90 28 64 69 73 74 69 6e 63 74 20 58 29 22 20 77 69  (distinct X)" wi
1bba0 6c 6c 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ll return the nu
1bbb0 6d 62 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74  mber.of distinct
1bbc0 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
1bbd0 6e 20 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74  n X instead of t
1bbe0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
1bbf0 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75  of non-null.valu
1bc00 65 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a  es in column X..
1bc10 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  </p>..<table bor
1bc20 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e  der=0 cellpaddin
1bc30 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63  g=10>.<tcl>.func
1bc40 64 65 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61  def {avg(X)} {*a
1bc50 76 67 20 7b 61 76 67 28 29 20 61 67 67 72 65 67  vg {avg() aggreg
1bc60 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  ate function}} {
1bc70 0a 20 20 5e 54 68 65 20 61 76 67 28 29 20 66 75  .  ^The avg() fu
1bc80 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73  nction.  returns
1bc90 20 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c   the average val
1bca0 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  ue of all non-NU
1bcb0 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68  LL <i>X</i> with
1bcc0 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e  in a.  group.  ^
1bcd0 53 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20  String and BLOB 
1bce0 76 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e  values that do n
1bcf0 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d  ot look like num
1bd00 62 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72  bers are.  inter
1bd10 70 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e  preted as 0..  ^
1bd20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76  The result of av
1bd30 67 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20  g() is always a 
1bd40 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
1bd50 61 6c 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a  alue as long as.
1bd60 20 20 61 74 20 74 68 65 72 65 20 69 73 20 61 74    at there is at
1bd70 20 6c 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e   least one non-N
1bd80 55 4c 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69  ULL input even i
1bd90 66 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61  f all.  inputs a
1bda0 72 65 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54  re integers.  ^T
1bdb0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67  he result of avg
1bdc0 28 29 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e  () is NULL if an
1bdd0 64 20 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72  d only if.  ther
1bde0 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
1bdf0 4c 20 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66  L inputs.  .}..f
1be00 75 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29  uncdef {count(X)
1be10 20 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75   count(*)} {*cou
1be20 6e 74 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72  nt {count() aggr
1be30 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
1be40 20 7b 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28   {.  ^The count(
1be50 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1be60 72 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66  rns.  a count of
1be70 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74   the number of t
1be80 69 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58  imes.  that <i>X
1be90 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  </i> is not NULL
1bea0 20 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54   in a group.  ^T
1beb0 68 65 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63  he count(*) func
1bec0 74 69 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20  tion.  (with no 
1bed0 61 72 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72  arguments) retur
1bee0 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
1bef0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
1bf00 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
1bf10 63 64 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63  cdef {group_conc
1bf20 61 74 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63  at(X) group_conc
1bf30 61 74 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72  at(X,Y)} {.  *gr
1bf40 6f 75 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75  oup_concat {grou
1bf50 70 5f 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65  p_concat() aggre
1bf60 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d  gate function}.}
1bf70 20 7b 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f   {.  ^The group_
1bf80 63 6f 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f  concat() functio
1bf90 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74  n returns.  a st
1bfa0 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
1bfb0 65 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20  e concatenation 
1bfc0 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  of.  all non-NUL
1bfd0 4c 20 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58  L values of <i>X
1bfe0 3c 2f 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d  </i>.  ^If param
1bff0 65 74 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73  eter <i>Y</i> is
1c000 20 70 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20   present then.  
1c010 69 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68  it is used as th
1c020 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65  e separator.  be
1c030 74 77 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20  tween instances 
1c040 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41  of <i>X</i>.  ^A
1c050 20 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20   comma (",") is 
1c060 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
1c070 72 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c  rator.  if <i>Y<
1c080 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20  /i> is omitted. 
1c090 20 54 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   The order of th
1c0a0 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65  e concatenated e
1c0b0 6c 65 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62  lements is.  arb
1c0c0 69 74 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64  itrary..}..funcd
1c0d0 65 66 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61  ef {max(X)} {*ma
1c0e0 78 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61  xAggFunc *agg_ma
1c0f0 78 20 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61  x {max() aggrega
1c100 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
1c110 20 20 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67    ^The max() agg
1c120 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a  regate function.
1c130 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61    returns the ma
1c140 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61  ximum value of a
1c150 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ll values in the
1c160 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d   group..  ^The m
1c170 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20  aximum value is 
1c180 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77  the value that w
1c190 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
1c1a0 20 6c 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52   last in an.  OR
1c1b0 44 45 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61  DER BY on the sa
1c1c0 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67  me column.  ^Agg
1c1d0 72 65 67 61 74 65 20 6d 61 78 28 29 20 72 65 74  regate max() ret
1c1e0 75 72 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20  urns NULL .  if 
1c1f0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72  and only if ther
1c200 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
1c210 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  L values in the 
1c220 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65  group..}..funcde
1c230 66 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e  f {min(X)} {*min
1c240 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e  AggFunc *agg_min
1c250 20 7b 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74   {min() aggregat
1c260 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
1c270 20 5e 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72   ^The min() aggr
1c280 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20  egate function. 
1c290 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e   returns the min
1c2a0 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61  imum non-NULL va
1c2b0 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65  lue of all value
1c2c0 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
1c2d0 20 20 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76    ^The minimum v
1c2e0 61 6c 75 65 20 69 73 20 74 68 65 20 66 69 72 73  alue is the firs
1c2f0 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  t non-NULL value
1c300 20 74 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65   that would appe
1c310 61 72 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52  ar.  in an ORDER
1c320 20 42 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d   BY of the colum
1c330 6e 2e 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20  n..  ^Aggregate 
1c340 6d 69 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55  min() returns NU
1c350 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  LL if and only i
1c360 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e  f there are no n
1c370 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73  on-NULL.  values
1c380 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d   in the group..}
1c390 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58  ..funcdef {sum(X
1c3a0 29 20 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20  ) total(X)} {.  
1c3b0 2a 73 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74  *sumFunc *sum *t
1c3c0 6f 74 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67  otal.  {sum() ag
1c3d0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1c3e0 7d 0a 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67  }.  {total() agg
1c3f0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
1c400 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28  .} {.  ^The sum(
1c410 29 20 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67  ) and total() ag
1c420 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1c430 73 0a 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f  s.  return sum o
1c440 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  f all non-NULL v
1c450 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
1c460 75 70 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20  up..  ^If there 
1c470 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
1c480 69 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20  input rows then 
1c490 73 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20  sum() returns.  
1c4a0 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29  NULL but total()
1c4b0 20 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20   returns 0.0..  
1c4c0 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d  NULL is not norm
1c4d0 61 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72  ally a helpful r
1c4e0 65 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75  esult for the su
1c4f0 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62  m of no rows.  b
1c500 75 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64  ut the SQL stand
1c510 61 72 64 20 72 65 71 75 69 72 65 73 20 69 74 20  ard requires it 
1c520 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20  and most other. 
1c530 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
1c540 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20  gines implement 
1c550 73 75 6d 28 29 20 74 68 61 74 20 77 61 79 20 73  sum() that way s
1c560 6f 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74  o SQLite does it
1c570 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77   in the.  same w
1c580 61 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62  ay in order to b
1c590 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20  e compatible.   
1c5a0 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  The non-standard
1c5b0 20 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f   total() functio
1c5c0 6e 0a 20 20 69 73 20 70 72 6f 76 69 64 65 64 20  n.  is provided 
1c5d0 61 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  as a convenient 
1c5e0 77 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  way to work arou
1c5f0 6e 64 20 74 68 69 73 20 64 65 73 69 67 6e 20 70  nd this design p
1c600 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20  roblem.  in the 
1c610 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70  SQL language.</p
1c620 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73  >..  <p>^The res
1c630 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69  ult of total() i
1c640 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74  s always a float
1c650 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
1c660 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
1c670 66 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e  f sum() is an in
1c680 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61  teger value if a
1c690 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  ll non-NULL inpu
1c6a0 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e  ts are integers.
1c6b0 0a 20 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74  .  ^If any input
1c6c0 20 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69   to sum() is nei
1c6d0 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1c6e0 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e  or a NULL.  then
1c6f0 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61   sum() returns a
1c700 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
1c710 76 61 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69  value.  which mi
1c720 67 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78  ght be an approx
1c730 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74  imation to the t
1c740 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20  rue sum.</p>..  
1c750 3c 70 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74  <p>^Sum() will t
1c760 68 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72  hrow an "integer
1c770 20 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70   overflow" excep
1c780 74 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75  tion if all inpu
1c790 74 73 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72  ts.  are integer
1c7a0 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20  s or NULL.  and 
1c7b0 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66  an integer overf
1c7c0 6c 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e  low occurs at an
1c7d0 79 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74  y point during t
1c7e0 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a  he computation..
1c7f0 20 20 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72    ^Total() never
1c800 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67   throws an integ
1c810 65 72 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c  er overflow..}.<
1c820 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  /tcl>.</table>..
1c830 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1c840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c880 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53  ####.Section INS
1c890 45 52 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45  ERT insert {INSE
1c8a0 52 54 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 42 75  RT *INSERTs}..Bu
1c8b0 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65  bbleDiagram inse
1c8c0 72 74 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  rt-stmt 1.</tcl>
1c8d0 0a 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20  ..<p>The INSERT 
1c8e0 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20  statement comes 
1c8f0 69 6e 20 74 68 72 65 65 20 62 61 73 69 63 20 66  in three basic f
1c900 6f 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69  orms.  .<ul>.<li
1c910 3e 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 66  ><p>^The first f
1c920 6f 72 6d 20 28 77 69 74 68 20 74 68 65 20 22 56  orm (with the "V
1c930 41 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20  ALUES" keyword) 
1c940 63 72 65 61 74 65 73 20 6f 6e 65 20 6f 72 20 6d  creates one or m
1c950 6f 72 65 0a 6e 65 77 20 72 6f 77 73 20 69 6e 0a  ore.new rows in.
1c960 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c  an existing tabl
1c970 65 2e 20 5e 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e  e. ^If no column
1c980 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69  -list is specifi
1c990 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  ed then the numb
1c9a0 65 72 0a 6f 66 20 76 61 6c 75 65 73 20 69 6e 73  er.of values ins
1c9b0 65 72 74 65 64 20 69 6e 74 6f 20 65 61 63 68 20  erted into each 
1c9c0 72 6f 77 0a 6d 75 73 74 20 62 65 20 74 68 65 20  row.must be the 
1c9d0 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62  same as the numb
1c9e0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1c9f0 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20   the table. ^In 
1ca00 74 68 69 73 20 63 61 73 65 0a 74 68 65 20 72 65  this case.the re
1ca10 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69  sult of evaluati
1ca20 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  ng the left-most
1ca30 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 65   expression in e
1ca40 61 63 68 20 74 65 72 6d 20 6f 66 0a 74 68 65 20  ach term of.the 
1ca50 56 41 4c 55 45 53 20 6c 69 73 74 20 69 73 20 69  VALUES list is i
1ca60 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
1ca70 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
1ca80 6e 20 6f 66 20 74 68 65 20 65 61 63 68 20 6e 65  n of the each ne
1ca90 77 20 72 6f 77 2c 0a 61 6e 64 20 66 6f 72 74 68  w row,.and forth
1caa0 20 66 6f 72 20 65 61 63 68 20 73 75 62 73 65 71   for each subseq
1cab0 75 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 2e  uent expression.
1cac0 20 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d 6c 69   ^If a.column-li
1cad0 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  st is specified,
1cae0 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72   then the number
1caf0 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 65 61   of values in ea
1cb00 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 0a 56  ch term of the.V
1cb10 41 4c 55 53 20 6c 69 73 74 20 6d 75 73 74 20 6d  ALUS list must m
1cb20 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20  atch the number 
1cb30 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c  of.specified col
1cb40 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20 74  umns. ^Each of t
1cb50 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73  he named columns
1cb60 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20   of the new row 
1cb70 69 73 20 70 6f 70 75 6c 61 74 65 64 0a 77 69 74  is populated.wit
1cb80 68 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  h the results of
1cb90 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
1cba0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 56 41  corresponding VA
1cbb0 4c 55 45 53 20 65 78 70 72 65 73 73 69 6f 6e 2e  LUES expression.
1cbc0 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73 20   ^Table.columns 
1cbd0 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65  that do not appe
1cbe0 61 72 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ar in the column
1cbf0 20 6c 69 73 74 20 61 72 65 20 70 6f 70 75 6c 61   list are popula
1cc00 74 65 64 20 77 69 74 68 20 74 68 65 20 64 65 66  ted with the def
1cc10 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61 6c 75  ault.column valu
1cc20 65 20 28 73 70 65 63 69 66 69 65 64 20 61 73 20  e (specified as 
1cc30 70 61 72 74 20 6f 66 20 74 68 65 20 43 52 45 41  part of the CREA
1cc40 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
1cc50 6e 74 29 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c  nt), or with NUL
1cc60 4c 20 69 66 0a 6e 6f 20 64 65 66 61 75 6c 74 20  L if.no default 
1cc70 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69  value is specifi
1cc80 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20  ed...<li><p>The 
1cc90 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74  second form of t
1cca0 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
1ccb0 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 53  ent contains a S
1ccc0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a  ELECT statement.
1ccd0 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c  instead of a VAL
1cce0 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e  UES clause. ^A n
1ccf0 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65  ew entry is inse
1cd00 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61  rted into the ta
1cd10 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77  ble for each.row
1cd20 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e 65   of data returne
1cd30 64 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74  d by executing t
1cd40 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
1cd50 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d  ent. ^If a colum
1cd60 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66  n-list is.specif
1cd70 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20  ied, the number 
1cd80 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1cd90 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
1cda0 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74  SELECT must be t
1cdb0 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e  he same.as the n
1cdc0 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69  umber of items i
1cdd0 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73  n the column-lis
1cde0 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  t. ^Otherwise, i
1cdf0 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  f no column-list
1ce00 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
1ce10 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1ce20 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
1ce30 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  lt of the SELECT
1ce40 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
1ce50 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e.as the number 
1ce60 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1ce70 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45  e table. ^Any SE
1ce80 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20  LECT statement, 
1ce90 69 6e 63 6c 75 64 69 6e 67 0a 63 6f 6d 70 6f 75  including.compou
1cea0 6e 64 20 53 45 4c 45 43 54 73 20 61 6e 64 20 53  nd SELECTs and S
1ceb0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
1cec0 20 77 69 74 68 20 4f 52 44 45 52 20 42 59 20 61   with ORDER BY a
1ced0 6e 64 2f 6f 72 20 4c 49 4d 49 54 20 63 6c 61 75  nd/or LIMIT clau
1cee0 73 65 73 2c 20 0a 6d 61 79 20 62 65 20 75 73 65  ses, .may be use
1cef0 64 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  d in an INSERT s
1cf00 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 69 73  tatement of this
1cf10 20 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54   form...<li><p>T
1cf20 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20 6f 66  he third form of
1cf30 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
1cf40 6d 65 6e 74 20 69 73 20 77 69 74 68 20 44 45 46  ment is with DEF
1cf50 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e 28 54  AULT VALUES..^(T
1cf60 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45  he INSERT ... DE
1cf70 46 41 55 4c 54 20 56 41 4c 55 45 53 20 73 74 61  FAULT VALUES sta
1cf80 74 65 6d 65 6e 74 20 69 6e 73 65 72 74 73 20 61  tement inserts a
1cf90 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20   single new row 
1cfa0 69 6e 74 6f 20 74 68 65 0a 6e 61 6d 65 64 20 74  into the.named t
1cfb0 61 62 6c 65 2e 29 5e 20 5e 45 61 63 68 20 63 6f  able.)^ ^Each co
1cfc0 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20  lumn of the new 
1cfd0 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64  row is populated
1cfe0 20 77 69 74 68 20 69 74 73 20 64 65 66 61 75 6c   with its defaul
1cff0 74 20 76 61 6c 75 65 2c 0a 6f 72 20 77 69 74 68  t value,.or with
1d000 20 61 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 64 65   a NULL if no de
1d010 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73  fault value is s
1d020 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
1d030 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 64   of the column.d
1d040 65 66 69 6e 69 74 69 6f 6e 20 69 6e 20 74 68 65  efinition in the
1d050 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
1d060 61 74 65 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c 3e 0a  atement...</ul>.
1d070 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61  .<p>^The optiona
1d080 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73  l conflict-claus
1d090 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65  e allows the spe
1d0a0 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e  cification of an
1d0b0 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e   alternative.con
1d0c0 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
1d0d0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1d0e0 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72  rithm to use dur
1d0f0 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 49 4e 53  ing this one INS
1d100 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65  ERT command..See
1d110 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74   the section tit
1d120 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  led.[ON CONFLICT
1d130 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  ] for additional
1d140 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f   information..Fo
1d150 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
1d160 77 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74 68 65  with MySQL, ^the
1d170 20 70 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74   parser allows t
1d180 68 65 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69  he use of the.si
1d190 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20  ngle keyword <a 
1d1a0 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61  href="lang_repla
1d1b0 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45  ce.html">REPLACE
1d1c0 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61  </a> as an .alia
1d1d0 73 20 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52  s for "INSERT OR
1d1e0 20 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e   REPLACE"...<p>^
1d1f0 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 3c  (The optional "<
1d200 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
1d210 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70 72 65  /i><b>.</b>" pre
1d220 66 69 78 20 6f 6e 20 74 68 65 20 3c 69 3e 74 61  fix on the <i>ta
1d230 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 69 73 20  ble-name</i>.is 
1d240 73 75 70 70 6f 72 74 20 66 6f 72 20 74 6f 70 2d  support for top-
1d250 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61  level INSERT sta
1d260 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29 5e 20  tements only.)^ 
1d270 20 5e 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65   ^The table name
1d280 20 6d 75 73 74 20 62 65 0a 75 6e 71 75 61 6c 69   must be.unquali
1d290 66 69 65 64 20 66 6f 72 20 49 4e 53 45 52 54 20  fied for INSERT 
1d2a0 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
1d2b0 6f 63 63 75 72 20 77 69 74 68 69 6e 20 5b 43 52  occur within [CR
1d2c0 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
1d2d0 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d 69 6c  atements..^Simil
1d2e0 61 72 6c 79 2c 20 74 68 65 20 22 44 45 46 41 55  arly, the "DEFAU
1d2f0 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20  LT VALUES" form 
1d300 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74  of the INSERT st
1d310 61 74 65 6d 65 6e 74 20 69 73 20 73 75 70 70 6f  atement is suppo
1d320 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c 65 76  rted for.top-lev
1d330 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  el INSERT statem
1d340 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20 6e 6f  ents only and no
1d350 74 20 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61  t for INSERT sta
1d360 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 0a 74  tements within.t
1d370 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a 3c 74  riggers..<p>..<t
1d380 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
1d390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d3a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d3b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d3c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d3d0 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43  ##.Section {ON C
1d3e0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20  ONFLICT clause} 
1d3f0 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c  conflict {{confl
1d400 69 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f 4e 20  ict clause} {ON 
1d410 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42 75 62 62  CONFLICT}}..Bubb
1d420 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69  leDiagram confli
1d430 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  ct-clause.</tcl>
1d440 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46  ..<p>The ON CONF
1d450 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e  LICT clause is n
1d460 6f 74 20 61 20 73 65 70 61 72 61 74 65 20 53 51  ot a separate SQ
1d470 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69  L command.  It i
1d480 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  s a.non-standard
1d490 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e   clause that can
1d4a0 20 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20   appear in many 
1d4b0 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e  other SQL comman
1d4c0 64 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20  ds..It is given 
1d4d0 69 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20  its own section 
1d4e0 69 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74  in this document
1d4f0 20 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6e   because it is n
1d500 6f 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64  ot.part of stand
1d510 61 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72  ard SQL and ther
1d520 65 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20  efore might not 
1d530 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e  be familiar.</p>
1d540 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78  ..<p>^The syntax
1d550 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46   for the ON CONF
1d560 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 61  LICT clause is a
1d570 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f  s shown above fo
1d580 72 0a 74 68 65 20 43 52 45 41 54 45 20 54 41 42  r.the CREATE TAB
1d590 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f  LE command.  ^Fo
1d5a0 72 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64  r the INSERT and
1d5b0 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73  .UPDATE commands
1d5c0 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  , the keywords "
1d5d0 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65  ON CONFLICT" are
1d5e0 20 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52   replaced by "OR
1d5f0 22 20 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79  " so that.the sy
1d600 6e 74 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20  ntax reads more 
1d610 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20  naturally.  For 
1d620 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64  example, instead
1d630 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43   of."INSERT ON C
1d640 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20  ONFLICT IGNORE" 
1d650 77 65 20 68 61 76 65 20 22 49 4e 53 45 52 54 20  we have "INSERT 
1d660 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20  OR IGNORE"..The 
1d670 6b 65 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20  keywords change 
1d680 62 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20  but the meaning 
1d690 6f 66 20 74 68 65 20 63 6c 61 75 73 65 20 69 73  of the clause is
1d6a0 20 74 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72   the same.either
1d6b0 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68   way.</p>..<p>Th
1d6c0 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  e ON CONFLICT cl
1d6d0 61 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20  ause applies to 
1d6e0 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
1d6f0 55 4c 4c 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20  ULL.constraints 
1d700 28 61 6e 64 20 74 6f 20 50 52 49 4d 41 52 59 20  (and to PRIMARY 
1d710 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  KEY constraints 
1d720 77 68 69 63 68 20 66 6f 72 20 74 68 65 20 70 75  which for the pu
1d730 72 70 6f 73 65 73 20 0a 6f 66 20 74 68 69 73 20  rposes .of this 
1d740 73 65 63 74 69 6f 6e 20 61 72 65 20 74 68 65 20  section are the 
1d750 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 55 4e  same thing as UN
1d760 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73  IQUE constraints
1d770 29 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  )..The ON CONFLI
1d780 43 54 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65  CT algorithm doe
1d790 73 20 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b  s not.apply to [
1d7a0 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
1d7b0 74 72 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20  traints]..There 
1d7c0 61 72 65 20 66 69 76 65 20 63 6f 6e 66 6c 69 63  are five conflic
1d7d0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
1d7e0 6f 72 69 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a  orithm choices:.
1d7f0 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c  ROLLBACK, ABORT,
1d800 20 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61   FAIL, IGNORE, a
1d810 6e 64 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65  nd REPLACE..^The
1d820 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
1d830 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
1d840 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e  orithm is ABORT.
1d850 20 20 54 68 69 73 0a 69 73 20 77 68 61 74 20 74    This.is what t
1d860 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c  hey mean:</p>..<
1d870 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42  dl>.<dt><b>ROLLB
1d880 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ACK</b></dt>.<dd
1d890 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
1d8a0 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
1d8b0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
1d8c0 63 75 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41  curs, the ROLLBA
1d8d0 43 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  CK.resolution al
1d8e0 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74  gorithm aborts t
1d8f0 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73  he current SQL s
1d900 74 61 74 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e  tatement with.an
1d910 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
1d920 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c  NT error and rol
1d930 6c 73 20 62 61 63 6b 20 74 68 65 20 63 75 72 72  ls back the curr
1d940 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
1d950 0a 5e 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74  .^If no transact
1d960 69 6f 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f  ion is.active (o
1d970 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d  ther than the im
1d980 70 6c 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f  plied transactio
1d990 6e 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65  n that is create
1d9a0 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61  d on every.comma
1d9b0 6e 64 29 20 74 68 65 6e 20 74 68 65 20 52 4f 4c  nd) then the ROL
1d9c0 4c 42 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e  LBACK resolution
1d9d0 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73   algorithm works
1d9e0 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
1d9f0 0a 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d  .ABORT algorithm
1da00 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  .</p></dd>..<dt>
1da10 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74  <b>ABORT</b></dt
1da20 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
1da30 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
1da40 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1da50 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 41  on occurs, the A
1da60 42 4f 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  BORT.resolution 
1da70 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73  algorithm aborts
1da80 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c   the current SQL
1da90 20 73 74 61 74 65 6d 65 6e 74 0a 77 69 74 68 20   statement.with 
1daa0 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  an SQLITE_CONSTR
1dab0 41 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 62  AINT error and b
1dac0 61 63 6b 73 20 6f 75 74 20 61 6e 79 20 63 68 61  acks out any cha
1dad0 6e 67 65 73 0a 6d 61 64 65 20 62 79 20 74 68 65  nges.made by the
1dae0 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61   current SQL sta
1daf0 74 65 6d 65 6e 74 3b 20 62 75 74 20 63 68 61 6e  tement; but chan
1db00 67 65 73 20 63 61 75 73 65 64 0a 62 79 20 70 72  ges caused.by pr
1db10 69 6f 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ior SQL statemen
1db20 74 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ts within the sa
1db30 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  me transaction a
1db40 72 65 20 70 72 65 73 65 72 76 65 64 20 61 6e 64  re preserved and
1db50 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e   the.transaction
1db60 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76 65 2e   remains active.
1db70 0a 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66  .This is the def
1db80 61 75 6c 74 20 62 65 68 61 76 69 6f 72 20 61 6e  ault behavior an
1db90 64 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 73  d the behavior s
1dba0 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
1dbb0 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70  SQL.standard.</p
1dbc0 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46  ></dd>..<dt><b>F
1dbd0 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  AIL</b></dt>.<dd
1dbe0 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
1dbf0 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
1dc00 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
1dc10 63 75 72 73 2c 20 74 68 65 20 46 41 49 4c 0a 72  curs, the FAIL.r
1dc20 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
1dc30 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63  thm aborts the c
1dc40 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
1dc50 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a 53 51 4c  ment with an.SQL
1dc60 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65  ITE_CONSTRAINT e
1dc70 72 72 6f 72 2e 20 20 5e 42 75 74 20 74 68 65 20  rror.  ^But the 
1dc80 46 41 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20  FAIL resolution 
1dc90 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75  does not.back ou
1dca0 74 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  t prior changes 
1dcb0 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  of the SQL state
1dcc0 6d 65 6e 74 20 74 68 61 74 20 66 61 69 6c 65 64  ment that failed
1dcd0 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e 64   nor does.it end
1dce0 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
1dcf0 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ..^For example, 
1dd00 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61  if an UPDATE.sta
1dd10 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72  tement encounter
1dd20 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  ed a constraint 
1dd30 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65  violation on the
1dd40 20 31 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a   100th row that.
1dd50 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75  it attempts to u
1dd60 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20  pdate, then the 
1dd70 66 69 72 73 74 20 39 39 20 72 6f 77 20 63 68 61  first 99 row cha
1dd80 6e 67 65 73 20 61 72 65 20 70 72 65 73 65 72 76  nges are preserv
1dd90 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74  ed.but changes t
1dda0 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62  o rows 100 and b
1ddb0 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75  eyond never occu
1ddc0 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  r.</p></dd>..<dt
1ddd0 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f  ><b>IGNORE</b></
1dde0 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65  dt>.<dd><p> ^Whe
1ddf0 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20  n an applicable 
1de00 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1de10 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68  tion occurs, .th
1de20 65 20 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74  e IGNORE resolut
1de30 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b  ion algorithm sk
1de40 69 70 73 20 74 68 65 20 6f 6e 65 20 72 6f 77 20  ips the one row 
1de50 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68  that contains.th
1de60 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
1de70 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69  lation and conti
1de80 6e 75 65 73 20 70 72 6f 63 65 73 73 69 6e 67 20  nues processing 
1de90 73 75 62 73 65 71 75 65 6e 74 20 72 6f 77 73 0a  subsequent rows.
1dea0 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  of the SQL state
1deb0 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f 74 68 69  ment as if nothi
1dec0 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f  ng went wrong..O
1ded0 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65  ther rows before
1dee0 20 61 6e 64 20 61 66 74 65 72 20 74 68 65 20 72   and after the r
1def0 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65  ow that.containe
1df00 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
1df10 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69   violation are i
1df20 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
1df30 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f  ed.normally. ^No
1df40 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
1df50 65 64 20 77 68 65 6e 20 74 68 65 20 49 47 4e 4f  ed when the IGNO
1df60 52 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  RE conflict reso
1df70 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d  lution.algorithm
1df80 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64   is used.</p></d
1df90 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41  d>..<dt><b>REPLA
1dfa0 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  CE</b></dt>.<dd>
1dfb0 3c 70 3e 20 5e 57 68 65 6e 20 61 20 55 4e 49 51  <p> ^When a UNIQ
1dfc0 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  UE constraint vi
1dfd0 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
1dfe0 74 68 65 20 52 45 50 4c 41 43 45 20 61 6c 67 6f  the REPLACE algo
1dff0 72 69 74 68 6d 0a 64 65 6c 65 74 65 73 20 70 72  rithm.deletes pr
1e000 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20  e-existing rows 
1e010 74 68 61 74 20 61 72 65 20 63 61 75 73 69 6e 67  that are causing
1e020 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1e030 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20  violation.prior 
1e040 74 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f 72 20  to inserting or 
1e050 75 70 64 61 74 69 6e 67 20 74 68 65 20 63 75 72  updating the cur
1e060 72 65 6e 74 20 72 6f 77 20 61 6e 64 20 74 68 65  rent row and the
1e070 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75   command continu
1e080 65 73 20 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f  es .executing no
1e090 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20 4e 4f  rmally..^If a NO
1e0a0 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
1e0b0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
1e0c0 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20  rs, the REPLACE 
1e0d0 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74  conflict.resolut
1e0e0 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65  ion replaces the
1e0f0 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69 74 68   NULL value with
1e100 0a 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  .he default valu
1e110 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  e for that colum
1e120 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63 6f 6c  n, or if the col
1e130 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61 75  umn has no defau
1e140 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  lt.value, then t
1e150 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74  he ABORT algorit
1e160 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49 66 20  hm is used..^If 
1e170 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
1e180 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1e190 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45  urs, the REPLACE
1e1a0 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
1e1b0 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 61  tion.algorithm a
1e1c0 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c 69 6b 65  lways works like
1e1d0 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e   ABORT.</p>..<p>
1e1e0 5e 57 68 65 6e 20 74 68 65 20 52 45 50 4c 41 43  ^When the REPLAC
1e1f0 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  E conflict resol
1e200 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64  ution strategy d
1e210 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f  eletes rows in o
1e220 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20  rder to.satisfy 
1e230 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43  a constraint, [C
1e240 52 45 41 54 45 20 54 52 49 47 47 45 52 20 7c 20  REATE TRIGGER | 
1e250 64 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 5d  delete triggers]
1e260 20 66 69 72 65 20 69 66 20 61 6e 64 20 6f 6e 6c   fire if and onl
1e270 79 20 69 66 0a 5b 72 65 63 75 72 73 69 76 65 5f  y if.[recursive_
1e280 74 72 69 67 67 65 72 73 20 70 72 61 67 6d 61 20  triggers pragma 
1e290 7c 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  | recursive trig
1e2a0 67 65 72 73 5d 20 61 72 65 20 65 6e 61 62 6c 65  gers] are enable
1e2b0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
1e2c0 5b 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f  [sqlite3_update_
1e2d0 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20 68 6f  hook | update ho
1e2e0 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b  ok] is not invok
1e2f0 65 64 20 66 6f 72 20 72 6f 77 73 20 74 68 61 74  ed for rows that
1e300 0a 61 72 65 20 64 65 6c 65 74 65 64 20 62 79 20  .are deleted by 
1e310 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66  the REPLACE conf
1e320 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
1e330 73 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f 72 20  strategy.  ^Nor 
1e340 64 6f 65 73 0a 52 45 50 4c 41 43 45 20 69 6e 63  does.REPLACE inc
1e350 72 65 6d 65 6e 74 20 74 68 65 20 5b 73 71 6c 69  rement the [sqli
1e360 74 65 33 5f 63 68 61 6e 67 65 73 20 7c 20 63 68  te3_changes | ch
1e370 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e 0a 54  ange counter]..T
1e380 68 65 20 65 78 63 65 70 74 69 6f 6e 61 6c 20 62  he exceptional b
1e390 65 68 61 76 69 6f 72 73 20 64 65 66 69 6e 65 64  ehaviors defined
1e3a0 20 69 6e 20 74 68 69 73 20 70 61 72 61 67 72 61   in this paragra
1e3b0 70 68 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  ph might change 
1e3c0 0a 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c  .in a future rel
1e3d0 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a  ease.</p>.</dl>.
1e3e0 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74  .<p>^The algorit
1e3f0 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  hm specified in 
1e400 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f 66  the OR clause of
1e410 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 55 50   an INSERT or UP
1e420 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61  DATE.overrides a
1e430 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65  ny algorithm spe
1e440 63 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41  cified in a CREA
1e450 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f  TE TABLE..^If no
1e460 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70   algorithm is sp
1e470 65 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65  ecified anywhere
1e480 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f  , the ABORT algo
1e490 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f  rithm is used.</
1e4a0 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
1e4b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e4c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e4d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e4e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e4f0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1e500 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78   REINDEX reindex
1e510 20 52 45 49 4e 44 45 58 0a 0a 42 75 62 62 6c 65   REINDEX..Bubble
1e520 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d  Diagram reindex-
1e530 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
1e540 70 3e 5e 54 68 65 20 52 45 49 4e 44 45 58 20 63  p>^The REINDEX c
1e550 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74  ommand is used t
1e560 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63  o delete and rec
1e570 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66 72  reate indices fr
1e580 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73  om scratch..This
1e590 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20   is useful when 
1e5a0 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
1e5b0 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  f a collation se
1e5c0 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67  quence has chang
1e5d0 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ed..</p>..<p>^If
1e5e0 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79   the REINDEX key
1e5f0 77 6f 72 64 20 69 73 20 6e 6f 74 20 66 6f 6c 6c  word is not foll
1e600 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74  owed by a collat
1e610 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6f 72 20  ion-sequence or 
1e620 64 61 74 61 62 61 73 65 20 0a 6f 62 6a 65 63 74  database .object
1e630 20 69 64 65 6e 74 69 66 69 65 72 2c 20 74 68 65   identifier, the
1e640 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e  n all indices in
1e650 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1e660 74 61 62 61 73 65 73 20 61 72 65 20 72 65 62 75  tabases are rebu
1e670 69 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  ilt...<p>^If the
1e680 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64   REINDEX keyword
1e690 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
1e6a0 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75  a collation-sequ
1e6b0 65 6e 63 65 20 6e 61 6d 65 2c 20 74 68 65 6e 0a  ence name, then.
1e6c0 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
1e6d0 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
1e6e0 62 61 73 65 73 20 74 68 61 74 20 75 73 65 20 74  bases that use t
1e6f0 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69  he named collati
1e700 6f 6e 20 73 65 71 75 65 6e 63 65 73 0a 61 72 65  on sequences.are
1e710 20 72 65 63 72 65 61 74 65 64 2e 20 0a 0a 3c 70   recreated. ..<p
1e720 3e 5e 4f 72 2c 20 69 66 20 74 68 65 20 61 72 67  >^Or, if the arg
1e730 75 6d 65 6e 74 20 61 74 74 61 63 68 65 64 20 74  ument attached t
1e740 6f 20 74 68 65 20 52 45 49 4e 44 45 58 20 69 64  o the REINDEX id
1e750 65 6e 74 69 66 69 65 73 20 61 20 73 70 65 63 69  entifies a speci
1e760 66 69 63 20 0a 64 61 74 61 62 61 73 65 20 74 61  fic .database ta
1e770 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  ble, then all in
1e780 64 69 63 65 73 20 61 74 74 61 63 68 65 64 20 74  dices attached t
1e790 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  o the database t
1e7a0 61 62 6c 65 20 61 72 65 20 72 65 62 75 69 6c 74  able are rebuilt
1e7b0 2e 20 0a 5e 49 66 20 69 74 20 69 64 65 6e 74 69  . .^If it identi
1e7c0 66 69 65 73 20 61 20 73 70 65 63 69 66 69 63 20  fies a specific 
1e7d0 64 61 74 61 62 61 73 65 20 69 6e 64 65 78 2c 20  database index, 
1e7e0 74 68 65 6e 20 6a 75 73 74 20 74 68 61 74 20 69  then just that i
1e7f0 6e 64 65 78 20 69 73 20 72 65 63 72 65 61 74 65  ndex is recreate
1e800 64 2e 0a 0a 3c 70 3e 5e 49 66 20 6e 6f 20 3c 69  d...<p>^If no <i
1e810 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
1e820 69 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 20  i> is specified 
1e830 61 6e 64 20 74 68 65 72 65 20 65 78 69 73 74 73  and there exists
1e840 20 62 6f 74 68 20 61 20 74 61 62 6c 65 20 6f 72   both a table or
1e850 0a 69 6e 64 65 78 20 61 6e 64 20 61 20 63 6f 6c  .index and a col
1e860 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
1e870 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  of the specified
1e880 20 6e 61 6d 65 2c 20 53 51 4c 69 74 65 20 69 6e   name, SQLite in
1e890 74 65 72 70 72 65 74 73 0a 74 68 69 73 20 61 73  terprets.this as
1e8a0 20 61 20 72 65 71 75 65 73 74 20 74 6f 20 72 65   a request to re
1e8b0 62 75 69 6c 64 20 74 68 65 20 69 6e 64 69 63 65  build the indice
1e8c0 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20 6e  s that use the n
1e8d0 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  amed collation s
1e8e0 65 71 75 65 6e 63 65 2e 0a 54 68 69 73 20 61 6d  equence..This am
1e8f0 62 69 67 75 69 74 79 20 69 6e 20 74 68 65 20 73  biguity in the s
1e900 79 6e 74 61 78 20 6d 61 79 20 62 65 20 61 76 6f  yntax may be avo
1e910 69 64 65 64 20 62 79 20 61 6c 77 61 79 73 20 73  ided by always s
1e920 70 65 63 69 66 79 69 6e 67 20 61 0a 3c 69 3e 64  pecifying a.<i>d
1e930 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
1e940 20 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67   when reindexing
1e950 20 61 20 73 70 65 63 69 66 69 63 20 74 61 62 6c   a specific tabl
1e960 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63  e or index...<tc
1e970 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
1e980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e9a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e9b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e9c0 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41  ##.Section REPLA
1e9d0 43 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c 41  CE replace REPLA
1e9e0 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  CE..</tcl>..<p>^
1e9f0 54 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d  The REPLACE comm
1ea00 61 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20  and is an alias 
1ea10 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e  for the "[ON CON
1ea20 46 4c 49 43 54 20 7c 20 49 4e 53 45 52 54 20 4f  FLICT | INSERT O
1ea30 52 20 52 45 50 4c 41 43 45 5d 22 0a 76 61 72 69  R REPLACE]".vari
1ea40 61 6e 74 20 6f 66 20 74 68 65 20 5b 49 4e 53 45  ant of the [INSE
1ea50 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54  RT] command.  .T
1ea60 68 69 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f  his alias is pro
1ea70 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74  vided for compat
1ea80 69 62 69 6c 69 74 79 20 6f 74 68 65 72 20 53 51  ibility other SQ
1ea90 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
1eaa0 65 73 2e 20 20 53 65 65 20 74 68 65 20 0a 5b 49  es.  See the .[I
1eab0 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64  NSERT] command d
1eac0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
1ead0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
1eae0 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a  rmation.</p>  ..
1eaf0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1eb00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb40 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45  #####.Section SE
1eb50 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c  LECT select {SEL
1eb60 45 43 54 20 71 75 65 72 79 7d 0a 0a 42 75 62 62  ECT query}..Bubb
1eb70 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74  leDiagram select
1eb80 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
1eb90 61 67 72 61 6d 20 73 65 6c 65 63 74 2d 63 6f 72  agram select-cor
1eba0 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  e.BubbleDiagram 
1ebb0 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 0a 42 75  result-column.Bu
1ebc0 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e  bbleDiagram join
1ebd0 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69  -source.BubbleDi
1ebe0 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75  agram single-sou
1ebf0 72 63 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  rce.BubbleDiagra
1ec00 6d 20 6a 6f 69 6e 2d 6f 70 0a 42 75 62 62 6c 65  m join-op.Bubble
1ec10 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 63 6f 6e  Diagram join-con
1ec20 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69  straint.BubbleDi
1ec30 61 67 72 61 6d 20 6f 72 64 65 72 69 6e 67 2d 74  agram ordering-t
1ec40 65 72 6d 0a 42 75 62 62 6c 65 44 69 61 67 72 61  erm.BubbleDiagra
1ec50 6d 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61  m compound-opera
1ec60 74 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e  tor.</tcl>...<p>
1ec70 54 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  The SELECT state
1ec80 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
1ec90 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61  query the databa
1eca0 73 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74 20  se.  The.result 
1ecb0 6f 66 20 61 20 53 45 4c 45 43 54 20 69 73 20 7a  of a SELECT is z
1ecc0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  ero or more rows
1ecd0 20 6f 66 20 64 61 74 61 20 77 68 65 72 65 20 65   of data where e
1ece0 61 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66 69  ach row.has a fi
1ecf0 78 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  xed number of co
1ed00 6c 75 6d 6e 73 2e 20 20 0a 0a 3c 70 3e 54 68 65  lumns.  ..<p>The
1ed10 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1ed20 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f  t is the most co
1ed30 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e  mplicated comman
1ed40 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e  d in the SQL lan
1ed50 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74  guage..To make t
1ed60 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65  he description e
1ed70 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c  asier to follow,
1ed80 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73   some of the pas
1ed90 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63  sages below desc
1eda0 72 69 62 65 0a 74 68 65 20 77 61 79 20 74 68 65  ribe.the way the
1edb0 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62   data returned b
1edc0 79 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  y a SELECT state
1edd0 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e  ment is determin
1ede0 65 64 20 61 73 20 61 20 73 65 72 69 65 73 20 6f  ed as a series o
1edf0 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73 20 69  f.steps. It is i
1ee00 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70  mportant to keep
1ee10 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68   in mind that th
1ee20 69 73 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c  is is purely ill
1ee30 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70  ustrative -.in p
1ee40 72 61 63 74 69 63 65 20 6e 65 69 74 68 65 72 20  ractice neither 
1ee50 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f  SQLite nor any o
1ee60 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20  ther SQL engine 
1ee70 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 66  is required to f
1ee80 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61  ollow .this or a
1ee90 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69 66 69  ny other specifi
1eea0 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 68 33 3e  c process...<h3>
1eeb0 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20 50 72  Simple Select Pr
1eec0 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a 0a 3c  ocessing</h3>..<
1eed0 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72  p>The syntax for
1eee0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
1eef0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64 65   statement is de
1ef00 70 69 63 74 65 64 20 69 6e 20 74 68 65 20 0a 5b  picted in the .[
1ef10 73 65 6c 65 63 74 2d 63 6f 72 65 20 73 79 6e 74  select-core synt
1ef20 61 78 20 64 69 61 67 72 61 6d 5d 2e 20 47 65 6e  ax diagram]. Gen
1ef30 65 72 61 74 69 6e 67 20 74 68 65 20 72 65 73 75  erating the resu
1ef40 6c 74 73 20 6f 66 20 61 20 73 69 6d 70 6c 65 20  lts of a simple 
1ef50 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74  SELECT.statement
1ef60 20 69 73 20 70 72 65 73 65 6e 74 65 64 20 61 73   is presented as
1ef70 20 61 20 66 6f 75 72 20 73 74 65 70 20 70 72 6f   a four step pro
1ef80 63 65 73 73 20 69 6e 20 74 68 65 20 64 65 73 63  cess in the desc
1ef90 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a 0a 0a  ription below:..
1efa0 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  <ol>.  <li> <p>[
1efb0 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70 72 6f  FROM clause] pro
1efc0 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70  cessing: The inp
1efd0 75 74 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ut data for the 
1efe0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73  simple SELECT is
1eff0 0a 20 20 20 20 20 20 20 64 65 74 65 72 6d 69 6e  .       determin
1f000 65 64 2e 20 54 68 65 20 69 6e 70 75 74 20 64 61  ed. The input da
1f010 74 61 20 69 73 20 65 69 74 68 65 72 20 69 6d 70  ta is either imp
1f020 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
1f030 20 72 6f 77 20 77 69 74 68 20 30 0a 20 20 20 20   row with 0.    
1f040 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66 20 74     columns (if t
1f050 68 65 72 65 20 69 73 20 6e 6f 20 46 52 4f 4d 20  here is no FROM 
1f060 63 6c 61 75 73 65 29 20 6f 72 20 69 73 20 64 65  clause) or is de
1f070 74 65 72 6d 69 6e 65 64 20 62 79 20 61 6e 61 6c  termined by anal
1f080 79 7a 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20  yzing the.      
1f090 20 5b 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 73 79   [join-source sy
1f0a0 6e 74 61 78 20 64 69 61 67 72 61 6d 7c 6a 6f 69  ntax diagram|joi
1f0b0 6e 2d 73 6f 75 72 63 65 5d 20 73 70 65 63 69 66  n-source] specif
1f0c0 69 63 61 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c  ication that fol
1f0d0 6c 6f 77 73 20 0a 20 20 20 20 20 20 20 61 6e 20  lows .       an 
1f0e0 65 78 70 6c 69 63 69 74 20 46 52 4f 4d 20 63 6c  explicit FROM cl
1f0f0 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ause..  <li> <p>
1f100 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70  [WHERE clause] p
1f110 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
1f120 6e 70 75 74 20 64 61 74 61 20 69 73 20 66 69 6c  nput data is fil
1f130 74 65 72 65 64 20 75 73 69 6e 67 20 74 68 65 20  tered using the 
1f140 57 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61  WHERE.       cla
1f150 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  use expression. 
1f160 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f   .  <li> <p>[GRO
1f170 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20  UP BY|GROUP BY, 
1f180 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c  HAVING and resul
1f190 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  t-column express
1f1a0 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  ion] processing:
1f1b0 20 0a 20 20 20 20 20 20 20 54 68 65 20 73 65 74   .       The set
1f1c0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
1f1d0 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61  is computed by a
1f1e0 67 67 72 65 67 61 74 69 6e 67 20 74 68 65 20 64  ggregating the d
1f1f0 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ata according to
1f200 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55  .       any GROU
1f210 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20  P BY clause and 
1f220 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20  calculating the 
1f230 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
1f240 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20  ssions for the. 
1f250 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68        rows of th
1f260 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74  e filtered input
1f270 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c   dataset.  .  <l
1f280 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c  i> <p>[DISTINCT|
1f290 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79  DISTINCT/ALL key
1f2a0 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67  word] processing
1f2b0 3a 20 49 66 20 74 68 65 20 71 75 65 72 79 20 69  : If the query i
1f2c0 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20  s a "SELECT.    
1f2d0 20 20 20 44 49 53 54 49 4e 43 54 22 20 71 75 65     DISTINCT" que
1f2e0 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ry, duplicate ro
1f2f0 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
1f300 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72  rom the set of r
1f310 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c  esult rows..</ol
1f320 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
1f330 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d  two types of sim
1f340 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
1f350 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65  ment - aggregate
1f360 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67   and .non-aggreg
1f370 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20  ate queries. ^A 
1f380 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
1f390 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67  atement is an ag
1f3a0 67 72 65 67 61 74 65 20 71 75 65 72 79 20 69 66  gregate query if
1f3b0 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74  .it contains eit
1f3c0 68 65 72 20 61 20 47 52 4f 55 50 20 42 59 20 63  her a GROUP BY c
1f3d0 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20  lause or one or 
1f3e0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
1f3f0 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20  unctions.in the 
1f400 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68  result-set. ^Oth
1f410 65 72 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d  erwise, if a sim
1f420 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61  ple SELECT conta
1f430 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65  ins no aggregate
1f440 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20  .functions or a 
1f450 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c  GROUP BY clause,
1f460 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67   it is a non-agg
1f470 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c  regate query...<
1f480 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e  p><b>1. Determin
1f490 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64  ation of input d
1f4a0 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65  ata (FROM clause
1f4b0 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62   processing).</b
1f4c0 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
1f4d0 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74  nt fromclause</t
1f4e0 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
1f4f0 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73  ords {FROM claus
1f500 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e}</tcl>..<p>The
1f510 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
1f520 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   by a simple SEL
1f530 45 43 54 20 71 75 65 72 79 20 69 73 20 61 20 73  ECT query is a s
1f540 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72  et of <i>N</i> r
1f550 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f  ows .each <i>M</
1f560 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e  i> columns wide.
1f570 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52  ..<p>^(If the FR
1f580 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  OM clause is omi
1f590 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70  tted from a simp
1f5a0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
1f5b0 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69  ent, then the .i
1f5c0 6e 70 75 74 20 64 61 74 61 20 69 73 20 69 6d 70  nput data is imp
1f5d0 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
1f5e0 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e   row zero column
1f5f0 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c  s wide)^ (i.e. <
1f600 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69  i>N</i>=1 and.<i
1f610 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49  >M</i>=0)...<p>I
1f620 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  f a FROM clause 
1f630 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
1f640 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20  e data on which 
1f650 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
1f660 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63  query.operates c
1f670 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e  omes from the on
1f680 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
1f690 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 28   or subqueries (
1f6a0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1f6b0 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73  s.in parenthesis
1f6c0 29 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c  ) specified foll
1f6d0 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b  owing the FROM k
1f6e0 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 2d 73  eyword. ^A sub-s
1f6f0 65 6c 65 63 74 20 73 70 65 63 69 66 69 65 64 0a  elect specified.
1f700 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f 75 72  in the join-sour
1f710 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ce following the
1f720 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 6e 20   FROM clause in 
1f730 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
1f740 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e  statement is.han
1f750 64 6c 65 64 20 61 73 20 69 66 20 69 74 20 77 61  dled as if it wa
1f760 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  s a table contai
1f770 6e 69 6e 67 20 74 68 65 20 64 61 74 61 20 72 65  ning the data re
1f780 74 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74  turned by execut
1f790 69 6e 67 20 74 68 65 0a 73 75 62 2d 73 65 6c 65  ing the.sub-sele
1f7a0 63 74 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 45  ct statement. ^E
1f7b0 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
1f7c0 65 20 73 75 62 2d 73 65 6c 65 63 74 20 64 61 74  e sub-select dat
1f7d0 61 73 65 74 20 69 6e 68 65 72 69 74 73 20 74 68  aset inherits th
1f7e0 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c  e.[collation|col
1f7f0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d  lation sequence]
1f800 20 61 6e 64 20 5b 61 66 66 69 6e 69 74 79 5d 20   and [affinity] 
1f810 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
1f820 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 0a  ding expression.
1f830 69 6e 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  in the sub-selec
1f840 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70  t statement...<p
1f850 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 6f 6e  >^If there is on
1f860 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  ly a single tabl
1f870 65 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f  e in the join-so
1f880 75 72 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  urce following t
1f890 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73 65 2c 20  he FROM.clause, 
1f8a0 74 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20 64  then the input d
1f8b0 61 74 61 20 75 73 65 64 20 62 79 20 74 68 65 20  ata used by the 
1f8c0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1f8d0 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   is the contents
1f8e0 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64 20 74 61   of the.named ta
1f8f0 62 6c 65 2e 20 5e 49 66 20 74 68 65 72 65 20 69  ble. ^If there i
1f900 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  s more than one 
1f910 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20  table specified 
1f920 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 6a  as part of the.j
1f930 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f  oin-source follo
1f940 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b 65  wing the FROM ke
1f950 79 77 6f 72 64 2c 20 74 68 65 6e 20 74 68 65 20  yword, then the 
1f960 63 6f 6e 74 65 6e 74 73 20 6f 66 20 65 61 63 68  contents of each
1f970 20 6e 61 6d 65 64 20 74 61 62 6c 65 0a 61 72 65   named table.are
1f980 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73   joined into a s
1f990 69 6e 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f  ingle dataset fo
1f9a0 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  r the simple SEL
1f9b0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  ECT statement to
1f9c0 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61   operate on..Exa
1f9d0 63 74 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74  ctly how the dat
1f9e0 61 20 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65  a is combined de
1f9f0 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65  pends on the spe
1fa00 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 5d 20  cific [join-op] 
1fa10 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72  and.[join-constr
1fa20 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f  aint] used to co
1fa30 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65 73  nnect the tables
1fa40 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 74   or subqueries t
1fa50 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c  ogether...<p>All
1fa60 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65   joins in SQLite
1fa70 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68   are based on th
1fa80 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
1fa90 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20  uct of the left 
1faa0 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64  and.right-hand d
1fab0 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f  atasets. ^The co
1fac0 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72  lumns of the car
1fad0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64  tesian product d
1fae0 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a  ataset are, in .
1faf0 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63  order, all the c
1fb00 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
1fb10 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ft-hand dataset 
1fb20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20  followed by all 
1fb30 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
1fb40 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  he right-hand da
1fb50 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73  taset. ^There is
1fb60 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61   a row in the ca
1fb70 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
1fb80 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62  dataset.formed b
1fb90 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68  y combining each
1fba0 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
1fbb0 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f  ion of a row fro
1fbc0 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  m the left-hand 
1fbd0 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20  .and right-hand 
1fbe0 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f  datasets. ^(In o
1fbf0 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
1fc00 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74  he left-hand dat
1fc10 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  aset consists of
1fc20 0a 3c 69 3e 4e 6c 68 73 3c 2f 69 3e 20 72 6f 77  .<i>Nlhs</i> row
1fc30 73 20 6f 66 20 3c 69 3e 4d 6c 68 73 3c 2f 69 3e  s of <i>Mlhs</i>
1fc40 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74 68   columns, and th
1fc50 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
1fc60 61 73 65 74 20 6f 66 0a 3c 69 3e 4e 72 68 73 3c  aset of.<i>Nrhs<
1fc70 2f 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e 4d  /i> rows of <i>M
1fc80 72 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c  rhs</i> columns,
1fc90 20 74 68 65 6e 20 74 68 65 20 63 61 72 74 65 73   then the cartes
1fca0 69 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61  ian product is a
1fcb0 0a 64 61 74 61 73 65 74 20 6f 66 20 3c 69 3e 4e  .dataset of <i>N
1fcc0 6c 68 73 2e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77  lhs.Nrhs</i> row
1fcd0 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69  s, each containi
1fce0 6e 67 20 3c 69 3e 4d 6c 68 73 2b 4d 72 68 73 3c  ng <i>Mlhs+Mrhs<
1fcf0 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a  /i> columns.)^..
1fd00 3c 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d  <p>^If the join-
1fd10 6f 70 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49  op is "CROSS JOI
1fd20 4e 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  N", "INNER JOIN"
1fd30 2c 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f  , "JOIN" or a co
1fd40 6d 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68  mma.(",") and th
1fd50 65 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20  ere is no ON or 
1fd60 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
1fd70 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
1fd80 20 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d   the join is.sim
1fd90 70 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61  ply the cartesia
1fda0 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65  n product of the
1fdb0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
1fdc0 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a  hand datasets. .
1fdd0 5e 54 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66  ^There is no dif
1fde0 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
1fdf0 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  the "INNER JOIN"
1fe00 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22  , "JOIN" and ","
1fe10 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73 2e   join.operators.
1fe20 20 5e 28 54 68 65 20 22 43 52 4f 53 53 20 4a 4f   ^(The "CROSS JO
1fe30 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f  IN" join operato
1fe40 72 20 70 72 6f 64 75 63 65 73 20 74 68 65 20 73  r produces the s
1fe50 61 6d 65 20 64 61 74 61 20 61 73 20 74 68 65 20  ame data as the 
1fe60 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22  ."INNER JOIN", "
1fe70 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f 70  JOIN" and "," op
1fe80 65 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20 69  erators)^, but i
1fe90 73 20 0a 3c 61 20 68 72 65 66 3d 6f 70 74 6f 76  s .<a href=optov
1fea0 65 72 76 69 65 77 2e 68 74 6d 6c 23 6d 61 6e 63  erview.html#manc
1feb0 74 72 6c 3e 68 61 6e 64 6c 65 64 20 73 6c 69 67  trl>handled slig
1fec0 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74 6c 79  htly differently
1fed0 20 62 79 20 74 68 65 20 71 75 65 72 79 0a 6f 70   by the query.op
1fee0 74 69 6d 69 7a 65 72 3c 2f 61 3e 2e 20 4f 74 68  timizer</a>. Oth
1fef0 65 72 77 69 73 65 2c 20 69 74 20 69 73 20 74 68  erwise, it is th
1ff00 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
1ff10 75 63 74 20 6d 6f 64 69 66 69 65 64 20 0a 61 63  uct modified .ac
1ff20 63 6f 72 64 69 6e 67 20 74 6f 20 6f 6e 65 20 6f  cording to one o
1ff30 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
1ff40 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70  llowing bullet p
1ff50 6f 69 6e 74 73 3a 20 0a 0a 3c 75 6c 3e 0a 20 20  oints: ..<ul>.  
1ff60 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65  <li> <p>^(If the
1ff70 72 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75  re is an ON clau
1ff80 73 65 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  se specified, th
1ff90 65 6e 20 74 68 65 20 4f 4e 20 65 78 70 72 65 73  en the ON expres
1ffa0 73 69 6f 6e 20 69 73 0a 20 20 20 20 20 20 20 65  sion is.       e
1ffb0 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
1ffc0 68 20 72 6f 77 20 6f 66 20 74 68 65 20 63 61 72  h row of the car
1ffd0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61  tesian product a
1ffe0 73 20 61 20 0a 20 20 20 20 20 20 20 5b 62 6f 6f  s a .       [boo
1fff0 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lean expression]
20000 2e 20 41 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77  . All rows for w
20010 68 69 63 68 20 74 68 65 20 65 78 70 72 65 73 73  hich the express
20020 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
20030 20 0a 20 20 20 20 20 20 20 66 61 6c 73 65 20 61   .       false a
20040 72 65 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d  re excluded from
20050 20 74 68 65 20 64 61 74 61 73 65 74 2e 29 5e 0a   the dataset.)^.
20060 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 49 66 20 74  .  <li> <p>^If t
20070 68 65 72 65 20 69 73 20 61 20 55 53 49 4e 47 20  here is a USING 
20080 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 64  clause specified
20090 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
200a0 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 2c  join-constraint,
200b0 0a 20 20 20 20 20 20 20 74 68 65 6e 20 65 61 63  .       then eac
200c0 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  h of the column 
200d0 6e 61 6d 65 73 20 73 70 65 63 69 66 69 65 64 20  names specified 
200e0 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68  must exist in th
200f0 65 20 64 61 74 61 73 65 74 73 20 74 6f 20 0a 20  e datasets to . 
20100 20 20 20 20 20 20 62 6f 74 68 20 74 68 65 20 6c        both the l
20110 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 6f 66  eft and right of
20120 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 2e 20 5e 28   the join-op. ^(
20130 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66  For each pair of
20140 20 6e 61 6d 65 73 61 6b 65 0a 20 20 20 20 20 20   namesake.      
20150 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78   columns, the ex
20160 70 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20  pression "lhs.X 
20170 3d 20 72 68 73 2e 58 22 20 69 73 20 65 76 61 6c  = rhs.X" is eval
20180 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  uated for each r
20190 6f 77 20 6f 66 0a 20 20 20 20 20 20 20 74 68 65  ow of.       the
201a0 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
201b0 63 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e  ct as a [boolean
201c0 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 6c   expression]. Al
201d0 6c 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  l rows for which
201e0 20 6f 6e 65 0a 20 20 20 20 20 20 20 6f 72 20 6d   one.       or m
201f0 6f 72 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  ore of the expre
20200 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 73  ssions evaluates
20210 20 74 6f 20 66 61 6c 73 65 20 61 72 65 20 65 78   to false are ex
20220 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 0a  cluded from the.
20230 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 73 65         result se
20240 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d 70 61  t.)^ ^When compa
20250 72 69 6e 67 20 76 61 6c 75 65 73 20 61 73 20 61  ring values as a
20260 20 72 65 73 75 6c 74 20 6f 66 20 61 20 55 53 49   result of a USI
20270 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 0a 20  NG clause, the. 
20280 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20 72 75 6c        normal rul
20290 65 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  es for handling 
202a0 61 66 66 69 6e 69 74 69 65 73 2c 20 63 6f 6c 6c  affinities, coll
202b0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 20  ation sequences 
202c0 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20  and NULL.       
202d0 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70 61 72  values in compar
202e0 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e 54 68  isons apply. ^Th
202f0 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68  e column from th
20300 65 20 64 61 74 61 73 65 74 20 6f 6e 20 74 68 65  e dataset on the
20310 0a 20 20 20 20 20 20 20 6c 65 66 74 2d 68 61 6e  .       left-han
20320 64 20 73 69 64 65 20 6f 66 20 74 68 65 20 6a 6f  d side of the jo
20330 69 6e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63  in operator is c
20340 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
20350 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  on the left-hand
20360 0a 20 20 20 20 20 20 20 73 69 64 65 20 6f 66 20  .       side of 
20370 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
20380 70 65 72 61 74 6f 72 20 28 3d 29 20 66 6f 72 20  perator (=) for 
20390 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
203a0 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 20 20 20  collation .     
203b0 20 20 73 65 71 75 65 6e 63 65 20 61 6e 64 20 61    sequence and a
203c0 66 66 69 6e 69 74 79 20 70 72 65 63 65 64 65 6e  ffinity preceden
203d0 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c 70 3e 5e  ce...       <p>^
203e0 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66  For each pair of
203f0 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66   columns identif
20400 69 65 64 20 62 79 20 61 20 55 53 49 4e 47 20 63  ied by a USING c
20410 6c 61 75 73 65 2c 20 74 68 65 20 63 6f 6c 75 6d  lause, the colum
20420 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68  n.       from th
20430 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
20440 61 73 65 74 20 69 73 20 6f 6d 69 74 74 65 64 20  aset is omitted 
20450 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e 65 64 20  from the joined 
20460 64 61 74 61 73 65 74 2e 20 5e 54 68 69 73 20 0a  dataset. ^This .
20470 20 20 20 20 20 20 20 69 73 20 74 68 65 20 6f 6e         is the on
20480 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  ly difference be
20490 74 77 65 65 6e 20 61 20 55 53 49 4e 47 20 63 6c  tween a USING cl
204a0 61 75 73 65 20 61 6e 64 20 69 74 73 20 65 71 75  ause and its equ
204b0 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20 20 20 20  ivalent ON.     
204c0 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 20    constraint... 
204d0 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68   <li> <p>^(If th
204e0 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72  e NATURAL keywor
204f0 64 20 69 73 20 61 64 64 65 64 20 74 6f 20 61 6e  d is added to an
20500 79 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  y of the join-op
20510 73 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20  s, then an.     
20520 20 20 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47    implicit USING
20530 20 63 6c 61 75 73 65 20 69 73 20 61 64 64 65 64   clause is added
20540 20 74 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e   to the join-con
20550 73 74 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d  straints. The im
20560 70 6c 69 63 69 74 0a 20 20 20 20 20 20 20 55 53  plicit.       US
20570 49 4e 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61  ING clause conta
20580 69 6e 73 20 65 61 63 68 20 6f 66 20 74 68 65 20  ins each of the 
20590 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
205a0 74 20 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68  t appear in both
205b0 0a 20 20 20 20 20 20 20 74 68 65 20 6c 65 66 74  .       the left
205c0 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20   and right-hand 
205d0 69 6e 70 75 74 20 64 61 74 61 73 65 74 73 2e 29  input datasets.)
205e0 5e 20 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61  ^ ^If the left a
205f0 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20  nd right-hand.  
20600 20 20 20 20 20 69 6e 70 75 74 20 64 61 74 61 73       input datas
20610 65 74 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63  ets feature no c
20620 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ommon column nam
20630 65 73 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54  es, then the NAT
20640 55 52 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20  URAL keyword.   
20650 20 20 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63      has no effec
20660 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  t on the results
20670 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41   of the join. ^A
20680 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61   USING or ON cla
20690 75 73 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e  use may.       n
206a0 6f 74 20 62 65 20 61 64 64 65 64 20 74 6f 20 61  ot be added to a
206b0 20 6a 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69   join that speci
206c0 66 69 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c  fies the NATURAL
206d0 20 6b 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69   keyword...  <li
206e0 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f  > <p>^(If the jo
206f0 69 6e 2d 6f 70 20 69 73 20 61 20 22 4c 45 46 54  in-op is a "LEFT
20700 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20   JOIN" or "LEFT 
20710 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65  OUTER JOIN", the
20720 6e 20 61 66 74 65 72 0a 20 20 20 20 20 20 20 74  n after.       t
20730 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 66  he ON or USING f
20740 69 6c 74 65 72 69 6e 67 20 63 6c 61 75 73 65 73  iltering clauses
20750 20 68 61 76 65 20 62 65 65 6e 20 61 70 70 6c 69   have been appli
20760 65 64 2c 20 61 6e 20 65 78 74 72 61 20 72 6f 77  ed, an extra row
20770 20 69 73 20 0a 20 20 20 20 20 20 20 61 64 64 65   is .       adde
20780 64 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20  d to the output 
20790 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
207a0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65 66  the original lef
207b0 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a 20 20  t-hand input .  
207c0 20 20 20 20 20 64 61 74 61 73 65 74 20 74 68 61       dataset tha
207d0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
207e0 20 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 20   no rows at all 
207f0 69 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69 74 65  in the composite
20800 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20  .       dataset 
20810 28 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68 65  (if any).)^ ^The
20820 20 61 64 64 65 64 20 72 6f 77 73 20 63 6f 6e 74   added rows cont
20830 61 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  ain NULL values 
20840 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 20  in the columns. 
20850 20 20 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64        that would
20860 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69   normally contai
20870 6e 20 76 61 6c 75 65 73 20 63 6f 70 69 65 64 20  n values copied 
20880 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68  from the right-h
20890 61 6e 64 20 69 6e 70 75 74 0a 20 20 20 20 20 20  and input.      
208a0 20 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75 6c   dataset.  .</ul
208b0 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f 72  >..<p>^(When mor
208c0 65 20 74 68 61 6e 20 74 77 6f 20 74 61 62 6c 65  e than two table
208d0 73 20 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f 67  s are joined tog
208e0 65 74 68 65 72 20 61 73 20 70 61 72 74 20 6f 66  ether as part of
208f0 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c 0a   a FROM clause,.
20900 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 69  the join operati
20910 6f 6e 73 20 61 72 65 20 70 72 6f 63 65 73 73 65  ons are processe
20920 64 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 20  d in order from 
20930 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49  left to right. I
20940 6e 20 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c 20  n other .words, 
20950 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
20960 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a  (A join-op-1 B j
20970 6f 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20 63  oin-op-2 C) is c
20980 6f 6d 70 75 74 65 64 20 61 73 20 0a 28 28 41 20  omputed as .((A 
20990 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f 69  join-op-1 B) joi
209a0 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 20 20 20  n-op-2 C).)^.   
209b0 20 20 20 20 0a 0a 3c 70 3e 3c 62 3e 32 2e 20 57      ..<p><b>2. W
209c0 48 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74  HERE clause filt
209d0 65 72 69 6e 67 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  ering.</b>.<tcl>
209e0 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65 72  hd_fragment wher
209f0 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74  eclause</tcl>.<t
20a00 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
20a10 57 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74  WHERE clause}</t
20a20 63 6c 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61 20 57  cl>..<p>^(If a W
20a30 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 73  HERE clause is s
20a40 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 57 48  pecified, the WH
20a50 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ERE expression i
20a60 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
20a70 0a 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65  .each row in the
20a80 20 69 6e 70 75 74 20 64 61 74 61 20 61 73 20 61   input data as a
20a90 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
20aa0 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20  sion]. All rows 
20ab0 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 57 48  for which the.WH
20ac0 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65  ERE clause expre
20ad0 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
20ae0 74 6f 20 66 61 6c 73 65 20 61 72 65 20 65 78 63  to false are exc
20af0 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64  luded from the d
20b00 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a 63 6f  ataset before.co
20b10 6e 74 69 6e 75 69 6e 67 2e 29 5e 0a 0a 3c 70 3e  ntinuing.)^..<p>
20b20 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e  <b>3. Generation
20b30 20 6f 66 20 74 68 65 20 73 65 74 20 6f 66 20 72   of the set of r
20b40 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a  esult rows.</b>.
20b50 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
20b60 20 72 65 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e   resultset</tcl>
20b70 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64  .<tcl>hd_keyword
20b80 73 20 7b 72 65 73 75 6c 74 2d 73 65 74 20 65 78  s {result-set ex
20b90 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55  pressions} {GROU
20ba0 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  P BY}</tcl>..<p>
20bb0 4f 6e 63 65 20 74 68 65 20 69 6e 70 75 74 20 64  Once the input d
20bc0 61 74 61 20 66 72 6f 6d 20 74 68 65 20 46 52 4f  ata from the FRO
20bd0 4d 20 63 6c 61 75 73 65 20 68 61 73 20 62 65 65  M clause has bee
20be0 6e 20 66 69 6c 74 65 72 65 64 20 62 79 20 74 68  n filtered by th
20bf0 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 65  e.WHERE clause e
20c00 78 70 72 65 73 73 69 6f 6e 20 28 69 66 20 61 6e  xpression (if an
20c10 79 29 2c 20 74 68 65 20 73 65 74 20 6f 66 20 72  y), the set of r
20c20 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72 20 74  esult rows for t
20c30 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43  he simple .SELEC
20c40 54 20 61 72 65 20 63 61 6c 63 75 6c 61 74 65 64  T are calculated
20c50 2e 20 45 78 61 63 74 6c 79 20 68 6f 77 20 74 68  . Exactly how th
20c60 69 73 20 69 73 20 64 6f 6e 65 20 64 65 70 65 6e  is is done depen
20c70 64 73 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68  ds on whether th
20c80 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54  e simple .SELECT
20c90 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65   is an aggregate
20ca0 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74   or non-aggregat
20cb0 65 20 71 75 65 72 79 2c 20 61 6e 64 20 77 68 65  e query, and whe
20cc0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 47 52  ther or not a GR
20cd0 4f 55 50 0a 42 59 20 63 6c 61 75 73 65 20 77 61  OUP.BY clause wa
20ce0 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70  s specified...<p
20cf0 3e 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  > The list of ex
20d00 70 72 65 73 73 69 6f 6e 73 20 62 65 74 77 65 65  pressions betwee
20d10 6e 20 74 68 65 20 53 45 4c 45 43 54 20 61 6e 64  n the SELECT and
20d20 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69   FROM keywords i
20d30 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72  s known as.the r
20d40 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
20d50 20 6c 69 73 74 2e 20 20 5e 49 66 20 61 20 72 65   list.  ^If a re
20d60 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
20d70 69 73 20 74 68 65 20 73 70 65 63 69 61 6c 20 65  is the special e
20d80 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68  xpression."*" th
20d90 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69  en all columns i
20da0 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  n the input data
20db0 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 64   are substituted
20dc0 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78   for that one ex
20dd0 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74  pression..^(If t
20de0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
20df0 20 74 68 65 20 61 6c 69 61 73 20 6f 66 20 61 20   the alias of a 
20e00 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
20e10 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
20e20 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79  ause.followed by
20e30 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63   ".*" then all c
20e40 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20  olumns from the 
20e50 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72 20 73  named table or s
20e60 75 62 71 75 65 72 79 20 61 72 65 0a 73 75 62 73  ubquery are.subs
20e70 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 65 20  tituted for the 
20e80 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73 69 6f  single expressio
20e90 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20 61 6e 20  n.)^ ^(It is an 
20ea0 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22  error to use a "
20eb0 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20  *" or."alias.*" 
20ec0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e  expression in an
20ed0 79 20 63 6f 6e 74 65 78 74 20 6f 74 68 65 72 20  y context other 
20ee0 74 68 61 6e 20 74 68 61 6e 20 61 20 72 65 73 75  than than a resu
20ef0 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
20f00 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73 20 61 6c  st.)^.^(It is al
20f10 73 6f 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 75  so an error to u
20f20 73 65 20 61 20 22 2a 22 20 6f 72 20 22 61 6c 69  se a "*" or "ali
20f30 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f 6e  as.*" expression
20f40 20 69 6e 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   in a simple SEL
20f50 45 43 54 0a 71 75 65 72 79 20 74 68 61 74 20 64  ECT.query that d
20f60 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20 46  oes not have a F
20f70 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c  ROM clause.)^..<
20f80 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20  p> ^(The number 
20f90 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
20fa0 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  e rows returned 
20fb0 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  by a simple SELE
20fc0 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20  CT statement.is 
20fd0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6e 75 6d  equal to the num
20fe0 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
20ff0 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
21000 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
21010 20 61 66 74 65 72 0a 73 75 62 73 74 69 74 75 74   after.substitut
21020 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20 61 6c 69  ion of * and ali
21030 61 73 2e 2a 20 65 78 70 72 65 73 73 69 6f 6e 73  as.* expressions
21040 2e 29 5e 20 45 61 63 68 20 72 65 73 75 6c 74 20  .)^ Each result 
21050 72 6f 77 20 69 73 20 63 61 6c 63 75 6c 61 74 65  row is calculate
21060 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20  d by.evaluating 
21070 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
21080 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
21090 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 77 69  pression list wi
210a0 74 68 20 72 65 73 70 65 63 74 20 74 6f 20 61 0a  th respect to a.
210b0 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 69 6e  single row of in
210c0 70 75 74 20 64 61 74 61 20 6f 72 2c 20 66 6f 72  put data or, for
210d0 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69   aggregate queri
210e0 65 73 2c 20 77 69 74 68 20 72 65 73 70 65 63 74  es, with respect
210f0 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f 66 20 72   to a group.of r
21100 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  ows...<ul>.  <li
21110 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45  ><p>^If the SELE
21120 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
21130 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61  <b>a non-aggrega
21140 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20 74 68  te query</b>, th
21150 65 6e 20 0a 20 20 20 20 65 61 63 68 20 65 78 70  en .    each exp
21160 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72  ression in the r
21170 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
21180 20 6c 69 73 74 20 69 73 20 65 76 61 6c 75 61 74   list is evaluat
21190 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ed for each row 
211a0 69 6e 0a 20 20 20 20 74 68 65 20 64 61 74 61 73  in.    the datas
211b0 65 74 20 66 69 6c 74 65 72 65 64 20 62 79 20 74  et filtered by t
211c0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e  he WHERE clause.
211d0 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ..  <li><p>^If t
211e0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
211f0 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67 67  ent is <b>an agg
21200 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
21210 68 6f 75 74 20 61 20 47 52 4f 55 50 0a 20 20 20  hout a GROUP.   
21220 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20   BY</b> clause, 
21230 74 68 65 6e 20 65 61 63 68 20 61 67 67 72 65 67  then each aggreg
21240 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ate expression i
21250 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
21260 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74   is .    evaluat
21270 65 64 20 6f 6e 63 65 20 61 63 72 6f 73 73 20 74  ed once across t
21280 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 73 65  he entire datase
21290 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d 61 67 67  t. ^Each non-agg
212a0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
212b0 6e 0a 20 20 20 20 69 6e 20 74 68 65 20 72 65 73  n.    in the res
212c0 75 6c 74 2d 73 65 74 20 69 73 20 65 76 61 6c 75  ult-set is evalu
212d0 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 61 6e  ated once for an
212e0 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c   arbitrarily sel
212f0 65 63 74 65 64 20 72 6f 77 20 6f 66 0a 20 20 20  ected row of.   
21300 20 74 68 65 20 64 61 74 61 73 65 74 2e 20 5e 54   the dataset. ^T
21310 68 65 20 73 61 6d 65 20 61 72 62 69 74 72 61 72  he same arbitrar
21320 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77  ily selected row
21330 20 69 73 20 75 73 65 64 20 66 6f 72 20 65 61 63   is used for eac
21340 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67 72 65 67  h.    non-aggreg
21350 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ate expression. 
21360 5e 4f 72 2c 20 69 66 20 74 68 65 20 64 61 74 61  ^Or, if the data
21370 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 7a 65 72  set contains zer
21380 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 0a 20 20  o rows, then .  
21390 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65    each non-aggre
213a0 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20  gate expression 
213b0 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67 61  is evaluated aga
213c0 69 6e 73 74 20 61 20 72 6f 77 20 63 6f 6e 73 69  inst a row consi
213d0 73 74 69 6e 67 0a 20 20 20 20 65 6e 74 69 72 65  sting.    entire
213e0 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75 65  ly of NULL value
213f0 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68 65 20 73  s...   <p>^The s
21400 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
21410 75 6c 74 2d 73 65 74 20 64 61 74 61 20 63 72 65  ult-set data cre
21420 61 74 65 64 20 62 79 20 65 76 61 6c 75 61 74 69  ated by evaluati
21430 6e 67 20 74 68 65 20 61 67 67 72 65 67 61 74 65  ng the aggregate
21440 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d 61 67 67  .    and non-agg
21450 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
21460 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
21470 2d 73 65 74 20 66 6f 72 6d 73 20 74 68 65 20 72  -set forms the r
21480 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20 20 20 20  esult of an.    
21490 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
214a0 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50 20  without a GROUP 
214b0 42 59 20 63 6c 61 75 73 65 2e 20 5e 41 6e 20 61  BY clause. ^An a
214c0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
214d0 69 74 68 6f 75 74 20 61 0a 20 20 20 20 47 52 4f  ithout a.    GRO
214e0 55 50 20 42 59 20 63 6c 61 75 73 65 20 61 6c 77  UP BY clause alw
214f0 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61 63  ays returns exac
21500 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f 66 20 64  tly one row of d
21510 61 74 61 2c 20 65 76 65 6e 20 69 66 20 74 68 65  ata, even if the
21520 72 65 20 61 72 65 0a 20 20 20 20 7a 65 72 6f 20  re are.    zero 
21530 72 6f 77 73 20 6f 66 20 69 6e 70 75 74 20 64 61  rows of input da
21540 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28  ta...  <li><p>^(
21550 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  If the SELECT st
21560 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e  atement is <b>an
21570 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
21580 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20   with a GROUP.  
21590 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c    BY</b> clause,
215a0 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68   then each of th
215b0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 70  e expressions sp
215c0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
215d0 6f 66 20 74 68 65 0a 20 20 20 20 47 52 4f 55 50  of the.    GROUP
215e0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 65 76   BY clause is ev
215f0 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68  aluated for each
21600 20 72 6f 77 20 6f 66 20 74 68 65 20 64 61 74 61   row of the data
21610 73 65 74 2e 20 45 61 63 68 20 72 6f 77 0a 20 20  set. Each row.  
21620 20 20 69 73 20 74 68 65 6e 20 61 73 73 69 67 6e    is then assign
21630 65 64 20 74 6f 20 61 20 22 67 72 6f 75 70 22 20  ed to a "group" 
21640 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73  based on the res
21650 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f 72 20 77  ults; rows for w
21660 68 69 63 68 0a 20 20 20 20 74 68 65 20 72 65 73  hich.    the res
21670 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69  ults of evaluati
21680 6e 67 20 74 68 65 20 47 52 4f 55 50 20 42 59 20  ng the GROUP BY 
21690 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
216a0 74 68 65 20 73 61 6d 65 20 61 72 65 0a 20 20 20  the same are.   
216b0 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65   assigned to the
216c0 20 73 61 6d 65 20 67 72 6f 75 70 2e 29 5e 20 5e   same group.)^ ^
216d0 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
216e0 20 6f 66 20 67 72 6f 75 70 69 6e 67 20 72 6f 77   of grouping row
216f0 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20 76 61 6c  s, NULL .    val
21700 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
21710 65 64 20 65 71 75 61 6c 2e 20 5e 54 68 65 20 75  ed equal. ^The u
21720 73 75 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 5b  sual rules for [
21730 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65 63 74  collation|select
21740 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c 6c 61 74  ing a.    collat
21750 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 77 69  ion sequence] wi
21760 74 68 20 77 68 69 63 68 20 74 6f 20 63 6f 6d 70  th which to comp
21770 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73 20  are text values 
21780 61 70 70 6c 79 20 77 68 65 6e 20 65 76 61 6c 75  apply when evalu
21790 61 74 69 6e 67 0a 20 20 20 20 65 78 70 72 65 73  ating.    expres
217a0 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50  sions in a GROUP
217b0 20 42 59 20 63 6c 61 75 73 65 2e 20 20 5e 54 68   BY clause.  ^Th
217c0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  e expressions in
217d0 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   the GROUP BY cl
217e0 61 75 73 65 0a 20 20 20 20 64 6f 20 3c 65 6d 3e  ause.    do <em>
217f0 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f  not</em> have to
21800 20 62 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20   be expressions 
21810 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 74  that appear in t
21820 68 65 20 72 65 73 75 6c 74 2e 20 5e 54 68 65 0a  he result. ^The.
21830 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20      expressions 
21840 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c  in a GROUP BY cl
21850 61 75 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ause may not be 
21860 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
21870 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e  sions...    <p>^
21880 28 49 66 20 61 20 48 41 56 49 4e 47 20 63 6c 61  (If a HAVING cla
21890 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
218a0 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
218b0 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20  d once for each 
218c0 67 72 6f 75 70 20 0a 20 20 20 20 6f 66 20 72 6f  group .    of ro
218d0 77 73 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e  ws as a [boolean
218e0 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66   expression]. If
218f0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65   the result of e
21900 76 61 6c 75 61 74 69 6e 67 20 74 68 65 0a 20 20  valuating the.  
21910 20 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20    HAVING clause 
21920 69 73 20 66 61 6c 73 65 2c 20 74 68 65 20 67 72  is false, the gr
21930 6f 75 70 20 69 73 20 64 69 73 63 61 72 64 65 64  oup is discarded
21940 2e 29 5e 20 5e 49 66 20 74 68 65 20 48 41 56 49  .)^ ^If the HAVI
21950 4e 47 20 63 6c 61 75 73 65 20 69 73 0a 20 20 20  NG clause is.   
21960 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65 78   an aggregate ex
21970 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20  pression, it is 
21980 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73  evaluated across
21990 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65   all rows in the
219a0 20 67 72 6f 75 70 2e 20 5e 49 66 0a 20 20 20 20   group. ^If.    
219b0 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  a HAVING clause 
219c0 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61  is a non-aggrega
219d0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
219e0 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 77  t is evaluated w
219f0 69 74 68 20 72 65 73 70 65 63 74 0a 20 20 20 20  ith respect.    
21a00 74 6f 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c  to an arbitraril
21a10 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 66  y selected row f
21a20 72 6f 6d 20 74 68 65 20 67 72 6f 75 70 2e 20 20  rom the group.  
21a30 5e 54 68 65 20 48 41 56 49 4e 47 20 65 78 70 72  ^The HAVING expr
21a40 65 73 73 69 6f 6e 20 6d 61 79 0a 20 20 20 20 72  ession may.    r
21a50 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20  efer to values, 
21a60 65 76 65 6e 20 61 67 67 72 65 67 61 74 65 20 66  even aggregate f
21a70 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20 61  unctions, that a
21a80 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72 65  re not in the re
21a90 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c  sult.</p>..    <
21aa0 70 3e 5e 45 61 63 68 20 65 78 70 72 65 73 73 69  p>^Each expressi
21ab0 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
21ac0 2d 73 65 74 20 69 73 20 74 68 65 6e 20 65 76 61  -set is then eva
21ad0 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20  luated once for 
21ae0 65 61 63 68 0a 20 20 20 20 67 72 6f 75 70 20 6f  each.    group o
21af0 66 20 72 6f 77 73 2e 20 5e 49 66 20 74 68 65 20  f rows. ^If the 
21b00 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
21b10 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
21b20 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 0a 20 20  ssion, it is .  
21b30 20 20 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f    evaluated acro
21b40 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74  ss all rows in t
21b50 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74 68 65 72  he group. ^Other
21b60 77 69 73 65 2c 20 69 74 20 69 73 20 65 76 61 6c  wise, it is eval
21b70 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a 20 20  uated against.  
21b80 20 20 61 20 73 69 6e 67 6c 65 20 61 72 62 69 74    a single arbit
21b90 72 61 72 69 6c 79 20 63 68 6f 73 65 6e 20 72 6f  rarily chosen ro
21ba0 77 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74 68  w from within th
21bb0 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 74 68 65  e group. ^If the
21bc0 72 65 20 69 73 20 6d 6f 72 65 0a 20 20 20 20 74  re is more.    t
21bd0 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72  han one non-aggr
21be0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
21bf0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73   in the result-s
21c00 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20 73 75 63  et, then all suc
21c10 68 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e  h.    expression
21c20 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20  s are evaluated 
21c30 66 6f 72 20 74 68 65 20 73 61 6d 65 20 72 6f 77  for the same row
21c40 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20  ...    <p>^Each 
21c50 67 72 6f 75 70 20 6f 66 20 69 6e 70 75 74 20 64  group of input d
21c60 61 74 61 73 65 74 20 72 6f 77 73 20 63 6f 6e 74  ataset rows cont
21c70 72 69 62 75 74 65 73 20 61 20 73 69 6e 67 6c 65  ributes a single
21c80 20 72 6f 77 20 74 6f 20 74 68 65 20 0a 20 20 20   row to the .   
21c90 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
21ca0 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74 20 74 6f  ows. ^Subject to
21cb0 20 66 69 6c 74 65 72 69 6e 67 20 61 73 73 6f 63   filtering assoc
21cc0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 44  iated with the D
21cd0 49 53 54 49 4e 43 54 0a 20 20 20 20 6b 65 79 77  ISTINCT.    keyw
21ce0 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20  ord, the number 
21cf0 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  of rows returned
21d00 20 62 79 20 61 6e 20 61 67 67 72 65 67 61 74 65   by an aggregate
21d10 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47 52   query with a GR
21d20 4f 55 50 0a 20 20 20 20 42 59 20 63 6c 61 75 73  OUP.    BY claus
21d30 65 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  e is the same as
21d40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 67   the number of g
21d50 72 6f 75 70 73 20 6f 66 20 72 6f 77 73 20 70 72  roups of rows pr
21d60 6f 64 75 63 65 64 20 62 79 20 61 70 70 6c 79 69  oduced by applyi
21d70 6e 67 0a 20 20 20 20 74 68 65 20 47 52 4f 55 50  ng.    the GROUP
21d80 20 42 59 20 61 6e 64 20 48 41 56 49 4e 47 20 63   BY and HAVING c
21d90 6c 61 75 73 65 73 20 74 6f 20 74 68 65 20 66 69  lauses to the fi
21da0 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64 61 74  ltered input dat
21db0 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  aset..</ul>..<p>
21dc0 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66  <b>4. Removal of
21dd0 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
21de0 28 44 49 53 54 49 4e 43 54 20 70 72 6f 63 65 73  (DISTINCT proces
21df0 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  sing).</b>.<tcl>
21e00 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 69 73 74  hd_fragment dist
21e10 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  inct</tcl>.<tcl>
21e20 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49 53  hd_keywords {DIS
21e30 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  TINCT}</tcl>..<p
21e40 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c  >^One of the ALL
21e50 20 6f 72 20 44 49 53 54 49 4e 43 54 20 6b 65 79   or DISTINCT key
21e60 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77  words may follow
21e70 20 74 68 65 20 53 45 4c 45 43 54 20 6b 65 79 77   the SELECT keyw
21e80 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65  ord in a .simple
21e90 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
21ea0 74 2e 20 5e 49 66 20 74 68 65 20 73 69 6d 70 6c  t. ^If the simpl
21eb0 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45  e SELECT is a SE
21ec0 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74  LECT ALL, then t
21ed0 68 65 0a 65 6e 74 69 72 65 20 73 65 74 20 6f 66  he.entire set of
21ee0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61 72 65   result rows are
21ef0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
21f00 20 53 45 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69   SELECT. ^If nei
21f10 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54  ther ALL or.DIST
21f20 49 4e 43 54 20 61 72 65 20 70 72 65 73 65 6e 74  INCT are present
21f30 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  , then the behav
21f40 69 6f 75 72 20 69 73 20 61 73 20 69 66 20 41 4c  iour is as if AL
21f50 4c 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64  L were specified
21f60 2e 20 0a 5e 49 66 20 74 68 65 20 73 69 6d 70 6c  . .^If the simpl
21f70 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45  e SELECT is a SE
21f80 4c 45 43 54 20 44 49 53 54 49 4e 43 54 2c 20 74  LECT DISTINCT, t
21f90 68 65 6e 20 64 75 70 6c 69 63 61 74 65 20 72 6f  hen duplicate ro
21fa0 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 0a 66  ws are removed.f
21fb0 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72  rom the set of r
21fc0 65 73 75 6c 74 20 72 6f 77 73 20 62 65 66 6f 72  esult rows befor
21fd0 65 20 69 74 20 69 73 20 72 65 74 75 72 6e 65 64  e it is returned
21fe0 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  . ^For the purpo
21ff0 73 65 73 20 6f 66 0a 64 65 74 65 63 74 69 6e 67  ses of.detecting
22000 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 2c   duplicate rows,
22010 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75 65 73   two NULL values
22020 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
22030 74 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e 54 68  to be equal. ^Th
22040 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66  e.normal rules f
22050 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61 20 63  or selecting a c
22060 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
22070 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  e to compare tex
22080 74 20 76 61 6c 75 65 73 20 77 69 74 68 0a 61 70  t values with.ap
22090 70 6c 79 2e 0a 0a 3c 68 33 3e 43 6f 6d 70 6f 75  ply...<h3>Compou
220a0 6e 64 20 53 65 6c 65 63 74 20 53 74 61 74 65 6d  nd Select Statem
220b0 65 6e 74 73 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ents.<tcl>hd_fra
220c0 67 6d 65 6e 74 20 63 6f 6d 70 6f 75 6e 64 3c 2f  gment compound</
220d0 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79  tcl>.<tcl>hd_key
220e0 77 6f 72 64 73 20 7b 63 6f 6d 70 6f 75 6e 64 20  words {compound 
220f0 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e  select} {compoun
22100 64 20 71 75 65 72 79 7d 3c 2f 74 63 6c 3e 0a 3c  d query}</tcl>.<
22110 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72 20  /h3>..<p>Two or 
22120 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45  more simple SELE
22130 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61  CT statements ma
22140 79 20 62 65 20 63 6f 6e 6e 65 63 74 65 64 20 74  y be connected t
22150 6f 67 65 74 68 65 72 20 74 6f 20 66 6f 72 6d 0a  ogether to form.
22160 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
22170 54 20 75 73 69 6e 67 20 74 68 65 20 55 4e 49 4f  T using the UNIO
22180 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e  N, UNION ALL, IN
22190 54 45 52 53 45 43 54 20 6f 72 20 45 58 43 45 50  TERSECT or EXCEP
221a0 54 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 49 6e 20  T operator..^In 
221b0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
221c0 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74  T, all the const
221d0 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d  ituent SELECTs m
221e0 75 73 74 20 72 65 74 75 72 6e 20 74 68 65 20 73  ust return the s
221f0 61 6d 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 72  ame .number of r
22200 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 5e  esult columns. ^
22210 41 73 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74  As the component
22220 73 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20  s of a compound 
22230 53 45 4c 45 43 54 20 6d 75 73 74 0a 62 65 20 73  SELECT must.be s
22240 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
22250 74 65 6d 65 6e 74 73 2c 20 74 68 65 79 20 6d 61  tements, they ma
22260 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 4f 52  y not contain OR
22270 44 45 52 20 42 59 20 6f 72 20 4c 49 4d 49 54 20  DER BY or LIMIT 
22280 63 6c 61 75 73 65 73 2e 0a 5e 4f 52 44 45 52 20  clauses..^ORDER 
22290 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  BY and LIMIT cla
222a0 75 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63  uses may only oc
222b0 63 75 72 20 61 74 20 74 68 65 20 65 6e 64 20 6f  cur at the end o
222c0 66 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d  f the entire com
222d0 70 6f 75 6e 64 0a 53 45 4c 45 43 54 2e 20 20 0a  pound.SELECT.  .
222e0 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e 64 20  .<p>^A compound 
222f0 53 45 4c 45 43 54 20 63 72 65 61 74 65 64 20 75  SELECT created u
22300 73 69 6e 67 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f  sing UNION ALL o
22310 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20  perator returns 
22320 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f  all the rows.fro
22330 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20  m the SELECT to 
22340 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20  the left of the 
22350 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74  UNION ALL operat
22360 6f 72 2c 20 61 6e 64 20 61 6c 6c 20 74 68 65 20  or, and all the 
22370 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45  rows.from the SE
22380 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68  LECT to the righ
22390 74 20 6f 66 20 69 74 2e 20 5e 54 68 65 20 55 4e  t of it. ^The UN
223a0 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 77 6f 72  ION operator wor
223b0 6b 73 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  ks the same way 
223c0 61 73 0a 55 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78  as.UNION ALL, ex
223d0 63 65 70 74 20 74 68 61 74 20 64 75 70 6c 69 63  cept that duplic
223e0 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d  ate rows are rem
223f0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 66 69  oved from the fi
22400 6e 61 6c 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  nal result set..
22410 5e 54 68 65 20 49 4e 54 45 52 53 45 43 54 20 6f  ^The INTERSECT o
22420 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20  perator returns 
22430 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e  the intersection
22440 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
22450 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 0a  of the left and.
22460 72 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20 20  right SELECTs.  
22470 5e 54 68 65 20 45 58 43 45 50 54 20 6f 70 65 72  ^The EXCEPT oper
22480 61 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65  ator returns the
22490 20 73 75 62 73 65 74 20 6f 66 20 72 6f 77 73 20   subset of rows 
224a0 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a  returned by the.
224b0 6c 65 66 74 20 53 45 4c 45 43 54 20 74 68 61 74  left SELECT that
224c0 20 61 72 65 20 6e 6f 74 20 61 6c 73 6f 20 72 65   are not also re
224d0 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 72 69  turned by the ri
224e0 67 68 74 2d 68 61 6e 64 20 53 45 4c 45 43 54 2e  ght-hand SELECT.
224f0 20 5e 44 75 70 6c 69 63 61 74 65 0a 72 6f 77 73   ^Duplicate.rows
22500 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
22510 6d 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  m the results of
22520 20 49 4e 54 45 52 53 45 43 54 20 61 6e 64 20 45   INTERSECT and E
22530 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 73 20  XCEPT operators 
22540 62 65 66 6f 72 65 20 74 68 65 0a 72 65 73 75 6c  before the.resul
22550 74 20 73 65 74 20 69 73 20 72 65 74 75 72 6e 65  t set is returne
22560 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65 20  d...<p>^For the 
22570 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65  purposes of dete
22580 72 6d 69 6e 69 6e 67 20 64 75 70 6c 69 63 61 74  rmining duplicat
22590 65 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20 72  e rows for the r
225a0 65 73 75 6c 74 73 20 6f 66 20 63 6f 6d 70 6f 75  esults of compou
225b0 6e 64 0a 53 45 4c 45 43 54 20 6f 70 65 72 61 74  nd.SELECT operat
225c0 6f 72 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ors, NULL values
225d0 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
225e0 65 71 75 61 6c 20 74 6f 20 6f 74 68 65 72 20 4e  equal to other N
225f0 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 0a 64  ULL values and.d
22600 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c  istinct from all
22610 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73   non-NULL values
22620 2e 20 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  . ^The collation
22630 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 74   sequence used t
22640 6f 20 63 6f 6d 70 61 72 65 20 0a 74 77 6f 20 74  o compare .two t
22650 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64 65  ext values is de
22660 74 65 72 6d 69 6e 65 64 20 61 73 20 69 66 20 74  termined as if t
22670 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
22680 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
22690 2d 68 61 6e 64 0a 53 45 4c 45 43 54 20 73 74 61  -hand.SELECT sta
226a0 74 65 6d 65 6e 74 73 20 77 65 72 65 20 74 68 65  tements were the
226b0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
226c0 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66  hand operands of
226d0 20 74 68 65 20 65 71 75 61 6c 73 20 28 3d 29 0a   the equals (=).
226e0 6f 70 65 72 61 74 6f 72 2c 20 65 78 63 65 70 74  operator, except
226f0 20 74 68 61 74 20 67 72 65 61 74 65 72 20 70 72   that greater pr
22700 65 63 65 64 65 6e 63 65 20 69 73 20 6e 6f 74 20  ecedence is not 
22710 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 63 6f  assigned to a co
22720 6c 6c 61 74 69 6f 6e 20 0a 73 65 71 75 65 6e 63  llation .sequenc
22730 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68  e specified with
22740 20 74 68 65 20 70 6f 73 74 66 69 78 20 43 4f 4c   the postfix COL
22750 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 2e 20 5e  LATE operator. ^
22760 4e 6f 20 61 66 66 69 6e 69 74 79 0a 74 72 61 6e  No affinity.tran
22770 73 66 6f 72 6d 61 74 69 6f 6e 73 20 61 72 65 20  sformations are 
22780 61 70 70 6c 69 65 64 20 74 6f 20 61 6e 79 20 76  applied to any v
22790 61 6c 75 65 73 20 77 68 65 6e 20 63 6f 6d 70 61  alues when compa
227a0 72 69 6e 67 20 72 6f 77 73 20 61 73 20 70 61 72  ring rows as par
227b0 74 20 6f 66 20 61 0a 63 6f 6d 70 6f 75 6e 64 20  t of a.compound 
227c0 53 45 4c 45 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57  SELECT. ..<p>^(W
227d0 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72  hen three or mor
227e0 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73  e simple SELECTs
227f0 20 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20 69   are connected i
22800 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53  nto a compound S
22810 45 4c 45 43 54 2c 0a 74 68 65 79 20 67 72 6f 75  ELECT,.they grou
22820 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  p from left to r
22830 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 77  ight. In other w
22840 6f 72 64 73 2c 20 69 66 20 22 41 22 2c 20 22 42  ords, if "A", "B
22850 22 20 61 6e 64 20 22 43 22 20 61 72 65 20 61 6c  " and "C" are al
22860 6c 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  l.simple SELECT 
22870 73 74 61 74 65 6d 65 6e 74 73 2c 20 28 41 20 6f  statements, (A o
22880 70 20 42 20 6f 70 20 43 29 20 69 73 20 70 72 6f  p B op C) is pro
22890 63 65 73 73 65 64 20 61 73 20 28 28 41 20 6f 70  cessed as ((A op
228a0 20 42 29 20 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f   B) op C).)^..</
228b0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
228c0 6d 65 6e 74 20 6f 72 64 65 72 62 79 20 7b 6f 72  ment orderby {or
228d0 64 65 72 20 62 79 7d 3c 2f 74 63 6c 3e 0a 3c 68  der by}</tcl>.<h
228e0 33 3e 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c  3>ORDER BY and L
228f0 49 4d 49 54 2f 4f 46 46 53 45 54 20 43 6c 61 75  IMIT/OFFSET Clau
22900 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20  ses</h3>..<p>If 
22910 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
22920 6e 74 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  nt that returns 
22930 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f  more than one ro
22940 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  w does not have 
22950 61 6e 0a 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an.ORDER BY clau
22960 73 65 2c 20 74 68 65 20 6f 72 64 65 72 20 69 6e  se, the order in
22970 20 77 68 69 63 68 20 74 68 65 20 72 6f 77 73 20   which the rows 
22980 61 72 65 20 72 65 74 75 72 6e 65 64 20 69 73 20  are returned is 
22990 75 6e 64 65 66 69 6e 65 64 2e 0a 4f 72 2c 20 69  undefined..Or, i
229a0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
229b0 6d 65 6e 74 20 64 6f 65 73 20 68 61 76 65 20 61  ment does have a
229c0 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  n ORDER BY claus
229d0 65 2c 20 74 68 65 6e 20 74 68 65 20 6c 69 73 74  e, then the list
229e0 20 6f 66 0a 65 78 70 72 65 73 73 69 6f 6e 73 20   of.expressions 
229f0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
22a00 4f 52 44 45 52 20 42 59 20 64 65 74 65 72 6d 69  ORDER BY determi
22a10 6e 65 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  ne the order in 
22a20 77 68 69 63 68 20 72 6f 77 73 0a 61 72 65 20 72  which rows.are r
22a30 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
22a40 73 65 72 2e 20 5e 52 6f 77 73 20 61 72 65 20 66  ser. ^Rows are f
22a50 69 72 73 74 20 73 6f 72 74 65 64 20 62 61 73 65  irst sorted base
22a60 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  d on the results
22a70 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   of.evaluating t
22a80 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70  he left-most exp
22a90 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f  ression in the O
22aa0 52 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68  RDER BY list, th
22ab0 65 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b  en ties are brok
22ac0 65 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67  en.by evaluating
22ad0 20 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74   the second left
22ae0 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e  -most expression
22af0 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20   and so on. The 
22b00 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74  order in which.t
22b10 77 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  wo rows for whic
22b20 68 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65  h all ORDER BY e
22b30 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
22b40 61 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c  ate to equal val
22b50 75 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64  ues are.returned
22b60 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e   is undefined. ^
22b70 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78  Each ORDER BY ex
22b80 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20  pression may be 
22b90 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
22ba0 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68  wed.by one of th
22bb0 65 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28  e keywords ASC (
22bc0 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61  smaller values a
22bd0 72 65 20 72 65 74 75 72 6e 65 64 20 66 69 72 73  re returned firs
22be0 74 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67  t) or DESC (larg
22bf0 65 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65  er.values are re
22c00 74 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e  turned first). ^
22c10 49 66 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f  If neither ASC o
22c20 72 20 44 45 53 43 20 61 72 65 20 73 70 65 63 69  r DESC are speci
22c30 66 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73  fied, rows.are s
22c40 6f 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69  orted in ascendi
22c50 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75  ng (smaller valu
22c60 65 73 20 66 69 72 73 74 29 20 6f 72 64 65 72 20  es first) order 
22c70 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e  by default...<p>
22c80 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78  Each ORDER BY ex
22c90 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63  pression is proc
22ca0 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73  essed as follows
22cb0 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
22cc0 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52  <p>^If the ORDER
22cd0 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
22ce0 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74  s a constant int
22cf0 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a  eger K then the.
22d00 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f  expression is co
22d10 6e 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61  nsidered an alia
22d20 73 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63  s for the K-th c
22d30 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73  olumn of the res
22d40 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73  ult set.(columns
22d50 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72   are numbered fr
22d60 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
22d70 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31   starting with 1
22d80 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  )...<li><p>^If t
22d90 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
22da0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65  ession is an ide
22db0 6e 74 69 66 69 65 72 20 74 68 61 74 20 63 6f 72  ntifier that cor
22dc0 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20  responds to.the 
22dd0 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20  alias of one of 
22de0 74 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d  the output colum
22df0 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70  ns, then the exp
22e00 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69  ression is consi
22e10 64 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66  dered.an alias f
22e20 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  or that column..
22e30 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69  .<li><p>^Otherwi
22e40 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52  se, if the ORDER
22e50 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
22e60 73 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72  s any other expr
22e70 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65  ession, it .is e
22e80 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
22e90 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20   returned value 
22ea0 75 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68  used to order th
22eb0 65 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e  e output rows. ^
22ec0 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74  If.the SELECT st
22ed0 61 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d  atement is a sim
22ee0 70 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ple SELECT, then
22ef0 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79   an ORDER BY may
22f00 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62   contain any.arb
22f10 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f  itrary expressio
22f20 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  ns. ^However, if
22f30 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20 61   the SELECT is a
22f40 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
22f50 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20  , then.ORDER BY 
22f60 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
22f70 20 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73   are not aliases
22f80 20 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d   to output colum
22f90 6e 73 20 6d 75 73 74 20 62 65 20 65 78 61 63 74  ns must be exact
22fa0 6c 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61  ly.the same as a
22fb0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65  n expression use
22fc0 64 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63  d as an output c
22fd0 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70  olumn..</ol>..<p
22fe0 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73  >^For the purpos
22ff0 65 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f  es of sorting ro
23000 77 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ws, values are c
23010 6f 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20 73  ompared in the s
23020 61 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b  ame way.as for [
23030 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65  comparison expre
23040 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c  ssions]. The col
23050 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
23060 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a  used to compare.
23070 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20  two text values 
23080 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73  is determined as
23090 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a   follows:..<ol>.
230a0 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
230b0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
230c0 73 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64  sion is assigned
230d0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
230e0 75 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68  uence using.  th
230f0 65 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41  e postfix [COLLA
23100 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68  TE operator], th
23110 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  en the specified
23120 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
23130 6e 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20  nce is.  used.. 
23140 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69   <li><p>^Otherwi
23150 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52  se, if the ORDER
23160 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
23170 73 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e  s an alias to an
23180 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68   expression.  th
23190 61 74 20 68 61 73 20 62 65 65 6e 20 61 73 73 69  at has been assi
231a0 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  gned a collation
231b0 20 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20   sequence using 
231c0 74 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b  the postfix .  [
231d0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
231e0 5d 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c  ], then the coll
231f0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61  ation sequence a
23200 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61  ssigned to the a
23210 6c 69 61 73 65 64 0a 20 20 65 78 70 72 65 73 73  liased.  express
23220 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c  ion is used..  <
23230 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
23240 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
23250 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
23260 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61  a column or an a
23270 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70  lias of.  an exp
23280 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
23290 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74  a column, then t
232a0 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
232b0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f  tion sequence fo
232c0 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  r.  the column i
232d0 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c  s used. .  <li><
232e0 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68  p>^Otherwise, th
232f0 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61  e [BINARY] colla
23300 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
23310 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   used..</ol>..<p
23320 3e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53  >In a compound S
23330 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
23340 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
23350 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61  pressions are ha
23360 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73  ndled.as aliases
23370 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20   for one of the 
23380 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f  result columns o
23390 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 53  f the compound S
233a0 45 4c 45 43 54 2e 0a 5e 28 49 66 20 61 6e 20 4f  ELECT..^(If an O
233b0 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
233c0 6f 6e 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  on is not an int
233d0 65 67 65 72 20 61 6c 69 61 73 2c 20 74 68 65 6e  eger alias, then
233e0 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73   SQLite searches
233f0 0a 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 53  .the left-most S
23400 45 4c 45 43 54 20 69 6e 20 74 68 65 20 63 6f 6d  ELECT in the com
23410 70 6f 75 6e 64 20 66 6f 72 20 61 20 72 65 73 75  pound for a resu
23420 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 6d  lt column that m
23430 61 74 63 68 65 73 20 65 69 74 68 65 72 0a 74 68  atches either.th
23440 65 20 73 65 63 6f 6e 64 20 6f 72 20 74 68 69 72  e second or thir
23450 64 20 72 75 6c 65 73 20 61 62 6f 76 65 2e 20 49  d rules above. I
23460 66 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  f a match is fou
23470 6e 64 2c 20 74 68 65 20 73 65 61 72 63 68 20 73  nd, the search s
23480 74 6f 70 73 20 61 6e 64 0a 74 68 65 20 65 78 70  tops and.the exp
23490 72 65 73 73 69 6f 6e 20 69 73 20 68 61 6e 64 6c  ression is handl
234a0 65 64 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ed as an alias f
234b0 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  or the result co
234c0 6c 75 6d 6e 20 74 68 61 74 20 69 74 20 68 61 73  lumn that it has
234d0 20 62 65 65 6e 0a 6d 61 74 63 68 65 64 20 61 67   been.matched ag
234e0 61 69 6e 73 74 2e 20 4f 74 68 65 72 77 69 73 65  ainst. Otherwise
234f0 2c 20 74 68 65 20 6e 65 78 74 20 53 45 4c 45 43  , the next SELEC
23500 54 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 69  T to the right i
23510 73 20 74 72 69 65 64 2c 20 61 6e 64 20 73 6f 20  s tried, and so 
23520 6f 6e 2e 29 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74  on.)^.^If no mat
23530 63 68 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  ching expression
23540 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e   can be found in
23550 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
23560 6d 6e 73 20 6f 66 20 61 6e 79 0a 63 6f 6e 73 74  mns of any.const
23570 69 74 75 65 6e 74 20 53 45 4c 45 43 54 2c 20 69  ituent SELECT, i
23580 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e  t is an error. ^
23590 45 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  Each term of the
235a0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
235b0 20 69 73 0a 70 72 6f 63 65 73 73 65 64 20 73 65   is.processed se
235c0 70 61 72 61 74 65 6c 79 20 61 6e 64 20 6d 61 79  parately and may
235d0 20 62 65 20 6d 61 74 63 68 65 64 20 61 67 61 69   be matched agai
235e0 6e 73 74 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  nst result colum
235f0 6e 73 20 66 72 6f 6d 20 64 69 66 66 65 72 65 6e  ns from differen
23600 74 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t.SELECT stateme
23610 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  nts in the compo
23620 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  und.</p>..<p>The
23630 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 69 73   LIMIT clause is
23640 20 75 73 65 64 20 74 6f 20 70 6c 61 63 65 20 61   used to place a
23650 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  n upper bound on
23660 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
23670 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 62 79 20  ows.returned by 
23680 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
23690 6e 74 2e 20 5e 41 6e 79 20 73 63 61 6c 61 72 20  nt. ^Any scalar 
236a0 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62  expression may b
236b0 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 0a 4c  e used in the .L
236c0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 73 6f 20  IMIT clause, so 
236d0 6c 6f 6e 67 20 61 73 20 69 74 20 65 76 61 6c 75  long as it evalu
236e0 61 74 65 73 20 74 6f 20 61 6e 20 69 6e 74 65 67  ates to an integ
236f0 65 72 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68  er or a value th
23700 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65  at can be.lossle
23710 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
23720 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49  o an integer. ^I
23730 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
23740 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20   evaluates to a 
23750 4e 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72 20 61  NULL .value or a
23760 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20 74  ny other value t
23770 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f  hat cannot be lo
23780 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74  sslessly convert
23790 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
237a0 2c 20 61 6e 0a 65 72 72 6f 72 20 69 73 20 72 65  , an.error is re
237b0 74 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 20  turned. ^If the 
237c0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
237d0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20   evaluates to a 
237e0 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 0a  negative value,.
237f0 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f  then there is no
23800 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20   upper bound on 
23810 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
23820 77 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 4f 74  ws returned. ^Ot
23830 68 65 72 77 69 73 65 2c 20 74 68 65 0a 53 45 4c  herwise, the.SEL
23840 45 43 54 20 72 65 74 75 72 6e 73 20 74 68 65 20  ECT returns the 
23850 66 69 72 73 74 20 4e 20 72 6f 77 73 20 6f 66 20  first N rows of 
23860 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 6f  its result set o
23870 6e 6c 79 2c 20 77 68 65 72 65 20 4e 20 69 73 20  nly, where N is 
23880 74 68 65 20 76 61 6c 75 65 0a 74 68 61 74 20 74  the value.that t
23890 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
238a0 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
238b0 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45  . ^Or, if the SE
238c0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 77  LECT statement w
238d0 6f 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65 73 73  ould.return less
238e0 20 74 68 61 6e 20 4e 20 72 6f 77 73 20 77 69 74   than N rows wit
238f0 68 6f 75 74 20 61 20 4c 49 4d 49 54 20 63 6c 61  hout a LIMIT cla
23900 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 65 6e  use, then the en
23910 74 69 72 65 20 72 65 73 75 6c 74 20 73 65 74 20  tire result set 
23920 69 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a 0a 3c  is.returned. ..<
23930 70 3e 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f  p>^The expressio
23940 6e 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  n attached to th
23950 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45  e optional OFFSE
23960 54 20 63 6c 61 75 73 65 20 74 68 61 74 20 6d 61  T clause that ma
23970 79 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54  y follow a.LIMIT
23980 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61 6c 73   clause must als
23990 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 6e  o evaluate to an
239a0 20 69 6e 74 65 67 65 72 2c 20 6f 72 20 61 20 76   integer, or a v
239b0 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
239c0 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76  .losslessly conv
239d0 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
239e0 67 65 72 2e 20 5e 49 66 20 61 6e 20 65 78 70 72  ger. ^If an expr
239f0 65 73 73 69 6f 6e 20 68 61 73 20 61 6e 20 4f 46  ession has an OF
23a00 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65  FSET clause,.the
23a10 6e 20 74 68 65 20 66 69 72 73 74 20 4d 20 72 6f  n the first M ro
23a20 77 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 66  ws are omitted f
23a30 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20 73  rom the result s
23a40 65 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  et returned by t
23a50 68 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d  he SELECT.statem
23a60 65 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 78 74  ent and the next
23a70 20 4e 20 72 6f 77 73 20 61 72 65 20 72 65 74 75   N rows are retu
23a80 72 6e 65 64 2c 20 77 68 65 72 65 20 4d 20 61 6e  rned, where M an
23a90 64 20 4e 20 61 72 65 20 74 68 65 20 76 61 6c 75  d N are the valu
23aa0 65 73 20 74 68 61 74 0a 74 68 65 20 4f 46 46 53  es that.the OFFS
23ab0 45 54 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  ET and LIMIT cla
23ac0 75 73 65 73 20 65 76 61 6c 75 61 74 65 20 74 6f  uses evaluate to
23ad0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
23ae0 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45  ^Or, if the SELE
23af0 43 54 0a 77 6f 75 6c 64 20 72 65 74 75 72 6e 20  CT.would return 
23b00 6c 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20 72 6f  less than M+N ro
23b10 77 73 20 69 66 20 69 74 20 64 69 64 20 6e 6f 74  ws if it did not
23b20 20 68 61 76 65 20 61 20 4c 49 4d 49 54 20 63 6c   have a LIMIT cl
23b30 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 66  ause, then the.f
23b40 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20  irst M rows are 
23b50 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20  skipped and the 
23b60 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 28  remaining rows (
23b70 69 66 20 61 6e 79 29 20 61 72 65 20 72 65 74 75  if any) are retu
23b80 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a 4f 46  rned. ^If the.OF
23b90 46 53 45 54 20 63 6c 61 75 73 65 20 65 76 61 6c  FSET clause eval
23ba0 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74  uates to a negat
23bb0 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65 20 72  ive value, the r
23bc0 65 73 75 6c 74 73 20 61 72 65 20 74 68 65 20 73  esults are the s
23bd0 61 6d 65 20 61 73 20 69 66 20 69 74 0a 68 61 64  ame as if it.had
23be0 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20 7a 65   evaluated to ze
23bf0 72 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61 64  ro...<p>^Instead
23c00 20 6f 66 20 61 20 73 65 70 61 72 61 74 65 20 4f   of a separate O
23c10 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68  FFSET clause, th
23c20 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d  e LIMIT clause m
23c30 61 79 20 73 70 65 63 69 66 79 20 74 77 6f 0a 73  ay specify two.s
23c40 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
23c50 73 20 73 65 70 61 72 61 74 65 64 20 62 79 20 61  s separated by a
23c60 20 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68 69 73   comma. ^In this
23c70 20 63 61 73 65 2c 20 74 68 65 20 66 69 72 73 74   case, the first
23c80 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 73 20 75   expression.is u
23c90 73 65 64 20 61 73 20 74 68 65 20 4f 46 46 53 45  sed as the OFFSE
23ca0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  T expression and
23cb0 20 74 68 65 20 73 65 63 6f 6e 64 20 61 73 20 74   the second as t
23cc0 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
23cd0 69 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63 6f 75  ion..This is cou
23ce0 6e 74 65 72 2d 69 6e 74 75 69 74 69 76 65 2c 20  nter-intuitive, 
23cf0 61 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68  as when using th
23d00 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  e OFFSET clause 
23d10 74 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a 74 68  the second of.th
23d20 65 20 74 77 6f 20 65 78 70 72 65 73 73 69 6f 6e  e two expression
23d30 73 20 69 73 20 74 68 65 20 4f 46 46 53 45 54 20  s is the OFFSET 
23d40 61 6e 64 20 74 68 65 20 66 69 72 73 74 20 74 68  and the first th
23d50 65 20 4c 49 4d 49 54 2e 20 54 68 69 73 20 69 73  e LIMIT. This is
23d60 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69   intentional.- i
23d70 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70  t maximizes comp
23d80 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f  atibility with o
23d90 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
23da0 65 20 73 79 73 74 65 6d 73 2e 0a 0a 3c 74 63 6c  e systems...<tcl
23db0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
23dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23df0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23e00 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20  .Section UPDATE 
23e10 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 2a  update {UPDATE *
23e20 55 50 44 41 54 45 73 7d 0a 0a 42 75 62 62 6c 65  UPDATEs}..Bubble
23e30 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73  Diagram update-s
23e40 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67  tmt 1.BubbleDiag
23e50 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61  ram qualified-ta
23e60 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a  ble-name.</tcl>.
23e70 0a 3c 70 3e 5e 41 6e 20 55 50 44 41 54 45 20 73  .<p>^An UPDATE s
23e80 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
23e90 20 74 6f 20 6d 6f 64 69 66 79 20 61 20 73 75 62   to modify a sub
23ea0 73 65 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65  set of the value
23eb0 73 20 73 74 6f 72 65 64 20 69 6e 20 0a 7a 65 72  s stored in .zer
23ec0 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f  o or more rows o
23ed0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
23ee0 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20  able identified 
23ef0 62 79 20 74 68 65 20 0a 3c 69 3e 71 75 61 6c 69  by the .<i>quali
23f00 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c  fied-table-name<
23f10 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73  /i> specified as
23f20 20 70 61 72 74 20 6f 66 20 74 68 65 20 55 50 44   part of the UPD
23f30 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ATE statement...
23f40 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54  <p>^If the UPDAT
23f50 45 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  E statement does
23f60 20 6e 6f 74 20 68 61 76 65 20 61 20 57 48 45 52   not have a WHER
23f70 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f  E clause, all ro
23f80 77 73 20 69 6e 20 74 68 65 0a 74 61 62 6c 65 20  ws in the.table 
23f90 61 72 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20  are modified by 
23fa0 74 68 65 20 55 50 44 41 54 45 2e 20 5e 4f 74 68  the UPDATE. ^Oth
23fb0 65 72 77 69 73 65 2c 20 74 68 65 20 55 50 44 41  erwise, the UPDA
23fc0 54 45 20 61 66 66 65 63 74 73 20 6f 6e 6c 79 20  TE affects only 
23fd0 74 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20 77  those.rows for w
23fe0 68 69 63 68 20 74 68 65 20 72 65 73 75 6c 74 20  hich the result 
23ff0 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
24000 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 65  e WHERE clause e
24010 78 70 72 65 73 73 69 6f 6e 20 61 73 20 61 20 0a  xpression as a .
24020 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
24030 69 6f 6e 7c 62 6f 6f 6c 65 61 6e 20 65 78 70 72  ion|boolean expr
24040 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d 2e  ession is true].
24050 20 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65   ^It is not an e
24060 72 72 6f 72 20 69 66 20 74 68 65 0a 57 48 45 52  rror if the.WHER
24070 45 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f  E clause does no
24080 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72  t evaluate to tr
24090 75 65 20 66 6f 72 20 61 6e 79 20 72 6f 77 20 69  ue for any row i
240a0 6e 20 74 68 65 20 74 61 62 6c 65 20 2d 20 74 68  n the table - th
240b0 69 73 20 6a 75 73 74 0a 6d 65 61 6e 73 20 74 68  is just.means th
240c0 61 74 20 74 68 65 20 55 50 44 41 54 45 20 73 74  at the UPDATE st
240d0 61 74 65 6d 65 6e 74 20 61 66 66 65 63 74 73 20  atement affects 
240e0 7a 65 72 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54  zero rows...<p>T
240f0 68 65 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73  he modifications
24100 20 6d 61 64 65 20 74 6f 20 65 61 63 68 20 72 6f   made to each ro
24110 77 20 61 66 66 65 63 74 65 64 20 62 79 20 61 6e  w affected by an
24120 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
24130 74 20 61 72 65 0a 64 65 74 65 72 6d 69 6e 65 64  t are.determined
24140 20 62 79 20 74 68 65 20 6c 69 73 74 20 6f 66 20   by the list of 
24150 61 73 73 69 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c  assignments foll
24160 6f 77 69 6e 67 20 74 68 65 20 53 45 54 20 6b 65  owing the SET ke
24170 79 77 6f 72 64 2e 20 45 61 63 68 0a 61 73 73 69  yword. Each.assi
24180 67 6e 6d 65 6e 74 20 73 70 65 63 69 66 69 65 73  gnment specifies
24190 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74   a column name t
241a0 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68  o the left of th
241b0 65 20 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e  e equals sign an
241c0 64 20 61 0a 73 63 61 6c 61 72 20 65 78 70 72 65  d a.scalar expre
241d0 73 73 69 6f 6e 20 74 6f 20 74 68 65 20 72 69 67  ssion to the rig
241e0 68 74 2e 20 5e 46 6f 72 20 65 61 63 68 20 61 66  ht. ^For each af
241f0 66 65 63 74 65 64 20 72 6f 77 2c 20 74 68 65 20  fected row, the 
24200 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 0a 61 72  named columns.ar
24210 65 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  e set to the val
24220 75 65 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61  ues found by eva
24230 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72  luating the corr
24240 65 73 70 6f 6e 64 69 6e 67 20 73 63 61 6c 61 72  esponding scalar
24250 20 0a 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e   .expressions. ^
24260 49 66 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  If a single colu
24270 6d 6e 2d 6e 61 6d 65 20 61 70 70 65 61 72 73 20  mn-name appears 
24280 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 69  more than once i
24290 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 61 73  n the list of.as
242a0 73 69 67 6e 6d 65 6e 74 20 65 78 70 72 65 73 73  signment express
242b0 69 6f 6e 73 2c 20 61 6c 6c 20 62 75 74 20 74 68  ions, all but th
242c0 65 20 72 69 67 68 74 6d 6f 73 74 20 6f 63 63 75  e rightmost occu
242d0 72 72 65 6e 63 65 20 69 73 20 69 67 6e 6f 72 65  rrence is ignore
242e0 64 2e 20 5e 43 6f 6c 75 6d 6e 73 0a 74 68 61 74  d. ^Columns.that
242f0 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69   do not appear i
24300 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73  n the list of as
24310 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6c 65  signments are le
24320 66 74 20 75 6e 6d 6f 64 69 66 69 65 64 2e 20 5e  ft unmodified. ^
24330 54 68 65 20 73 63 61 6c 61 72 0a 65 78 70 72 65  The scalar.expre
24340 73 73 69 6f 6e 73 20 6d 61 79 20 72 65 66 65 72  ssions may refer
24350 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74   to columns of t
24360 68 65 20 72 6f 77 20 62 65 69 6e 67 20 75 70 64  he row being upd
24370 61 74 65 64 2e 20 5e 49 6e 20 74 68 69 73 20 63  ated. ^In this c
24380 61 73 65 20 61 6c 6c 0a 73 63 61 6c 61 72 20 65  ase all.scalar e
24390 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65  xpressions are e
243a0 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20  valuated before 
243b0 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20  any assignments 
243c0 61 72 65 20 6d 61 64 65 2e 0a 0a 3c 70 3e 5e 54  are made...<p>^T
243d0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
243e0 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
243f0 77 73 20 74 68 65 20 75 73 65 72 20 74 6f 20 6e  ws the user to n
24400 6f 6d 69 6e 61 74 65 20 61 20 73 70 65 63 69 66  ominate a specif
24410 69 63 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  ic.constraint co
24420 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
24430 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75  n algorithm to u
24440 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f  se during this o
24450 6e 65 20 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e  ne UPDATE comman
24460 64 2e 0a 52 65 66 65 72 20 74 6f 20 74 68 65 20  d..Refer to the 
24470 73 65 63 74 69 6f 6e 20 65 6e 74 69 74 6c 65 64  section entitled
24480 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66   [ON CONFLICT] f
24490 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
244a0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e  formation...<h3>
244b0 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20  Restrictions on 
244c0 55 50 44 41 54 45 20 53 74 61 74 65 6d 65 6e 74  UPDATE Statement
244d0 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45 20  s Within CREATE 
244e0 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70  TRIGGER</h3>..<p
244f0 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  >The following a
24500 64 64 69 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78  dditional syntax
24510 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70   restrictions ap
24520 70 6c 79 20 74 6f 20 55 50 44 41 54 45 20 73 74  ply to UPDATE st
24530 61 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63  atements that.oc
24540 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20 62  cur within the b
24550 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45  ody of a [CREATE
24560 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
24570 65 6e 74 2e 20 20 0a 0a 3c 75 6c 3e 0a 20 20 3c  ent.  ..<ul>.  <
24580 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e 74 61  li><p>^The <i>ta
24590 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65  ble-name</i> spe
245a0 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
245b0 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  f an UPDATE stat
245c0 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20  ement within.   
245d0 20 20 20 61 20 74 72 69 67 67 65 72 20 62 6f 64     a trigger bod
245e0 79 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c  y must be unqual
245f0 69 66 69 65 64 2e 20 5e 28 49 6e 20 6f 74 68 65  ified. ^(In othe
24600 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20  r words, the.   
24610 20 20 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e     <i>database-n
24620 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20  ame</i><b>.</b> 
24630 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61  prefix on the ta
24640 62 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ble name of the 
24650 55 50 44 41 54 45 20 69 73 0a 20 20 20 20 20 20  UPDATE is.      
24660 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69 74 68  not allowed with
24670 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e  in triggers.)^ ^
24680 55 6e 6c 65 73 73 20 74 68 65 20 74 61 62 6c 65  Unless the table
24690 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
246a0 69 67 67 65 72 0a 20 20 20 20 20 20 69 73 20 61  igger.      is a
246b0 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68  ttached is in th
246c0 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c  e TEMP database,
246d0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
246e0 20 75 70 64 61 74 65 64 20 62 79 20 74 68 65 0a   updated by the.
246f0 20 20 20 20 20 20 74 72 69 67 67 65 72 20 70 72        trigger pr
24700 6f 67 72 61 6d 20 6d 75 73 74 20 72 65 73 69 64  ogram must resid
24710 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61  e in the same da
24720 74 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49  tabase as it. ^I
24730 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20  f the table.    
24740 20 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74    to which the t
24750 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68  rigger is attach
24760 65 64 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d  ed is in the TEM
24770 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  P database, then
24780 20 74 68 65 0a 20 20 20 20 20 20 75 6e 71 75 61   the.      unqua
24790 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66 20 74  lified name of t
247a0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75  he table being u
247b0 70 64 61 74 65 64 20 69 73 20 72 65 73 6f 6c 76  pdated is resolv
247c0 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
247d0 61 79 0a 20 20 20 20 20 20 61 73 20 69 74 20 69  ay.      as it i
247e0 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65  s for a top-leve
247f0 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20  l statement (by 
24800 73 65 61 72 63 68 69 6e 67 20 66 69 72 73 74 20  searching first 
24810 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
24820 65 2c 0a 20 20 20 20 20 20 74 68 65 6e 20 74 68  e,.      then th
24830 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
24840 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20   then any other 
24850 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65  databases in the
24860 20 6f 72 64 65 72 20 74 68 65 79 20 77 65 72 65   order they were
24870 0a 20 20 20 20 20 20 61 74 74 61 63 68 65 64 29  .      attached)
24880 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  ...  <li><p>^The
24890 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20   INDEXED BY and 
248a0 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
248b0 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f  ses are not allo
248c0 77 65 64 20 6f 6e 20 55 50 44 41 54 45 0a 20 20  wed on UPDATE.  
248d0 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
248e0 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c  ithin triggers.<
248f0 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54  /p>..  <li><p>^T
24900 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44  he LIMIT and ORD
24910 45 52 20 42 59 20 63 6c 61 75 73 65 73 20 66 6f  ER BY clauses fo
24920 72 20 55 50 44 41 54 45 20 61 72 65 20 75 6e 73  r UPDATE are uns
24930 75 70 70 6f 72 74 65 64 20 77 69 74 68 69 6e 0a  upported within.
24940 20 20 20 20 20 20 74 72 69 67 67 65 72 73 2c 20        triggers, 
24950 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  regardless of th
24960 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70  e compilation op
24970 74 69 6f 6e 73 20 75 73 65 64 20 74 6f 20 62 75  tions used to bu
24980 69 6c 64 20 53 51 4c 69 74 65 2e 0a 3c 2f 75 6c  ild SQLite..</ul
24990 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20  >..<h3>Optional 
249a0 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20  LIMIT and ORDER 
249b0 42 59 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a  BY Clauses</h3>.
249c0 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20  .<p>^(If SQLite 
249d0 69 73 20 62 75 69 6c 74 20 77 69 74 68 20 74 68  is built with th
249e0 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e [SQLITE_ENABLE
249f0 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
24a00 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69  IMIT].compile-ti
24a10 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65 6e 20 74  me option then t
24a20 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65  he syntax of the
24a30 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
24a40 74 20 69 73 20 65 78 74 65 6e 64 65 64 0a 77 69  t is extended.wi
24a50 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45  th optional ORDE
24a60 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
24a70 6c 61 75 73 65 73 29 5e 20 61 73 20 66 6f 6c 6c  lauses)^ as foll
24a80 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ows:</p>..<tcl>B
24a90 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64  ubbleDiagram upd
24aa0 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64  ate-stmt-limited
24ab0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61  </tcl>..<p>^If a
24ac0 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
24ad0 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63  nt has a LIMIT c
24ae0 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d  lause, the maxim
24af0 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  um number of row
24b00 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 75  s that.will be u
24b10 70 64 61 74 65 64 20 69 73 20 66 6f 75 6e 64 20  pdated is found 
24b20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
24b30 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65  e accompanying e
24b40 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61  xpression and ca
24b50 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69  sting.it to an i
24b60 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 41  nteger value. ^A
24b70 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20   negative value 
24b80 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
24b90 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e 0a 0a 3c  s "no limit"...<
24ba0 70 3e 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20  p>^If the LIMIT 
24bb0 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
24bc0 61 74 65 73 20 74 6f 20 6e 6f 6e 2d 6e 65 67 61  ates to non-nega
24bd0 74 69 76 65 20 76 61 6c 75 65 20 3c 69 3e 4e 3c  tive value <i>N<
24be0 2f 69 3e 20 61 6e 64 20 74 68 65 0a 55 50 44 41  /i> and the.UPDA
24bf0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
24c00 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61   an ORDER BY cla
24c10 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f  use, then all ro
24c20 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65  ws that would be
24c30 20 75 70 64 61 74 65 64 20 69 6e 0a 74 68 65 20   updated in.the 
24c40 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
24c50 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
24c60 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67  sorted according
24c70 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59   to the ORDER BY
24c80 20 61 6e 64 20 74 68 65 0a 66 69 72 73 74 20 3c   and the.first <
24c90 69 3e 4e 3c 2f 69 3e 20 75 70 64 61 74 65 64 2e  i>N</i> updated.
24ca0 20 5e 28 49 66 20 74 68 65 20 55 50 44 41 54 45   ^(If the UPDATE
24cb0 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20   statement also 
24cc0 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c  has an OFFSET cl
24cd0 61 75 73 65 2c 0a 74 68 65 6e 20 69 74 20 69 73  ause,.then it is
24ce0 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61 6c 75   similarly evalu
24cf0 61 74 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f  ated and cast to
24d00 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
24d10 65 2e 20 49 66 20 74 68 65 20 4f 46 46 53 45 54  e. If the OFFSET
24d20 0a 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c  .expression eval
24d30 75 61 74 65 73 20 74 6f 20 61 20 6e 6f 6e 2d 6e  uates to a non-n
24d40 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c 69  egative value <i
24d50 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e 20 74 68 65  >M</i>, then the
24d60 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 0a   first <i>M</i>.
24d70 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70 65 64  rows are skipped
24d80 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69   and the followi
24d90 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73  ng <i>N</i> rows
24da0 20 75 70 64 61 74 65 64 20 69 6e 73 74 65 61 64   updated instead
24db0 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  .)^..<p>^If the 
24dc0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
24dd0 20 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59   has no ORDER BY
24de0 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c   clause, then al
24df0 6c 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c  l rows that.woul
24e00 64 20 62 65 20 75 70 64 61 74 65 64 20 69 6e 20  d be updated in 
24e10 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74  the absence of t
24e20 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
24e30 61 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e  are assembled in
24e40 20 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72   an.arbitrary or
24e50 64 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79  der before apply
24e60 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e  ing the LIMIT an
24e70 64 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73  d OFFSET clauses
24e80 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 77   to determine .w
24e90 68 69 63 68 20 61 72 65 20 61 63 74 75 61 6c 6c  hich are actuall
24ea0 79 20 75 70 64 61 74 65 64 2e 0a 0a 3c 70 3e 5e  y updated...<p>^
24eb0 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c  (The ORDER BY cl
24ec0 61 75 73 65 20 6f 6e 20 61 6e 20 55 50 44 41 54  ause on an UPDAT
24ed0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  E statement is u
24ee0 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65  sed only to dete
24ef0 72 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77 73  rmine which.rows
24f00 20 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65   fall within the
24f10 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64 65   LIMIT. The orde
24f20 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20  r in which rows 
24f30 61 72 65 20 6d 6f 64 69 66 69 65 64 20 69 73 20  are modified is 
24f40 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73  arbitrary.and is
24f50 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20   not influenced 
24f60 62 79 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  by the ORDER BY 
24f70 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e  clause.)^..<tcl>
24f80 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
24f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
24fd0 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20 76  Section VACUUM v
24fe0 61 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a 42 75  acuum VACUUM..Bu
24ff0 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75  bbleDiagram vacu
25000 75 6d 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  um-stmt 1.</tcl>
25010 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55  ..<p>.  The VACU
25020 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69  UM command rebui
25030 6c 64 73 20 74 68 65 20 65 6e 74 69 72 65 20 64  lds the entire d
25040 61 74 61 62 61 73 65 2e 20 54 68 65 72 65 20 61  atabase. There a
25050 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65  re several .  re
25060 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61  asons an applica
25070 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68  tion might do th
25080 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  is:..<ul>.  <li>
25090 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c   <p> ^Unless SQL
250a0 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69  ite is running i
250b0 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46  n "auto_vacuum=F
250c0 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20  ULL" mode, when 
250d0 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f  a large.     amo
250e0 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20 64  unt of data is d
250f0 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20  eleted from the 
25100 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74  database file it
25110 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65   leaves behind e
25120 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c  mpty.     space,
25130 20 6f 72 20 22 66 72 65 65 22 20 64 61 74 61 62   or "free" datab
25140 61 73 65 20 70 61 67 65 73 2e 20 54 68 69 73 20  ase pages. This 
25150 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
25160 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20  se file might.  
25170 20 20 20 62 65 20 6c 61 72 67 65 72 20 74 68 61     be larger tha
25180 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73  n strictly neces
25190 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56  sary. ^Running V
251a0 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64  ACUUM to rebuild
251b0 20 74 68 65 20 0a 20 20 20 20 20 64 61 74 61 62   the .     datab
251c0 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69  ase reclaims thi
251d0 73 20 73 70 61 63 65 20 61 6e 64 20 72 65 64 75  s space and redu
251e0 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ces the size of 
251f0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
25200 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  e...  <li> <p> ^
25210 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73  Frequent inserts
25220 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64  , updates, and d
25230 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65  eletes can cause
25240 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
25250 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d  le.     to becom
25260 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77  e fragmented - w
25270 68 65 72 65 20 64 61 74 61 20 66 6f 72 20 61 20  here data for a 
25280 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20  single table or 
25290 69 6e 64 65 78 20 69 73 20 73 63 61 74 74 65 72  index is scatter
252a0 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20  ed .     around 
252b0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
252c0 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  e. ^Running VACU
252d0 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  UM ensures that 
252e0 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20  each table and. 
252f0 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72      index is lar
25300 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74  gely stored cont
25310 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20  iguously within 
25320 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
25330 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20  e. ^In some.    
25340 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d   cases, VACUUM m
25350 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74  ay also reduce t
25360 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72  he number of par
25370 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
25380 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20  ges in.     the 
25390 64 61 74 61 62 61 73 65 2c 20 72 65 64 75 63 69  database, reduci
253a0 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ng the size of t
253b0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
253c0 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69   further...  <li
253d0 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c  > <p> ^Normally,
253e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70   the database [p
253f0 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68  age_size] and wh
25400 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
25410 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73   database.     s
25420 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61  upports [auto_va
25430 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f  cuum] must be co
25440 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20  nfigured before 
25450 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
25460 65 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c  e is.     actual
25470 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77  ly created. ^How
25480 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69  ever, when not i
25490 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
254a0 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20  og] mode, the . 
254b0 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20      [page_size] 
254c0 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63  and/or [auto_vac
254d0 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20  uum] properties 
254e0 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  of an existing d
254f0 61 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20  atabase may be. 
25500 20 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75      changed by u
25510 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73  sing the [page_s
25520 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f  ize pragma|page_
25530 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20  size]  and/or . 
25540 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d      [auto_vacuum
25550 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63  |pragma auto_vac
25560 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64  uum] pragmas and
25570 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c   then immediatel
25580 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20  y VACUUMing.    
25590 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e   the database. ^
255a0 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61  When in [write-a
255b0 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20  head log] mode, 
255c0 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76  only the [auto_v
255d0 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70  acuum].     supp
255e0 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e  ort property can
255f0 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
25600 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a  g VACUUM..</ul>.
25610 0a 3c 70 3e 5e 28 56 41 43 55 55 4d 20 6f 6e 6c  .<p>^(VACUUM onl
25620 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d  y works on the m
25630 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 74  ain database. It
25640 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
25650 20 74 6f 20 56 41 43 55 55 4d 20 61 6e 0a 61 74   to VACUUM an.at
25660 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
25670 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  file.)^..<p>^The
25680 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
25690 77 6f 72 6b 73 20 62 79 20 63 6f 70 79 69 6e 67  works by copying
256a0 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
256b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
256c0 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 64  to.a temporary d
256d0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
256e0 20 74 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e   then overwritin
256f0 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  g the original w
25700 69 74 68 20 74 68 65 20 0a 63 6f 6e 74 65 6e 74  ith the .content
25710 73 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  s of the tempora
25720 72 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e 20 6f  ry file. ^When o
25730 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f  verwriting the o
25740 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62  riginal, a rollb
25750 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b  ack.journal or [
25760 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
25770 20 57 41 4c 20 66 69 6c 65 20 69 73 20 75 73 65   WAL file is use
25780 64 20 6a 75 73 74 20 61 73 20 69 74 20 77 6f 75  d just as it wou
25790 6c 64 20 62 65 20 66 6f 72 20 61 6e 79 0a 6f 74  ld be for any.ot
257a0 68 65 72 20 64 61 74 61 62 61 73 65 20 74 72 61  her database tra
257b0 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69 73 20  nsaction. ^This 
257c0 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20  means that when 
257d0 56 41 43 55 55 4d 69 6e 67 20 61 20 64 61 74 61  VACUUMing a data
257e0 62 61 73 65 2c 20 0a 61 73 20 6d 75 63 68 20 61  base, .as much a
257f0 73 20 74 77 69 63 65 20 74 68 65 20 73 69 7a 65  s twice the size
25800 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
25810 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
25820 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 66 72  s required in fr
25830 65 65 0a 64 69 73 6b 20 73 70 61 63 65 2e 0a 0a  ee.disk space...
25840 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
25850 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e 67  ommand may chang
25860 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20 52  e the [ROWID | R
25870 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69 65  OWIDs] of entrie
25880 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73 20  s in any.tables 
25890 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76 65  that do not have
258a0 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49 4e   an explicit [IN
258b0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
258c0 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  Y]..</p>..<p>^A 
258d0 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69 6c  VACUUM will fail
258e0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
258f0 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
25900 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
25910 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20 61 63  e one or.more ac
25920 74 69 76 65 20 53 51 4c 20 73 74 61 74 65 6d 65  tive SQL stateme
25930 6e 74 73 20 77 68 65 6e 20 69 74 20 69 73 20 72  nts when it is r
25940 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20  un...<p>^(As of 
25950 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
25960 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  .1, an alternati
25970 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20  ve to using the 
25980 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74  VACUUM command t
25990 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65 20  o.reclaim space 
259a0 61 66 74 65 72 20 64 61 74 61 20 68 61 73 20 62  after data has b
259b0 65 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20 61  een deleted is a
259c0 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c  uto-vacuum mode,
259d0 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a 74   enabled using.t
259e0 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  he [auto_vacuum]
259f0 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e   pragma.)^ ^When
25a00 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69   [auto_vacuum] i
25a10 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20  s enabled for a 
25a20 64 61 74 61 62 61 73 65 0a 66 72 65 65 20 70 61  database.free pa
25a30 67 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c 61  ges may be recla
25a40 69 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65 74  imed after delet
25a50 69 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69 6e  ing data, causin
25a60 67 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73 68  g the file to sh
25a70 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65  rink,.without re
25a80 62 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e 74  building the ent
25a90 69 72 65 20 64 61 74 61 62 61 73 65 20 75 73 69  ire database usi
25aa0 6e 67 20 56 41 43 55 55 4d 2e 20 20 48 6f 77 65  ng VACUUM.  Howe
25ab0 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f  ver, using.[auto
25ac0 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61  _vacuum] can lea
25ad0 64 20 74 6f 20 65 78 74 72 61 20 64 61 74 61 62  d to extra datab
25ae0 61 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e  ase file fragmen
25af0 74 61 74 69 6f 6e 2e 20 20 41 6e 64 20 5b 61 75  tation.  And [au
25b00 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20  to_vacuum].does 
25b10 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74  not compact part
25b20 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67  ially filled pag
25b30 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  es of the databa
25b40 73 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f 65  se as VACUUM doe
25b50 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  s...</p>...<tcl>
25b60 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
25b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
25bb0 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44  Section {INDEXED
25bc0 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b   BY} indexedby {
25bd0 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f  {INDEXED BY} {NO
25be0 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74  T INDEXED}}..</t
25bf0 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45  cl>.<p>^The INDE
25c00 58 45 44 20 42 59 20 70 68 72 61 73 65 20 69 73  XED BY phrase is
25c10 20 61 6e 20 53 51 4c 20 65 78 74 65 6e 73 69 6f   an SQL extensio
25c20 6e 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 69 6e 20  n found only in 
25c30 53 51 4c 69 74 65 20 77 68 69 63 68 20 63 61 6e  SQLite which can
25c40 0a 62 65 20 75 73 65 64 20 74 6f 20 76 65 72 69  .be used to veri
25c50 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 72 72  fy that the corr
25c60 65 63 74 20 69 6e 64 69 63 65 73 20 61 72 65 20  ect indices are 
25c70 62 65 69 6e 67 20 75 73 65 64 20 6f 6e 20 61 20  being used on a 
25c80 5b 44 45 4c 45 54 45 5d 2c 0a 5b 53 45 4c 45 43  [DELETE],.[SELEC
25c90 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
25ca0 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
25cb0 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
25cc0 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73  e always follows
25cd0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74   the name of a t
25ce0 61 62 6c 65 20 74 68 61 74 20 53 51 4c 69 74 65  able that SQLite
25cf0 20 77 69 6c 6c 0a 62 65 20 72 65 61 64 69 6e 67   will.be reading
25d00 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20 42  .  The INDEXED B
25d10 59 20 70 68 72 61 73 65 20 63 61 6e 20 62 65 20  Y phrase can be 
25d20 73 65 65 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c  seen in the foll
25d30 6f 77 69 6e 67 20 73 79 6e 74 61 78 0a 64 69 61  owing syntax.dia
25d40 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  grams:</p>..<tcl
25d50 3e 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  >.BubbleDiagram 
25d60 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d  qualified-table-
25d70 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72  name.BubbleDiagr
25d80 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75 72 63 65  am single-source
25d90 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
25da0 20 22 49 4e 44 45 58 45 44 20 42 59 20 69 6e 64   "INDEXED BY ind
25db0 65 78 2d 6e 61 6d 65 22 20 63 6c 61 75 73 65 20  ex-name" clause 
25dc0 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20 74  specifies that t
25dd0 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d  he named index.m
25de0 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 20 6f  ust be used in o
25df0 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20  rder to look up 
25e00 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70 72  values on the pr
25e10 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e  eceding table..^
25e20 49 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f  If index-name do
25e30 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72 20  es not exist or 
25e40 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 66  cannot be used f
25e50 6f 72 20 74 68 65 20 71 75 65 72 79 2c 20 74 68  or the query, th
25e60 65 6e 0a 74 68 65 20 70 72 65 70 61 72 61 74 69  en.the preparati
25e70 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  on of the SQL st
25e80 61 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e  atement fails..^
25e90 28 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58 45  (The "NOT INDEXE
25ea0 44 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66  D" clause specif
25eb0 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64 65  ies that no inde
25ec0 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64 20  x shall be used 
25ed0 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20 74  when.accessing t
25ee0 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62  he preceding tab
25ef0 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d  le, including im
25f00 70 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63 72  plied indices cr
25f10 65 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20 61  eate by.UNIQUE a
25f20 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  nd PRIMARY KEY c
25f30 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f 77  onstraints.  How
25f40 65 76 65 72 2c 20 74 68 65 20 49 4e 54 45 47 45  ever, the INTEGE
25f50 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 63 61  R PRIMARY KEY.ca
25f60 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20  n still be used 
25f70 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69  to look up entri
25f80 65 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f  es even when "NO
25f90 54 20 49 4e 44 45 58 45 44 22 20 69 73 20 73 70  T INDEXED" is sp
25fa0 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a  ecified.)^</p>..
25fb0 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61  <p>Some SQL data
25fc0 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f  base engines pro
25fd0 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72  vide non-standar
25fe0 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69  d "hint" mechani
25ff0 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65  sms which.can be
26000 20 75 73 65 64 20 74 6f 20 67 69 76 65 20 74 68   used to give th
26010 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
26020 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68  r clues about wh
26030 61 74 20 69 6e 64 69 63 65 73 20 69 74 20 73 68  at indices it sh
26040 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70  ould.use for a p
26050 61 72 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d  articular statem
26060 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20  ent.  The INDEX 
26070 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c  BY clause of SQL
26080 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c  ite is .<em>not<
26090 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d  /em> a hinting m
260a0 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20  echanism and it 
260b0 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73  should not be us
260c0 65 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68 65  ed as such..^The
260d0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
260e0 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65  se does not give
260f0 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68   the optimizer h
26100 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63 68  ints about which
26110 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69   index.to use; i
26120 74 20 67 69 76 65 73 20 74 68 65 20 6f 70 74 69  t gives the opti
26130 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d  mizer a requirem
26140 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64  ent of which ind
26150 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74  ex to use..^If t
26160 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
26170 65 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20  er is unable to 
26180 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 73 70  use the index sp
26190 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0a 49  ecified by the.I
261a0 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20  NDEX BY clause, 
261b0 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 77  then the query w
261c0 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
261d0 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e   error.</p>..<p>
261e0 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63  The INDEXED BY c
261f0 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74  lause is <em>not
26200 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66  </em> intended f
26210 6f 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67  or use in tuning
26220 0a 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63 65  .the performance
26230 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68   of a query.  Th
26240 65 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20  e intent of the 
26250 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
26260 65 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20  e is.to raise a 
26270 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69  run-time error i
26280 66 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67  f a schema chang
26290 65 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70 70  e, such as dropp
262a0 69 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20  ing or.creating 
262b0 61 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73  an index, causes
262c0 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20   the query plan 
262d0 66 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69  for a time-sensi
262e0 74 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68  tive query.to ch
262f0 61 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58  ange.  The INDEX
26300 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ED BY clause is 
26310 64 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70  designed to help
26320 20 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61   detect.undesira
26330 62 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63  ble query plan c
26340 68 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65  hanges during re
26350 67 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67  gression testing
26360 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72 65  ..Developers are
26370 20 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f   admonished to o
26380 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49  mit all use of I
26390 4e 44 45 58 45 44 20 42 59 20 64 75 72 69 6e 67  NDEXED BY during
263a0 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73  .application des
263b0 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ign, implementat
263c0 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e  ion, testing, an
263d0 64 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e  d tuning.  If.IN
263e0 44 45 58 45 44 20 42 59 20 69 73 20 74 6f 20 62  DEXED BY is to b
263f0 65 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69  e used at all, i
26400 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65  t should be inse
26410 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
26420 0a 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65  .end of the deve
26430 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20  lopment process 
26440 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f  when "locking do
26450 77 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70  wn" a design.</p
26460 3e 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a  >..<h3>See Also:
26470 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 5b 73  </h3>..<p>The [s
26480 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74  qlite3_stmt_stat
26490 75 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65  us()] C/C++ inte
264a0 72 66 61 63 65 20 74 6f 67 65 74 68 65 72 20 77  rface together w
264b0 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
264c0 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53  STMTSTATUS_FULLS
264d0 43 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53  CAN_STEP] and [S
264e0 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
264f0 5f 53 4f 52 54 5d 20 76 65 72 62 73 0a 63 61 6e  _SORT] verbs.can
26500 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 74 65   be used to dete
26510 63 74 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 77  ct at run-time w
26520 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65  hen an SQL state
26530 6d 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69  ment is not.maki
26540 6e 67 20 65 66 66 65 63 74 69 76 65 20 75 73 65  ng effective use
26550 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 4d 61   of indices.  Ma
26560 6e 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  ny applications 
26570 6d 61 79 20 70 72 65 66 65 72 20 74 6f 0a 75 73  may prefer to.us
26580 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73  e the [sqlite3_s
26590 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 69 6e  tmt_status()] in
265a0 74 65 72 66 61 63 65 20 74 6f 20 64 65 74 65 63  terface to detec
265b0 74 20 69 6e 64 65 78 20 6d 69 73 75 73 65 0a 72  t index misuse.r
265c0 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 49  ather than the I
265d0 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65  NDEXED BY phrase
265e0 20 64 65 73 63 72 69 62 65 64 20 68 65 72 65 2e   described here.
265f0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
26600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26640 23 23 23 23 23 23 23 23 23 0a 23 20 41 20 6c 69  #########.# A li
26650 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20  st of keywords. 
26660 20 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75   A asterisk occu
26670 72 73 20 61 66 74 65 72 20 74 68 65 20 6b 65 79  rs after the key
26680 77 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e  word if it is on
26690 0a 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20  .# the fallback 
266a0 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77  list..#.set keyw
266b0 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20  ord_list [lsort 
266c0 7b 0a 20 20 20 41 42 4f 52 54 0a 20 20 20 41 43  {.   ABORT.   AC
266d0 54 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20 41  TION.   ADD.   A
266e0 46 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41  FTER.   ALL.   A
266f0 4c 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a  LTER.   ANALYZE.
26700 20 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20     AND.   AS.   
26710 41 53 43 0a 20 20 20 41 54 54 41 43 48 0a 20 20  ASC.   ATTACH.  
26720 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20   AUTOINCREMENT. 
26730 20 20 42 45 46 4f 52 45 0a 20 20 20 42 45 47 49    BEFORE.   BEGI
26740 4e 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20  N.   BETWEEN.   
26750 42 59 0a 20 20 20 43 41 53 43 41 44 45 0a 20 20  BY.   CASCADE.  
26760 20 43 41 53 45 0a 20 20 20 43 41 53 54 0a 20 20   CASE.   CAST.  
26770 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54   CHECK.   COLLAT
26780 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43  E.   COLUMN.   C
26790 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43  OMMIT.   CONFLIC
267a0 54 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a  T.   CONSTRAINT.
267b0 20 20 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f     CREATE.   CRO
267c0 53 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41  SS.   CURRENT_DA
267d0 54 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  TE.   CURRENT_TI
267e0 4d 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  ME.   CURRENT_TI
267f0 4d 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41 42  MESTAMP.   DATAB
26800 41 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a 20  ASE.   DEFAULT. 
26810 20 20 44 45 46 45 52 52 45 44 0a 20 20 20 44 45    DEFERRED.   DE
26820 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45  FERRABLE.   DELE
26830 54 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44 45  TE.   DESC.   DE
26840 54 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43 54  TACH.   DISTINCT
26850 0a 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a  .   DROP.   END.
26860 20 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45 0a     EACH.   ELSE.
26870 20 20 20 45 53 43 41 50 45 0a 20 20 20 45 58 43     ESCAPE.   EXC
26880 45 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45  EPT.   EXCLUSIVE
26890 0a 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58  .   EXISTS.   EX
268a0 50 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20  PLAIN.   FAIL.  
268b0 20 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a   FOR.   FOREIGN.
268c0 20 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a     FROM.   FULL.
268d0 20 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50     GLOB.   GROUP
268e0 0a 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46  .   HAVING.   IF
268f0 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d  .   IGNORE.   IM
26900 4d 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20 20  MEDIATE.   IN.  
26910 20 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45   INDEX.   INDEXE
26920 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20  D.   INITIALLY. 
26930 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52    INNER.   INSER
26940 54 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20 20  T.   INSTEAD.   
26950 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54  INTERSECT.   INT
26960 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c  O.   IS.   ISNUL
26970 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59  L.   JOIN.   KEY
26980 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45  .   LEFT.   LIKE
26990 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54  .   LIMIT.   MAT
269a0 43 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20  CH.   NATURAL.  
269b0 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f   NO.   NOT.   NO
269c0 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20  TNULL.   NULL.  
269d0 20 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20   OF.   OFFSET.  
269e0 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44   ON.   OR.   ORD
269f0 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50  ER.   OUTER.   P
26a00 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20 20  LAN.   PRAGMA.  
26a10 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52   PRIMARY.   QUER
26a20 59 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52 45  Y.   RAISE.   RE
26a30 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45 47 45  FERENCES.   REGE
26a40 58 50 0a 20 20 20 52 45 49 4e 44 45 58 0a 20 20  XP.   REINDEX.  
26a50 20 52 45 4c 45 41 53 45 0a 20 20 20 52 45 4e 41   RELEASE.   RENA
26a60 4d 45 0a 20 20 20 52 45 50 4c 41 43 45 0a 20 20  ME.   REPLACE.  
26a70 20 52 45 53 54 52 49 43 54 0a 20 20 20 52 49 47   RESTRICT.   RIG
26a80 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20  HT.   ROLLBACK. 
26a90 20 20 52 4f 57 0a 20 20 20 53 41 56 45 50 4f 49    ROW.   SAVEPOI
26aa0 4e 54 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20  NT.   SELECT.   
26ab0 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20 20 20  SET.   TABLE.   
26ac0 54 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41 52  TEMP.   TEMPORAR
26ad0 59 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a  Y.   THEN.   TO.
26ae0 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20     TRANSACTION. 
26af0 20 20 54 52 49 47 47 45 52 0a 20 20 20 55 4e 49    TRIGGER.   UNI
26b00 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20  ON.   UNIQUE.   
26b10 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a  UPDATE.   USING.
26b20 20 20 20 56 41 43 55 55 4d 0a 20 20 20 56 41 4c     VACUUM.   VAL
26b30 55 45 53 0a 20 20 20 56 49 45 57 0a 20 20 20 56  UES.   VIEW.   V
26b40 49 52 54 55 41 4c 0a 20 20 20 57 48 45 4e 0a 20  IRTUAL.   WHEN. 
26b50 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70    WHERE.}]..hd_p
26b60 75 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d  uts {<DIV class=
26b70 22 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a  "pdf_section">}.
26b80 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20  Section {SQLite 
26b90 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72  Keywords} keywor
26ba0 64 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72  ds {{*SQL keywor
26bb0 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73  d} {SQL keywords
26bc0 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49  }}.hd_puts {</DI
26bd0 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  V>}.</tcl>..<p>T
26be0 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
26bf0 73 70 65 63 69 66 69 65 73 20 61 20 68 75 67 65  specifies a huge
26c00 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f   number of keywo
26c10 72 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f  rds which may no
26c20 74 0a 62 65 20 75 73 65 64 20 61 73 20 74 68 65  t.be used as the
26c30 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73   names of tables
26c40 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d  , indices, colum
26c50 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75  ns, databases, u
26c60 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63  ser-defined.func
26c70 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e  tions, collation
26c80 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  s, virtual table
26c90 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79   modules, or any
26ca0 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a   other named obj
26cb0 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66  ect..The list of
26cc0 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20   keywords is so 
26cd0 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70 65  long that few pe
26ce0 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65  ople can remembe
26cf0 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20  r them all..For 
26d00 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79  most SQL code, y
26d10 6f 75 72 20 73 61 66 65 73 74 20 62 65 74 20 69  our safest bet i
26d20 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61  s to never use a
26d30 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75  ny English langu
26d40 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20  age.word as the 
26d50 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64  name of a user-d
26d60 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f  efined object.</
26d70 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61  p>..<p>If you wa
26d80 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77  nt to use a keyw
26d90 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79  ord as a name, y
26da0 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65  ou need to quote
26db0 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20   it.  There.are 
26dc0 66 6f 75 72 20 77 61 79 73 20 6f 66 20 71 75 6f  four ways of quo
26dd0 74 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e  ting keywords in
26de0 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70   SQLite:</p>..<p
26df0 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  >.<blockquote>.<
26e00 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20  table>.<tr>.<td 
26e10 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
26e20 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74  'keyword'</b></t
26e30 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
26e40 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
26e50 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65  eyword in single
26e60 20 71 75 6f 74 65 73 20 69 73 20 61 20 73 74 72   quotes is a str
26e70 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64  ing literal.</td
26e80 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
26e90 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
26ea0 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f  >"keyword"</b></
26eb0 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74  td><td></td>..<t
26ec0 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20  d>^A keyword in 
26ed0 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73  double-quotes is
26ee0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c   an identifier.<
26ef0 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09  /td></tr>..<tr>.
26f00 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
26f10 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64  ><b>&#91;keyword
26f20 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  &#93;</b></td><t
26f30 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  d></td>..<td>^A 
26f40 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64  keyword enclosed
26f50 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b   in square brack
26f60 65 74 73 20 69 73 20 0a 20 20 20 20 20 20 20 20  ets is .        
26f70 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20  an identifier.  
26f80 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e  This is not stan
26f90 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20  dard SQL.  This 
26fa0 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73  quoting mechanis
26fb0 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65  m.        is use
26fc0 64 20 62 79 20 4d 53 20 41 63 63 65 73 73 20 61  d by MS Access a
26fd0 6e 64 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e  nd SQL Server an
26fe0 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  d is included in
26ff0 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20   SQLite for.    
27000 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74      compatibilit
27010 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  y.</td></tr>..<t
27020 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
27030 6f 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77  op"><b>&#96;keyw
27040 6f 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64  ord&#96;</b></td
27050 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  ><td></td>..<td>
27060 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f  ^A keyword enclo
27070 73 65 64 20 69 6e 20 67 72 61 76 65 20 61 63 63  sed in grave acc
27080 65 6e 74 73 20 28 41 53 43 49 49 20 63 6f 64 65  ents (ASCII code
27090 20 39 36 29 20 69 73 20 0a 20 20 20 20 20 20 20   96) is .       
270a0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20   an identifier. 
270b0 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61   This is not sta
270c0 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73  ndard SQL.  This
270d0 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69   quoting mechani
270e0 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73  sm.        is us
270f0 65 64 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20  ed by MySQL and 
27100 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53  is included in S
27110 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20  QLite for.      
27120 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e    compatibility.
27130 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62  </td></tr>.</tab
27140 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
27150 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72  >.</p>..<p>For r
27160 65 73 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63  esilience when c
27170 6f 6e 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68  onfronted with h
27180 69 73 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74  istorical SQL st
27190 61 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65  atements, SQLite
271a0 0a 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20  .will sometimes 
271b0 62 65 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67  bend the quoting
271c0 20 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70   rules above:</p
271d0 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e  >..<ul>.<li><p>^
271e0 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20  If a keyword in 
271f0 73 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28 65  single.quotes (e
27200 78 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20  x: <b>'key'</b> 
27210 6f 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e  or <b>'glob'</b>
27220 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63  ) is used in a c
27230 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 61 6e 20  ontext where.an 
27240 69 64 65 6e 74 69 66 69 65 72 20 69 73 20 61 6c  identifier is al
27250 6c 6f 77 65 64 20 62 75 74 20 77 68 65 72 65 20  lowed but where 
27260 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
27270 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c   is not allowed,
27280 20 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20   then.the token 
27290 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f  is understood to
272a0 20 62 65 20 61 6e 20 69 64 65 6e 74 69 66 69 65   be an identifie
272b0 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73  r instead of a s
272c0 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c  tring literal..<
272d0 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
272e0 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69  >^If a keyword i
272f0 6e 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20  n double.quotes 
27300 28 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62  (ex: <b>"key"</b
27310 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f  > or <b>"glob"</
27320 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61  b>) is used in a
27330 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 69   context where.i
27340 74 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f  t cannot be reso
27350 6c 76 65 64 20 74 6f 20 61 6e 20 69 64 65 6e 74  lved to an ident
27360 69 66 69 65 72 20 62 75 74 20 77 68 65 72 65 20  ifier but where 
27370 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
27380 0a 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65  .is allowed, the
27390 6e 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75  n the token is u
273a0 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20  nderstood to be 
273b0 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
273c0 20 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20 69   instead.of an i
273d0 64 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f  dentifier.</p></
273e0 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72  li>.</ul>..<p>Pr
273f0 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 63 61  ogrammers are ca
27400 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75  utioned not to u
27410 73 65 20 74 68 65 20 74 77 6f 20 65 78 63 65 70  se the two excep
27420 74 69 6f 6e 73 20 64 65 73 63 72 69 62 65 64 20  tions described 
27430 69 6e 0a 74 68 65 20 70 72 65 76 69 6f 75 73 20  in.the previous 
27440 62 75 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d 70  bullets.  We emp
27450 68 61 73 69 7a 65 20 74 68 61 74 20 74 68 65 79  hasize that they
27460 20 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74   exist only so t
27470 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d  hat old.and ill-
27480 66 6f 72 6d 65 64 20 53 51 4c 20 73 74 61 74 65  formed SQL state
27490 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20 63  ments will run c
274a0 6f 72 72 65 63 74 6c 79 2e 20 20 46 75 74 75 72  orrectly.  Futur
274b0 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51  e versions of.SQ
274c0 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67  Lite might chang
274d0 65 20 74 6f 20 72 61 69 73 65 20 65 72 72 6f 72  e to raise error
274e0 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 63  s instead of acc
274f0 65 70 74 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f  epting the malfo
27500 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74 73 20  rmed.statements 
27510 63 6f 76 65 72 65 64 20 62 79 20 74 68 65 20 65  covered by the e
27520 78 63 65 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e  xceptions above.
27530 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  </p>..<p>.SQLite
27540 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72   adds new keywor
27550 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20  ds from time to 
27560 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b  time when it tak
27570 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72  es on new featur
27580 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e  es..So to preven
27590 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d  t your code from
275a0 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79   being broken by
275b0 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d   future enhancem
275c0 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64  ents, you should
275d0 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20  .normally quote 
275e0 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74  any identifier t
275f0 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73  hat is an Englis
27600 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c  h language word,
27610 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20   even if.you do 
27620 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70  not have to..</p
27630 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20  >..<p>.The list 
27640 62 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20  below shows all 
27650 70 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f 72 64  possible keyword
27660 73 20 75 73 65 64 20 62 79 20 61 6e 79 20 62 75  s used by any bu
27670 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20 72 65  ild of.SQLite re
27680 67 61 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d  gardless of [com
27690 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
276a0 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f  s].  .Most reaso
276b0 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74  nable configurat
276c0 69 6f 6e 73 20 75 73 65 20 6d 6f 73 74 20 6f 72  ions use most or
276d0 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b 65   all of these ke
276e0 79 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65  ywords,.but some
276f0 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 62 65   keywords may be
27700 20 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 53 51   omitted when SQ
27710 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75  L language featu
27720 72 65 73 20 61 72 65 0a 64 69 73 61 62 6c 65 64  res are.disabled
27730 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73 73 20 6f  ..^(Regardless o
27740 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  f the compile-ti
27750 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
27760 2c 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72  , any identifier
27770 20 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e 0a   that is not on.
27780 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74  the following <t
27790 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65 6e  cl>hd_puts [llen
277a0 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  gth $keyword_lis
277b0 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e 74  t]</tcl> element
277c0 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20 61 20 6b  .list is not a k
277d0 65 79 77 6f 72 64 20 74 6f 20 74 68 65 20 53 51  eyword to the SQ
277e0 4c 20 70 61 72 73 65 72 20 69 6e 20 53 51 4c 69  L parser in SQLi
277f0 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  te:.</p>..<block
27800 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 77 69  quote>.<table wi
27810 64 74 68 3d 22 31 30 30 25 22 3e 3c 74 72 3e 0a  dth="100%"><tr>.
27820 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22  <td align="left"
27830 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77 69   valign="top" wi
27840 64 74 68 3d 22 32 30 25 22 3e 0a 3c 74 63 6c 3e  dth="20%">.<tcl>
27850 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20  .set n [llength 
27860 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73  $keyword_list].s
27870 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52  et nCol 5.set nR
27880 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e  ow [expr {($n+$n
27890 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73  Col-1)/$nCol}].s
278a0 65 74 20 69 20 30 0a 66 6f 72 65 61 63 68 20 77  et i 0.foreach w
278b0 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  ord $keyword_lis
278c0 74 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e  t {.  if {$i==$n
278d0 52 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70 75  Row} {.    hd_pu
278e0 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c  ts "</td><td val
278f0 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67  ign=\"top\" alig
27900 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68  n=\"left\" width
27910 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73  =\"20%\">".    s
27920 65 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20  et i 1.  } else 
27930 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d  {.    incr i.  }
27940 0a 20 20 68 64 5f 70 75 74 73 20 22 24 77 6f 72  .  hd_puts "$wor
27950 64 3c 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c  d<br>\n".}.</tcl
27960 3e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61  >.</td></tr></ta
27970 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ble></blockquote
27980 3e 29 5e 0a                                      >)^.