Documentation Source Text

Hex Artifact Content
Login

Artifact cecc069653ddd39b266f03c5edf46e1b0c7c8a2c:


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 68 65 78 28 58 29 7d  funcdef {hex(X)}
16500 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78   {} {.  ^The hex
16510 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65  () function inte
16520 72 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d  rprets its argum
16530 65 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e  ent as a BLOB an
16540 64 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74  d returns.  a st
16550 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
16560 65 20 75 70 70 65 72 2d 63 61 73 65 20 68 65 78  e upper-case hex
16570 61 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69  adecimal renderi
16580 6e 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ng of the conten
16590 74 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62  t of.  that blob
165a0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61  ..}..funcdef {la
165b0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
165c0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
165d0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
165e0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
165f0 72 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a  rns the [ROWID].
16600 20 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f    of the last ro
16610 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68  w insert from th
16620 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
16630 63 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f  ction which invo
16640 6b 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69  ked the.  functi
16650 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f  on..  ^The last_
16660 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53  insert_rowid() S
16670 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  QL function is a
16680 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
16690 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c  the.  [sqlite3_l
166a0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
166b0 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ()] C/C++ interf
166c0 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a  ace function..}.
166d0 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68  .funcdef {length
166e0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72  (X)} {} {.  ^For
166f0 20 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20   a string value 
16700 58 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  X, the length(X)
16710 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
16720 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
16730 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 28 6e  .  characters (n
16740 6f 74 20 62 79 74 65 73 29 20 69 6e 20 58 20 70  ot bytes) in X p
16750 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73  rior to the firs
16760 74 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e  t NUL character.
16770 0a 20 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20  .  Since SQLite 
16780 73 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e  strings do not n
16790 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20  ormally contain 
167a0 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20  NUL characters, 
167b0 74 68 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20  the length(X).  
167c0 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73  function will us
167d0 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65  ually return the
167e0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
167f0 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
16800 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e  he string X..  ^
16810 46 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65  For a blob value
16820 20 58 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65   X, length(X) re
16830 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
16840 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
16850 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69   blob..  ^If X i
16860 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67  s NULL then leng
16870 74 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20  th(X) is NULL.. 
16880 20 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69   ^If X is numeri
16890 63 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29  c then length(X)
168a0 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e   returns the len
168b0 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a  gth of a string.
168c0 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e    representation
168d0 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
168e0 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b  f {like(X,Y) lik
168f0 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20  e(X,Y,Z)} {} {. 
16900 20 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e   ^The like() fun
16910 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
16920 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20   implement the. 
16930 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23   "<b>Y LIKE X &#
16940 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b  91;ESCAPE Z&#93;
16950 3c 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e  </b>" expression
16960 2e 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74  . .  ^If the opt
16970 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
16980 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
16990 74 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28  then the.  like(
169a0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  ) function is in
169b0 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65  voked with three
169c0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74   arguments.  ^Ot
169d0 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20  herwise, it is. 
169e0 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77   invoked with tw
169f0 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79  o arguments only
16a00 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
16a10 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65  X and Y paramete
16a20 72 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65  rs are.  reverse
16a30 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20  d in the like() 
16a40 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76  function relativ
16a50 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b  e to the infix [
16a60 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a  LIKE] operator..
16a70 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f    ^The [sqlite3_
16a80 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
16a90 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e  )] interface can
16aa0 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72   be used to over
16ab0 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28  ride the.  like(
16ac0 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  ) function and t
16ad0 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68  hereby change th
16ae0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  e operation of t
16af0 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72  he.  [LIKE] oper
16b00 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72  ator.  When over
16b10 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28  riding the like(
16b20 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d  ) function, it m
16b30 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a  ay be important.
16b40 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f    to override bo
16b50 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74  th the two and t
16b60 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65  hree argument ve
16b70 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69  rsions of the li
16b80 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e  ke() .  function
16b90 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66  . Otherwise, dif
16ba0 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20  ferent code may 
16bb0 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70  be called to imp
16bc0 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49  lement the.  [LI
16bd0 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70  KE] operator dep
16be0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
16bf0 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41  r or not an ESCA
16c00 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20  PE clause was . 
16c10 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 66   specified..}..f
16c20 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74  uncdef {load_ext
16c30 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65  ension(X) load_e
16c40 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b  xtension(X,Y)} {
16c50 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f  } {.  ^The load_
16c60 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66  extension(X,Y) f
16c70 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20 53 51  unction loads SQ
16c80 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 20  Lite extensions 
16c90 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65  out of the share
16ca0 64 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65  d.  library file
16cb0 20 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74   named X using t
16cc0 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59  he entry point Y
16cd0 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
16ce0 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  f load_extension
16cf0 28 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61  ().  is always a
16d00 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73   NULL.  ^If Y is
16d10 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68   omitted then th
16d20 65 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20  e default entry 
16d30 70 6f 69 6e 74 0a 20 20 6f 66 20 3c 62 3e 73 71  point.  of <b>sq
16d40 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f  lite3_extension_
16d50 69 6e 69 74 3c 2f 62 3e 20 69 73 20 75 73 65 64  init</b> is used
16d60 2e 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74  .  ^The load_ext
16d70 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f  ension() functio
16d80 6e 0a 20 20 72 61 69 73 65 73 20 61 6e 20 65 78  n.  raises an ex
16d90 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65  ception if the e
16da0 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74  xtension fails t
16db0 6f 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61  o load or initia
16dc0 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a  lize correctly..
16dd0 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f  .  <p>^The load_
16de0 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63  extension() func
16df0 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69  tion will fail i
16e00 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20  f the extension 
16e10 61 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d  attempts to .  m
16e20 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20  odify or delete 
16e30 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
16e40 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
16e50 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65  uence.  ^The.  e
16e60 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64  xtension can add
16e70 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f   new functions o
16e80 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
16e90 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f  ences, but canno
16ea0 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65  t.  modify or de
16eb0 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 66 75  lete existing fu
16ec0 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61  nctions or colla
16ed0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62  ting sequences b
16ee0 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66  ecause.  those f
16ef0 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20  unctions and/or 
16f00 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
16f10 63 65 73 20 6d 69 67 68 74 20 62 65 20 75 73 65  ces might be use
16f20 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e  d elsewhere.  in
16f30 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72   the currently r
16f40 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65  unning SQL state
16f50 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61  ment.  To load a
16f60 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74  n extension that
16f70 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65  .  changes or de
16f80 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20  letes functions 
16f90 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
16fa0 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a  uences, use the.
16fb0 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f    [sqlite3_load_
16fc0 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c  extension()] C-l
16fd0 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e  anguage API.</p>
16fe0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77  .}..funcdef {low
16ff0 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  er(X)} {} {.  ^T
17000 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63  he lower(X) func
17010 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63  tion returns a c
17020 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20  opy of string X 
17030 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63  with all ASCII c
17040 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76  haracters.  conv
17050 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63  erted to lower c
17060 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ase.  ^The defau
17070 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65  lt built-in lowe
17080 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72  r() function wor
17090 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63  ks.  for ASCII c
170a0 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20  haracters only. 
170b0 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76   To do case conv
170c0 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41  ersions on non-A
170d0 53 43 49 49 0a 20 20 63 68 61 72 61 63 74 65 72  SCII.  character
170e0 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20  s, load the ICU 
170f0 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75  extension..}..fu
17100 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20  ncdef {ltrim(X) 
17110 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  ltrim(X,Y)} {} {
17120 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c  .  ^The ltrim(X,
17130 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
17140 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
17150 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
17160 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
17170 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
17180 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
17190 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20  he left side of 
171a0 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  X..  ^If the Y a
171b0 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
171c0 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d  ed, ltrim(X) rem
171d0 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d  oves spaces from
171e0 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20   the left side. 
171f0 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
17200 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d  f {max(X,Y,...)}
17210 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a   {*maxCoreFunc *
17220 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66  max {max() SQL f
17230 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
17240 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
17250 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e  t max() function
17260 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
17270 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a  ument with the .
17280 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c    maximum value,
17290 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20   or return NULL 
172a0 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20  if any argument 
172b0 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65  is NULL. .  ^The
172c0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
172d0 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73  max() function s
172e0 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
172f0 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
17300 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61  to right.  for a
17310 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
17320 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
17330 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
17340 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
17350 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20  ting.  function 
17360 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63  for all string c
17370 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
17380 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67   none of the arg
17390 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a  uments to max().
173a0 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61    define a colla
173b0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74  ting function, t
173c0 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63  hen the BINARY c
173d0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
173e0 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74  n is used..  Not
173f0 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c  e that <b>max()<
17400 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20  /b> is a simple 
17410 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20  function when.  
17420 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65  it has 2 or more
17430 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f   arguments but o
17440 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a 20 20  perates as an.  
17450 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20 61 67  [minAggFunc | ag
17460 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17470 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20  ] if given only 
17480 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
17490 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  t..}..funcdef {m
174a0 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d  in(X,Y,...)} {*m
174b0 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20  inCoreFunc *min 
174c0 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e 63 74  {min() SQL funct
174d0 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d  ion}} {.  ^The m
174e0 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69  ulti-argument mi
174f0 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  n() function ret
17500 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e  urns the argumen
17510 74 20 77 69 74 68 20 74 68 65 0a 20 20 6d 69 6e  t with the.  min
17520 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54  imum value..  ^T
17530 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
17540 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e  t min() function
17550 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72   searches its ar
17560 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66  guments from lef
17570 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72  t to right.  for
17580 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61   an argument tha
17590 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  t defines a coll
175a0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61  ating function a
175b0 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c  nd uses that col
175c0 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f  lating.  functio
175d0 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
175e0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
175f0 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61  If none of the a
17600 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28  rguments to min(
17610 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c  ).  define a col
17620 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c  lating function,
17630 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59   then the BINARY
17640 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
17650 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e  ion is used..  N
17660 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28  ote that <b>min(
17670 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
17680 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
17690 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
176a0 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
176b0 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 20   operates as an 
176c0 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c  .  [maxAggFunc |
176d0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
176e0 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20  ion] if given.  
176f0 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72  only a single ar
17700 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64  gument..}..funcd
17710 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d  ef {nullif(X,Y)}
17720 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c   {} {.  ^The nul
17730 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lif(X,Y) functio
17740 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20 66 69  n returns its fi
17750 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20  rst argument if 
17760 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72  the arguments ar
17770 65 0a 20 20 64 69 66 66 65 72 65 6e 74 20 61 6e  e.  different an
17780 64 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 61 72  d NULL if the ar
17790 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20  guments are the 
177a0 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c  same.  ^The null
177b0 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  if(X,Y) function
177c0 0a 20 20 73 65 61 72 63 68 65 73 20 69 74 73 20  .  searches its 
177d0 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c  arguments from l
177e0 65 66 74 20 74 6f 20 72 69 67 68 74 20 66 6f 72  eft to right for
177f0 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61   an argument tha
17800 74 20 64 65 66 69 6e 65 73 20 61 0a 20 20 63 6f  t defines a.  co
17810 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
17820 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63   and uses that c
17830 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
17840 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
17850 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  .  comparisons. 
17860 20 5e 49 66 20 6e 65 69 74 68 65 72 20 61 72 67   ^If neither arg
17870 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28  ument to nullif(
17880 29 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  ) defines a coll
17890 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20  ating function. 
178a0 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59   then the BINARY
178b0 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e   is used..}..fun
178c0 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20  cdef {quote(X)} 
178d0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74  {} {.  ^The quot
178e0 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  e(X) function re
178f0 74 75 72 6e 73 20 74 68 65 20 74 65 78 74 20 6f  turns the text o
17900 66 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  f an SQL literal
17910 20 77 68 69 63 68 0a 20 20 69 73 20 74 68 65 20   which.  is the 
17920 76 61 6c 75 65 20 6f 66 20 69 74 73 20 61 72 67  value of its arg
17930 75 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66  ument suitable f
17940 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74  or inclusion int
17950 6f 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  o an SQL stateme
17960 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 61  nt..  ^Strings a
17970 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79  re surrounded by
17980 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77   single-quotes w
17990 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69  ith escapes on i
179a0 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 20  nterior quotes. 
179b0 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c   as needed.  ^BL
179c0 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64 20  OBs are encoded 
179d0 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6c  as hexadecimal l
179e0 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74 72 69  iterals..  ^Stri
179f0 6e 67 73 20 77 69 74 68 20 65 6d 62 65 64 64 65  ngs with embedde
17a00 64 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73  d NUL characters
17a10 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 70 72 65   cannot be repre
17a20 73 65 6e 74 65 64 20 61 73 20 73 74 72 69 6e 67  sented as string
17a30 0a 20 20 6c 69 74 65 72 61 6c 73 20 69 6e 20 53  .  literals in S
17a40 51 4c 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65  QL and hence the
17a50 20 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e 67   returned string
17a60 20 6c 69 74 65 72 61 6c 20 69 73 20 74 72 75 6e   literal is trun
17a70 63 61 74 65 64 20 70 72 69 6f 72 0a 20 20 74 6f  cated prior.  to
17a80 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c 2e 0a   the first NUL..
17a90 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64  }..funcdef {rand
17aa0 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  om()} {} {.  ^Th
17ab0 65 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74  e random() funct
17ac0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 70 73  ion returns a ps
17ad0 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65  eudo-random inte
17ae0 67 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d 39  ger.  between -9
17af0 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
17b00 30 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30  08 and +92233720
17b10 33 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a  36854775807..}..
17b20 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62  funcdef {randomb
17b30 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e  lob(N)} {} {.  ^
17b40 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e  The randomblob(N
17b50 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
17b60 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62  n an N-byte blob
17b70 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65 75   containing pseu
17b80 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65  do-random.  byte
17b90 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65 73 73  s. ^If N is less
17ba0 20 74 68 61 6e 20 31 20 74 68 65 6e 20 61 20 31   than 1 then a 1
17bb0 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f  -byte random blo
17bc0 62 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a  b is returned...
17bd0 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c    <p>Hint:  appl
17be0 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e  ications can gen
17bf0 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75  erate globally u
17c00 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72  nique identifier
17c10 73 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20 66  s.  using this f
17c20 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65 72  unction together
17c30 20 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61 6e   with [hex()] an
17c40 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d  d/or.  [lower()]
17c50 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a   like this:</p>.
17c60 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  .  <blockquote>.
17c70 20 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62    hex(randomblob
17c80 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20  (16))<br></br>. 
17c90 20 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f   lower(hex(rando
17ca0 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f  mblob(16))).  </
17cb0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66  blockquote>.}..f
17cc0 75 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65 28  uncdef {replace(
17cd0 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e  X,Y,Z)} {} {.  ^
17ce0 54 68 65 20 72 65 70 6c 61 63 65 28 58 2c 59 2c  The replace(X,Y,
17cf0 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Z) function retu
17d00 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
17d10 6d 65 64 20 62 79 20 73 75 62 73 74 69 74 75 74  med by substitut
17d20 69 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a 20 66  ing.  string Z f
17d30 6f 72 20 65 76 65 72 79 20 6f 63 63 75 72 72 65  or every occurre
17d40 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20  nce of string Y 
17d50 69 6e 20 73 74 72 69 6e 67 20 58 2e 20 20 5e 54  in string X.  ^T
17d60 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f  he [BINARY].  co
17d70 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
17d80 20 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f 6d   is used for com
17d90 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59  parisons.  ^If Y
17da0 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20 73   is an empty.  s
17db0 74 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75 72  tring then retur
17dc0 6e 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 20 20  n X unchanged.  
17dd0 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69  ^If Z is not ini
17de0 74 69 61 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e  tially.  a strin
17df0 67 2c 20 69 74 20 69 73 20 63 61 73 74 20 74 6f  g, it is cast to
17e00 20 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20   a UTF-8 string 
17e10 70 72 69 6f 72 20 74 6f 20 70 72 6f 63 65 73 73  prior to process
17e20 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ing..}..funcdef 
17e30 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64 28  {round(X) round(
17e40 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
17e50 65 20 72 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e  e round(X,Y) fun
17e60 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
17e70 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20  floating-point. 
17e80 20 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65 64   value X rounded
17e90 20 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f 20   to Y digits to 
17ea0 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65  the right of the
17eb0 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a   decimal point..
17ec0 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
17ed0 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
17ee0 20 69 74 20 69 73 20 61 73 73 75 6d 65 64 20 74   it is assumed t
17ef0 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63 64  o be 0..}..funcd
17f00 65 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74 72  ef {rtrim(X) rtr
17f10 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  im(X,Y)} {} {.  
17f20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c 59 29 20  ^The rtrim(X,Y) 
17f30 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
17f40 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
17f50 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
17f60 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61   and all.  chara
17f70 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61  cters that appea
17f80 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65 20  r in Y from the 
17f90 72 69 67 68 74 20 73 69 64 65 20 6f 66 20 58 2e  right side of X.
17fa0 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
17fb0 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
17fc0 2c 20 72 74 72 69 6d 28 58 29 20 72 65 6d 6f 76  , rtrim(X) remov
17fd0 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74  es spaces from t
17fe0 68 65 20 72 69 67 68 74 0a 20 20 73 69 64 65 20  he right.  side 
17ff0 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
18000 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b 7d   {soundex(X)} {}
18010 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e 64 65   {.  ^The sounde
18020 78 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  x(X) function re
18030 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
18040 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 6e 64  hat is the sound
18050 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20 20 6f  ex encoding .  o
18060 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a  f the string X..
18070 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20 22 3f    ^The string "?
18080 30 30 30 22 20 69 73 20 72 65 74 75 72 6e 65 64  000" is returned
18090 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
180a0 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74   is NULL or cont
180b0 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49 49 20  ains.  no ASCII 
180c0 61 6c 70 68 61 62 65 74 69 63 20 63 68 61 72 61  alphabetic chara
180d0 63 74 65 72 73 2e 0a 20 20 5e 28 54 68 69 73 20  cters..  ^(This 
180e0 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74  function is omit
180f0 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20  ted from SQLite 
18100 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49 74  by default..  It
18110 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62   is only availab
18120 6c 65 20 69 66 20 74 68 65 20 5b 53 51 4c 49 54  le if the [SQLIT
18130 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d 70 69  E_SOUNDEX] compi
18140 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20  le-time option. 
18150 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51   is used when SQ
18160 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e 29 5e  Lite is built.)^
18170 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c  .}..funcdef {sql
18180 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
18190 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20  n_get(N)} {} {. 
181a0 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d   ^The sqlite_com
181b0 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29  pileoption_get()
181c0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
181d0 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
181e0 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33  d the.  [sqlite3
181f0 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67  _compileoption_g
18200 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63  et()] C/C++ func
18210 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20 72 6f  tion..  ^This ro
18220 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68  utine returns th
18230 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d 74  e N-th compile-t
18240 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20  ime option used 
18250 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 0a  to build SQLite.
18260 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e 20 69    or NULL if N i
18270 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 20  s out of range. 
18280 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b 63   See also the [c
18290 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70  ompile_options p
182a0 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64  ragma]..}..funcd
182b0 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69  ef {sqlite_compi
182c0 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29  leoption_used(X)
182d0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
182e0 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
182f0 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c 20 66 75  on_used() SQL fu
18300 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
18310 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20  per around the. 
18320 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c   [sqlite3_compil
18330 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d 20  eoption_used()] 
18340 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a  C/C++ function..
18350 20 20 5e 57 68 65 6e 20 74 68 65 20 61 72 67 75    ^When the argu
18360 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c 69 74 65  ment X to sqlite
18370 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
18380 73 65 64 28 58 29 20 69 73 20 61 20 73 74 72 69  sed(X) is a stri
18390 6e 67 20 77 68 69 63 68 0a 20 20 69 73 20 74 68  ng which.  is th
183a0 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6d 70  e name of a comp
183b0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c  ile-time option,
183c0 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65   this routine re
183d0 74 75 72 6e 73 20 74 72 75 65 20 28 31 29 20 6f  turns true (1) o
183e0 72 0a 20 20 66 61 6c 73 65 20 28 30 29 20 64 65  r.  false (0) de
183f0 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
18400 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 6f  er or not that o
18410 70 74 69 6f 6e 20 77 61 73 20 75 73 65 64 20 64  ption was used d
18420 75 72 69 6e 67 20 74 68 65 0a 20 20 62 75 69 6c  uring the.  buil
18430 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  d..}..funcdef {s
18440 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
18450 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
18460 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
18470 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
18480 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  ns a string that
18490 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 0a   identifies the.
184a0 20 20 73 70 65 63 69 66 69 63 20 76 65 72 73 69    specific versi
184b0 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  on of the source
184c0 20 63 6f 64 65 20 74 68 61 74 20 77 61 73 20 75   code that was u
184d0 73 65 64 20 74 6f 20 62 75 69 6c 64 20 74 68 65  sed to build the
184e0 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61 72   SQLite.  librar
184f0 79 2e 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20  y.  ^The string 
18500 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
18510 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 62  te_source_id() b
18520 65 67 69 6e 73 20 77 69 74 68 0a 20 20 74 68 65  egins with.  the
18530 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 74   date and time t
18540 68 61 74 20 74 68 65 20 73 6f 75 72 63 65 20 63  hat the source c
18550 6f 64 65 20 77 61 73 20 63 68 65 63 6b 65 64 20  ode was checked 
18560 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c 6c 6f 77  in and is follow
18570 73 20 62 79 0a 20 20 61 6e 20 53 48 41 31 20 68  s by.  an SHA1 h
18580 61 73 68 20 74 68 61 74 20 75 6e 69 71 75 65 6c  ash that uniquel
18590 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  y identifies the
185a0 20 73 6f 75 72 63 65 20 74 72 65 65 2e 20 20 5e   source tree.  ^
185b0 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
185c0 0a 20 20 61 6e 20 53 51 4c 20 77 72 61 70 70 65  .  an SQL wrappe
185d0 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
185e0 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29  lite3_sourceid()
185f0 5d 20 43 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d  ] C interface..}
18600 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74  ..funcdef {sqlit
18610 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b 7d 20  e_version()} {} 
18620 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
18630 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74 69  version() functi
18640 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 76  on returns the v
18650 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66 6f  ersion string fo
18660 72 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c  r the SQLite.  l
18670 69 62 72 61 72 79 20 74 68 61 74 20 69 73 20 72  ibrary that is r
18680 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73 20 66  unning.  ^This f
18690 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20 53 51  unction is an SQ
186a0 4c 0a 20 20 77 72 61 70 70 65 72 20 61 72 6f 75  L.  wrapper arou
186b0 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  nd the [sqlite3_
186c0 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d 20 43 2d  libversion()] C-
186d0 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
186e0 6e 63 64 65 66 20 7b 73 75 62 73 74 72 28 58 2c  ncdef {substr(X,
186f0 59 2c 5a 29 20 73 75 62 73 74 72 28 58 2c 59 29  Y,Z) substr(X,Y)
18700 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75  } {} {.  ^The su
18710 62 73 74 72 28 58 2c 59 2c 5a 29 20 66 75 6e 63  bstr(X,Y,Z) func
18720 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
18730 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75  ubstring of inpu
18740 74 20 73 74 72 69 6e 67 20 58 20 74 68 61 74 20  t string X that 
18750 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20 74 68  begins.  with th
18760 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72  e Y-th character
18770 20 61 6e 64 20 77 68 69 63 68 20 69 73 20 5a 20   and which is Z 
18780 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
18790 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d 69 74  .  ^If Z is omit
187a0 74 65 64 20 74 68 65 6e 20 73 75 62 73 74 72 28  ted then substr(
187b0 58 2c 59 29 20 72 65 74 75 72 6e 73 20 61 6c 6c  X,Y) returns all
187c0 20 63 68 61 72 61 63 74 65 72 73 20 74 68 72 6f   characters thro
187d0 75 67 68 20 74 68 65 20 65 6e 64 0a 20 20 6f 66  ugh the end.  of
187e0 20 74 68 65 20 73 74 72 69 6e 67 20 58 20 62 65   the string X be
187f0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 74 68 65  ginning with the
18800 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20 6c 65   Y-th..  ^The le
18810 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63 74 65  ft-most characte
18820 72 20 6f 66 20 58 20 69 73 20 6e 75 6d 62 65 72  r of X is number
18830 20 31 2e 20 20 5e 49 66 20 59 20 69 73 20 6e 65   1.  ^If Y is ne
18840 67 61 74 69 76 65 0a 20 20 74 68 65 6e 20 74 68  gative.  then th
18850 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65  e first characte
18860 72 20 6f 66 20 74 68 65 20 73 75 62 73 74 72 69  r of the substri
18870 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63  ng is found by c
18880 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65  ounting from the
18890 0a 20 20 72 69 67 68 74 20 72 61 74 68 65 72 20  .  right rather 
188a0 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20 20  than the left.  
188b0 5e 49 66 20 5a 20 69 73 20 6e 65 67 61 74 69 76  ^If Z is negativ
188c0 65 20 74 68 65 6e 0a 20 20 74 68 65 20 61 62 73  e then.  the abs
188d0 28 5a 29 20 63 68 61 72 61 63 74 65 72 73 20 70  (Z) characters p
188e0 72 65 63 65 64 69 6e 67 20 74 68 65 20 59 2d 74  receding the Y-t
188f0 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20  h character are 
18900 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49 66 20  returned..  ^If 
18910 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68  X is a string th
18920 65 6e 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  en characters in
18930 64 69 63 65 73 20 72 65 66 65 72 20 74 6f 20 61  dices refer to a
18940 63 74 75 61 6c 20 55 54 46 2d 38 20 0a 20 20 63  ctual UTF-8 .  c
18950 68 61 72 61 63 74 65 72 73 2e 20 20 5e 49 66 20  haracters.  ^If 
18960 58 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65 6e  X is a BLOB then
18970 20 74 68 65 20 69 6e 64 69 63 65 73 20 72 65 66   the indices ref
18980 65 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a  er to bytes..}..
18990 66 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f 63  funcdef {total_c
189a0 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20  hanges()} {} {. 
189b0 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68 61 6e   ^The total_chan
189c0 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ges() function r
189d0 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
189e0 72 20 6f 66 20 72 6f 77 20 63 68 61 6e 67 65 73  r of row changes
189f0 0a 20 20 63 61 75 73 65 64 20 62 79 20 49 4e 53  .  caused by INS
18a00 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
18a10 45 4c 45 54 45 0a 20 20 73 74 61 74 65 6d 65 6e  ELETE.  statemen
18a20 74 73 20 73 69 6e 63 65 20 74 68 65 20 63 75 72  ts since the cur
18a30 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f  rent database co
18a40 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f 70 65  nnection was ope
18a50 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20 66 75 6e  ned..  ^This fun
18a60 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
18a70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
18a80 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
18a90 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20  nges()].  C/C++ 
18aa0 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
18ab0 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20 74  ncdef {trim(X) t
18ac0 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
18ad0 20 5e 54 68 65 20 74 72 69 6d 28 58 2c 59 29 20   ^The trim(X,Y) 
18ae0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
18af0 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
18b00 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
18b10 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61   and all.  chara
18b20 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61  cters that appea
18b30 72 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f 74 68  r in Y from both
18b40 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20 5e 49   ends of X..  ^I
18b50 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74  f the Y argument
18b60 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 72 69   is omitted, tri
18b70 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61  m(X) removes spa
18b80 63 65 73 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e  ces from both en
18b90 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  ds of X..}..func
18ba0 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29 7d 20  def {typeof(X)} 
18bb0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79 70 65  {} {.  ^The type
18bc0 6f 66 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  of(X) function r
18bd0 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
18be0 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
18bf0 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f 66  he [datatype] of
18c00 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  .  the expressio
18c10 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22 69 6e  n X: "null", "in
18c20 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c 20  teger", "real", 
18c30 22 74 65 78 74 22 2c 20 6f 72 20 22 62 6c 6f 62  "text", or "blob
18c40 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75  "..}..funcdef {u
18c50 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  pper(X)} {} {.  
18c60 5e 54 68 65 20 75 70 70 65 72 28 58 29 20 66 75  ^The upper(X) fu
18c70 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
18c80 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20 73   copy of input s
18c90 74 72 69 6e 67 20 58 20 69 6e 20 77 68 69 63 68  tring X in which
18ca0 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d 63 61   all .  lower-ca
18cb0 73 65 20 41 53 43 49 49 20 63 68 61 72 61 63 74  se ASCII charact
18cc0 65 72 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65  ers are converte
18cd0 64 20 74 6f 20 74 68 65 69 72 20 75 70 70 65 72  d to their upper
18ce0 2d 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74  -case equivalent
18cf0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 7a 65  ..}..funcdef {ze
18d00 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a  roblob(N)} {} {.
18d10 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c 6f 62 28    ^The zeroblob(
18d20 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  N) function retu
18d30 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69  rns a BLOB consi
18d40 73 74 69 6e 67 20 6f 66 20 4e 20 62 79 74 65 73  sting of N bytes
18d50 20 6f 66 20 30 78 30 30 2e 0a 20 20 53 51 4c 69   of 0x00..  SQLi
18d60 74 65 20 6d 61 6e 61 67 65 73 20 74 68 65 73 65  te manages these
18d70 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72 79 20   zeroblobs very 
18d80 65 66 66 69 63 69 65 6e 74 6c 79 2e 20 20 5a 65  efficiently.  Ze
18d90 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65 20 75  roblobs can be u
18da0 73 65 64 20 74 6f 0a 20 20 72 65 73 65 72 76 65  sed to.  reserve
18db0 20 73 70 61 63 65 20 66 6f 72 20 61 20 42 4c 4f   space for a BLO
18dc0 42 20 74 68 61 74 20 69 73 20 6c 61 74 65 72 20  B that is later 
18dd0 77 72 69 74 74 65 6e 20 75 73 69 6e 67 20 0a 20  written using . 
18de0 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f   [sqlite3_blob_o
18df0 70 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d 65 6e  pen() | incremen
18e00 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 20  tal BLOB I/O].. 
18e10 20 5e 54 68 69 73 20 53 51 4c 20 66 75 6e 63 74   ^This SQL funct
18e20 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  ion is implement
18e30 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71  ed using the [sq
18e40 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72  lite3_result_zer
18e50 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f 75 74 69  oblob()].  routi
18e60 6e 65 20 66 72 6f 6d 20 74 68 65 20 43 2f 43 2b  ne from the C/C+
18e70 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 3c  + interface..}.<
18e80 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  /tcl>.</table>..
18e90 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
18ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18ee0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 61  ####.Section {Da
18ef0 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75 6e 63  te And Time Func
18f00 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20  tions} datefunc 
18f10 7b 2a 64 61 74 65 66 75 6e 63 7d 0a 68 64 5f 6b  {*datefunc}.hd_k
18f20 65 79 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20  eywords {date() 
18f30 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74  SQL function} {t
18f40 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ime() SQL functi
18f50 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  on}.hd_keywords 
18f60 7b 64 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20  {datetime() SQL 
18f70 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61  function} {julia
18f80 6e 64 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74  nday() SQL funct
18f90 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73  ion}.hd_keywords
18fa0 20 7b 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c   {strftime() SQL
18fb0 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c   function}.</tcl
18fc0 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75  >..<p>.SQLite su
18fd0 70 70 6f 72 74 73 20 66 69 76 65 20 64 61 74 65  pports five date
18fe0 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
18ff0 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  ons as follows:.
19000 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c  </p>..<p>.<ol>.<
19010 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f  li> ^(<b>date(</
19020 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
19030 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
19040 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
19050 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
19060 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e  > ^(<b>time(</b>
19070 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
19080 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
19090 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
190a0 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
190b0 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f  ^(<b>datetime(</
190c0 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
190d0 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
190e0 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
190f0 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
19100 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79  > ^(<b>julianday
19110 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
19120 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
19130 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
19140 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
19150 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69  <li> ^(<b>strfti
19160 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74  me(</b><i>format
19170 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f  , timestring, mo
19180 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72  difier, modifier
19190 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62  , ...</i><b>)</b
191a0 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  >)^ </li>.</ol>.
191b0 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64  .<p>.^All five d
191c0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
191d0 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69  ctions take a ti
191e0 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20  me string as an 
191f0 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20  argument. .^The 
19200 74 69 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66  time string is f
19210 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
19220 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72  or more modifier
19230 73 2e 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d  s. .^The strftim
19240 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73  e() function als
19250 6f 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74  o takes a format
19260 20 73 74 72 69 6e 67 20 61 73 20 69 74 73 20 66   string as its f
19270 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c  irst argument..<
19280 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74  /p>..<p>.The dat
19290 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
192a0 69 6f 6e 73 20 75 73 65 20 61 20 73 75 62 73 65  ions use a subse
192b0 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  t of.[http://en.
192c0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
192d0 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53  ki/ISO_8601 | IS
192e0 30 2d 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64  0-8601] date and
192f0 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e   time.formats..^
19300 54 68 65 20 64 61 74 65 28 29 20 66 75 6e 63 74  The date() funct
19310 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
19320 64 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72  date in this for
19330 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e  mat: YYYY-MM-DD.
19340 20 0a 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75   .^The time() fu
19350 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
19360 68 65 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d  he time as HH:MM
19370 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74  :SS. .^The datet
19380 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ime() function r
19390 65 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d  eturns "YYYY-MM-
193a0 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e  DD HH:MM:SS". .^
193b0 28 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29  (The julianday()
193c0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
193d0 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65  s the .[http://e
193e0 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
193f0 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20  wiki/Julian_day 
19400 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20  | Julian day] - 
19410 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61  the.number of da
19420 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e  ys since noon in
19430 20 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f   Greenwich on No
19440 76 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20  vember 24, 4714 
19450 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65  B.C. .([http://e
19460 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
19470 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47  wiki/Proleptic_G
19480 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61  regorian_calenda
19490 72 20 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72  r | Proleptic Gr
194a0 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72  egorian calendar
194b0 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74  ]).)^.^The strft
194c0 69 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ime() routine re
194d0 74 75 72 6e 73 20 74 68 65 20 64 61 74 65 20 66  turns the date f
194e0 6f 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69  ormatted accordi
194f0 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61  ng to .the forma
19500 74 20 73 74 72 69 6e 67 20 73 70 65 63 69 66 69  t string specifi
19510 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ed as the first 
19520 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66  argument..^The f
19530 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70  ormat string sup
19540 70 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63  ports the most c
19550 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69  ommon substituti
19560 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  ons found in the
19570 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72   .[http://opengr
19580 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75  oup.org/onlinepu
19590 62 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68  bs/007908799/xsh
195a0 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c  /strftime.html |
195b0 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63   strftime() func
195c0 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73  tion].from the s
195d0 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72  tandard C librar
195e0 79 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73  y plus two new s
195f0 75 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66  ubstitutions, %f
19600 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66   and %J..^(The f
19610 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f  ollowing is a co
19620 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76  mplete list of v
19630 61 6c 69 64 20 73 74 72 66 74 69 6d 65 28 29 20  alid strftime() 
19640 73 75 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c  substitutions:.<
19650 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
19660 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
19670 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "0" cellpadding=
19680 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  "0" cellspacing=
19690 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64  "0">.<tr><td><td
196a0 20 77 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e   width="10"><td>
196b0 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20  </tr>..<tr><td> 
196c0 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %d <td><td> day 
196d0 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72  of month: 00.<tr
196e0 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64  ><td> %f <td><td
196f0 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63  > fractional sec
19700 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72  onds: SS.SSS.<tr
19710 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64  ><td> %H <td><td
19720 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c  > hour: 00-24 .<
19730 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c  tr><td> %j <td><
19740 74 64 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a  td> day of year:
19750 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64   001-366.<tr><td
19760 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75  > %J <td><td> Ju
19770 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a  lian day number.
19780 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e  <tr><td> %m <td>
19790 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31  <td> month: 01-1
197a0 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74  2.<tr><td> %M <t
197b0 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30  d><td> minute: 0
197c0 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73  0-59.<tr><td> %s
197d0 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64   <td><td> second
197e0 73 20 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d  s since 1970-01-
197f0 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c  01.<tr><td> %S <
19800 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a  td><td> seconds:
19810 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20   00-59.<tr><td> 
19820 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %w <td><td> day 
19830 6f 66 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68  of week 0-6 with
19840 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c   Sunday==0.<tr><
19850 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20  td> %W <td><td> 
19860 77 65 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30  week of year: 00
19870 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20  -53.<tr><td> %Y 
19880 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30  <td><td> year: 0
19890 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64  000-9999.<tr><td
198a0 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a  > %% <td><td> %.
198b0 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
198c0 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28  quote>)^..<p>.^(
198d0 4e 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20  Notice that all 
198e0 6f 74 68 65 72 20 64 61 74 65 20 61 6e 64 20 74  other date and t
198f0 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61  ime functions ca
19900 6e 20 62 65 20 65 78 70 72 65 73 73 65 64 0a 69  n be expressed.i
19910 6e 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74  n terms of strft
19920 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  ime():.</p>..<bl
19930 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
19940 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c   border="0" cell
19950 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c  padding="0" cell
19960 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72  spacing="0">.<tr
19970 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e  ><td><b>Function
19980 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33  </b><td width="3
19990 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61  0"><td><b>Equiva
199a0 6c 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c  lent strftime()<
199b0 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64  /b>.<tr><td>   d
199c0 61 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74  ate(...)      <t
199d0 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
199e0 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e  ('%Y-%m-%d', ...
199f0 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d  ).<tr><td>   tim
19a00 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e  e(...)      <td>
19a10 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
19a20 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a  %H:%M:%S', ...).
19a30 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74  <tr><td>   datet
19a40 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74  ime(...)  <td><t
19a50 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59  d>  strftime('%Y
19a60 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27  -%m-%d %H:%M:%S'
19a70 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
19a80 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29    julianday(...)
19a90 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
19aa0 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c  ime('%J', ...).<
19ab0 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
19ac0 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65  uote>)^..<p>.The
19ad0 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f   only reasons fo
19ae0 72 20 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63  r providing func
19af0 74 69 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e  tions other than
19b00 20 73 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66   strftime() is.f
19b10 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61  or convenience a
19b20 6e 64 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63  nd for efficienc
19b30 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d  y..</p>..<h3>Tim
19b40 65 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a  e Strings</h3>..
19b50 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69  <p>^(A time stri
19b60 6e 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79  ng can be in any
19b70 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
19b80 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a  g formats:</p>..
19b90 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  <ol>.<li> <i>YYY
19ba0 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e  Y-MM-DD</i>.<li>
19bb0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
19bc0 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
19bd0 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
19be0 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
19bf0 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
19c00 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
19c10 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
19c20 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
19c30 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
19c40 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
19c50 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53  >T</b><i>HH:MM:S
19c60 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  S</i>.<li> <i>YY
19c70 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54  YY-MM-DD</i><b>T
19c80 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  </b><i>HH:MM:SS.
19c90 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  SSS</i>.<li> <i>
19ca0 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  HH:MM</i>.<li> <
19cb0 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c  i>HH:MM:SS</i>.<
19cc0 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  li> <i>HH:MM:SS.
19cd0 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e  SSS</i>.<li> <b>
19ce0 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e  now</b>.<li> <i>
19cf0 44 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c  DDDDDDDDDD</i>.<
19d00 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20  /ol>)^..<p>.^In 
19d10 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67  formats 5 throug
19d20 68 20 37 2c 20 74 68 65 20 22 54 22 20 69 73 20  h 7, the "T" is 
19d30 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63  a literal charac
19d40 74 65 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a  ter separating .
19d50 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 68 65  the date and the
19d60 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72   time, as requir
19d70 65 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77  ed by .[http://w
19d80 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f  ww.w3c.org/TR/NO
19d90 54 45 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53  TE-datetime | IS
19da0 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61  O-8601]. .^Forma
19db0 74 73 20 38 20 74 68 72 6f 75 67 68 20 31 30 20  ts 8 through 10 
19dc0 74 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c  that specify onl
19dd0 79 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20  y a time assume 
19de0 61 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d  a date of .2000-
19df0 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31  01-01. Format 11
19e00 2c 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f  , the string 'no
19e10 77 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64  w', is converted
19e20 20 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65   into the .curre
19e30 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  nt date and time
19e40 20 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f   as obtained fro
19e50 6d 20 74 68 65 20 78 43 75 72 72 65 6e 74 54 69  m the xCurrentTi
19e60 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65  me method.of the
19e70 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f   [sqlite3_vfs] o
19e80 62 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 5b  bject in use..^[
19e90 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
19ea0 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f  dia.org/wiki/Coo
19eb0 72 64 69 6e 61 74 65 64 5f 55 6e 69 76 65 72 73  rdinated_Univers
19ec0 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69 76 65 72  al_Time | Univer
19ed0 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20  sal Coordinated 
19ee0 54 69 6d 65 20 28 55 54 43 29 5d 20 69 73 20 75  Time (UTC)] is u
19ef0 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74 20 31 32  sed. .^Format 12
19f00 20 69 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f   is the .[http:/
19f10 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
19f20 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61  g/wiki/Julian_da
19f30 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e  y | Julian day n
19f40 75 6d 62 65 72 5d 0a 65 78 70 72 65 73 73 65 64  umber].expressed
19f50 20 61 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   as a floating p
19f60 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e  oint value..</p>
19f70 0a 0a 3c 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61  ..<p>.^(In forma
19f80 74 73 20 34 2c 20 37 2c 20 61 6e 64 20 31 30 2c  ts 4, 7, and 10,
19f90 20 74 68 65 20 66 72 61 63 74 69 6f 6e 61 6c 20   the fractional 
19fa0 73 65 63 6f 6e 64 73 20 76 61 6c 75 65 20 53 53  seconds value SS
19fb0 2e 53 53 53 20 63 61 6e 20 68 61 76 65 0a 6f 6e  .SSS can have.on
19fc0 65 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74 73  e or more digits
19fd0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64   following the d
19fe0 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 45  ecimal point.  E
19ff0 78 61 63 74 6c 79 20 74 68 72 65 65 20 64 69 67  xactly three dig
1a000 69 74 73 20 61 72 65 0a 73 68 6f 77 6e 20 69 6e  its are.shown in
1a010 20 74 68 65 20 65 78 61 6d 70 6c 65 73 20 62 65   the examples be
1a020 63 61 75 73 65 20 6f 6e 6c 79 20 74 68 65 20 66  cause only the f
1a030 69 72 73 74 20 74 68 72 65 65 20 64 69 67 69 74  irst three digit
1a040 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e  s are significan
1a050 74 0a 74 6f 20 74 68 65 20 72 65 73 75 6c 74 2c  t.to the result,
1a060 20 62 75 74 20 74 68 65 20 69 6e 70 75 74 20 73   but the input s
1a070 74 72 69 6e 67 20 63 61 6e 20 68 61 76 65 20 66  tring can have f
1a080 65 77 65 72 20 6f 72 20 6d 6f 72 65 20 74 68 61  ewer or more tha
1a090 6e 20 74 68 72 65 65 20 64 69 67 69 74 73 0a 61  n three digits.a
1a0a0 6e 64 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65  nd the date/time
1a0b0 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
1a0c0 73 74 69 6c 6c 20 6f 70 65 72 61 74 65 20 63 6f  still operate co
1a0d0 72 72 65 63 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c  rrectly.)^.Simil
1a0e0 61 72 6c 79 2c 20 66 6f 72 6d 61 74 20 31 32 20  arly, format 12 
1a0f0 69 73 20 73 68 6f 77 6e 20 77 69 74 68 20 31 30  is shown with 10
1a100 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67   significant dig
1a110 69 74 73 2c 20 62 75 74 20 74 68 65 20 64 61 74  its, but the dat
1a120 65 2f 74 69 6d 65 0a 66 75 6e 63 74 69 6f 6e 73  e/time.functions
1a130 20 77 69 6c 6c 20 72 65 61 6c 6c 79 20 61 63 63   will really acc
1a140 65 70 74 20 61 73 20 6d 61 6e 79 20 6f 72 20 61  ept as many or a
1a150 73 20 66 65 77 20 64 69 67 69 74 73 20 61 73 20  s few digits as 
1a160 61 72 65 20 6e 65 63 65 73 73 61 72 79 20 74 6f  are necessary to
1a170 0a 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 4a  .represent the J
1a180 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  ulian day number
1a190 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69  ..</p>..<h3>Modi
1a1a0 66 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  fiers</h3>..<p>^
1a1b0 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20  The time string 
1a1c0 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  can be followed 
1a1d0 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  by zero or more 
1a1e0 6d 6f 64 69 66 69 65 72 73 20 74 68 61 74 20 0a  modifiers that .
1a1f0 61 6c 74 65 72 20 64 61 74 65 20 61 6e 64 2f 6f  alter date and/o
1a200 72 20 74 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f  r time. ^Each mo
1a210 64 69 66 69 65 72 0a 69 73 20 61 20 74 72 61 6e  difier.is a tran
1a220 73 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  sformation that 
1a230 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68  is applied to th
1a240 65 20 74 69 6d 65 20 76 61 6c 75 65 20 74 6f 20  e time value to 
1a250 69 74 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66  its left..^Modif
1a260 69 65 72 73 20 61 72 65 20 61 70 70 6c 69 65 64  iers are applied
1a270 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
1a280 67 68 74 3b 20 6f 72 64 65 72 20 69 73 20 69 6d  ght; order is im
1a290 70 6f 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61  portant..^(The a
1a2a0 76 61 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65  vailable modifie
1a2b0 72 73 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77  rs are as follow
1a2c0 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s.</p>..<ol>.<li
1a2d0 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20  > NNN days.<li> 
1a2e0 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e  NNN hours.<li> N
1a2f0 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20  NN minutes.<li> 
1a300 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73  NNN.NNNN seconds
1a310 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73  .<li> NNN months
1a320 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a  .<li> NNN years.
1a330 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f  <li> start of mo
1a340 6e 74 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  nth.<li> start o
1a350 66 20 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72  f year.<li> star
1a360 74 20 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65  t of day.<li> we
1a370 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69  ekday N.<li> uni
1a380 78 65 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61  xepoch.<li> loca
1a390 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a  ltime.<li> utc .
1a3a0 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  </ol>)^..<p>^The
1a3b0 20 66 69 72 73 74 20 73 69 78 20 6d 6f 64 69 66   first six modif
1a3c0 69 65 72 73 20 28 31 20 74 68 72 6f 75 67 68 20  iers (1 through 
1a3d0 36 29 20 0a 73 69 6d 70 6c 79 20 61 64 64 20 74  6) .simply add t
1a3e0 68 65 20 73 70 65 63 69 66 69 65 64 20 61 6d 6f  he specified amo
1a3f0 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 74  unt of time to t
1a400 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
1a410 20 0a 73 70 65 63 69 66 69 65 64 20 62 79 20 74   .specified by t
1a420 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d  he preceding tim
1a430 65 73 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69  estring and modi
1a440 66 69 65 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61  fiers..^Note tha
1a450 74 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d  t "&plusmn;NNN m
1a460 6f 6e 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20  onths" works by 
1a470 72 65 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72  rendering the or
1a480 69 67 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f  iginal date into
1a490 0a 74 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20  .the YYYY-MM-DD 
1a4a0 66 6f 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74  format, adding t
1a4b0 68 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74  he &plusmn;NNN t
1a4c0 6f 20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76  o the MM month v
1a4d0 61 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61  alue, then.norma
1a4e0 6c 69 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c  lizing the resul
1a4f0 74 2e 20 20 5e 54 68 75 73 2c 20 66 6f 72 20 65  t.  ^Thus, for e
1a500 78 61 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61  xample, the data
1a510 20 32 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69   2001-03-31 modi
1a520 66 69 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74  fied.by '+1 mont
1a530 68 27 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65  h' initially yie
1a540 6c 64 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20  lds 2001-04-31, 
1a550 62 75 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68  but April only h
1a560 61 73 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68  as 30 days.so th
1a570 65 20 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c  e date is normal
1a580 69 7a 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d  ized to 2001-05-
1a590 30 31 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72 20  01.  ^A similar 
1a5a0 65 66 66 65 63 74 20 6f 63 63 75 72 73 20 77 68  effect occurs wh
1a5b0 65 6e 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  en.the original 
1a5c0 64 61 74 65 20 69 73 20 46 65 62 72 75 61 72 79  date is February
1a5d0 20 32 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61   29 of a leapyea
1a5e0 72 20 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69  r and the modifi
1a5f0 65 72 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20  er is.&plusmn;N 
1a600 79 65 61 72 73 20 77 68 65 72 65 20 4e 20 69 73  years where N is
1a610 20 6e 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20   not a multiple 
1a620 6f 66 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70  of four.</p>..<p
1a630 3e 5e 54 68 65 20 22 73 74 61 72 74 20 6f 66 22  >^The "start of"
1a640 20 6d 6f 64 69 66 69 65 72 73 20 28 37 20 74 68   modifiers (7 th
1a650 72 6f 75 67 68 20 39 29 20 73 68 69 66 74 20 74  rough 9) shift t
1a660 68 65 20 64 61 74 65 20 62 61 63 6b 77 61 72 64  he date backward
1a670 73 20 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e  s .to the beginn
1a680 69 6e 67 20 6f 66 20 74 68 65 20 63 75 72 72 65  ing of the curre
1a690 6e 74 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f  nt month, year o
1a6a0 72 20 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  r day.</p>..<p>^
1a6b0 54 68 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f  The "weekday" mo
1a6c0 64 69 66 69 65 72 20 61 64 76 61 6e 63 65 73 20  difier advances 
1a6d0 74 68 65 20 64 61 74 65 20 66 6f 72 77 61 72 64  the date forward
1a6e0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 64 61 74   to the next dat
1a6f0 65 20 0a 77 68 65 72 65 20 74 68 65 20 77 65 65  e .where the wee
1a700 6b 64 61 79 20 6e 75 6d 62 65 72 20 69 73 20 4e  kday number is N
1a710 2e 20 53 75 6e 64 61 79 20 69 73 20 30 2c 20 4d  . Sunday is 0, M
1a720 6f 6e 64 61 79 20 69 73 20 31 2c 20 61 6e 64 20  onday is 1, and 
1a730 73 6f 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c  so forth.</p>..<
1a740 70 3e 5e 54 68 65 20 22 75 6e 69 78 65 70 6f 63  p>^The "unixepoc
1a750 68 22 20 6d 6f 64 69 66 69 65 72 20 28 31 31 29  h" modifier (11)
1a760 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 69   only works if i
1a770 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  t immediately fo
1a780 6c 6c 6f 77 73 20 0a 61 20 74 69 6d 65 73 74 72  llows .a timestr
1a790 69 6e 67 20 69 6e 20 74 68 65 20 44 44 44 44 44  ing in the DDDDD
1a7a0 44 44 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e  DDDDD format. .^
1a7b0 54 68 69 73 20 6d 6f 64 69 66 69 65 72 20 63 61  This modifier ca
1a7c0 75 73 65 73 20 74 68 65 20 44 44 44 44 44 44 44  uses the DDDDDDD
1a7d0 44 44 44 20 74 6f 20 62 65 20 69 6e 74 65 72 70  DDD to be interp
1a7e0 72 65 74 65 64 20 6e 6f 74 20 0a 61 73 20 61 20  reted not .as a 
1a7f0 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
1a800 72 20 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79  r as it normally
1a810 20 77 6f 75 6c 64 20 62 65 2c 20 62 75 74 20 61   would be, but a
1a820 73 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  s.[http://en.wik
1a830 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
1a840 55 6e 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78  Unix_time | Unix
1a850 20 54 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75   Time] - the .nu
1a860 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20  mber of seconds 
1a870 73 69 6e 63 65 20 31 39 37 30 2e 20 20 49 66 20  since 1970.  If 
1a880 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  the "unixepoch" 
1a890 6d 6f 64 69 66 69 65 72 20 64 6f 65 73 20 6e 6f  modifier does no
1a8a0 74 0a 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73  t.follow a times
1a8b0 74 72 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 72  tring of the for
1a8c0 6d 20 44 44 44 44 44 44 44 44 44 44 20 77 68 69  m DDDDDDDDDD whi
1a8d0 63 68 20 65 78 70 72 65 73 73 65 73 20 74 68 65  ch expresses the
1a8e0 20 6e 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e   number.of secon
1a8f0 64 73 20 73 69 6e 63 65 20 31 39 37 30 20 6f 72  ds since 1970 or
1a900 20 69 66 20 6f 74 68 65 72 20 6d 6f 64 69 66 69   if other modifi
1a910 65 72 73 0a 73 65 70 61 72 61 74 65 20 74 68 65  ers.separate the
1a920 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
1a930 69 66 69 65 72 20 66 72 6f 6d 20 70 72 69 6f 72  ifier from prior
1a940 20 44 44 44 44 44 44 44 44 44 44 20 74 68 65 6e   DDDDDDDDDD then
1a950 20 74 68 65 0a 62 65 68 61 76 69 6f 72 20 69 73   the.behavior is
1a960 20 75 6e 64 65 66 69 6e 65 64 2e 0a 44 75 65 20   undefined..Due 
1a970 74 6f 20 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d  to precision lim
1a980 69 74 61 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64  itations imposed
1a990 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
1a9a0 74 61 74 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36  tations use.of 6
1a9b0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 73 2c 20  4-bit integers, 
1a9c0 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  the "unixepoch" 
1a9d0 6d 6f 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f  modifier only wo
1a9e0 72 6b 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65  rks for.dates be
1a9f0 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31  tween 0000-01-01
1aa00 20 30 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33   00:00:00 and 53
1aa10 35 32 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34  52-11-01 10:52:4
1aa20 37 20 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66  7 (unix times.of
1aa30 20 2d 36 32 31 36 37 32 31 39 32 30 30 20 74 68   -62167219200 th
1aa40 72 6f 75 67 68 20 31 30 36 37 35 31 39 39 31 36  rough 1067519916
1aa50 37 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  7).</p>..<p>^The
1aa60 20 22 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64   "localtime" mod
1aa70 69 66 69 65 72 20 28 31 32 29 20 61 73 73 75 6d  ifier (12) assum
1aa80 65 73 20 74 68 65 20 74 69 6d 65 20 73 74 72 69  es the time stri
1aa90 6e 67 20 74 6f 20 69 74 73 20 6c 65 66 74 20 69  ng to its left i
1aaa0 73 20 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43  s in.Universal C
1aab0 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20  oordinated Time 
1aac0 28 55 54 43 29 20 61 6e 64 20 61 64 6a 75 73 74  (UTC) and adjust
1aad0 73 20 74 68 65 20 74 69 6d 65 0a 73 74 72 69 6e  s the time.strin
1aae0 67 20 73 6f 20 74 68 61 74 20 69 74 20 64 69 73  g so that it dis
1aaf0 70 6c 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e  plays localtime.
1ab00 20 20 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22    If "localtime"
1ab10 0a 66 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20  .follows a time 
1ab20 74 68 61 74 20 69 73 20 6e 6f 74 20 55 54 43 2c  that is not UTC,
1ab30 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69   then the behavi
1ab40 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
1ab50 0a 5e 28 54 68 65 20 22 75 74 63 22 20 69 73 20  .^(The "utc" is 
1ab60 74 68 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20  the opposite of 
1ab70 22 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22 75  "localtime".  "u
1ab80 74 63 22 20 61 73 73 75 6d 65 73 20 74 68 61 74  tc" assumes that
1ab90 20 74 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69   the string.to i
1aba0 74 73 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68  ts left is in th
1abb0 65 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65  e local timezone
1abc0 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61   and adjusts tha
1abd0 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69  t string to be i
1abe0 6e 20 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20  n UTC.)^.If the 
1abf0 70 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20  prior string is 
1ac00 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65  not in localtime
1ac10 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
1ac20 74 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e  t of "utc" is.un
1ac30 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68  defined.</p>..<h
1ac40 33 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a  3>Examples</h3>.
1ac50 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1ac60 65 20 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c  e current date.<
1ac70 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1ac80 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77  SELECT date('now
1ac90 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  ');</blockquote>
1aca0 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1acb0 20 74 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66   the last day of
1acc0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e   the current mon
1acd0 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  th.</p>..<blockq
1ace0 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65  uote>SELECT date
1acf0 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66  ('now','start of
1ad00 20 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74   month','+1 mont
1ad10 68 27 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f  h','-1 day');.</
1ad20 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1ad30 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1ad40 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69  date and time gi
1ad50 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73  ven a unix times
1ad60 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e  tamp 1092941466.
1ad70 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1ad80 65 3e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61  e>.    SELECT da
1ad90 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36  tetime(109294146
1ada0 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b  6, 'unixepoch');
1adb0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1adc0 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1add0 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
1ade0 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69   given a unix ti
1adf0 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31 34  mestamp 10929414
1ae00 36 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73  66, and .compens
1ae10 61 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63  ate for your loc
1ae20 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e  al timezone.</p>
1ae30 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1ae40 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65   SELECT datetime
1ae50 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e  (1092941466, 'un
1ae60 69 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c  ixepoch', 'local
1ae70 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  time');.</blockq
1ae80 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
1ae90 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e  mpute the curren
1aea0 74 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  t unix timestamp
1aeb0 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1aec0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72  te>.  SELECT str
1aed0 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
1aee0 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1aef0 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1af00 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
1af10 61 79 73 20 73 69 6e 63 65 20 74 68 65 20 73 69  ays since the si
1af20 67 6e 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20  gning of the US 
1af30 44 65 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49  Declaration.of I
1af40 6e 64 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e  ndependence.</p>
1af50 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1af60 20 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61   SELECT julianda
1af70 79 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61  y('now') - julia
1af80 6e 64 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34  nday('1776-07-04
1af90 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
1afa0 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
1afb0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
1afc0 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20  seconds since a 
1afd0 70 61 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e  particular momen
1afe0 74 20 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a  t in 2004:</p>..
1aff0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1b000 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27  ELECT strftime('
1b010 25 73 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72  %s','now') - str
1b020 66 74 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34  ftime('%s','2004
1b030 2d 30 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27  -01-01 02:34:56'
1b040 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1b050 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74  )^..^(<p>.Comput
1b060 65 20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68  e the date of th
1b070 65 20 66 69 72 73 74 20 54 75 65 73 64 61 79 20  e first Tuesday 
1b080 69 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74  in October.for t
1b090 68 65 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e  he current year.
1b0a0 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1b0b0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74  te>.  SELECT dat
1b0c0 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
1b0d0 66 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74  f year','+9 mont
1b0e0 68 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29  hs','weekday 2')
1b0f0 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1b100 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1b110 74 68 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74  the time since t
1b120 68 65 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e  he unix epoch in
1b130 20 73 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20   seconds .(like 
1b140 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e  strftime('%s','n
1b150 6f 77 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c  ow') except incl
1b160 75 64 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20  udes fractional 
1b170 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  part):</p>..<blo
1b180 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
1b190 54 20 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f  T (julianday('no
1b1a0 77 27 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29  w') - 2440587.5)
1b1b0 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63  *86400.0;.</bloc
1b1c0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43  kquote>)^..<h3>C
1b1d0 61 76 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c  aveats And Bugs<
1b1e0 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d  /h3>..<p>The com
1b1f0 70 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61  putation of loca
1b200 6c 20 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68  l time depends h
1b210 65 61 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68  eavily on the wh
1b220 69 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61  im .of politicia
1b230 6e 73 20 61 6e 64 20 69 73 20 74 68 75 73 20 64  ns and is thus d
1b240 69 66 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20  ifficult to get 
1b250 63 6f 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c  correct for .all
1b260 20 6c 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68   locales. ^In th
1b270 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  is implementatio
1b280 6e 2c 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  n, the standard 
1b290 43 20 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74  C library .funct
1b2a0 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28  ion localtime_r(
1b2b0 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 73 73  ) is used to ass
1b2c0 69 73 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75  ist in the calcu
1b2d0 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c  lation of .local
1b2e0 20 74 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c   time.  ^(The .l
1b2f0 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66  ocaltime_r() C f
1b300 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79  unction normally
1b310 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
1b320 79 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39  years.between 19
1b330 37 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72  70 and 2037. For
1b340 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74   dates outside t
1b350 68 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74  his range, SQLit
1b360 65 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d  e .attempts to m
1b370 61 70 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f  ap the year into
1b380 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79   an equivalent y
1b390 65 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73  ear within .this
1b3a0 20 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63   range, do the c
1b3b0 61 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e  alculation, then
1b3c0 20 6d 61 70 20 74 68 65 20 79 65 61 72 20 62 61   map the year ba
1b3d0 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e  ck.)^</p>...<p>^
1b3e0 28 54 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73  (These functions
1b3f0 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64   only work for d
1b400 61 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30  ates between 000
1b410 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30  0-01-01 00:00:00
1b420 0a 61 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20  .and 9999-12-31 
1b430 32 33 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64 61  23:59:59 (julida
1b440 6e 20 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37  n day numbers 17
1b450 32 31 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20  21059.5 through 
1b460 35 33 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f  5373484.5).)^.Fo
1b470 72 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20  r dates outside 
1b480 74 68 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20  that range, the 
1b490 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65  results of these
1b4a0 0a 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75  .functions are u
1b4b0 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c  ndefined.</p>..<
1b4c0 70 3e 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64  p>Non-Vista Wind
1b4d0 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e  ows platforms on
1b4e0 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73  ly support one s
1b4f0 65 74 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e  et of DST rules.
1b500 20 0a 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70   .Vista only sup
1b510 70 6f 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65  ports two. There
1b520 66 6f 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70  fore, on these p
1b530 6c 61 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f  latforms, .histo
1b540 72 69 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c  rical DST calcul
1b550 61 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69  ations will be i
1b560 6e 63 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65  ncorrect. .For e
1b570 78 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55  xample, in the U
1b580 53 2c 20 69 6e 20 32 30 30 37 20 74 68 65 20 44  S, in 2007 the D
1b590 53 54 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64  ST rules changed
1b5a0 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e  . .Non-Vista Win
1b5b0 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61  dows platforms a
1b5c0 70 70 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30  pply the new 200
1b5d0 37 20 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20  7 DST rules .to 
1b5e0 61 6c 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61  all previous yea
1b5f0 72 73 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74  rs as well. Vist
1b600 61 20 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20  a does somewhat 
1b610 62 65 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72  better.getting r
1b620 65 73 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62  esults correct b
1b630 61 63 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65  ack to 1986, whe
1b640 6e 20 74 68 65 20 72 75 6c 65 73 20 77 65 72 65  n the rules were
1b650 20 61 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f   also changed.</
1b660 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72  p>..<p>All inter
1b670 6e 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  nal computations
1b680 20 61 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74   assume the .[ht
1b690 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1b6a0 61 2e 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f  a.org/wiki/Grego
1b6b0 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20  rian_calendar | 
1b6c0 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64  Gregorian calend
1b6d0 61 72 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20  ar].system.  It 
1b6e0 69 73 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20  is also assumed 
1b6f0 74 68 61 74 20 65 76 65 72 79 0a 64 61 79 20 69  that every.day i
1b700 73 20 65 78 61 63 74 6c 79 20 38 36 34 30 30 20  s exactly 86400 
1b710 73 65 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74  seconds in durat
1b720 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ion.</p>..<tcl>.
1b730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
1b780 65 63 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74  ection {Aggregat
1b790 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e Functions} agg
1b7a0 66 75 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a  func {*aggfunc}.
1b7b0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20  </tcl>..<p>.The 
1b7c0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1b7d0 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
1b7e0 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
1b7f0 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74   default.  Addit
1b800 69 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20  ional.aggregate 
1b810 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65  functions writte
1b820 6e 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64  n in C may be ad
1b830 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b  ded using the .[
1b840 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
1b850 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41  unction()]</a>.A
1b860 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e  PI.</p>..<p>.^In
1b870 20 61 6e 79 20 61 67 67 72 65 67 61 74 65 20 66   any aggregate f
1b880 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b  unction that tak
1b890 65 73 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  es a single argu
1b8a0 6d 65 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d  ment, that argum
1b8b0 65 6e 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65  ent.can be prece
1b8c0 64 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f  ded by the keywo
1b8d0 72 64 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49  rd DISTINCT.  ^I
1b8e0 6e 20 73 75 63 68 20 63 61 73 65 73 2c 20 64 75  n such cases, du
1b8f0 70 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73  plicate.elements
1b900 20 61 72 65 20 66 69 6c 74 65 72 65 64 20 62 65   are filtered be
1b910 66 6f 72 65 20 62 65 69 6e 67 20 70 61 73 73 65  fore being passe
1b920 64 20 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65  d into the aggre
1b930 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e  gate function..^
1b940 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
1b950 20 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74   function "count
1b960 28 64 69 73 74 69 6e 63 74 20 58 29 22 20 77 69  (distinct X)" wi
1b970 6c 6c 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ll return the nu
1b980 6d 62 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74  mber.of distinct
1b990 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
1b9a0 6e 20 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74  n X instead of t
1b9b0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
1b9c0 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75  of non-null.valu
1b9d0 65 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a  es in column X..
1b9e0 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  </p>..<table bor
1b9f0 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e  der=0 cellpaddin
1ba00 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63  g=10>.<tcl>.func
1ba10 64 65 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61  def {avg(X)} {*a
1ba20 76 67 20 7b 61 76 67 28 29 20 61 67 67 72 65 67  vg {avg() aggreg
1ba30 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  ate function}} {
1ba40 0a 20 20 5e 54 68 65 20 61 76 67 28 29 20 66 75  .  ^The avg() fu
1ba50 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73  nction.  returns
1ba60 20 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c   the average val
1ba70 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  ue of all non-NU
1ba80 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68  LL <i>X</i> with
1ba90 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e  in a.  group.  ^
1baa0 53 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20  String and BLOB 
1bab0 76 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e  values that do n
1bac0 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d  ot look like num
1bad0 62 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72  bers are.  inter
1bae0 70 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e  preted as 0..  ^
1baf0 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76  The result of av
1bb00 67 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20  g() is always a 
1bb10 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
1bb20 61 6c 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a  alue as long as.
1bb30 20 20 61 74 20 74 68 65 72 65 20 69 73 20 61 74    at there is at
1bb40 20 6c 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e   least one non-N
1bb50 55 4c 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69  ULL input even i
1bb60 66 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61  f all.  inputs a
1bb70 72 65 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54  re integers.  ^T
1bb80 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67  he result of avg
1bb90 28 29 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e  () is NULL if an
1bba0 64 20 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72  d only if.  ther
1bbb0 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
1bbc0 4c 20 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66  L inputs.  .}..f
1bbd0 75 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29  uncdef {count(X)
1bbe0 20 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75   count(*)} {*cou
1bbf0 6e 74 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72  nt {count() aggr
1bc00 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
1bc10 20 7b 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28   {.  ^The count(
1bc20 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1bc30 72 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66  rns.  a count of
1bc40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74   the number of t
1bc50 69 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58  imes.  that <i>X
1bc60 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  </i> is not NULL
1bc70 20 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54   in a group.  ^T
1bc80 68 65 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63  he count(*) func
1bc90 74 69 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20  tion.  (with no 
1bca0 61 72 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72  arguments) retur
1bcb0 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
1bcc0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
1bcd0 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
1bce0 63 64 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63  cdef {group_conc
1bcf0 61 74 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63  at(X) group_conc
1bd00 61 74 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72  at(X,Y)} {.  *gr
1bd10 6f 75 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75  oup_concat {grou
1bd20 70 5f 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65  p_concat() aggre
1bd30 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d  gate function}.}
1bd40 20 7b 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f   {.  ^The group_
1bd50 63 6f 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f  concat() functio
1bd60 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74  n returns.  a st
1bd70 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
1bd80 65 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20  e concatenation 
1bd90 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  of.  all non-NUL
1bda0 4c 20 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58  L values of <i>X
1bdb0 3c 2f 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d  </i>.  ^If param
1bdc0 65 74 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73  eter <i>Y</i> is
1bdd0 20 70 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20   present then.  
1bde0 69 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68  it is used as th
1bdf0 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65  e separator.  be
1be00 74 77 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20  tween instances 
1be10 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41  of <i>X</i>.  ^A
1be20 20 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20   comma (",") is 
1be30 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
1be40 72 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c  rator.  if <i>Y<
1be50 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20  /i> is omitted. 
1be60 20 54 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   The order of th
1be70 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65  e concatenated e
1be80 6c 65 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62  lements is.  arb
1be90 69 74 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64  itrary..}..funcd
1bea0 65 66 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61  ef {max(X)} {*ma
1beb0 78 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61  xAggFunc *agg_ma
1bec0 78 20 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61  x {max() aggrega
1bed0 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
1bee0 20 20 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67    ^The max() agg
1bef0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a  regate function.
1bf00 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61    returns the ma
1bf10 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61  ximum value of a
1bf20 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ll values in the
1bf30 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d   group..  ^The m
1bf40 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20  aximum value is 
1bf50 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77  the value that w
1bf60 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
1bf70 20 6c 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52   last in an.  OR
1bf80 44 45 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61  DER BY on the sa
1bf90 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67  me column.  ^Agg
1bfa0 72 65 67 61 74 65 20 6d 61 78 28 29 20 72 65 74  regate max() ret
1bfb0 75 72 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20  urns NULL .  if 
1bfc0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72  and only if ther
1bfd0 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
1bfe0 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  L values in the 
1bff0 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65  group..}..funcde
1c000 66 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e  f {min(X)} {*min
1c010 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e  AggFunc *agg_min
1c020 20 7b 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74   {min() aggregat
1c030 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
1c040 20 5e 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72   ^The min() aggr
1c050 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20  egate function. 
1c060 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e   returns the min
1c070 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61  imum non-NULL va
1c080 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65  lue of all value
1c090 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
1c0a0 20 20 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76    ^The minimum v
1c0b0 61 6c 75 65 20 69 73 20 74 68 65 20 66 69 72 73  alue is the firs
1c0c0 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  t non-NULL value
1c0d0 20 74 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65   that would appe
1c0e0 61 72 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52  ar.  in an ORDER
1c0f0 20 42 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d   BY of the colum
1c100 6e 2e 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20  n..  ^Aggregate 
1c110 6d 69 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55  min() returns NU
1c120 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  LL if and only i
1c130 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e  f there are no n
1c140 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73  on-NULL.  values
1c150 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d   in the group..}
1c160 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58  ..funcdef {sum(X
1c170 29 20 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20  ) total(X)} {.  
1c180 2a 73 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74  *sumFunc *sum *t
1c190 6f 74 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67  otal.  {sum() ag
1c1a0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1c1b0 7d 0a 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67  }.  {total() agg
1c1c0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
1c1d0 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28  .} {.  ^The sum(
1c1e0 29 20 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67  ) and total() ag
1c1f0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1c200 73 0a 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f  s.  return sum o
1c210 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  f all non-NULL v
1c220 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
1c230 75 70 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20  up..  ^If there 
1c240 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
1c250 69 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20  input rows then 
1c260 73 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20  sum() returns.  
1c270 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29  NULL but total()
1c280 20 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20   returns 0.0..  
1c290 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d  NULL is not norm
1c2a0 61 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72  ally a helpful r
1c2b0 65 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75  esult for the su
1c2c0 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62  m of no rows.  b
1c2d0 75 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64  ut the SQL stand
1c2e0 61 72 64 20 72 65 71 75 69 72 65 73 20 69 74 20  ard requires it 
1c2f0 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20  and most other. 
1c300 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
1c310 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20  gines implement 
1c320 73 75 6d 28 29 20 74 68 61 74 20 77 61 79 20 73  sum() that way s
1c330 6f 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74  o SQLite does it
1c340 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77   in the.  same w
1c350 61 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62  ay in order to b
1c360 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20  e compatible.   
1c370 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  The non-standard
1c380 20 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f   total() functio
1c390 6e 0a 20 20 69 73 20 70 72 6f 76 69 64 65 64 20  n.  is provided 
1c3a0 61 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  as a convenient 
1c3b0 77 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  way to work arou
1c3c0 6e 64 20 74 68 69 73 20 64 65 73 69 67 6e 20 70  nd this design p
1c3d0 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20  roblem.  in the 
1c3e0 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70  SQL language.</p
1c3f0 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73  >..  <p>^The res
1c400 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69  ult of total() i
1c410 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74  s always a float
1c420 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
1c430 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
1c440 66 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e  f sum() is an in
1c450 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61  teger value if a
1c460 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  ll non-NULL inpu
1c470 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e  ts are integers.
1c480 0a 20 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74  .  ^If any input
1c490 20 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69   to sum() is nei
1c4a0 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1c4b0 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e  or a NULL.  then
1c4c0 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61   sum() returns a
1c4d0 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
1c4e0 76 61 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69  value.  which mi
1c4f0 67 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78  ght be an approx
1c500 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74  imation to the t
1c510 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20  rue sum.</p>..  
1c520 3c 70 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74  <p>^Sum() will t
1c530 68 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72  hrow an "integer
1c540 20 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70   overflow" excep
1c550 74 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75  tion if all inpu
1c560 74 73 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72  ts.  are integer
1c570 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20  s or NULL.  and 
1c580 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66  an integer overf
1c590 6c 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e  low occurs at an
1c5a0 79 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74  y point during t
1c5b0 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a  he computation..
1c5c0 20 20 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72    ^Total() never
1c5d0 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67   throws an integ
1c5e0 65 72 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c  er overflow..}.<
1c5f0 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  /tcl>.</table>..
1c600 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1c610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c650 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53  ####.Section INS
1c660 45 52 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45  ERT insert {INSE
1c670 52 54 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 42 75  RT *INSERTs}..Bu
1c680 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65  bbleDiagram inse
1c690 72 74 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  rt-stmt 1.</tcl>
1c6a0 0a 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20  ..<p>The INSERT 
1c6b0 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20  statement comes 
1c6c0 69 6e 20 74 68 72 65 65 20 62 61 73 69 63 20 66  in three basic f
1c6d0 6f 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69  orms.  .<ul>.<li
1c6e0 3e 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 66  ><p>^The first f
1c6f0 6f 72 6d 20 28 77 69 74 68 20 74 68 65 20 22 56  orm (with the "V
1c700 41 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20  ALUES" keyword) 
1c710 63 72 65 61 74 65 73 20 6f 6e 65 20 6f 72 20 6d  creates one or m
1c720 6f 72 65 0a 6e 65 77 20 72 6f 77 73 20 69 6e 0a  ore.new rows in.
1c730 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c  an existing tabl
1c740 65 2e 20 5e 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e  e. ^If no column
1c750 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69  -list is specifi
1c760 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  ed then the numb
1c770 65 72 0a 6f 66 20 76 61 6c 75 65 73 20 69 6e 73  er.of values ins
1c780 65 72 74 65 64 20 69 6e 74 6f 20 65 61 63 68 20  erted into each 
1c790 72 6f 77 0a 6d 75 73 74 20 62 65 20 74 68 65 20  row.must be the 
1c7a0 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62  same as the numb
1c7b0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1c7c0 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20   the table. ^In 
1c7d0 74 68 69 73 20 63 61 73 65 0a 74 68 65 20 72 65  this case.the re
1c7e0 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69  sult of evaluati
1c7f0 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  ng the left-most
1c800 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 65   expression in e
1c810 61 63 68 20 74 65 72 6d 20 6f 66 0a 74 68 65 20  ach term of.the 
1c820 56 41 4c 55 45 53 20 6c 69 73 74 20 69 73 20 69  VALUES list is i
1c830 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
1c840 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
1c850 6e 20 6f 66 20 74 68 65 20 65 61 63 68 20 6e 65  n of the each ne
1c860 77 20 72 6f 77 2c 0a 61 6e 64 20 66 6f 72 74 68  w row,.and forth
1c870 20 66 6f 72 20 65 61 63 68 20 73 75 62 73 65 71   for each subseq
1c880 75 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 2e  uent expression.
1c890 20 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d 6c 69   ^If a.column-li
1c8a0 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  st is specified,
1c8b0 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72   then the number
1c8c0 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 65 61   of values in ea
1c8d0 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 0a 56  ch term of the.V
1c8e0 41 4c 55 53 20 6c 69 73 74 20 6d 75 73 74 20 6d  ALUS list must m
1c8f0 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20  atch the number 
1c900 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c  of.specified col
1c910 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20 74  umns. ^Each of t
1c920 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73  he named columns
1c930 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20   of the new row 
1c940 69 73 20 70 6f 70 75 6c 61 74 65 64 0a 77 69 74  is populated.wit
1c950 68 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  h the results of
1c960 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
1c970 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 56 41  corresponding VA
1c980 4c 55 45 53 20 65 78 70 72 65 73 73 69 6f 6e 2e  LUES expression.
1c990 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73 20   ^Table.columns 
1c9a0 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65  that do not appe
1c9b0 61 72 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ar in the column
1c9c0 20 6c 69 73 74 20 61 72 65 20 70 6f 70 75 6c 61   list are popula
1c9d0 74 65 64 20 77 69 74 68 20 74 68 65 20 64 65 66  ted with the def
1c9e0 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61 6c 75  ault.column valu
1c9f0 65 20 28 73 70 65 63 69 66 69 65 64 20 61 73 20  e (specified as 
1ca00 70 61 72 74 20 6f 66 20 74 68 65 20 43 52 45 41  part of the CREA
1ca10 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
1ca20 6e 74 29 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c  nt), or with NUL
1ca30 4c 20 69 66 0a 6e 6f 20 64 65 66 61 75 6c 74 20  L if.no default 
1ca40 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69  value is specifi
1ca50 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20  ed...<li><p>The 
1ca60 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74  second form of t
1ca70 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
1ca80 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 53  ent contains a S
1ca90 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a  ELECT statement.
1caa0 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c  instead of a VAL
1cab0 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e  UES clause. ^A n
1cac0 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65  ew entry is inse
1cad0 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61  rted into the ta
1cae0 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77  ble for each.row
1caf0 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e 65   of data returne
1cb00 64 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74  d by executing t
1cb10 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
1cb20 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d  ent. ^If a colum
1cb30 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66  n-list is.specif
1cb40 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20  ied, the number 
1cb50 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1cb60 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
1cb70 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74  SELECT must be t
1cb80 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e  he same.as the n
1cb90 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69  umber of items i
1cba0 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73  n the column-lis
1cbb0 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  t. ^Otherwise, i
1cbc0 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  f no column-list
1cbd0 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
1cbe0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1cbf0 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
1cc00 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  lt of the SELECT
1cc10 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
1cc20 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e.as the number 
1cc30 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1cc40 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45  e table. ^Any SE
1cc50 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20  LECT statement, 
1cc60 69 6e 63 6c 75 64 69 6e 67 0a 63 6f 6d 70 6f 75  including.compou
1cc70 6e 64 20 53 45 4c 45 43 54 73 20 61 6e 64 20 53  nd SELECTs and S
1cc80 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
1cc90 20 77 69 74 68 20 4f 52 44 45 52 20 42 59 20 61   with ORDER BY a
1cca0 6e 64 2f 6f 72 20 4c 49 4d 49 54 20 63 6c 61 75  nd/or LIMIT clau
1ccb0 73 65 73 2c 20 0a 6d 61 79 20 62 65 20 75 73 65  ses, .may be use
1ccc0 64 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  d in an INSERT s
1ccd0 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 69 73  tatement of this
1cce0 20 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54   form...<li><p>T
1ccf0 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20 6f 66  he third form of
1cd00 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
1cd10 6d 65 6e 74 20 69 73 20 77 69 74 68 20 44 45 46  ment is with DEF
1cd20 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e 28 54  AULT VALUES..^(T
1cd30 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45  he INSERT ... DE
1cd40 46 41 55 4c 54 20 56 41 4c 55 45 53 20 73 74 61  FAULT VALUES sta
1cd50 74 65 6d 65 6e 74 20 69 6e 73 65 72 74 73 20 61  tement inserts a
1cd60 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20   single new row 
1cd70 69 6e 74 6f 20 74 68 65 0a 6e 61 6d 65 64 20 74  into the.named t
1cd80 61 62 6c 65 2e 29 5e 20 5e 45 61 63 68 20 63 6f  able.)^ ^Each co
1cd90 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20  lumn of the new 
1cda0 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64  row is populated
1cdb0 20 77 69 74 68 20 69 74 73 20 64 65 66 61 75 6c   with its defaul
1cdc0 74 20 76 61 6c 75 65 2c 0a 6f 72 20 77 69 74 68  t value,.or with
1cdd0 20 61 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 64 65   a NULL if no de
1cde0 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73  fault value is s
1cdf0 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
1ce00 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 64   of the column.d
1ce10 65 66 69 6e 69 74 69 6f 6e 20 69 6e 20 74 68 65  efinition in the
1ce20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
1ce30 61 74 65 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c 3e 0a  atement...</ul>.
1ce40 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61  .<p>^The optiona
1ce50 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73  l conflict-claus
1ce60 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65  e allows the spe
1ce70 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e  cification of an
1ce80 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e   alternative.con
1ce90 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
1cea0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1ceb0 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72  rithm to use dur
1cec0 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 49 4e 53  ing this one INS
1ced0 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65  ERT command..See
1cee0 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74   the section tit
1cef0 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  led.[ON CONFLICT
1cf00 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  ] for additional
1cf10 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f   information..Fo
1cf20 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
1cf30 77 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74 68 65  with MySQL, ^the
1cf40 20 70 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74   parser allows t
1cf50 68 65 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69  he use of the.si
1cf60 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20  ngle keyword <a 
1cf70 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61  href="lang_repla
1cf80 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45  ce.html">REPLACE
1cf90 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61  </a> as an .alia
1cfa0 73 20 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52  s for "INSERT OR
1cfb0 20 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e   REPLACE"...<p>^
1cfc0 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 3c  (The optional "<
1cfd0 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
1cfe0 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70 72 65  /i><b>.</b>" pre
1cff0 66 69 78 20 6f 6e 20 74 68 65 20 3c 69 3e 74 61  fix on the <i>ta
1d000 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 69 73 20  ble-name</i>.is 
1d010 73 75 70 70 6f 72 74 20 66 6f 72 20 74 6f 70 2d  support for top-
1d020 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61  level INSERT sta
1d030 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29 5e 20  tements only.)^ 
1d040 20 5e 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65   ^The table name
1d050 20 6d 75 73 74 20 62 65 0a 75 6e 71 75 61 6c 69   must be.unquali
1d060 66 69 65 64 20 66 6f 72 20 49 4e 53 45 52 54 20  fied for INSERT 
1d070 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
1d080 6f 63 63 75 72 20 77 69 74 68 69 6e 20 5b 43 52  occur within [CR
1d090 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
1d0a0 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d 69 6c  atements..^Simil
1d0b0 61 72 6c 79 2c 20 74 68 65 20 22 44 45 46 41 55  arly, the "DEFAU
1d0c0 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20  LT VALUES" form 
1d0d0 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74  of the INSERT st
1d0e0 61 74 65 6d 65 6e 74 20 69 73 20 73 75 70 70 6f  atement is suppo
1d0f0 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c 65 76  rted for.top-lev
1d100 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  el INSERT statem
1d110 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20 6e 6f  ents only and no
1d120 74 20 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61  t for INSERT sta
1d130 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 0a 74  tements within.t
1d140 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a 3c 74  riggers..<p>..<t
1d150 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
1d160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d1a0 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43  ##.Section {ON C
1d1b0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20  ONFLICT clause} 
1d1c0 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c  conflict {{confl
1d1d0 69 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f 4e 20  ict clause} {ON 
1d1e0 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42 75 62 62  CONFLICT}}..Bubb
1d1f0 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69  leDiagram confli
1d200 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  ct-clause.</tcl>
1d210 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46  ..<p>The ON CONF
1d220 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e  LICT clause is n
1d230 6f 74 20 61 20 73 65 70 61 72 61 74 65 20 53 51  ot a separate SQ
1d240 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69  L command.  It i
1d250 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  s a.non-standard
1d260 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e   clause that can
1d270 20 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20   appear in many 
1d280 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e  other SQL comman
1d290 64 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20  ds..It is given 
1d2a0 69 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20  its own section 
1d2b0 69 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74  in this document
1d2c0 20 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6e   because it is n
1d2d0 6f 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64  ot.part of stand
1d2e0 61 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72  ard SQL and ther
1d2f0 65 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20  efore might not 
1d300 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e  be familiar.</p>
1d310 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78  ..<p>^The syntax
1d320 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46   for the ON CONF
1d330 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 61  LICT clause is a
1d340 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f  s shown above fo
1d350 72 0a 74 68 65 20 43 52 45 41 54 45 20 54 41 42  r.the CREATE TAB
1d360 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f  LE command.  ^Fo
1d370 72 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64  r the INSERT and
1d380 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73  .UPDATE commands
1d390 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  , the keywords "
1d3a0 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65  ON CONFLICT" are
1d3b0 20 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52   replaced by "OR
1d3c0 22 20 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79  " so that.the sy
1d3d0 6e 74 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20  ntax reads more 
1d3e0 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20  naturally.  For 
1d3f0 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64  example, instead
1d400 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43   of."INSERT ON C
1d410 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20  ONFLICT IGNORE" 
1d420 77 65 20 68 61 76 65 20 22 49 4e 53 45 52 54 20  we have "INSERT 
1d430 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20  OR IGNORE"..The 
1d440 6b 65 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20  keywords change 
1d450 62 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20  but the meaning 
1d460 6f 66 20 74 68 65 20 63 6c 61 75 73 65 20 69 73  of the clause is
1d470 20 74 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72   the same.either
1d480 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68   way.</p>..<p>Th
1d490 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  e ON CONFLICT cl
1d4a0 61 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20  ause applies to 
1d4b0 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
1d4c0 55 4c 4c 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20  ULL.constraints 
1d4d0 28 61 6e 64 20 74 6f 20 50 52 49 4d 41 52 59 20  (and to PRIMARY 
1d4e0 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  KEY constraints 
1d4f0 77 68 69 63 68 20 66 6f 72 20 74 68 65 20 70 75  which for the pu
1d500 72 70 6f 73 65 73 20 0a 6f 66 20 74 68 69 73 20  rposes .of this 
1d510 73 65 63 74 69 6f 6e 20 61 72 65 20 74 68 65 20  section are the 
1d520 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 55 4e  same thing as UN
1d530 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73  IQUE constraints
1d540 29 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  )..The ON CONFLI
1d550 43 54 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65  CT algorithm doe
1d560 73 20 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b  s not.apply to [
1d570 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
1d580 74 72 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20  traints]..There 
1d590 61 72 65 20 66 69 76 65 20 63 6f 6e 66 6c 69 63  are five conflic
1d5a0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
1d5b0 6f 72 69 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a  orithm choices:.
1d5c0 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c  ROLLBACK, ABORT,
1d5d0 20 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61   FAIL, IGNORE, a
1d5e0 6e 64 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65  nd REPLACE..^The
1d5f0 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
1d600 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
1d610 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e  orithm is ABORT.
1d620 20 20 54 68 69 73 0a 69 73 20 77 68 61 74 20 74    This.is what t
1d630 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c  hey mean:</p>..<
1d640 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42  dl>.<dt><b>ROLLB
1d650 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ACK</b></dt>.<dd
1d660 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
1d670 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
1d680 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
1d690 63 75 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41  curs, the ROLLBA
1d6a0 43 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  CK.resolution al
1d6b0 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74  gorithm aborts t
1d6c0 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73  he current SQL s
1d6d0 74 61 74 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e  tatement with.an
1d6e0 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
1d6f0 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c  NT error and rol
1d700 6c 73 20 62 61 63 6b 20 74 68 65 20 63 75 72 72  ls back the curr
1d710 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
1d720 0a 5e 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74  .^If no transact
1d730 69 6f 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f  ion is.active (o
1d740 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d  ther than the im
1d750 70 6c 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f  plied transactio
1d760 6e 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65  n that is create
1d770 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61  d on every.comma
1d780 6e 64 29 20 74 68 65 6e 20 74 68 65 20 52 4f 4c  nd) then the ROL
1d790 4c 42 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e  LBACK resolution
1d7a0 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73   algorithm works
1d7b0 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
1d7c0 0a 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d  .ABORT algorithm
1d7d0 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  .</p></dd>..<dt>
1d7e0 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74  <b>ABORT</b></dt
1d7f0 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
1d800 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
1d810 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1d820 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 41  on occurs, the A
1d830 42 4f 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  BORT.resolution 
1d840 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73  algorithm aborts
1d850 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c   the current SQL
1d860 20 73 74 61 74 65 6d 65 6e 74 0a 77 69 74 68 20   statement.with 
1d870 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  an SQLITE_CONSTR
1d880 41 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 62  AINT error and b
1d890 61 63 6b 73 20 6f 75 74 20 61 6e 79 20 63 68 61  acks out any cha
1d8a0 6e 67 65 73 0a 6d 61 64 65 20 62 79 20 74 68 65  nges.made by the
1d8b0 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61   current SQL sta
1d8c0 74 65 6d 65 6e 74 3b 20 62 75 74 20 63 68 61 6e  tement; but chan
1d8d0 67 65 73 20 63 61 75 73 65 64 0a 62 79 20 70 72  ges caused.by pr
1d8e0 69 6f 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ior SQL statemen
1d8f0 74 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ts within the sa
1d900 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  me transaction a
1d910 72 65 20 70 72 65 73 65 72 76 65 64 20 61 6e 64  re preserved and
1d920 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e   the.transaction
1d930 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76 65 2e   remains active.
1d940 0a 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66  .This is the def
1d950 61 75 6c 74 20 62 65 68 61 76 69 6f 72 20 61 6e  ault behavior an
1d960 64 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 73  d the behavior s
1d970 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
1d980 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70  SQL.standard.</p
1d990 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46  ></dd>..<dt><b>F
1d9a0 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  AIL</b></dt>.<dd
1d9b0 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
1d9c0 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
1d9d0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
1d9e0 63 75 72 73 2c 20 74 68 65 20 46 41 49 4c 0a 72  curs, the FAIL.r
1d9f0 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
1da00 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63  thm aborts the c
1da10 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
1da20 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a 53 51 4c  ment with an.SQL
1da30 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65  ITE_CONSTRAINT e
1da40 72 72 6f 72 2e 20 20 5e 42 75 74 20 74 68 65 20  rror.  ^But the 
1da50 46 41 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20  FAIL resolution 
1da60 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75  does not.back ou
1da70 74 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  t prior changes 
1da80 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  of the SQL state
1da90 6d 65 6e 74 20 74 68 61 74 20 66 61 69 6c 65 64  ment that failed
1daa0 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e 64   nor does.it end
1dab0 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
1dac0 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ..^For example, 
1dad0 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61  if an UPDATE.sta
1dae0 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72  tement encounter
1daf0 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  ed a constraint 
1db00 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65  violation on the
1db10 20 31 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a   100th row that.
1db20 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75  it attempts to u
1db30 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20  pdate, then the 
1db40 66 69 72 73 74 20 39 39 20 72 6f 77 20 63 68 61  first 99 row cha
1db50 6e 67 65 73 20 61 72 65 20 70 72 65 73 65 72 76  nges are preserv
1db60 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74  ed.but changes t
1db70 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62  o rows 100 and b
1db80 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75  eyond never occu
1db90 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  r.</p></dd>..<dt
1dba0 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f  ><b>IGNORE</b></
1dbb0 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65  dt>.<dd><p> ^Whe
1dbc0 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20  n an applicable 
1dbd0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1dbe0 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68  tion occurs, .th
1dbf0 65 20 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74  e IGNORE resolut
1dc00 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b  ion algorithm sk
1dc10 69 70 73 20 74 68 65 20 6f 6e 65 20 72 6f 77 20  ips the one row 
1dc20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68  that contains.th
1dc30 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
1dc40 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69  lation and conti
1dc50 6e 75 65 73 20 70 72 6f 63 65 73 73 69 6e 67 20  nues processing 
1dc60 73 75 62 73 65 71 75 65 6e 74 20 72 6f 77 73 0a  subsequent rows.
1dc70 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  of the SQL state
1dc80 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f 74 68 69  ment as if nothi
1dc90 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f  ng went wrong..O
1dca0 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65  ther rows before
1dcb0 20 61 6e 64 20 61 66 74 65 72 20 74 68 65 20 72   and after the r
1dcc0 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65  ow that.containe
1dcd0 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
1dce0 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69   violation are i
1dcf0 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
1dd00 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f  ed.normally. ^No
1dd10 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
1dd20 65 64 20 77 68 65 6e 20 74 68 65 20 49 47 4e 4f  ed when the IGNO
1dd30 52 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  RE conflict reso
1dd40 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d  lution.algorithm
1dd50 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64   is used.</p></d
1dd60 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41  d>..<dt><b>REPLA
1dd70 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  CE</b></dt>.<dd>
1dd80 3c 70 3e 20 5e 57 68 65 6e 20 61 20 55 4e 49 51  <p> ^When a UNIQ
1dd90 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  UE constraint vi
1dda0 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
1ddb0 74 68 65 20 52 45 50 4c 41 43 45 20 61 6c 67 6f  the REPLACE algo
1ddc0 72 69 74 68 6d 0a 64 65 6c 65 74 65 73 20 70 72  rithm.deletes pr
1ddd0 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20  e-existing rows 
1dde0 74 68 61 74 20 61 72 65 20 63 61 75 73 69 6e 67  that are causing
1ddf0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1de00 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20  violation.prior 
1de10 74 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f 72 20  to inserting or 
1de20 75 70 64 61 74 69 6e 67 20 74 68 65 20 63 75 72  updating the cur
1de30 72 65 6e 74 20 72 6f 77 20 61 6e 64 20 74 68 65  rent row and the
1de40 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75   command continu
1de50 65 73 20 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f  es .executing no
1de60 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20 4e 4f  rmally..^If a NO
1de70 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
1de80 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
1de90 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20  rs, the REPLACE 
1dea0 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74  conflict.resolut
1deb0 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65  ion replaces the
1dec0 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69 74 68   NULL value with
1ded0 0a 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  .he default valu
1dee0 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  e for that colum
1def0 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63 6f 6c  n, or if the col
1df00 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61 75  umn has no defau
1df10 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  lt.value, then t
1df20 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74  he ABORT algorit
1df30 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49 66 20  hm is used..^If 
1df40 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
1df50 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1df60 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45  urs, the REPLACE
1df70 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
1df80 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 61  tion.algorithm a
1df90 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c 69 6b 65  lways works like
1dfa0 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e   ABORT.</p>..<p>
1dfb0 5e 57 68 65 6e 20 74 68 65 20 52 45 50 4c 41 43  ^When the REPLAC
1dfc0 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  E conflict resol
1dfd0 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64  ution strategy d
1dfe0 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f  eletes rows in o
1dff0 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20  rder to.satisfy 
1e000 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43  a constraint, [C
1e010 52 45 41 54 45 20 54 52 49 47 47 45 52 20 7c 20  REATE TRIGGER | 
1e020 64 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 5d  delete triggers]
1e030 20 66 69 72 65 20 69 66 20 61 6e 64 20 6f 6e 6c   fire if and onl
1e040 79 20 69 66 0a 5b 72 65 63 75 72 73 69 76 65 5f  y if.[recursive_
1e050 74 72 69 67 67 65 72 73 20 70 72 61 67 6d 61 20  triggers pragma 
1e060 7c 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  | recursive trig
1e070 67 65 72 73 5d 20 61 72 65 20 65 6e 61 62 6c 65  gers] are enable
1e080 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
1e090 5b 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f  [sqlite3_update_
1e0a0 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20 68 6f  hook | update ho
1e0b0 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b  ok] is not invok
1e0c0 65 64 20 66 6f 72 20 72 6f 77 73 20 74 68 61 74  ed for rows that
1e0d0 0a 61 72 65 20 64 65 6c 65 74 65 64 20 62 79 20  .are deleted by 
1e0e0 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66  the REPLACE conf
1e0f0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
1e100 73 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f 72 20  strategy.  ^Nor 
1e110 64 6f 65 73 0a 52 45 50 4c 41 43 45 20 69 6e 63  does.REPLACE inc
1e120 72 65 6d 65 6e 74 20 74 68 65 20 5b 73 71 6c 69  rement the [sqli
1e130 74 65 33 5f 63 68 61 6e 67 65 73 20 7c 20 63 68  te3_changes | ch
1e140 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e 0a 54  ange counter]..T
1e150 68 65 20 65 78 63 65 70 74 69 6f 6e 61 6c 20 62  he exceptional b
1e160 65 68 61 76 69 6f 72 73 20 64 65 66 69 6e 65 64  ehaviors defined
1e170 20 69 6e 20 74 68 69 73 20 70 61 72 61 67 72 61   in this paragra
1e180 70 68 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  ph might change 
1e190 0a 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c  .in a future rel
1e1a0 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a  ease.</p>.</dl>.
1e1b0 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74  .<p>^The algorit
1e1c0 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  hm specified in 
1e1d0 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f 66  the OR clause of
1e1e0 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 55 50   an INSERT or UP
1e1f0 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61  DATE.overrides a
1e200 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65  ny algorithm spe
1e210 63 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41  cified in a CREA
1e220 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f  TE TABLE..^If no
1e230 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70   algorithm is sp
1e240 65 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65  ecified anywhere
1e250 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f  , the ABORT algo
1e260 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f  rithm is used.</
1e270 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
1e280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e2a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e2b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e2c0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1e2d0 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78   REINDEX reindex
1e2e0 20 52 45 49 4e 44 45 58 0a 0a 42 75 62 62 6c 65   REINDEX..Bubble
1e2f0 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d  Diagram reindex-
1e300 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
1e310 70 3e 5e 54 68 65 20 52 45 49 4e 44 45 58 20 63  p>^The REINDEX c
1e320 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74  ommand is used t
1e330 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63  o delete and rec
1e340 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66 72  reate indices fr
1e350 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73  om scratch..This
1e360 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20   is useful when 
1e370 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
1e380 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  f a collation se
1e390 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67  quence has chang
1e3a0 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ed..</p>..<p>^If
1e3b0 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79   the REINDEX key
1e3c0 77 6f 72 64 20 69 73 20 6e 6f 74 20 66 6f 6c 6c  word is not foll
1e3d0 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74  owed by a collat
1e3e0 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6f 72 20  ion-sequence or 
1e3f0 64 61 74 61 62 61 73 65 20 0a 6f 62 6a 65 63 74  database .object
1e400 20 69 64 65 6e 74 69 66 69 65 72 2c 20 74 68 65   identifier, the
1e410 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e  n all indices in
1e420 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1e430 74 61 62 61 73 65 73 20 61 72 65 20 72 65 62 75  tabases are rebu
1e440 69 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  ilt...<p>^If the
1e450 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64   REINDEX keyword
1e460 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
1e470 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75  a collation-sequ
1e480 65 6e 63 65 20 6e 61 6d 65 2c 20 74 68 65 6e 0a  ence name, then.
1e490 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
1e4a0 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
1e4b0 62 61 73 65 73 20 74 68 61 74 20 75 73 65 20 74  bases that use t
1e4c0 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69  he named collati
1e4d0 6f 6e 20 73 65 71 75 65 6e 63 65 73 0a 61 72 65  on sequences.are
1e4e0 20 72 65 63 72 65 61 74 65 64 2e 20 0a 0a 3c 70   recreated. ..<p
1e4f0 3e 5e 4f 72 2c 20 69 66 20 74 68 65 20 61 72 67  >^Or, if the arg
1e500 75 6d 65 6e 74 20 61 74 74 61 63 68 65 64 20 74  ument attached t
1e510 6f 20 74 68 65 20 52 45 49 4e 44 45 58 20 69 64  o the REINDEX id
1e520 65 6e 74 69 66 69 65 73 20 61 20 73 70 65 63 69  entifies a speci
1e530 66 69 63 20 0a 64 61 74 61 62 61 73 65 20 74 61  fic .database ta
1e540 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  ble, then all in
1e550 64 69 63 65 73 20 61 74 74 61 63 68 65 64 20 74  dices attached t
1e560 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  o the database t
1e570 61 62 6c 65 20 61 72 65 20 72 65 62 75 69 6c 74  able are rebuilt
1e580 2e 20 0a 5e 49 66 20 69 74 20 69 64 65 6e 74 69  . .^If it identi
1e590 66 69 65 73 20 61 20 73 70 65 63 69 66 69 63 20  fies a specific 
1e5a0 64 61 74 61 62 61 73 65 20 69 6e 64 65 78 2c 20  database index, 
1e5b0 74 68 65 6e 20 6a 75 73 74 20 74 68 61 74 20 69  then just that i
1e5c0 6e 64 65 78 20 69 73 20 72 65 63 72 65 61 74 65  ndex is recreate
1e5d0 64 2e 0a 0a 3c 70 3e 5e 49 66 20 6e 6f 20 3c 69  d...<p>^If no <i
1e5e0 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
1e5f0 69 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 20  i> is specified 
1e600 61 6e 64 20 74 68 65 72 65 20 65 78 69 73 74 73  and there exists
1e610 20 62 6f 74 68 20 61 20 74 61 62 6c 65 20 6f 72   both a table or
1e620 0a 69 6e 64 65 78 20 61 6e 64 20 61 20 63 6f 6c  .index and a col
1e630 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
1e640 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  of the specified
1e650 20 6e 61 6d 65 2c 20 53 51 4c 69 74 65 20 69 6e   name, SQLite in
1e660 74 65 72 70 72 65 74 73 0a 74 68 69 73 20 61 73  terprets.this as
1e670 20 61 20 72 65 71 75 65 73 74 20 74 6f 20 72 65   a request to re
1e680 62 75 69 6c 64 20 74 68 65 20 69 6e 64 69 63 65  build the indice
1e690 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20 6e  s that use the n
1e6a0 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  amed collation s
1e6b0 65 71 75 65 6e 63 65 2e 0a 54 68 69 73 20 61 6d  equence..This am
1e6c0 62 69 67 75 69 74 79 20 69 6e 20 74 68 65 20 73  biguity in the s
1e6d0 79 6e 74 61 78 20 6d 61 79 20 62 65 20 61 76 6f  yntax may be avo
1e6e0 69 64 65 64 20 62 79 20 61 6c 77 61 79 73 20 73  ided by always s
1e6f0 70 65 63 69 66 79 69 6e 67 20 61 0a 3c 69 3e 64  pecifying a.<i>d
1e700 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
1e710 20 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67   when reindexing
1e720 20 61 20 73 70 65 63 69 66 69 63 20 74 61 62 6c   a specific tabl
1e730 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63  e or index...<tc
1e740 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
1e750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e790 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41  ##.Section REPLA
1e7a0 43 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c 41  CE replace REPLA
1e7b0 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  CE..</tcl>..<p>^
1e7c0 54 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d  The REPLACE comm
1e7d0 61 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20  and is an alias 
1e7e0 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e  for the "[ON CON
1e7f0 46 4c 49 43 54 20 7c 20 49 4e 53 45 52 54 20 4f  FLICT | INSERT O
1e800 52 20 52 45 50 4c 41 43 45 5d 22 0a 76 61 72 69  R REPLACE]".vari
1e810 61 6e 74 20 6f 66 20 74 68 65 20 5b 49 4e 53 45  ant of the [INSE
1e820 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54  RT] command.  .T
1e830 68 69 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f  his alias is pro
1e840 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74  vided for compat
1e850 69 62 69 6c 69 74 79 20 6f 74 68 65 72 20 53 51  ibility other SQ
1e860 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
1e870 65 73 2e 20 20 53 65 65 20 74 68 65 20 0a 5b 49  es.  See the .[I
1e880 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64  NSERT] command d
1e890 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
1e8a0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
1e8b0 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a  rmation.</p>  ..
1e8c0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1e8d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e8e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e8f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e910 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45  #####.Section SE
1e920 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c  LECT select {SEL
1e930 45 43 54 20 71 75 65 72 79 7d 0a 0a 42 75 62 62  ECT query}..Bubb
1e940 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74  leDiagram select
1e950 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
1e960 61 67 72 61 6d 20 73 65 6c 65 63 74 2d 63 6f 72  agram select-cor
1e970 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  e.BubbleDiagram 
1e980 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 0a 42 75  result-column.Bu
1e990 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e  bbleDiagram join
1e9a0 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69  -source.BubbleDi
1e9b0 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75  agram single-sou
1e9c0 72 63 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  rce.BubbleDiagra
1e9d0 6d 20 6a 6f 69 6e 2d 6f 70 0a 42 75 62 62 6c 65  m join-op.Bubble
1e9e0 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 63 6f 6e  Diagram join-con
1e9f0 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69  straint.BubbleDi
1ea00 61 67 72 61 6d 20 6f 72 64 65 72 69 6e 67 2d 74  agram ordering-t
1ea10 65 72 6d 0a 42 75 62 62 6c 65 44 69 61 67 72 61  erm.BubbleDiagra
1ea20 6d 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61  m compound-opera
1ea30 74 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e  tor.</tcl>...<p>
1ea40 54 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  The SELECT state
1ea50 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
1ea60 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61  query the databa
1ea70 73 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74 20  se.  The.result 
1ea80 6f 66 20 61 20 53 45 4c 45 43 54 20 69 73 20 7a  of a SELECT is z
1ea90 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  ero or more rows
1eaa0 20 6f 66 20 64 61 74 61 20 77 68 65 72 65 20 65   of data where e
1eab0 61 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66 69  ach row.has a fi
1eac0 78 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  xed number of co
1ead0 6c 75 6d 6e 73 2e 20 20 0a 0a 3c 70 3e 54 68 65  lumns.  ..<p>The
1eae0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1eaf0 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f  t is the most co
1eb00 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e  mplicated comman
1eb10 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e  d in the SQL lan
1eb20 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74  guage..To make t
1eb30 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65  he description e
1eb40 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c  asier to follow,
1eb50 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73   some of the pas
1eb60 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63  sages below desc
1eb70 72 69 62 65 0a 74 68 65 20 77 61 79 20 74 68 65  ribe.the way the
1eb80 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62   data returned b
1eb90 79 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  y a SELECT state
1eba0 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e  ment is determin
1ebb0 65 64 20 61 73 20 61 20 73 65 72 69 65 73 20 6f  ed as a series o
1ebc0 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73 20 69  f.steps. It is i
1ebd0 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70  mportant to keep
1ebe0 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68   in mind that th
1ebf0 69 73 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c  is is purely ill
1ec00 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70  ustrative -.in p
1ec10 72 61 63 74 69 63 65 20 6e 65 69 74 68 65 72 20  ractice neither 
1ec20 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f  SQLite nor any o
1ec30 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20  ther SQL engine 
1ec40 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 66  is required to f
1ec50 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61  ollow .this or a
1ec60 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69 66 69  ny other specifi
1ec70 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 68 33 3e  c process...<h3>
1ec80 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20 50 72  Simple Select Pr
1ec90 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a 0a 3c  ocessing</h3>..<
1eca0 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72  p>The syntax for
1ecb0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
1ecc0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64 65   statement is de
1ecd0 70 69 63 74 65 64 20 69 6e 20 74 68 65 20 0a 5b  picted in the .[
1ece0 73 65 6c 65 63 74 2d 63 6f 72 65 20 73 79 6e 74  select-core synt
1ecf0 61 78 20 64 69 61 67 72 61 6d 5d 2e 20 47 65 6e  ax diagram]. Gen
1ed00 65 72 61 74 69 6e 67 20 74 68 65 20 72 65 73 75  erating the resu
1ed10 6c 74 73 20 6f 66 20 61 20 73 69 6d 70 6c 65 20  lts of a simple 
1ed20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74  SELECT.statement
1ed30 20 69 73 20 70 72 65 73 65 6e 74 65 64 20 61 73   is presented as
1ed40 20 61 20 66 6f 75 72 20 73 74 65 70 20 70 72 6f   a four step pro
1ed50 63 65 73 73 20 69 6e 20 74 68 65 20 64 65 73 63  cess in the desc
1ed60 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a 0a 0a  ription below:..
1ed70 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  <ol>.  <li> <p>[
1ed80 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70 72 6f  FROM clause] pro
1ed90 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70  cessing: The inp
1eda0 75 74 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ut data for the 
1edb0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73  simple SELECT is
1edc0 0a 20 20 20 20 20 20 20 64 65 74 65 72 6d 69 6e  .       determin
1edd0 65 64 2e 20 54 68 65 20 69 6e 70 75 74 20 64 61  ed. The input da
1ede0 74 61 20 69 73 20 65 69 74 68 65 72 20 69 6d 70  ta is either imp
1edf0 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
1ee00 20 72 6f 77 20 77 69 74 68 20 30 0a 20 20 20 20   row with 0.    
1ee10 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66 20 74     columns (if t
1ee20 68 65 72 65 20 69 73 20 6e 6f 20 46 52 4f 4d 20  here is no FROM 
1ee30 63 6c 61 75 73 65 29 20 6f 72 20 69 73 20 64 65  clause) or is de
1ee40 74 65 72 6d 69 6e 65 64 20 62 79 20 61 6e 61 6c  termined by anal
1ee50 79 7a 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20  yzing the.      
1ee60 20 5b 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 73 79   [join-source sy
1ee70 6e 74 61 78 20 64 69 61 67 72 61 6d 7c 6a 6f 69  ntax diagram|joi
1ee80 6e 2d 73 6f 75 72 63 65 5d 20 73 70 65 63 69 66  n-source] specif
1ee90 69 63 61 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c  ication that fol
1eea0 6c 6f 77 73 20 0a 20 20 20 20 20 20 20 61 6e 20  lows .       an 
1eeb0 65 78 70 6c 69 63 69 74 20 46 52 4f 4d 20 63 6c  explicit FROM cl
1eec0 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ause..  <li> <p>
1eed0 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70  [WHERE clause] p
1eee0 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
1eef0 6e 70 75 74 20 64 61 74 61 20 69 73 20 66 69 6c  nput data is fil
1ef00 74 65 72 65 64 20 75 73 69 6e 67 20 74 68 65 20  tered using the 
1ef10 57 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61  WHERE.       cla
1ef20 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  use expression. 
1ef30 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f   .  <li> <p>[GRO
1ef40 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20  UP BY|GROUP BY, 
1ef50 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c  HAVING and resul
1ef60 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  t-column express
1ef70 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  ion] processing:
1ef80 20 0a 20 20 20 20 20 20 20 54 68 65 20 73 65 74   .       The set
1ef90 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
1efa0 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61  is computed by a
1efb0 67 67 72 65 67 61 74 69 6e 67 20 74 68 65 20 64  ggregating the d
1efc0 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ata according to
1efd0 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55  .       any GROU
1efe0 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20  P BY clause and 
1eff0 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20  calculating the 
1f000 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
1f010 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20  ssions for the. 
1f020 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68        rows of th
1f030 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74  e filtered input
1f040 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c   dataset.  .  <l
1f050 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c  i> <p>[DISTINCT|
1f060 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79  DISTINCT/ALL key
1f070 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67  word] processing
1f080 3a 20 49 66 20 74 68 65 20 71 75 65 72 79 20 69  : If the query i
1f090 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20  s a "SELECT.    
1f0a0 20 20 20 44 49 53 54 49 4e 43 54 22 20 71 75 65     DISTINCT" que
1f0b0 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ry, duplicate ro
1f0c0 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
1f0d0 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72  rom the set of r
1f0e0 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c  esult rows..</ol
1f0f0 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
1f100 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d  two types of sim
1f110 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
1f120 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65  ment - aggregate
1f130 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67   and .non-aggreg
1f140 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20  ate queries. ^A 
1f150 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
1f160 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67  atement is an ag
1f170 67 72 65 67 61 74 65 20 71 75 65 72 79 20 69 66  gregate query if
1f180 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74  .it contains eit
1f190 68 65 72 20 61 20 47 52 4f 55 50 20 42 59 20 63  her a GROUP BY c
1f1a0 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20  lause or one or 
1f1b0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
1f1c0 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20  unctions.in the 
1f1d0 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68  result-set. ^Oth
1f1e0 65 72 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d  erwise, if a sim
1f1f0 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61  ple SELECT conta
1f200 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65  ins no aggregate
1f210 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20  .functions or a 
1f220 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c  GROUP BY clause,
1f230 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67   it is a non-agg
1f240 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c  regate query...<
1f250 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e  p><b>1. Determin
1f260 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64  ation of input d
1f270 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65  ata (FROM clause
1f280 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62   processing).</b
1f290 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
1f2a0 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74  nt fromclause</t
1f2b0 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
1f2c0 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73  ords {FROM claus
1f2d0 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e}</tcl>..<p>The
1f2e0 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
1f2f0 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   by a simple SEL
1f300 45 43 54 20 71 75 65 72 79 20 69 73 20 61 20 73  ECT query is a s
1f310 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72  et of <i>N</i> r
1f320 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f  ows .each <i>M</
1f330 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e  i> columns wide.
1f340 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52  ..<p>^(If the FR
1f350 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  OM clause is omi
1f360 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70  tted from a simp
1f370 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
1f380 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69  ent, then the .i
1f390 6e 70 75 74 20 64 61 74 61 20 69 73 20 69 6d 70  nput data is imp
1f3a0 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
1f3b0 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e   row zero column
1f3c0 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c  s wide)^ (i.e. <
1f3d0 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69  i>N</i>=1 and.<i
1f3e0 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49  >M</i>=0)...<p>I
1f3f0 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  f a FROM clause 
1f400 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
1f410 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20  e data on which 
1f420 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
1f430 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63  query.operates c
1f440 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e  omes from the on
1f450 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
1f460 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 28   or subqueries (
1f470 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1f480 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73  s.in parenthesis
1f490 29 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c  ) specified foll
1f4a0 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b  owing the FROM k
1f4b0 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 2d 73  eyword. ^A sub-s
1f4c0 65 6c 65 63 74 20 73 70 65 63 69 66 69 65 64 0a  elect specified.
1f4d0 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f 75 72  in the join-sour
1f4e0 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ce following the
1f4f0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 6e 20   FROM clause in 
1f500 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
1f510 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e  statement is.han
1f520 64 6c 65 64 20 61 73 20 69 66 20 69 74 20 77 61  dled as if it wa
1f530 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  s a table contai
1f540 6e 69 6e 67 20 74 68 65 20 64 61 74 61 20 72 65  ning the data re
1f550 74 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74  turned by execut
1f560 69 6e 67 20 74 68 65 0a 73 75 62 2d 73 65 6c 65  ing the.sub-sele
1f570 63 74 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 45  ct statement. ^E
1f580 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
1f590 65 20 73 75 62 2d 73 65 6c 65 63 74 20 64 61 74  e sub-select dat
1f5a0 61 73 65 74 20 69 6e 68 65 72 69 74 73 20 74 68  aset inherits th
1f5b0 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c  e.[collation|col
1f5c0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d  lation sequence]
1f5d0 20 61 6e 64 20 5b 61 66 66 69 6e 69 74 79 5d 20   and [affinity] 
1f5e0 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
1f5f0 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 0a  ding expression.
1f600 69 6e 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  in the sub-selec
1f610 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70  t statement...<p
1f620 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 6f 6e  >^If there is on
1f630 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  ly a single tabl
1f640 65 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f  e in the join-so
1f650 75 72 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  urce following t
1f660 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73 65 2c 20  he FROM.clause, 
1f670 74 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20 64  then the input d
1f680 61 74 61 20 75 73 65 64 20 62 79 20 74 68 65 20  ata used by the 
1f690 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1f6a0 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   is the contents
1f6b0 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64 20 74 61   of the.named ta
1f6c0 62 6c 65 2e 20 5e 49 66 20 74 68 65 72 65 20 69  ble. ^If there i
1f6d0 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  s more than one 
1f6e0 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20  table specified 
1f6f0 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 6a  as part of the.j
1f700 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f  oin-source follo
1f710 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b 65  wing the FROM ke
1f720 79 77 6f 72 64 2c 20 74 68 65 6e 20 74 68 65 20  yword, then the 
1f730 63 6f 6e 74 65 6e 74 73 20 6f 66 20 65 61 63 68  contents of each
1f740 20 6e 61 6d 65 64 20 74 61 62 6c 65 0a 61 72 65   named table.are
1f750 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73   joined into a s
1f760 69 6e 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f  ingle dataset fo
1f770 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  r the simple SEL
1f780 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  ECT statement to
1f790 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61   operate on..Exa
1f7a0 63 74 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74  ctly how the dat
1f7b0 61 20 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65  a is combined de
1f7c0 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65  pends on the spe
1f7d0 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 5d 20  cific [join-op] 
1f7e0 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72  and.[join-constr
1f7f0 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f  aint] used to co
1f800 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65 73  nnect the tables
1f810 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 74   or subqueries t
1f820 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c  ogether...<p>All
1f830 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65   joins in SQLite
1f840 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68   are based on th
1f850 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
1f860 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20  uct of the left 
1f870 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64  and.right-hand d
1f880 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f  atasets. ^The co
1f890 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72  lumns of the car
1f8a0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64  tesian product d
1f8b0 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a  ataset are, in .
1f8c0 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63  order, all the c
1f8d0 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
1f8e0 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ft-hand dataset 
1f8f0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20  followed by all 
1f900 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
1f910 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  he right-hand da
1f920 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73  taset. ^There is
1f930 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61   a row in the ca
1f940 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
1f950 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62  dataset.formed b
1f960 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68  y combining each
1f970 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
1f980 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f  ion of a row fro
1f990 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  m the left-hand 
1f9a0 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20  .and right-hand 
1f9b0 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f  datasets. ^(In o
1f9c0 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
1f9d0 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74  he left-hand dat
1f9e0 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  aset consists of
1f9f0 0a 3c 69 3e 4e 6c 68 73 3c 2f 69 3e 20 72 6f 77  .<i>Nlhs</i> row
1fa00 73 20 6f 66 20 3c 69 3e 4d 6c 68 73 3c 2f 69 3e  s of <i>Mlhs</i>
1fa10 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74 68   columns, and th
1fa20 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
1fa30 61 73 65 74 20 6f 66 0a 3c 69 3e 4e 72 68 73 3c  aset of.<i>Nrhs<
1fa40 2f 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e 4d  /i> rows of <i>M
1fa50 72 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c  rhs</i> columns,
1fa60 20 74 68 65 6e 20 74 68 65 20 63 61 72 74 65 73   then the cartes
1fa70 69 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61  ian product is a
1fa80 0a 64 61 74 61 73 65 74 20 6f 66 20 3c 69 3e 4e  .dataset of <i>N
1fa90 6c 68 73 2e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77  lhs.Nrhs</i> row
1faa0 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69  s, each containi
1fab0 6e 67 20 3c 69 3e 4d 6c 68 73 2b 4d 72 68 73 3c  ng <i>Mlhs+Mrhs<
1fac0 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a  /i> columns.)^..
1fad0 3c 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d  <p>^If the join-
1fae0 6f 70 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49  op is "CROSS JOI
1faf0 4e 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  N", "INNER JOIN"
1fb00 2c 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f  , "JOIN" or a co
1fb10 6d 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68  mma.(",") and th
1fb20 65 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20  ere is no ON or 
1fb30 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
1fb40 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
1fb50 20 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d   the join is.sim
1fb60 70 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61  ply the cartesia
1fb70 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65  n product of the
1fb80 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
1fb90 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a  hand datasets. .
1fba0 5e 54 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66  ^There is no dif
1fbb0 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
1fbc0 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  the "INNER JOIN"
1fbd0 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22  , "JOIN" and ","
1fbe0 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73 2e   join.operators.
1fbf0 20 5e 28 54 68 65 20 22 43 52 4f 53 53 20 4a 4f   ^(The "CROSS JO
1fc00 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f  IN" join operato
1fc10 72 20 70 72 6f 64 75 63 65 73 20 74 68 65 20 73  r produces the s
1fc20 61 6d 65 20 64 61 74 61 20 61 73 20 74 68 65 20  ame data as the 
1fc30 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22  ."INNER JOIN", "
1fc40 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f 70  JOIN" and "," op
1fc50 65 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20 69  erators)^, but i
1fc60 73 20 0a 3c 61 20 68 72 65 66 3d 6f 70 74 6f 76  s .<a href=optov
1fc70 65 72 76 69 65 77 2e 68 74 6d 6c 23 6d 61 6e 63  erview.html#manc
1fc80 74 72 6c 3e 68 61 6e 64 6c 65 64 20 73 6c 69 67  trl>handled slig
1fc90 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74 6c 79  htly differently
1fca0 20 62 79 20 74 68 65 20 71 75 65 72 79 0a 6f 70   by the query.op
1fcb0 74 69 6d 69 7a 65 72 3c 2f 61 3e 2e 20 4f 74 68  timizer</a>. Oth
1fcc0 65 72 77 69 73 65 2c 20 69 74 20 69 73 20 74 68  erwise, it is th
1fcd0 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
1fce0 75 63 74 20 6d 6f 64 69 66 69 65 64 20 0a 61 63  uct modified .ac
1fcf0 63 6f 72 64 69 6e 67 20 74 6f 20 6f 6e 65 20 6f  cording to one o
1fd00 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
1fd10 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70  llowing bullet p
1fd20 6f 69 6e 74 73 3a 20 0a 0a 3c 75 6c 3e 0a 20 20  oints: ..<ul>.  
1fd30 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65  <li> <p>^(If the
1fd40 72 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75  re is an ON clau
1fd50 73 65 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  se specified, th
1fd60 65 6e 20 74 68 65 20 4f 4e 20 65 78 70 72 65 73  en the ON expres
1fd70 73 69 6f 6e 20 69 73 0a 20 20 20 20 20 20 20 65  sion is.       e
1fd80 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
1fd90 68 20 72 6f 77 20 6f 66 20 74 68 65 20 63 61 72  h row of the car
1fda0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61  tesian product a
1fdb0 73 20 61 20 0a 20 20 20 20 20 20 20 5b 62 6f 6f  s a .       [boo
1fdc0 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lean expression]
1fdd0 2e 20 41 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77  . All rows for w
1fde0 68 69 63 68 20 74 68 65 20 65 78 70 72 65 73 73  hich the express
1fdf0 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
1fe00 20 0a 20 20 20 20 20 20 20 66 61 6c 73 65 20 61   .       false a
1fe10 72 65 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d  re excluded from
1fe20 20 74 68 65 20 64 61 74 61 73 65 74 2e 29 5e 0a   the dataset.)^.
1fe30 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 49 66 20 74  .  <li> <p>^If t
1fe40 68 65 72 65 20 69 73 20 61 20 55 53 49 4e 47 20  here is a USING 
1fe50 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 64  clause specified
1fe60 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
1fe70 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 2c  join-constraint,
1fe80 0a 20 20 20 20 20 20 20 74 68 65 6e 20 65 61 63  .       then eac
1fe90 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  h of the column 
1fea0 6e 61 6d 65 73 20 73 70 65 63 69 66 69 65 64 20  names specified 
1feb0 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68  must exist in th
1fec0 65 20 64 61 74 61 73 65 74 73 20 74 6f 20 0a 20  e datasets to . 
1fed0 20 20 20 20 20 20 62 6f 74 68 20 74 68 65 20 6c        both the l
1fee0 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 6f 66  eft and right of
1fef0 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 2e 20 5e 28   the join-op. ^(
1ff00 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66  For each pair of
1ff10 20 6e 61 6d 65 73 61 6b 65 0a 20 20 20 20 20 20   namesake.      
1ff20 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78   columns, the ex
1ff30 70 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20  pression "lhs.X 
1ff40 3d 20 72 68 73 2e 58 22 20 69 73 20 65 76 61 6c  = rhs.X" is eval
1ff50 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  uated for each r
1ff60 6f 77 20 6f 66 0a 20 20 20 20 20 20 20 74 68 65  ow of.       the
1ff70 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
1ff80 63 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e  ct as a [boolean
1ff90 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 6c   expression]. Al
1ffa0 6c 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  l rows for which
1ffb0 20 6f 6e 65 0a 20 20 20 20 20 20 20 6f 72 20 6d   one.       or m
1ffc0 6f 72 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  ore of the expre
1ffd0 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 73  ssions evaluates
1ffe0 20 74 6f 20 66 61 6c 73 65 20 61 72 65 20 65 78   to false are ex
1fff0 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 0a  cluded from the.
20000 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 73 65         result se
20010 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d 70 61  t.)^ ^When compa
20020 72 69 6e 67 20 76 61 6c 75 65 73 20 61 73 20 61  ring values as a
20030 20 72 65 73 75 6c 74 20 6f 66 20 61 20 55 53 49   result of a USI
20040 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 0a 20  NG clause, the. 
20050 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20 72 75 6c        normal rul
20060 65 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  es for handling 
20070 61 66 66 69 6e 69 74 69 65 73 2c 20 63 6f 6c 6c  affinities, coll
20080 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 20  ation sequences 
20090 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20  and NULL.       
200a0 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70 61 72  values in compar
200b0 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e 54 68  isons apply. ^Th
200c0 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68  e column from th
200d0 65 20 64 61 74 61 73 65 74 20 6f 6e 20 74 68 65  e dataset on the
200e0 0a 20 20 20 20 20 20 20 6c 65 66 74 2d 68 61 6e  .       left-han
200f0 64 20 73 69 64 65 20 6f 66 20 74 68 65 20 6a 6f  d side of the jo
20100 69 6e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63  in operator is c
20110 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
20120 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  on the left-hand
20130 0a 20 20 20 20 20 20 20 73 69 64 65 20 6f 66 20  .       side of 
20140 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
20150 70 65 72 61 74 6f 72 20 28 3d 29 20 66 6f 72 20  perator (=) for 
20160 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
20170 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 20 20 20  collation .     
20180 20 20 73 65 71 75 65 6e 63 65 20 61 6e 64 20 61    sequence and a
20190 66 66 69 6e 69 74 79 20 70 72 65 63 65 64 65 6e  ffinity preceden
201a0 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c 70 3e 5e  ce...       <p>^
201b0 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66  For each pair of
201c0 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66   columns identif
201d0 69 65 64 20 62 79 20 61 20 55 53 49 4e 47 20 63  ied by a USING c
201e0 6c 61 75 73 65 2c 20 74 68 65 20 63 6f 6c 75 6d  lause, the colum
201f0 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68  n.       from th
20200 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
20210 61 73 65 74 20 69 73 20 6f 6d 69 74 74 65 64 20  aset is omitted 
20220 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e 65 64 20  from the joined 
20230 64 61 74 61 73 65 74 2e 20 5e 54 68 69 73 20 0a  dataset. ^This .
20240 20 20 20 20 20 20 20 69 73 20 74 68 65 20 6f 6e         is the on
20250 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  ly difference be
20260 74 77 65 65 6e 20 61 20 55 53 49 4e 47 20 63 6c  tween a USING cl
20270 61 75 73 65 20 61 6e 64 20 69 74 73 20 65 71 75  ause and its equ
20280 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20 20 20 20  ivalent ON.     
20290 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 20    constraint... 
202a0 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68   <li> <p>^(If th
202b0 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72  e NATURAL keywor
202c0 64 20 69 73 20 61 64 64 65 64 20 74 6f 20 61 6e  d is added to an
202d0 79 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  y of the join-op
202e0 73 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20  s, then an.     
202f0 20 20 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47    implicit USING
20300 20 63 6c 61 75 73 65 20 69 73 20 61 64 64 65 64   clause is added
20310 20 74 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e   to the join-con
20320 73 74 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d  straints. The im
20330 70 6c 69 63 69 74 0a 20 20 20 20 20 20 20 55 53  plicit.       US
20340 49 4e 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61  ING clause conta
20350 69 6e 73 20 65 61 63 68 20 6f 66 20 74 68 65 20  ins each of the 
20360 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
20370 74 20 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68  t appear in both
20380 0a 20 20 20 20 20 20 20 74 68 65 20 6c 65 66 74  .       the left
20390 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20   and right-hand 
203a0 69 6e 70 75 74 20 64 61 74 61 73 65 74 73 2e 29  input datasets.)
203b0 5e 20 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61  ^ ^If the left a
203c0 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20  nd right-hand.  
203d0 20 20 20 20 20 69 6e 70 75 74 20 64 61 74 61 73       input datas
203e0 65 74 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63  ets feature no c
203f0 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ommon column nam
20400 65 73 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54  es, then the NAT
20410 55 52 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20  URAL keyword.   
20420 20 20 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63      has no effec
20430 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  t on the results
20440 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41   of the join. ^A
20450 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61   USING or ON cla
20460 75 73 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e  use may.       n
20470 6f 74 20 62 65 20 61 64 64 65 64 20 74 6f 20 61  ot be added to a
20480 20 6a 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69   join that speci
20490 66 69 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c  fies the NATURAL
204a0 20 6b 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69   keyword...  <li
204b0 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f  > <p>^(If the jo
204c0 69 6e 2d 6f 70 20 69 73 20 61 20 22 4c 45 46 54  in-op is a "LEFT
204d0 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20   JOIN" or "LEFT 
204e0 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65  OUTER JOIN", the
204f0 6e 20 61 66 74 65 72 0a 20 20 20 20 20 20 20 74  n after.       t
20500 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 66  he ON or USING f
20510 69 6c 74 65 72 69 6e 67 20 63 6c 61 75 73 65 73  iltering clauses
20520 20 68 61 76 65 20 62 65 65 6e 20 61 70 70 6c 69   have been appli
20530 65 64 2c 20 61 6e 20 65 78 74 72 61 20 72 6f 77  ed, an extra row
20540 20 69 73 20 0a 20 20 20 20 20 20 20 61 64 64 65   is .       adde
20550 64 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20  d to the output 
20560 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
20570 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65 66  the original lef
20580 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a 20 20  t-hand input .  
20590 20 20 20 20 20 64 61 74 61 73 65 74 20 74 68 61       dataset tha
205a0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
205b0 20 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 20   no rows at all 
205c0 69 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69 74 65  in the composite
205d0 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20  .       dataset 
205e0 28 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68 65  (if any).)^ ^The
205f0 20 61 64 64 65 64 20 72 6f 77 73 20 63 6f 6e 74   added rows cont
20600 61 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  ain NULL values 
20610 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 20  in the columns. 
20620 20 20 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64        that would
20630 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69   normally contai
20640 6e 20 76 61 6c 75 65 73 20 63 6f 70 69 65 64 20  n values copied 
20650 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68  from the right-h
20660 61 6e 64 20 69 6e 70 75 74 0a 20 20 20 20 20 20  and input.      
20670 20 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75 6c   dataset.  .</ul
20680 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f 72  >..<p>^(When mor
20690 65 20 74 68 61 6e 20 74 77 6f 20 74 61 62 6c 65  e than two table
206a0 73 20 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f 67  s are joined tog
206b0 65 74 68 65 72 20 61 73 20 70 61 72 74 20 6f 66  ether as part of
206c0 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c 0a   a FROM clause,.
206d0 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 69  the join operati
206e0 6f 6e 73 20 61 72 65 20 70 72 6f 63 65 73 73 65  ons are processe
206f0 64 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 20  d in order from 
20700 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49  left to right. I
20710 6e 20 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c 20  n other .words, 
20720 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
20730 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a  (A join-op-1 B j
20740 6f 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20 63  oin-op-2 C) is c
20750 6f 6d 70 75 74 65 64 20 61 73 20 0a 28 28 41 20  omputed as .((A 
20760 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f 69  join-op-1 B) joi
20770 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 20 20 20  n-op-2 C).)^.   
20780 20 20 20 20 0a 0a 3c 70 3e 3c 62 3e 32 2e 20 57      ..<p><b>2. W
20790 48 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74  HERE clause filt
207a0 65 72 69 6e 67 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  ering.</b>.<tcl>
207b0 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65 72  hd_fragment wher
207c0 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74  eclause</tcl>.<t
207d0 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
207e0 57 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74  WHERE clause}</t
207f0 63 6c 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61 20 57  cl>..<p>^(If a W
20800 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 73  HERE clause is s
20810 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 57 48  pecified, the WH
20820 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ERE expression i
20830 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
20840 0a 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65  .each row in the
20850 20 69 6e 70 75 74 20 64 61 74 61 20 61 73 20 61   input data as a
20860 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
20870 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20  sion]. All rows 
20880 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 57 48  for which the.WH
20890 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65  ERE clause expre
208a0 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
208b0 74 6f 20 66 61 6c 73 65 20 61 72 65 20 65 78 63  to false are exc
208c0 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64  luded from the d
208d0 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a 63 6f  ataset before.co
208e0 6e 74 69 6e 75 69 6e 67 2e 29 5e 0a 0a 3c 70 3e  ntinuing.)^..<p>
208f0 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e  <b>3. Generation
20900 20 6f 66 20 74 68 65 20 73 65 74 20 6f 66 20 72   of the set of r
20910 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a  esult rows.</b>.
20920 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
20930 20 72 65 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e   resultset</tcl>
20940 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64  .<tcl>hd_keyword
20950 73 20 7b 72 65 73 75 6c 74 2d 73 65 74 20 65 78  s {result-set ex
20960 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55  pressions} {GROU
20970 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  P BY}</tcl>..<p>
20980 4f 6e 63 65 20 74 68 65 20 69 6e 70 75 74 20 64  Once the input d
20990 61 74 61 20 66 72 6f 6d 20 74 68 65 20 46 52 4f  ata from the FRO
209a0 4d 20 63 6c 61 75 73 65 20 68 61 73 20 62 65 65  M clause has bee
209b0 6e 20 66 69 6c 74 65 72 65 64 20 62 79 20 74 68  n filtered by th
209c0 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 65  e.WHERE clause e
209d0 78 70 72 65 73 73 69 6f 6e 20 28 69 66 20 61 6e  xpression (if an
209e0 79 29 2c 20 74 68 65 20 73 65 74 20 6f 66 20 72  y), the set of r
209f0 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72 20 74  esult rows for t
20a00 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43  he simple .SELEC
20a10 54 20 61 72 65 20 63 61 6c 63 75 6c 61 74 65 64  T are calculated
20a20 2e 20 45 78 61 63 74 6c 79 20 68 6f 77 20 74 68  . Exactly how th
20a30 69 73 20 69 73 20 64 6f 6e 65 20 64 65 70 65 6e  is is done depen
20a40 64 73 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68  ds on whether th
20a50 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54  e simple .SELECT
20a60 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65   is an aggregate
20a70 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74   or non-aggregat
20a80 65 20 71 75 65 72 79 2c 20 61 6e 64 20 77 68 65  e query, and whe
20a90 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 47 52  ther or not a GR
20aa0 4f 55 50 0a 42 59 20 63 6c 61 75 73 65 20 77 61  OUP.BY clause wa
20ab0 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70  s specified...<p
20ac0 3e 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  > The list of ex
20ad0 70 72 65 73 73 69 6f 6e 73 20 62 65 74 77 65 65  pressions betwee
20ae0 6e 20 74 68 65 20 53 45 4c 45 43 54 20 61 6e 64  n the SELECT and
20af0 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69   FROM keywords i
20b00 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72  s known as.the r
20b10 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
20b20 20 6c 69 73 74 2e 20 20 5e 49 66 20 61 20 72 65   list.  ^If a re
20b30 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
20b40 69 73 20 74 68 65 20 73 70 65 63 69 61 6c 20 65  is the special e
20b50 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68  xpression."*" th
20b60 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69  en all columns i
20b70 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  n the input data
20b80 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 64   are substituted
20b90 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78   for that one ex
20ba0 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74  pression..^(If t
20bb0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
20bc0 20 74 68 65 20 61 6c 69 61 73 20 6f 66 20 61 20   the alias of a 
20bd0 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
20be0 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
20bf0 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79  ause.followed by
20c00 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63   ".*" then all c
20c10 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20  olumns from the 
20c20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72 20 73  named table or s
20c30 75 62 71 75 65 72 79 20 61 72 65 0a 73 75 62 73  ubquery are.subs
20c40 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 65 20  tituted for the 
20c50 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73 69 6f  single expressio
20c60 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20 61 6e 20  n.)^ ^(It is an 
20c70 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22  error to use a "
20c80 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20  *" or."alias.*" 
20c90 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e  expression in an
20ca0 79 20 63 6f 6e 74 65 78 74 20 6f 74 68 65 72 20  y context other 
20cb0 74 68 61 6e 20 74 68 61 6e 20 61 20 72 65 73 75  than than a resu
20cc0 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
20cd0 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73 20 61 6c  st.)^.^(It is al
20ce0 73 6f 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 75  so an error to u
20cf0 73 65 20 61 20 22 2a 22 20 6f 72 20 22 61 6c 69  se a "*" or "ali
20d00 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f 6e  as.*" expression
20d10 20 69 6e 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   in a simple SEL
20d20 45 43 54 0a 71 75 65 72 79 20 74 68 61 74 20 64  ECT.query that d
20d30 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20 46  oes not have a F
20d40 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c  ROM clause.)^..<
20d50 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20  p> ^(The number 
20d60 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
20d70 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  e rows returned 
20d80 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  by a simple SELE
20d90 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20  CT statement.is 
20da0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6e 75 6d  equal to the num
20db0 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
20dc0 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
20dd0 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
20de0 20 61 66 74 65 72 0a 73 75 62 73 74 69 74 75 74   after.substitut
20df0 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20 61 6c 69  ion of * and ali
20e00 61 73 2e 2a 20 65 78 70 72 65 73 73 69 6f 6e 73  as.* expressions
20e10 2e 29 5e 20 45 61 63 68 20 72 65 73 75 6c 74 20  .)^ Each result 
20e20 72 6f 77 20 69 73 20 63 61 6c 63 75 6c 61 74 65  row is calculate
20e30 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20  d by.evaluating 
20e40 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
20e50 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
20e60 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 77 69  pression list wi
20e70 74 68 20 72 65 73 70 65 63 74 20 74 6f 20 61 0a  th respect to a.
20e80 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 69 6e  single row of in
20e90 70 75 74 20 64 61 74 61 20 6f 72 2c 20 66 6f 72  put data or, for
20ea0 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69   aggregate queri
20eb0 65 73 2c 20 77 69 74 68 20 72 65 73 70 65 63 74  es, with respect
20ec0 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f 66 20 72   to a group.of r
20ed0 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  ows...<ul>.  <li
20ee0 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45  ><p>^If the SELE
20ef0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
20f00 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61  <b>a non-aggrega
20f10 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20 74 68  te query</b>, th
20f20 65 6e 20 0a 20 20 20 20 65 61 63 68 20 65 78 70  en .    each exp
20f30 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72  ression in the r
20f40 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
20f50 20 6c 69 73 74 20 69 73 20 65 76 61 6c 75 61 74   list is evaluat
20f60 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ed for each row 
20f70 69 6e 0a 20 20 20 20 74 68 65 20 64 61 74 61 73  in.    the datas
20f80 65 74 20 66 69 6c 74 65 72 65 64 20 62 79 20 74  et filtered by t
20f90 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e  he WHERE clause.
20fa0 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ..  <li><p>^If t
20fb0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
20fc0 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67 67  ent is <b>an agg
20fd0 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
20fe0 68 6f 75 74 20 61 20 47 52 4f 55 50 0a 20 20 20  hout a GROUP.   
20ff0 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20   BY</b> clause, 
21000 74 68 65 6e 20 65 61 63 68 20 61 67 67 72 65 67  then each aggreg
21010 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ate expression i
21020 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
21030 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74   is .    evaluat
21040 65 64 20 6f 6e 63 65 20 61 63 72 6f 73 73 20 74  ed once across t
21050 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 73 65  he entire datase
21060 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d 61 67 67  t. ^Each non-agg
21070 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
21080 6e 0a 20 20 20 20 69 6e 20 74 68 65 20 72 65 73  n.    in the res
21090 75 6c 74 2d 73 65 74 20 69 73 20 65 76 61 6c 75  ult-set is evalu
210a0 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 61 6e  ated once for an
210b0 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c   arbitrarily sel
210c0 65 63 74 65 64 20 72 6f 77 20 6f 66 0a 20 20 20  ected row of.   
210d0 20 74 68 65 20 64 61 74 61 73 65 74 2e 20 5e 54   the dataset. ^T
210e0 68 65 20 73 61 6d 65 20 61 72 62 69 74 72 61 72  he same arbitrar
210f0 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77  ily selected row
21100 20 69 73 20 75 73 65 64 20 66 6f 72 20 65 61 63   is used for eac
21110 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67 72 65 67  h.    non-aggreg
21120 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ate expression. 
21130 5e 4f 72 2c 20 69 66 20 74 68 65 20 64 61 74 61  ^Or, if the data
21140 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 7a 65 72  set contains zer
21150 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 0a 20 20  o rows, then .  
21160 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65    each non-aggre
21170 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20  gate expression 
21180 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67 61  is evaluated aga
21190 69 6e 73 74 20 61 20 72 6f 77 20 63 6f 6e 73 69  inst a row consi
211a0 73 74 69 6e 67 0a 20 20 20 20 65 6e 74 69 72 65  sting.    entire
211b0 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75 65  ly of NULL value
211c0 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68 65 20 73  s...   <p>^The s
211d0 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
211e0 75 6c 74 2d 73 65 74 20 64 61 74 61 20 63 72 65  ult-set data cre
211f0 61 74 65 64 20 62 79 20 65 76 61 6c 75 61 74 69  ated by evaluati
21200 6e 67 20 74 68 65 20 61 67 67 72 65 67 61 74 65  ng the aggregate
21210 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d 61 67 67  .    and non-agg
21220 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
21230 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
21240 2d 73 65 74 20 66 6f 72 6d 73 20 74 68 65 20 72  -set forms the r
21250 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20 20 20 20  esult of an.    
21260 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
21270 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50 20  without a GROUP 
21280 42 59 20 63 6c 61 75 73 65 2e 20 5e 41 6e 20 61  BY clause. ^An a
21290 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
212a0 69 74 68 6f 75 74 20 61 0a 20 20 20 20 47 52 4f  ithout a.    GRO
212b0 55 50 20 42 59 20 63 6c 61 75 73 65 20 61 6c 77  UP BY clause alw
212c0 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61 63  ays returns exac
212d0 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f 66 20 64  tly one row of d
212e0 61 74 61 2c 20 65 76 65 6e 20 69 66 20 74 68 65  ata, even if the
212f0 72 65 20 61 72 65 0a 20 20 20 20 7a 65 72 6f 20  re are.    zero 
21300 72 6f 77 73 20 6f 66 20 69 6e 70 75 74 20 64 61  rows of input da
21310 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28  ta...  <li><p>^(
21320 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  If the SELECT st
21330 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e  atement is <b>an
21340 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
21350 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20   with a GROUP.  
21360 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c    BY</b> clause,
21370 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68   then each of th
21380 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 70  e expressions sp
21390 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
213a0 6f 66 20 74 68 65 0a 20 20 20 20 47 52 4f 55 50  of the.    GROUP
213b0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 65 76   BY clause is ev
213c0 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68  aluated for each
213d0 20 72 6f 77 20 6f 66 20 74 68 65 20 64 61 74 61   row of the data
213e0 73 65 74 2e 20 45 61 63 68 20 72 6f 77 0a 20 20  set. Each row.  
213f0 20 20 69 73 20 74 68 65 6e 20 61 73 73 69 67 6e    is then assign
21400 65 64 20 74 6f 20 61 20 22 67 72 6f 75 70 22 20  ed to a "group" 
21410 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73  based on the res
21420 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f 72 20 77  ults; rows for w
21430 68 69 63 68 0a 20 20 20 20 74 68 65 20 72 65 73  hich.    the res
21440 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69  ults of evaluati
21450 6e 67 20 74 68 65 20 47 52 4f 55 50 20 42 59 20  ng the GROUP BY 
21460 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
21470 74 68 65 20 73 61 6d 65 20 61 72 65 0a 20 20 20  the same are.   
21480 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65   assigned to the
21490 20 73 61 6d 65 20 67 72 6f 75 70 2e 29 5e 20 5e   same group.)^ ^
214a0 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
214b0 20 6f 66 20 67 72 6f 75 70 69 6e 67 20 72 6f 77   of grouping row
214c0 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20 76 61 6c  s, NULL .    val
214d0 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
214e0 65 64 20 65 71 75 61 6c 2e 20 5e 54 68 65 20 75  ed equal. ^The u
214f0 73 75 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 5b  sual rules for [
21500 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65 63 74  collation|select
21510 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c 6c 61 74  ing a.    collat
21520 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 77 69  ion sequence] wi
21530 74 68 20 77 68 69 63 68 20 74 6f 20 63 6f 6d 70  th which to comp
21540 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73 20  are text values 
21550 61 70 70 6c 79 20 77 68 65 6e 20 65 76 61 6c 75  apply when evalu
21560 61 74 69 6e 67 0a 20 20 20 20 65 78 70 72 65 73  ating.    expres
21570 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50  sions in a GROUP
21580 20 42 59 20 63 6c 61 75 73 65 2e 20 20 5e 54 68   BY clause.  ^Th
21590 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  e expressions in
215a0 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   the GROUP BY cl
215b0 61 75 73 65 0a 20 20 20 20 64 6f 20 3c 65 6d 3e  ause.    do <em>
215c0 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f  not</em> have to
215d0 20 62 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20   be expressions 
215e0 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 74  that appear in t
215f0 68 65 20 72 65 73 75 6c 74 2e 20 5e 54 68 65 0a  he result. ^The.
21600 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20      expressions 
21610 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c  in a GROUP BY cl
21620 61 75 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ause may not be 
21630 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
21640 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e  sions...    <p>^
21650 28 49 66 20 61 20 48 41 56 49 4e 47 20 63 6c 61  (If a HAVING cla
21660 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
21670 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
21680 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20  d once for each 
21690 67 72 6f 75 70 20 0a 20 20 20 20 6f 66 20 72 6f  group .    of ro
216a0 77 73 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e  ws as a [boolean
216b0 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66   expression]. If
216c0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65   the result of e
216d0 76 61 6c 75 61 74 69 6e 67 20 74 68 65 0a 20 20  valuating the.  
216e0 20 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20    HAVING clause 
216f0 69 73 20 66 61 6c 73 65 2c 20 74 68 65 20 67 72  is false, the gr
21700 6f 75 70 20 69 73 20 64 69 73 63 61 72 64 65 64  oup is discarded
21710 2e 29 5e 20 5e 49 66 20 74 68 65 20 48 41 56 49  .)^ ^If the HAVI
21720 4e 47 20 63 6c 61 75 73 65 20 69 73 0a 20 20 20  NG clause is.   
21730 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65 78   an aggregate ex
21740 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20  pression, it is 
21750 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73  evaluated across
21760 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65   all rows in the
21770 20 67 72 6f 75 70 2e 20 5e 49 66 0a 20 20 20 20   group. ^If.    
21780 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  a HAVING clause 
21790 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61  is a non-aggrega
217a0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
217b0 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 77  t is evaluated w
217c0 69 74 68 20 72 65 73 70 65 63 74 0a 20 20 20 20  ith respect.    
217d0 74 6f 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c  to an arbitraril
217e0 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 66  y selected row f
217f0 72 6f 6d 20 74 68 65 20 67 72 6f 75 70 2e 20 20  rom the group.  
21800 5e 54 68 65 20 48 41 56 49 4e 47 20 65 78 70 72  ^The HAVING expr
21810 65 73 73 69 6f 6e 20 6d 61 79 0a 20 20 20 20 72  ession may.    r
21820 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20  efer to values, 
21830 65 76 65 6e 20 61 67 67 72 65 67 61 74 65 20 66  even aggregate f
21840 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20 61  unctions, that a
21850 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72 65  re not in the re
21860 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c  sult.</p>..    <
21870 70 3e 5e 45 61 63 68 20 65 78 70 72 65 73 73 69  p>^Each expressi
21880 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
21890 2d 73 65 74 20 69 73 20 74 68 65 6e 20 65 76 61  -set is then eva
218a0 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20  luated once for 
218b0 65 61 63 68 0a 20 20 20 20 67 72 6f 75 70 20 6f  each.    group o
218c0 66 20 72 6f 77 73 2e 20 5e 49 66 20 74 68 65 20  f rows. ^If the 
218d0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
218e0 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
218f0 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 0a 20 20  ssion, it is .  
21900 20 20 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f    evaluated acro
21910 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74  ss all rows in t
21920 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74 68 65 72  he group. ^Other
21930 77 69 73 65 2c 20 69 74 20 69 73 20 65 76 61 6c  wise, it is eval
21940 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a 20 20  uated against.  
21950 20 20 61 20 73 69 6e 67 6c 65 20 61 72 62 69 74    a single arbit
21960 72 61 72 69 6c 79 20 63 68 6f 73 65 6e 20 72 6f  rarily chosen ro
21970 77 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74 68  w from within th
21980 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 74 68 65  e group. ^If the
21990 72 65 20 69 73 20 6d 6f 72 65 0a 20 20 20 20 74  re is more.    t
219a0 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72  han one non-aggr
219b0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
219c0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73   in the result-s
219d0 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20 73 75 63  et, then all suc
219e0 68 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e  h.    expression
219f0 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20  s are evaluated 
21a00 66 6f 72 20 74 68 65 20 73 61 6d 65 20 72 6f 77  for the same row
21a10 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20  ...    <p>^Each 
21a20 67 72 6f 75 70 20 6f 66 20 69 6e 70 75 74 20 64  group of input d
21a30 61 74 61 73 65 74 20 72 6f 77 73 20 63 6f 6e 74  ataset rows cont
21a40 72 69 62 75 74 65 73 20 61 20 73 69 6e 67 6c 65  ributes a single
21a50 20 72 6f 77 20 74 6f 20 74 68 65 20 0a 20 20 20   row to the .   
21a60 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
21a70 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74 20 74 6f  ows. ^Subject to
21a80 20 66 69 6c 74 65 72 69 6e 67 20 61 73 73 6f 63   filtering assoc
21a90 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 44  iated with the D
21aa0 49 53 54 49 4e 43 54 0a 20 20 20 20 6b 65 79 77  ISTINCT.    keyw
21ab0 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20  ord, the number 
21ac0 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  of rows returned
21ad0 20 62 79 20 61 6e 20 61 67 67 72 65 67 61 74 65   by an aggregate
21ae0 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47 52   query with a GR
21af0 4f 55 50 0a 20 20 20 20 42 59 20 63 6c 61 75 73  OUP.    BY claus
21b00 65 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  e is the same as
21b10 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 67   the number of g
21b20 72 6f 75 70 73 20 6f 66 20 72 6f 77 73 20 70 72  roups of rows pr
21b30 6f 64 75 63 65 64 20 62 79 20 61 70 70 6c 79 69  oduced by applyi
21b40 6e 67 0a 20 20 20 20 74 68 65 20 47 52 4f 55 50  ng.    the GROUP
21b50 20 42 59 20 61 6e 64 20 48 41 56 49 4e 47 20 63   BY and HAVING c
21b60 6c 61 75 73 65 73 20 74 6f 20 74 68 65 20 66 69  lauses to the fi
21b70 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64 61 74  ltered input dat
21b80 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  aset..</ul>..<p>
21b90 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66  <b>4. Removal of
21ba0 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
21bb0 28 44 49 53 54 49 4e 43 54 20 70 72 6f 63 65 73  (DISTINCT proces
21bc0 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  sing).</b>.<tcl>
21bd0 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 69 73 74  hd_fragment dist
21be0 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  inct</tcl>.<tcl>
21bf0 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49 53  hd_keywords {DIS
21c00 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  TINCT}</tcl>..<p
21c10 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c  >^One of the ALL
21c20 20 6f 72 20 44 49 53 54 49 4e 43 54 20 6b 65 79   or DISTINCT key
21c30 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77  words may follow
21c40 20 74 68 65 20 53 45 4c 45 43 54 20 6b 65 79 77   the SELECT keyw
21c50 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65  ord in a .simple
21c60 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
21c70 74 2e 20 5e 49 66 20 74 68 65 20 73 69 6d 70 6c  t. ^If the simpl
21c80 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45  e SELECT is a SE
21c90 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74  LECT ALL, then t
21ca0 68 65 0a 65 6e 74 69 72 65 20 73 65 74 20 6f 66  he.entire set of
21cb0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61 72 65   result rows are
21cc0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
21cd0 20 53 45 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69   SELECT. ^If nei
21ce0 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54  ther ALL or.DIST
21cf0 49 4e 43 54 20 61 72 65 20 70 72 65 73 65 6e 74  INCT are present
21d00 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  , then the behav
21d10 69 6f 75 72 20 69 73 20 61 73 20 69 66 20 41 4c  iour is as if AL
21d20 4c 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64  L were specified
21d30 2e 20 0a 5e 49 66 20 74 68 65 20 73 69 6d 70 6c  . .^If the simpl
21d40 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45  e SELECT is a SE
21d50 4c 45 43 54 20 44 49 53 54 49 4e 43 54 2c 20 74  LECT DISTINCT, t
21d60 68 65 6e 20 64 75 70 6c 69 63 61 74 65 20 72 6f  hen duplicate ro
21d70 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 0a 66  ws are removed.f
21d80 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72  rom the set of r
21d90 65 73 75 6c 74 20 72 6f 77 73 20 62 65 66 6f 72  esult rows befor
21da0 65 20 69 74 20 69 73 20 72 65 74 75 72 6e 65 64  e it is returned
21db0 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  . ^For the purpo
21dc0 73 65 73 20 6f 66 0a 64 65 74 65 63 74 69 6e 67  ses of.detecting
21dd0 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 2c   duplicate rows,
21de0 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75 65 73   two NULL values
21df0 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
21e00 74 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e 54 68  to be equal. ^Th
21e10 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66  e.normal rules f
21e20 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61 20 63  or selecting a c
21e30 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
21e40 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  e to compare tex
21e50 74 20 76 61 6c 75 65 73 20 77 69 74 68 0a 61 70  t values with.ap
21e60 70 6c 79 2e 0a 0a 3c 68 33 3e 43 6f 6d 70 6f 75  ply...<h3>Compou
21e70 6e 64 20 53 65 6c 65 63 74 20 53 74 61 74 65 6d  nd Select Statem
21e80 65 6e 74 73 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ents.<tcl>hd_fra
21e90 67 6d 65 6e 74 20 63 6f 6d 70 6f 75 6e 64 3c 2f  gment compound</
21ea0 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79  tcl>.<tcl>hd_key
21eb0 77 6f 72 64 73 20 7b 63 6f 6d 70 6f 75 6e 64 20  words {compound 
21ec0 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e  select} {compoun
21ed0 64 20 71 75 65 72 79 7d 3c 2f 74 63 6c 3e 0a 3c  d query}</tcl>.<
21ee0 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72 20  /h3>..<p>Two or 
21ef0 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45  more simple SELE
21f00 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61  CT statements ma
21f10 79 20 62 65 20 63 6f 6e 6e 65 63 74 65 64 20 74  y be connected t
21f20 6f 67 65 74 68 65 72 20 74 6f 20 66 6f 72 6d 0a  ogether to form.
21f30 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
21f40 54 20 75 73 69 6e 67 20 74 68 65 20 55 4e 49 4f  T using the UNIO
21f50 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e  N, UNION ALL, IN
21f60 54 45 52 53 45 43 54 20 6f 72 20 45 58 43 45 50  TERSECT or EXCEP
21f70 54 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 49 6e 20  T operator..^In 
21f80 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
21f90 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74  T, all the const
21fa0 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d  ituent SELECTs m
21fb0 75 73 74 20 72 65 74 75 72 6e 20 74 68 65 20 73  ust return the s
21fc0 61 6d 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 72  ame .number of r
21fd0 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 5e  esult columns. ^
21fe0 41 73 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74  As the component
21ff0 73 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20  s of a compound 
22000 53 45 4c 45 43 54 20 6d 75 73 74 0a 62 65 20 73  SELECT must.be s
22010 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
22020 74 65 6d 65 6e 74 73 2c 20 74 68 65 79 20 6d 61  tements, they ma
22030 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 4f 52  y not contain OR
22040 44 45 52 20 42 59 20 6f 72 20 4c 49 4d 49 54 20  DER BY or LIMIT 
22050 63 6c 61 75 73 65 73 2e 0a 5e 4f 52 44 45 52 20  clauses..^ORDER 
22060 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  BY and LIMIT cla
22070 75 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63  uses may only oc
22080 63 75 72 20 61 74 20 74 68 65 20 65 6e 64 20 6f  cur at the end o
22090 66 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d  f the entire com
220a0 70 6f 75 6e 64 0a 53 45 4c 45 43 54 2e 20 20 0a  pound.SELECT.  .
220b0 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e 64 20  .<p>^A compound 
220c0 53 45 4c 45 43 54 20 63 72 65 61 74 65 64 20 75  SELECT created u
220d0 73 69 6e 67 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f  sing UNION ALL o
220e0 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20  perator returns 
220f0 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f  all the rows.fro
22100 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20  m the SELECT to 
22110 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20  the left of the 
22120 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74  UNION ALL operat
22130 6f 72 2c 20 61 6e 64 20 61 6c 6c 20 74 68 65 20  or, and all the 
22140 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45  rows.from the SE
22150 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68  LECT to the righ
22160 74 20 6f 66 20 69 74 2e 20 5e 54 68 65 20 55 4e  t of it. ^The UN
22170 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 77 6f 72  ION operator wor
22180 6b 73 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  ks the same way 
22190 61 73 0a 55 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78  as.UNION ALL, ex
221a0 63 65 70 74 20 74 68 61 74 20 64 75 70 6c 69 63  cept that duplic
221b0 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d  ate rows are rem
221c0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 66 69  oved from the fi
221d0 6e 61 6c 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  nal result set..
221e0 5e 54 68 65 20 49 4e 54 45 52 53 45 43 54 20 6f  ^The INTERSECT o
221f0 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20  perator returns 
22200 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e  the intersection
22210 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
22220 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 0a  of the left and.
22230 72 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20 20  right SELECTs.  
22240 5e 54 68 65 20 45 58 43 45 50 54 20 6f 70 65 72  ^The EXCEPT oper
22250 61 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65  ator returns the
22260 20 73 75 62 73 65 74 20 6f 66 20 72 6f 77 73 20   subset of rows 
22270 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a  returned by the.
22280 6c 65 66 74 20 53 45 4c 45 43 54 20 74 68 61 74  left SELECT that
22290 20 61 72 65 20 6e 6f 74 20 61 6c 73 6f 20 72 65   are not also re
222a0 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 72 69  turned by the ri
222b0 67 68 74 2d 68 61 6e 64 20 53 45 4c 45 43 54 2e  ght-hand SELECT.
222c0 20 5e 44 75 70 6c 69 63 61 74 65 0a 72 6f 77 73   ^Duplicate.rows
222d0 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
222e0 6d 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  m the results of
222f0 20 49 4e 54 45 52 53 45 43 54 20 61 6e 64 20 45   INTERSECT and E
22300 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 73 20  XCEPT operators 
22310 62 65 66 6f 72 65 20 74 68 65 0a 72 65 73 75 6c  before the.resul
22320 74 20 73 65 74 20 69 73 20 72 65 74 75 72 6e 65  t set is returne
22330 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65 20  d...<p>^For the 
22340 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65  purposes of dete
22350 72 6d 69 6e 69 6e 67 20 64 75 70 6c 69 63 61 74  rmining duplicat
22360 65 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20 72  e rows for the r
22370 65 73 75 6c 74 73 20 6f 66 20 63 6f 6d 70 6f 75  esults of compou
22380 6e 64 0a 53 45 4c 45 43 54 20 6f 70 65 72 61 74  nd.SELECT operat
22390 6f 72 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ors, NULL values
223a0 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
223b0 65 71 75 61 6c 20 74 6f 20 6f 74 68 65 72 20 4e  equal to other N
223c0 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 0a 64  ULL values and.d
223d0 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c  istinct from all
223e0 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73   non-NULL values
223f0 2e 20 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  . ^The collation
22400 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 74   sequence used t
22410 6f 20 63 6f 6d 70 61 72 65 20 0a 74 77 6f 20 74  o compare .two t
22420 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64 65  ext values is de
22430 74 65 72 6d 69 6e 65 64 20 61 73 20 69 66 20 74  termined as if t
22440 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
22450 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
22460 2d 68 61 6e 64 0a 53 45 4c 45 43 54 20 73 74 61  -hand.SELECT sta
22470 74 65 6d 65 6e 74 73 20 77 65 72 65 20 74 68 65  tements were the
22480 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
22490 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66  hand operands of
224a0 20 74 68 65 20 65 71 75 61 6c 73 20 28 3d 29 0a   the equals (=).
224b0 6f 70 65 72 61 74 6f 72 2c 20 65 78 63 65 70 74  operator, except
224c0 20 74 68 61 74 20 67 72 65 61 74 65 72 20 70 72   that greater pr
224d0 65 63 65 64 65 6e 63 65 20 69 73 20 6e 6f 74 20  ecedence is not 
224e0 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 63 6f  assigned to a co
224f0 6c 6c 61 74 69 6f 6e 20 0a 73 65 71 75 65 6e 63  llation .sequenc
22500 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68  e specified with
22510 20 74 68 65 20 70 6f 73 74 66 69 78 20 43 4f 4c   the postfix COL
22520 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 2e 20 5e  LATE operator. ^
22530 4e 6f 20 61 66 66 69 6e 69 74 79 0a 74 72 61 6e  No affinity.tran
22540 73 66 6f 72 6d 61 74 69 6f 6e 73 20 61 72 65 20  sformations are 
22550 61 70 70 6c 69 65 64 20 74 6f 20 61 6e 79 20 76  applied to any v
22560 61 6c 75 65 73 20 77 68 65 6e 20 63 6f 6d 70 61  alues when compa
22570 72 69 6e 67 20 72 6f 77 73 20 61 73 20 70 61 72  ring rows as par
22580 74 20 6f 66 20 61 0a 63 6f 6d 70 6f 75 6e 64 20  t of a.compound 
22590 53 45 4c 45 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57  SELECT. ..<p>^(W
225a0 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72  hen three or mor
225b0 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73  e simple SELECTs
225c0 20 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20 69   are connected i
225d0 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53  nto a compound S
225e0 45 4c 45 43 54 2c 0a 74 68 65 79 20 67 72 6f 75  ELECT,.they grou
225f0 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  p from left to r
22600 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 77  ight. In other w
22610 6f 72 64 73 2c 20 69 66 20 22 41 22 2c 20 22 42  ords, if "A", "B
22620 22 20 61 6e 64 20 22 43 22 20 61 72 65 20 61 6c  " and "C" are al
22630 6c 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  l.simple SELECT 
22640 73 74 61 74 65 6d 65 6e 74 73 2c 20 28 41 20 6f  statements, (A o
22650 70 20 42 20 6f 70 20 43 29 20 69 73 20 70 72 6f  p B op C) is pro
22660 63 65 73 73 65 64 20 61 73 20 28 28 41 20 6f 70  cessed as ((A op
22670 20 42 29 20 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f   B) op C).)^..</
22680 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
22690 6d 65 6e 74 20 6f 72 64 65 72 62 79 20 7b 6f 72  ment orderby {or
226a0 64 65 72 20 62 79 7d 3c 2f 74 63 6c 3e 0a 3c 68  der by}</tcl>.<h
226b0 33 3e 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c  3>ORDER BY and L
226c0 49 4d 49 54 2f 4f 46 46 53 45 54 20 43 6c 61 75  IMIT/OFFSET Clau
226d0 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20  ses</h3>..<p>If 
226e0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
226f0 6e 74 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  nt that returns 
22700 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f  more than one ro
22710 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  w does not have 
22720 61 6e 0a 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an.ORDER BY clau
22730 73 65 2c 20 74 68 65 20 6f 72 64 65 72 20 69 6e  se, the order in
22740 20 77 68 69 63 68 20 74 68 65 20 72 6f 77 73 20   which the rows 
22750 61 72 65 20 72 65 74 75 72 6e 65 64 20 69 73 20  are returned is 
22760 75 6e 64 65 66 69 6e 65 64 2e 0a 4f 72 2c 20 69  undefined..Or, i
22770 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
22780 6d 65 6e 74 20 64 6f 65 73 20 68 61 76 65 20 61  ment does have a
22790 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  n ORDER BY claus
227a0 65 2c 20 74 68 65 6e 20 74 68 65 20 6c 69 73 74  e, then the list
227b0 20 6f 66 0a 65 78 70 72 65 73 73 69 6f 6e 73 20   of.expressions 
227c0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
227d0 4f 52 44 45 52 20 42 59 20 64 65 74 65 72 6d 69  ORDER BY determi
227e0 6e 65 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  ne the order in 
227f0 77 68 69 63 68 20 72 6f 77 73 0a 61 72 65 20 72  which rows.are r
22800 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
22810 73 65 72 2e 20 5e 52 6f 77 73 20 61 72 65 20 66  ser. ^Rows are f
22820 69 72 73 74 20 73 6f 72 74 65 64 20 62 61 73 65  irst sorted base
22830 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  d on the results
22840 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   of.evaluating t
22850 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70  he left-most exp
22860 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f  ression in the O
22870 52 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68  RDER BY list, th
22880 65 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b  en ties are brok
22890 65 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67  en.by evaluating
228a0 20 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74   the second left
228b0 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e  -most expression
228c0 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20   and so on. The 
228d0 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74  order in which.t
228e0 77 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  wo rows for whic
228f0 68 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65  h all ORDER BY e
22900 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
22910 61 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c  ate to equal val
22920 75 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64  ues are.returned
22930 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e   is undefined. ^
22940 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78  Each ORDER BY ex
22950 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20  pression may be 
22960 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
22970 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68  wed.by one of th
22980 65 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28  e keywords ASC (
22990 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61  smaller values a
229a0 72 65 20 72 65 74 75 72 6e 65 64 20 66 69 72 73  re returned firs
229b0 74 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67  t) or DESC (larg
229c0 65 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65  er.values are re
229d0 74 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e  turned first). ^
229e0 49 66 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f  If neither ASC o
229f0 72 20 44 45 53 43 20 61 72 65 20 73 70 65 63 69  r DESC are speci
22a00 66 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73  fied, rows.are s
22a10 6f 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69  orted in ascendi
22a20 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75  ng (smaller valu
22a30 65 73 20 66 69 72 73 74 29 20 6f 72 64 65 72 20  es first) order 
22a40 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e  by default...<p>
22a50 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78  Each ORDER BY ex
22a60 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63  pression is proc
22a70 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73  essed as follows
22a80 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
22a90 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52  <p>^If the ORDER
22aa0 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
22ab0 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74  s a constant int
22ac0 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a  eger K then the.
22ad0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f  expression is co
22ae0 6e 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61  nsidered an alia
22af0 73 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63  s for the K-th c
22b00 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73  olumn of the res
22b10 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73  ult set.(columns
22b20 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72   are numbered fr
22b30 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
22b40 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31   starting with 1
22b50 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  )...<li><p>^If t
22b60 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
22b70 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65  ession is an ide
22b80 6e 74 69 66 69 65 72 20 74 68 61 74 20 63 6f 72  ntifier that cor
22b90 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20  responds to.the 
22ba0 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20  alias of one of 
22bb0 74 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d  the output colum
22bc0 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70  ns, then the exp
22bd0 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69  ression is consi
22be0 64 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66  dered.an alias f
22bf0 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  or that column..
22c00 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69  .<li><p>^Otherwi
22c10 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52  se, if the ORDER
22c20 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
22c30 73 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72  s any other expr
22c40 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65  ession, it .is e
22c50 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
22c60 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20   returned value 
22c70 75 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68  used to order th
22c80 65 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e  e output rows. ^
22c90 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74  If.the SELECT st
22ca0 61 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d  atement is a sim
22cb0 70 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ple SELECT, then
22cc0 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79   an ORDER BY may
22cd0 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62   contain any.arb
22ce0 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f  itrary expressio
22cf0 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  ns. ^However, if
22d00 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20 61   the SELECT is a
22d10 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
22d20 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20  , then.ORDER BY 
22d30 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
22d40 20 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73   are not aliases
22d50 20 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d   to output colum
22d60 6e 73 20 6d 75 73 74 20 62 65 20 65 78 61 63 74  ns must be exact
22d70 6c 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61  ly.the same as a
22d80 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65  n expression use
22d90 64 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63  d as an output c
22da0 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70  olumn..</ol>..<p
22db0 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73  >^For the purpos
22dc0 65 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f  es of sorting ro
22dd0 77 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ws, values are c
22de0 6f 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20 73  ompared in the s
22df0 61 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b  ame way.as for [
22e00 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65  comparison expre
22e10 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c  ssions]. The col
22e20 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
22e30 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a  used to compare.
22e40 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20  two text values 
22e50 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73  is determined as
22e60 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a   follows:..<ol>.
22e70 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
22e80 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
22e90 73 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64  sion is assigned
22ea0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
22eb0 75 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68  uence using.  th
22ec0 65 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41  e postfix [COLLA
22ed0 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68  TE operator], th
22ee0 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  en the specified
22ef0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
22f00 6e 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20  nce is.  used.. 
22f10 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69   <li><p>^Otherwi
22f20 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52  se, if the ORDER
22f30 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
22f40 73 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e  s an alias to an
22f50 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68   expression.  th
22f60 61 74 20 68 61 73 20 62 65 65 6e 20 61 73 73 69  at has been assi
22f70 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  gned a collation
22f80 20 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20   sequence using 
22f90 74 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b  the postfix .  [
22fa0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
22fb0 5d 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c  ], then the coll
22fc0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61  ation sequence a
22fd0 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61  ssigned to the a
22fe0 6c 69 61 73 65 64 0a 20 20 65 78 70 72 65 73 73  liased.  express
22ff0 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c  ion is used..  <
23000 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
23010 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
23020 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
23030 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61  a column or an a
23040 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70  lias of.  an exp
23050 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
23060 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74  a column, then t
23070 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
23080 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f  tion sequence fo
23090 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  r.  the column i
230a0 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c  s used. .  <li><
230b0 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68  p>^Otherwise, th
230c0 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61  e [BINARY] colla
230d0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
230e0 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   used..</ol>..<p
230f0 3e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53  >In a compound S
23100 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
23110 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
23120 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61  pressions are ha
23130 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73  ndled.as aliases
23140 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20   for one of the 
23150 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f  result columns o
23160 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 53  f the compound S
23170 45 4c 45 43 54 2e 0a 5e 28 49 66 20 61 6e 20 4f  ELECT..^(If an O
23180 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
23190 6f 6e 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  on is not an int
231a0 65 67 65 72 20 61 6c 69 61 73 2c 20 74 68 65 6e  eger alias, then
231b0 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73   SQLite searches
231c0 0a 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 53  .the left-most S
231d0 45 4c 45 43 54 20 69 6e 20 74 68 65 20 63 6f 6d  ELECT in the com
231e0 70 6f 75 6e 64 20 66 6f 72 20 61 20 72 65 73 75  pound for a resu
231f0 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 6d  lt column that m
23200 61 74 63 68 65 73 20 65 69 74 68 65 72 0a 74 68  atches either.th
23210 65 20 73 65 63 6f 6e 64 20 6f 72 20 74 68 69 72  e second or thir
23220 64 20 72 75 6c 65 73 20 61 62 6f 76 65 2e 20 49  d rules above. I
23230 66 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  f a match is fou
23240 6e 64 2c 20 74 68 65 20 73 65 61 72 63 68 20 73  nd, the search s
23250 74 6f 70 73 20 61 6e 64 0a 74 68 65 20 65 78 70  tops and.the exp
23260 72 65 73 73 69 6f 6e 20 69 73 20 68 61 6e 64 6c  ression is handl
23270 65 64 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ed as an alias f
23280 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  or the result co
23290 6c 75 6d 6e 20 74 68 61 74 20 69 74 20 68 61 73  lumn that it has
232a0 20 62 65 65 6e 0a 6d 61 74 63 68 65 64 20 61 67   been.matched ag
232b0 61 69 6e 73 74 2e 20 4f 74 68 65 72 77 69 73 65  ainst. Otherwise
232c0 2c 20 74 68 65 20 6e 65 78 74 20 53 45 4c 45 43  , the next SELEC
232d0 54 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 69  T to the right i
232e0 73 20 74 72 69 65 64 2c 20 61 6e 64 20 73 6f 20  s tried, and so 
232f0 6f 6e 2e 29 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74  on.)^.^If no mat
23300 63 68 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  ching expression
23310 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e   can be found in
23320 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
23330 6d 6e 73 20 6f 66 20 61 6e 79 0a 63 6f 6e 73 74  mns of any.const
23340 69 74 75 65 6e 74 20 53 45 4c 45 43 54 2c 20 69  ituent SELECT, i
23350 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e  t is an error. ^
23360 45 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  Each term of the
23370 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
23380 20 69 73 0a 70 72 6f 63 65 73 73 65 64 20 73 65   is.processed se
23390 70 61 72 61 74 65 6c 79 20 61 6e 64 20 6d 61 79  parately and may
233a0 20 62 65 20 6d 61 74 63 68 65 64 20 61 67 61 69   be matched agai
233b0 6e 73 74 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  nst result colum
233c0 6e 73 20 66 72 6f 6d 20 64 69 66 66 65 72 65 6e  ns from differen
233d0 74 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t.SELECT stateme
233e0 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  nts in the compo
233f0 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  und.</p>..<p>The
23400 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 69 73   LIMIT clause is
23410 20 75 73 65 64 20 74 6f 20 70 6c 61 63 65 20 61   used to place a
23420 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  n upper bound on
23430 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
23440 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 62 79 20  ows.returned by 
23450 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
23460 6e 74 2e 20 5e 41 6e 79 20 73 63 61 6c 61 72 20  nt. ^Any scalar 
23470 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62  expression may b
23480 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 0a 4c  e used in the .L
23490 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 73 6f 20  IMIT clause, so 
234a0 6c 6f 6e 67 20 61 73 20 69 74 20 65 76 61 6c 75  long as it evalu
234b0 61 74 65 73 20 74 6f 20 61 6e 20 69 6e 74 65 67  ates to an integ
234c0 65 72 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68  er or a value th
234d0 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65  at can be.lossle
234e0 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
234f0 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49  o an integer. ^I
23500 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
23510 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20   evaluates to a 
23520 4e 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72 20 61  NULL .value or a
23530 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20 74  ny other value t
23540 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f  hat cannot be lo
23550 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74  sslessly convert
23560 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
23570 2c 20 61 6e 0a 65 72 72 6f 72 20 69 73 20 72 65  , an.error is re
23580 74 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 20  turned. ^If the 
23590 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
235a0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20   evaluates to a 
235b0 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 0a  negative value,.
235c0 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f  then there is no
235d0 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20   upper bound on 
235e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
235f0 77 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 4f 74  ws returned. ^Ot
23600 68 65 72 77 69 73 65 2c 20 74 68 65 0a 53 45 4c  herwise, the.SEL
23610 45 43 54 20 72 65 74 75 72 6e 73 20 74 68 65 20  ECT returns the 
23620 66 69 72 73 74 20 4e 20 72 6f 77 73 20 6f 66 20  first N rows of 
23630 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 6f  its result set o
23640 6e 6c 79 2c 20 77 68 65 72 65 20 4e 20 69 73 20  nly, where N is 
23650 74 68 65 20 76 61 6c 75 65 0a 74 68 61 74 20 74  the value.that t
23660 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
23670 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
23680 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45  . ^Or, if the SE
23690 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 77  LECT statement w
236a0 6f 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65 73 73  ould.return less
236b0 20 74 68 61 6e 20 4e 20 72 6f 77 73 20 77 69 74   than N rows wit
236c0 68 6f 75 74 20 61 20 4c 49 4d 49 54 20 63 6c 61  hout a LIMIT cla
236d0 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 65 6e  use, then the en
236e0 74 69 72 65 20 72 65 73 75 6c 74 20 73 65 74 20  tire result set 
236f0 69 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a 0a 3c  is.returned. ..<
23700 70 3e 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f  p>^The expressio
23710 6e 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  n attached to th
23720 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45  e optional OFFSE
23730 54 20 63 6c 61 75 73 65 20 74 68 61 74 20 6d 61  T clause that ma
23740 79 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54  y follow a.LIMIT
23750 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61 6c 73   clause must als
23760 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 6e  o evaluate to an
23770 20 69 6e 74 65 67 65 72 2c 20 6f 72 20 61 20 76   integer, or a v
23780 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
23790 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76  .losslessly conv
237a0 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
237b0 67 65 72 2e 20 5e 49 66 20 61 6e 20 65 78 70 72  ger. ^If an expr
237c0 65 73 73 69 6f 6e 20 68 61 73 20 61 6e 20 4f 46  ession has an OF
237d0 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65  FSET clause,.the
237e0 6e 20 74 68 65 20 66 69 72 73 74 20 4d 20 72 6f  n the first M ro
237f0 77 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 66  ws are omitted f
23800 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20 73  rom the result s
23810 65 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  et returned by t
23820 68 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d  he SELECT.statem
23830 65 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 78 74  ent and the next
23840 20 4e 20 72 6f 77 73 20 61 72 65 20 72 65 74 75   N rows are retu
23850 72 6e 65 64 2c 20 77 68 65 72 65 20 4d 20 61 6e  rned, where M an
23860 64 20 4e 20 61 72 65 20 74 68 65 20 76 61 6c 75  d N are the valu
23870 65 73 20 74 68 61 74 0a 74 68 65 20 4f 46 46 53  es that.the OFFS
23880 45 54 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  ET and LIMIT cla
23890 75 73 65 73 20 65 76 61 6c 75 61 74 65 20 74 6f  uses evaluate to
238a0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
238b0 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45  ^Or, if the SELE
238c0 43 54 0a 77 6f 75 6c 64 20 72 65 74 75 72 6e 20  CT.would return 
238d0 6c 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20 72 6f  less than M+N ro
238e0 77 73 20 69 66 20 69 74 20 64 69 64 20 6e 6f 74  ws if it did not
238f0 20 68 61 76 65 20 61 20 4c 49 4d 49 54 20 63 6c   have a LIMIT cl
23900 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 66  ause, then the.f
23910 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20  irst M rows are 
23920 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20  skipped and the 
23930 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 28  remaining rows (
23940 69 66 20 61 6e 79 29 20 61 72 65 20 72 65 74 75  if any) are retu
23950 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a 4f 46  rned. ^If the.OF
23960 46 53 45 54 20 63 6c 61 75 73 65 20 65 76 61 6c  FSET clause eval
23970 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74  uates to a negat
23980 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65 20 72  ive value, the r
23990 65 73 75 6c 74 73 20 61 72 65 20 74 68 65 20 73  esults are the s
239a0 61 6d 65 20 61 73 20 69 66 20 69 74 0a 68 61 64  ame as if it.had
239b0 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20 7a 65   evaluated to ze
239c0 72 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61 64  ro...<p>^Instead
239d0 20 6f 66 20 61 20 73 65 70 61 72 61 74 65 20 4f   of a separate O
239e0 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68  FFSET clause, th
239f0 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d  e LIMIT clause m
23a00 61 79 20 73 70 65 63 69 66 79 20 74 77 6f 0a 73  ay specify two.s
23a10 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
23a20 73 20 73 65 70 61 72 61 74 65 64 20 62 79 20 61  s separated by a
23a30 20 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68 69 73   comma. ^In this
23a40 20 63 61 73 65 2c 20 74 68 65 20 66 69 72 73 74   case, the first
23a50 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 73 20 75   expression.is u
23a60 73 65 64 20 61 73 20 74 68 65 20 4f 46 46 53 45  sed as the OFFSE
23a70 54 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  T expression and
23a80 20 74 68 65 20 73 65 63 6f 6e 64 20 61 73 20 74   the second as t
23a90 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
23aa0 69 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63 6f 75  ion..This is cou
23ab0 6e 74 65 72 2d 69 6e 74 75 69 74 69 76 65 2c 20  nter-intuitive, 
23ac0 61 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68  as when using th
23ad0 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  e OFFSET clause 
23ae0 74 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a 74 68  the second of.th
23af0 65 20 74 77 6f 20 65 78 70 72 65 73 73 69 6f 6e  e two expression
23b00 73 20 69 73 20 74 68 65 20 4f 46 46 53 45 54 20  s is the OFFSET 
23b10 61 6e 64 20 74 68 65 20 66 69 72 73 74 20 74 68  and the first th
23b20 65 20 4c 49 4d 49 54 2e 20 54 68 69 73 20 69 73  e LIMIT. This is
23b30 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69   intentional.- i
23b40 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70  t maximizes comp
23b50 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f  atibility with o
23b60 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
23b70 65 20 73 79 73 74 65 6d 73 2e 0a 0a 3c 74 63 6c  e systems...<tcl
23b80 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
23b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23bb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23bd0 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20  .Section UPDATE 
23be0 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 2a  update {UPDATE *
23bf0 55 50 44 41 54 45 73 7d 0a 0a 42 75 62 62 6c 65  UPDATEs}..Bubble
23c00 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73  Diagram update-s
23c10 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67  tmt 1.BubbleDiag
23c20 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61  ram qualified-ta
23c30 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a  ble-name.</tcl>.
23c40 0a 3c 70 3e 5e 41 6e 20 55 50 44 41 54 45 20 73  .<p>^An UPDATE s
23c50 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
23c60 20 74 6f 20 6d 6f 64 69 66 79 20 61 20 73 75 62   to modify a sub
23c70 73 65 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65  set of the value
23c80 73 20 73 74 6f 72 65 64 20 69 6e 20 0a 7a 65 72  s stored in .zer
23c90 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f  o or more rows o
23ca0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
23cb0 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20  able identified 
23cc0 62 79 20 74 68 65 20 0a 3c 69 3e 71 75 61 6c 69  by the .<i>quali
23cd0 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c  fied-table-name<
23ce0 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73  /i> specified as
23cf0 20 70 61 72 74 20 6f 66 20 74 68 65 20 55 50 44   part of the UPD
23d00 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ATE statement...
23d10 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54  <p>^If the UPDAT
23d20 45 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  E statement does
23d30 20 6e 6f 74 20 68 61 76 65 20 61 20 57 48 45 52   not have a WHER
23d40 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f  E clause, all ro
23d50 77 73 20 69 6e 20 74 68 65 0a 74 61 62 6c 65 20  ws in the.table 
23d60 61 72 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20  are modified by 
23d70 74 68 65 20 55 50 44 41 54 45 2e 20 5e 4f 74 68  the UPDATE. ^Oth
23d80 65 72 77 69 73 65 2c 20 74 68 65 20 55 50 44 41  erwise, the UPDA
23d90 54 45 20 61 66 66 65 63 74 73 20 6f 6e 6c 79 20  TE affects only 
23da0 74 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20 77  those.rows for w
23db0 68 69 63 68 20 74 68 65 20 72 65 73 75 6c 74 20  hich the result 
23dc0 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
23dd0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 65  e WHERE clause e
23de0 78 70 72 65 73 73 69 6f 6e 20 61 73 20 61 20 0a  xpression as a .
23df0 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
23e00 69 6f 6e 7c 62 6f 6f 6c 65 61 6e 20 65 78 70 72  ion|boolean expr
23e10 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d 2e  ession is true].
23e20 20 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65   ^It is not an e
23e30 72 72 6f 72 20 69 66 20 74 68 65 0a 57 48 45 52  rror if the.WHER
23e40 45 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f  E clause does no
23e50 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72  t evaluate to tr
23e60 75 65 20 66 6f 72 20 61 6e 79 20 72 6f 77 20 69  ue for any row i
23e70 6e 20 74 68 65 20 74 61 62 6c 65 20 2d 20 74 68  n the table - th
23e80 69 73 20 6a 75 73 74 0a 6d 65 61 6e 73 20 74 68  is just.means th
23e90 61 74 20 74 68 65 20 55 50 44 41 54 45 20 73 74  at the UPDATE st
23ea0 61 74 65 6d 65 6e 74 20 61 66 66 65 63 74 73 20  atement affects 
23eb0 7a 65 72 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54  zero rows...<p>T
23ec0 68 65 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73  he modifications
23ed0 20 6d 61 64 65 20 74 6f 20 65 61 63 68 20 72 6f   made to each ro
23ee0 77 20 61 66 66 65 63 74 65 64 20 62 79 20 61 6e  w affected by an
23ef0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
23f00 74 20 61 72 65 0a 64 65 74 65 72 6d 69 6e 65 64  t are.determined
23f10 20 62 79 20 74 68 65 20 6c 69 73 74 20 6f 66 20   by the list of 
23f20 61 73 73 69 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c  assignments foll
23f30 6f 77 69 6e 67 20 74 68 65 20 53 45 54 20 6b 65  owing the SET ke
23f40 79 77 6f 72 64 2e 20 45 61 63 68 0a 61 73 73 69  yword. Each.assi
23f50 67 6e 6d 65 6e 74 20 73 70 65 63 69 66 69 65 73  gnment specifies
23f60 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74   a column name t
23f70 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68  o the left of th
23f80 65 20 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e  e equals sign an
23f90 64 20 61 0a 73 63 61 6c 61 72 20 65 78 70 72 65  d a.scalar expre
23fa0 73 73 69 6f 6e 20 74 6f 20 74 68 65 20 72 69 67  ssion to the rig
23fb0 68 74 2e 20 5e 46 6f 72 20 65 61 63 68 20 61 66  ht. ^For each af
23fc0 66 65 63 74 65 64 20 72 6f 77 2c 20 74 68 65 20  fected row, the 
23fd0 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 0a 61 72  named columns.ar
23fe0 65 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  e set to the val
23ff0 75 65 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61  ues found by eva
24000 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72  luating the corr
24010 65 73 70 6f 6e 64 69 6e 67 20 73 63 61 6c 61 72  esponding scalar
24020 20 0a 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e   .expressions. ^
24030 49 66 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  If a single colu
24040 6d 6e 2d 6e 61 6d 65 20 61 70 70 65 61 72 73 20  mn-name appears 
24050 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 69  more than once i
24060 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 61 73  n the list of.as
24070 73 69 67 6e 6d 65 6e 74 20 65 78 70 72 65 73 73  signment express
24080 69 6f 6e 73 2c 20 61 6c 6c 20 62 75 74 20 74 68  ions, all but th
24090 65 20 72 69 67 68 74 6d 6f 73 74 20 6f 63 63 75  e rightmost occu
240a0 72 72 65 6e 63 65 20 69 73 20 69 67 6e 6f 72 65  rrence is ignore
240b0 64 2e 20 5e 43 6f 6c 75 6d 6e 73 0a 74 68 61 74  d. ^Columns.that
240c0 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69   do not appear i
240d0 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73  n the list of as
240e0 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6c 65  signments are le
240f0 66 74 20 75 6e 6d 6f 64 69 66 69 65 64 2e 20 5e  ft unmodified. ^
24100 54 68 65 20 73 63 61 6c 61 72 0a 65 78 70 72 65  The scalar.expre
24110 73 73 69 6f 6e 73 20 6d 61 79 20 72 65 66 65 72  ssions may refer
24120 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74   to columns of t
24130 68 65 20 72 6f 77 20 62 65 69 6e 67 20 75 70 64  he row being upd
24140 61 74 65 64 2e 20 5e 49 6e 20 74 68 69 73 20 63  ated. ^In this c
24150 61 73 65 20 61 6c 6c 0a 73 63 61 6c 61 72 20 65  ase all.scalar e
24160 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65  xpressions are e
24170 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20  valuated before 
24180 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20  any assignments 
24190 61 72 65 20 6d 61 64 65 2e 0a 0a 3c 70 3e 5e 54  are made...<p>^T
241a0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
241b0 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
241c0 77 73 20 74 68 65 20 75 73 65 72 20 74 6f 20 6e  ws the user to n
241d0 6f 6d 69 6e 61 74 65 20 61 20 73 70 65 63 69 66  ominate a specif
241e0 69 63 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  ic.constraint co
241f0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
24200 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75  n algorithm to u
24210 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f  se during this o
24220 6e 65 20 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e  ne UPDATE comman
24230 64 2e 0a 52 65 66 65 72 20 74 6f 20 74 68 65 20  d..Refer to the 
24240 73 65 63 74 69 6f 6e 20 65 6e 74 69 74 6c 65 64  section entitled
24250 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66   [ON CONFLICT] f
24260 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
24270 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e  formation...<h3>
24280 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20  Restrictions on 
24290 55 50 44 41 54 45 20 53 74 61 74 65 6d 65 6e 74  UPDATE Statement
242a0 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45 20  s Within CREATE 
242b0 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70  TRIGGER</h3>..<p
242c0 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  >The following a
242d0 64 64 69 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78  dditional syntax
242e0 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70   restrictions ap
242f0 70 6c 79 20 74 6f 20 55 50 44 41 54 45 20 73 74  ply to UPDATE st
24300 61 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63  atements that.oc
24310 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20 62  cur within the b
24320 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45  ody of a [CREATE
24330 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
24340 65 6e 74 2e 20 20 0a 0a 3c 75 6c 3e 0a 20 20 3c  ent.  ..<ul>.  <
24350 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e 74 61  li><p>^The <i>ta
24360 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65  ble-name</i> spe
24370 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
24380 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  f an UPDATE stat
24390 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20  ement within.   
243a0 20 20 20 61 20 74 72 69 67 67 65 72 20 62 6f 64     a trigger bod
243b0 79 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c  y must be unqual
243c0 69 66 69 65 64 2e 20 5e 28 49 6e 20 6f 74 68 65  ified. ^(In othe
243d0 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20  r words, the.   
243e0 20 20 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e     <i>database-n
243f0 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20  ame</i><b>.</b> 
24400 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61  prefix on the ta
24410 62 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ble name of the 
24420 55 50 44 41 54 45 20 69 73 0a 20 20 20 20 20 20  UPDATE is.      
24430 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69 74 68  not allowed with
24440 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e  in triggers.)^ ^
24450 55 6e 6c 65 73 73 20 74 68 65 20 74 61 62 6c 65  Unless the table
24460 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
24470 69 67 67 65 72 0a 20 20 20 20 20 20 69 73 20 61  igger.      is a
24480 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68  ttached is in th
24490 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c  e TEMP database,
244a0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
244b0 20 75 70 64 61 74 65 64 20 62 79 20 74 68 65 0a   updated by the.
244c0 20 20 20 20 20 20 74 72 69 67 67 65 72 20 70 72        trigger pr
244d0 6f 67 72 61 6d 20 6d 75 73 74 20 72 65 73 69 64  ogram must resid
244e0 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61  e in the same da
244f0 74 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49  tabase as it. ^I
24500 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20  f the table.    
24510 20 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74    to which the t
24520 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68  rigger is attach
24530 65 64 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d  ed is in the TEM
24540 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  P database, then
24550 20 74 68 65 0a 20 20 20 20 20 20 75 6e 71 75 61   the.      unqua
24560 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66 20 74  lified name of t
24570 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75  he table being u
24580 70 64 61 74 65 64 20 69 73 20 72 65 73 6f 6c 76  pdated is resolv
24590 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
245a0 61 79 0a 20 20 20 20 20 20 61 73 20 69 74 20 69  ay.      as it i
245b0 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65  s for a top-leve
245c0 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20  l statement (by 
245d0 73 65 61 72 63 68 69 6e 67 20 66 69 72 73 74 20  searching first 
245e0 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
245f0 65 2c 0a 20 20 20 20 20 20 74 68 65 6e 20 74 68  e,.      then th
24600 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
24610 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20   then any other 
24620 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65  databases in the
24630 20 6f 72 64 65 72 20 74 68 65 79 20 77 65 72 65   order they were
24640 0a 20 20 20 20 20 20 61 74 74 61 63 68 65 64 29  .      attached)
24650 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  ...  <li><p>^The
24660 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20   INDEXED BY and 
24670 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
24680 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f  ses are not allo
24690 77 65 64 20 6f 6e 20 55 50 44 41 54 45 0a 20 20  wed on UPDATE.  
246a0 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
246b0 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c  ithin triggers.<
246c0 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54  /p>..  <li><p>^T
246d0 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44  he LIMIT and ORD
246e0 45 52 20 42 59 20 63 6c 61 75 73 65 73 20 66 6f  ER BY clauses fo
246f0 72 20 55 50 44 41 54 45 20 61 72 65 20 75 6e 73  r UPDATE are uns
24700 75 70 70 6f 72 74 65 64 20 77 69 74 68 69 6e 0a  upported within.
24710 20 20 20 20 20 20 74 72 69 67 67 65 72 73 2c 20        triggers, 
24720 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  regardless of th
24730 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70  e compilation op
24740 74 69 6f 6e 73 20 75 73 65 64 20 74 6f 20 62 75  tions used to bu
24750 69 6c 64 20 53 51 4c 69 74 65 2e 0a 3c 2f 75 6c  ild SQLite..</ul
24760 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20  >..<h3>Optional 
24770 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20  LIMIT and ORDER 
24780 42 59 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a  BY Clauses</h3>.
24790 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20  .<p>^(If SQLite 
247a0 69 73 20 62 75 69 6c 74 20 77 69 74 68 20 74 68  is built with th
247b0 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e [SQLITE_ENABLE
247c0 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
247d0 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69  IMIT].compile-ti
247e0 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65 6e 20 74  me option then t
247f0 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65  he syntax of the
24800 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
24810 74 20 69 73 20 65 78 74 65 6e 64 65 64 0a 77 69  t is extended.wi
24820 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45  th optional ORDE
24830 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
24840 6c 61 75 73 65 73 29 5e 20 61 73 20 66 6f 6c 6c  lauses)^ as foll
24850 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ows:</p>..<tcl>B
24860 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64  ubbleDiagram upd
24870 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64  ate-stmt-limited
24880 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61  </tcl>..<p>^If a
24890 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
248a0 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63  nt has a LIMIT c
248b0 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d  lause, the maxim
248c0 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  um number of row
248d0 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 75  s that.will be u
248e0 70 64 61 74 65 64 20 69 73 20 66 6f 75 6e 64 20  pdated is found 
248f0 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
24900 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65  e accompanying e
24910 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61  xpression and ca
24920 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69  sting.it to an i
24930 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 41  nteger value. ^A
24940 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20   negative value 
24950 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
24960 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e 0a 0a 3c  s "no limit"...<
24970 70 3e 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20  p>^If the LIMIT 
24980 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
24990 61 74 65 73 20 74 6f 20 6e 6f 6e 2d 6e 65 67 61  ates to non-nega
249a0 74 69 76 65 20 76 61 6c 75 65 20 3c 69 3e 4e 3c  tive value <i>N<
249b0 2f 69 3e 20 61 6e 64 20 74 68 65 0a 55 50 44 41  /i> and the.UPDA
249c0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
249d0 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61   an ORDER BY cla
249e0 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f  use, then all ro
249f0 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65  ws that would be
24a00 20 75 70 64 61 74 65 64 20 69 6e 0a 74 68 65 20   updated in.the 
24a10 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
24a20 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
24a30 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67  sorted according
24a40 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59   to the ORDER BY
24a50 20 61 6e 64 20 74 68 65 0a 66 69 72 73 74 20 3c   and the.first <
24a60 69 3e 4e 3c 2f 69 3e 20 75 70 64 61 74 65 64 2e  i>N</i> updated.
24a70 20 5e 28 49 66 20 74 68 65 20 55 50 44 41 54 45   ^(If the UPDATE
24a80 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20   statement also 
24a90 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c  has an OFFSET cl
24aa0 61 75 73 65 2c 0a 74 68 65 6e 20 69 74 20 69 73  ause,.then it is
24ab0 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61 6c 75   similarly evalu
24ac0 61 74 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f  ated and cast to
24ad0 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
24ae0 65 2e 20 49 66 20 74 68 65 20 4f 46 46 53 45 54  e. If the OFFSET
24af0 0a 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c  .expression eval
24b00 75 61 74 65 73 20 74 6f 20 61 20 6e 6f 6e 2d 6e  uates to a non-n
24b10 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c 69  egative value <i
24b20 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e 20 74 68 65  >M</i>, then the
24b30 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 0a   first <i>M</i>.
24b40 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70 65 64  rows are skipped
24b50 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69   and the followi
24b60 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73  ng <i>N</i> rows
24b70 20 75 70 64 61 74 65 64 20 69 6e 73 74 65 61 64   updated instead
24b80 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  .)^..<p>^If the 
24b90 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
24ba0 20 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59   has no ORDER BY
24bb0 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c   clause, then al
24bc0 6c 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c  l rows that.woul
24bd0 64 20 62 65 20 75 70 64 61 74 65 64 20 69 6e 20  d be updated in 
24be0 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74  the absence of t
24bf0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
24c00 61 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e  are assembled in
24c10 20 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72   an.arbitrary or
24c20 64 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79  der before apply
24c30 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e  ing the LIMIT an
24c40 64 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73  d OFFSET clauses
24c50 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 77   to determine .w
24c60 68 69 63 68 20 61 72 65 20 61 63 74 75 61 6c 6c  hich are actuall
24c70 79 20 75 70 64 61 74 65 64 2e 0a 0a 3c 70 3e 5e  y updated...<p>^
24c80 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c  (The ORDER BY cl
24c90 61 75 73 65 20 6f 6e 20 61 6e 20 55 50 44 41 54  ause on an UPDAT
24ca0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  E statement is u
24cb0 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65  sed only to dete
24cc0 72 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77 73  rmine which.rows
24cd0 20 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65   fall within the
24ce0 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64 65   LIMIT. The orde
24cf0 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20  r in which rows 
24d00 61 72 65 20 6d 6f 64 69 66 69 65 64 20 69 73 20  are modified is 
24d10 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73  arbitrary.and is
24d20 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20   not influenced 
24d30 62 79 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  by the ORDER BY 
24d40 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e  clause.)^..<tcl>
24d50 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
24d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24d90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
24da0 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20 76  Section VACUUM v
24db0 61 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a 42 75  acuum VACUUM..Bu
24dc0 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75  bbleDiagram vacu
24dd0 75 6d 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  um-stmt 1.</tcl>
24de0 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55  ..<p>.  The VACU
24df0 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69  UM command rebui
24e00 6c 64 73 20 74 68 65 20 65 6e 74 69 72 65 20 64  lds the entire d
24e10 61 74 61 62 61 73 65 2e 20 54 68 65 72 65 20 61  atabase. There a
24e20 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65  re several .  re
24e30 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61  asons an applica
24e40 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68  tion might do th
24e50 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  is:..<ul>.  <li>
24e60 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c   <p> ^Unless SQL
24e70 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69  ite is running i
24e80 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46  n "auto_vacuum=F
24e90 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20  ULL" mode, when 
24ea0 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f  a large.     amo
24eb0 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20 64  unt of data is d
24ec0 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20  eleted from the 
24ed0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74  database file it
24ee0 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65   leaves behind e
24ef0 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c  mpty.     space,
24f00 20 6f 72 20 22 66 72 65 65 22 20 64 61 74 61 62   or "free" datab
24f10 61 73 65 20 70 61 67 65 73 2e 20 54 68 69 73 20  ase pages. This 
24f20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
24f30 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20  se file might.  
24f40 20 20 20 62 65 20 6c 61 72 67 65 72 20 74 68 61     be larger tha
24f50 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73  n strictly neces
24f60 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56  sary. ^Running V
24f70 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64  ACUUM to rebuild
24f80 20 74 68 65 20 0a 20 20 20 20 20 64 61 74 61 62   the .     datab
24f90 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69  ase reclaims thi
24fa0 73 20 73 70 61 63 65 20 61 6e 64 20 72 65 64 75  s space and redu
24fb0 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ces the size of 
24fc0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
24fd0 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  e...  <li> <p> ^
24fe0 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73  Frequent inserts
24ff0 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64  , updates, and d
25000 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65  eletes can cause
25010 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
25020 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d  le.     to becom
25030 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77  e fragmented - w
25040 68 65 72 65 20 64 61 74 61 20 66 6f 72 20 61 20  here data for a 
25050 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20  single table or 
25060 69 6e 64 65 78 20 69 73 20 73 63 61 74 74 65 72  index is scatter
25070 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20  ed .     around 
25080 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
25090 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  e. ^Running VACU
250a0 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  UM ensures that 
250b0 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20  each table and. 
250c0 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72      index is lar
250d0 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74  gely stored cont
250e0 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20  iguously within 
250f0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
25100 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20  e. ^In some.    
25110 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d   cases, VACUUM m
25120 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74  ay also reduce t
25130 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72  he number of par
25140 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
25150 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20  ges in.     the 
25160 64 61 74 61 62 61 73 65 2c 20 72 65 64 75 63 69  database, reduci
25170 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ng the size of t
25180 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
25190 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69   further...  <li
251a0 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c  > <p> ^Normally,
251b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70   the database [p
251c0 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68  age_size] and wh
251d0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
251e0 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73   database.     s
251f0 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61  upports [auto_va
25200 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f  cuum] must be co
25210 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20  nfigured before 
25220 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
25230 65 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c  e is.     actual
25240 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77  ly created. ^How
25250 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69  ever, when not i
25260 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
25270 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20  og] mode, the . 
25280 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20      [page_size] 
25290 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63  and/or [auto_vac
252a0 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20  uum] properties 
252b0 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  of an existing d
252c0 61 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20  atabase may be. 
252d0 20 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75      changed by u
252e0 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73  sing the [page_s
252f0 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f  ize pragma|page_
25300 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20  size]  and/or . 
25310 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d      [auto_vacuum
25320 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63  |pragma auto_vac
25330 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64  uum] pragmas and
25340 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c   then immediatel
25350 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20  y VACUUMing.    
25360 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e   the database. ^
25370 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61  When in [write-a
25380 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20  head log] mode, 
25390 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76  only the [auto_v
253a0 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70  acuum].     supp
253b0 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e  ort property can
253c0 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
253d0 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a  g VACUUM..</ul>.
253e0 0a 3c 70 3e 5e 28 56 41 43 55 55 4d 20 6f 6e 6c  .<p>^(VACUUM onl
253f0 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d  y works on the m
25400 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 74  ain database. It
25410 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
25420 20 74 6f 20 56 41 43 55 55 4d 20 61 6e 0a 61 74   to VACUUM an.at
25430 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
25440 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  file.)^..<p>^The
25450 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
25460 77 6f 72 6b 73 20 62 79 20 63 6f 70 79 69 6e 67  works by copying
25470 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
25480 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
25490 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 64  to.a temporary d
254a0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
254b0 20 74 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e   then overwritin
254c0 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  g the original w
254d0 69 74 68 20 74 68 65 20 0a 63 6f 6e 74 65 6e 74  ith the .content
254e0 73 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  s of the tempora
254f0 72 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e 20 6f  ry file. ^When o
25500 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f  verwriting the o
25510 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62  riginal, a rollb
25520 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b  ack.journal or [
25530 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
25540 20 57 41 4c 20 66 69 6c 65 20 69 73 20 75 73 65   WAL file is use
25550 64 20 6a 75 73 74 20 61 73 20 69 74 20 77 6f 75  d just as it wou
25560 6c 64 20 62 65 20 66 6f 72 20 61 6e 79 0a 6f 74  ld be for any.ot
25570 68 65 72 20 64 61 74 61 62 61 73 65 20 74 72 61  her database tra
25580 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69 73 20  nsaction. ^This 
25590 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20  means that when 
255a0 56 41 43 55 55 4d 69 6e 67 20 61 20 64 61 74 61  VACUUMing a data
255b0 62 61 73 65 2c 20 0a 61 73 20 6d 75 63 68 20 61  base, .as much a
255c0 73 20 74 77 69 63 65 20 74 68 65 20 73 69 7a 65  s twice the size
255d0 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
255e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
255f0 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 66 72  s required in fr
25600 65 65 0a 64 69 73 6b 20 73 70 61 63 65 2e 0a 0a  ee.disk space...
25610 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
25620 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e 67  ommand may chang
25630 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20 52  e the [ROWID | R
25640 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69 65  OWIDs] of entrie
25650 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73 20  s in any.tables 
25660 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76 65  that do not have
25670 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49 4e   an explicit [IN
25680 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
25690 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  Y]..</p>..<p>^A 
256a0 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69 6c  VACUUM will fail
256b0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
256c0 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
256d0 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
256e0 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20 61 63  e one or.more ac
256f0 74 69 76 65 20 53 51 4c 20 73 74 61 74 65 6d 65  tive SQL stateme
25700 6e 74 73 20 77 68 65 6e 20 69 74 20 69 73 20 72  nts when it is r
25710 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20  un...<p>^(As of 
25720 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
25730 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  .1, an alternati
25740 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20  ve to using the 
25750 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74  VACUUM command t
25760 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65 20  o.reclaim space 
25770 61 66 74 65 72 20 64 61 74 61 20 68 61 73 20 62  after data has b
25780 65 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20 61  een deleted is a
25790 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c  uto-vacuum mode,
257a0 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a 74   enabled using.t
257b0 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  he [auto_vacuum]
257c0 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e   pragma.)^ ^When
257d0 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69   [auto_vacuum] i
257e0 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20  s enabled for a 
257f0 64 61 74 61 62 61 73 65 0a 66 72 65 65 20 70 61  database.free pa
25800 67 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c 61  ges may be recla
25810 69 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65 74  imed after delet
25820 69 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69 6e  ing data, causin
25830 67 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73 68  g the file to sh
25840 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65  rink,.without re
25850 62 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e 74  building the ent
25860 69 72 65 20 64 61 74 61 62 61 73 65 20 75 73 69  ire database usi
25870 6e 67 20 56 41 43 55 55 4d 2e 20 20 48 6f 77 65  ng VACUUM.  Howe
25880 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f  ver, using.[auto
25890 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61  _vacuum] can lea
258a0 64 20 74 6f 20 65 78 74 72 61 20 64 61 74 61 62  d to extra datab
258b0 61 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e  ase file fragmen
258c0 74 61 74 69 6f 6e 2e 20 20 41 6e 64 20 5b 61 75  tation.  And [au
258d0 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20  to_vacuum].does 
258e0 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74  not compact part
258f0 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67  ially filled pag
25900 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  es of the databa
25910 73 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f 65  se as VACUUM doe
25920 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  s...</p>...<tcl>
25930 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
25940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
25980 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44  Section {INDEXED
25990 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b   BY} indexedby {
259a0 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f  {INDEXED BY} {NO
259b0 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74  T INDEXED}}..</t
259c0 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45  cl>.<p>^The INDE
259d0 58 45 44 20 42 59 20 70 68 72 61 73 65 20 69 73  XED BY phrase is
259e0 20 61 6e 20 53 51 4c 20 65 78 74 65 6e 73 69 6f   an SQL extensio
259f0 6e 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 69 6e 20  n found only in 
25a00 53 51 4c 69 74 65 20 77 68 69 63 68 20 63 61 6e  SQLite which can
25a10 0a 62 65 20 75 73 65 64 20 74 6f 20 76 65 72 69  .be used to veri
25a20 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 72 72  fy that the corr
25a30 65 63 74 20 69 6e 64 69 63 65 73 20 61 72 65 20  ect indices are 
25a40 62 65 69 6e 67 20 75 73 65 64 20 6f 6e 20 61 20  being used on a 
25a50 5b 44 45 4c 45 54 45 5d 2c 0a 5b 53 45 4c 45 43  [DELETE],.[SELEC
25a60 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
25a70 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
25a80 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
25a90 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73  e always follows
25aa0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74   the name of a t
25ab0 61 62 6c 65 20 74 68 61 74 20 53 51 4c 69 74 65  able that SQLite
25ac0 20 77 69 6c 6c 0a 62 65 20 72 65 61 64 69 6e 67   will.be reading
25ad0 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20 42  .  The INDEXED B
25ae0 59 20 70 68 72 61 73 65 20 63 61 6e 20 62 65 20  Y phrase can be 
25af0 73 65 65 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c  seen in the foll
25b00 6f 77 69 6e 67 20 73 79 6e 74 61 78 0a 64 69 61  owing syntax.dia
25b10 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  grams:</p>..<tcl
25b20 3e 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  >.BubbleDiagram 
25b30 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d  qualified-table-
25b40 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72  name.BubbleDiagr
25b50 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75 72 63 65  am single-source
25b60 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
25b70 20 22 49 4e 44 45 58 45 44 20 42 59 20 69 6e 64   "INDEXED BY ind
25b80 65 78 2d 6e 61 6d 65 22 20 63 6c 61 75 73 65 20  ex-name" clause 
25b90 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20 74  specifies that t
25ba0 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d  he named index.m
25bb0 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 20 6f  ust be used in o
25bc0 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20  rder to look up 
25bd0 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70 72  values on the pr
25be0 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e  eceding table..^
25bf0 49 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f  If index-name do
25c00 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72 20  es not exist or 
25c10 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 66  cannot be used f
25c20 6f 72 20 74 68 65 20 71 75 65 72 79 2c 20 74 68  or the query, th
25c30 65 6e 0a 74 68 65 20 70 72 65 70 61 72 61 74 69  en.the preparati
25c40 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  on of the SQL st
25c50 61 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e  atement fails..^
25c60 28 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58 45  (The "NOT INDEXE
25c70 44 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66  D" clause specif
25c80 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64 65  ies that no inde
25c90 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64 20  x shall be used 
25ca0 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20 74  when.accessing t
25cb0 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62  he preceding tab
25cc0 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d  le, including im
25cd0 70 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63 72  plied indices cr
25ce0 65 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20 61  eate by.UNIQUE a
25cf0 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  nd PRIMARY KEY c
25d00 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f 77  onstraints.  How
25d10 65 76 65 72 2c 20 74 68 65 20 49 4e 54 45 47 45  ever, the INTEGE
25d20 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 63 61  R PRIMARY KEY.ca
25d30 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20  n still be used 
25d40 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69  to look up entri
25d50 65 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f  es even when "NO
25d60 54 20 49 4e 44 45 58 45 44 22 20 69 73 20 73 70  T INDEXED" is sp
25d70 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a  ecified.)^</p>..
25d80 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61  <p>Some SQL data
25d90 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f  base engines pro
25da0 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72  vide non-standar
25db0 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69  d "hint" mechani
25dc0 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65  sms which.can be
25dd0 20 75 73 65 64 20 74 6f 20 67 69 76 65 20 74 68   used to give th
25de0 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
25df0 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68  r clues about wh
25e00 61 74 20 69 6e 64 69 63 65 73 20 69 74 20 73 68  at indices it sh
25e10 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70  ould.use for a p
25e20 61 72 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d  articular statem
25e30 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20  ent.  The INDEX 
25e40 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c  BY clause of SQL
25e50 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c  ite is .<em>not<
25e60 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d  /em> a hinting m
25e70 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20  echanism and it 
25e80 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73  should not be us
25e90 65 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68 65  ed as such..^The
25ea0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
25eb0 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65  se does not give
25ec0 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68   the optimizer h
25ed0 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63 68  ints about which
25ee0 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69   index.to use; i
25ef0 74 20 67 69 76 65 73 20 74 68 65 20 6f 70 74 69  t gives the opti
25f00 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d  mizer a requirem
25f10 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64  ent of which ind
25f20 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74  ex to use..^If t
25f30 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
25f40 65 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20  er is unable to 
25f50 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 73 70  use the index sp
25f60 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0a 49  ecified by the.I
25f70 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20  NDEX BY clause, 
25f80 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 77  then the query w
25f90 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
25fa0 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e   error.</p>..<p>
25fb0 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63  The INDEXED BY c
25fc0 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74  lause is <em>not
25fd0 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66  </em> intended f
25fe0 6f 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67  or use in tuning
25ff0 0a 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63 65  .the performance
26000 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68   of a query.  Th
26010 65 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20  e intent of the 
26020 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
26030 65 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20  e is.to raise a 
26040 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69  run-time error i
26050 66 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67  f a schema chang
26060 65 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70 70  e, such as dropp
26070 69 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20  ing or.creating 
26080 61 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73  an index, causes
26090 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20   the query plan 
260a0 66 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69  for a time-sensi
260b0 74 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68  tive query.to ch
260c0 61 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58  ange.  The INDEX
260d0 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ED BY clause is 
260e0 64 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70  designed to help
260f0 20 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61   detect.undesira
26100 62 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63  ble query plan c
26110 68 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65  hanges during re
26120 67 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67  gression testing
26130 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72 65  ..Developers are
26140 20 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f   admonished to o
26150 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49  mit all use of I
26160 4e 44 45 58 45 44 20 42 59 20 64 75 72 69 6e 67  NDEXED BY during
26170 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73  .application des
26180 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ign, implementat
26190 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e  ion, testing, an
261a0 64 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e  d tuning.  If.IN
261b0 44 45 58 45 44 20 42 59 20 69 73 20 74 6f 20 62  DEXED BY is to b
261c0 65 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69  e used at all, i
261d0 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65  t should be inse
261e0 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
261f0 0a 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65  .end of the deve
26200 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20  lopment process 
26210 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f  when "locking do
26220 77 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70  wn" a design.</p
26230 3e 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a  >..<h3>See Also:
26240 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 5b 73  </h3>..<p>The [s
26250 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74  qlite3_stmt_stat
26260 75 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65  us()] C/C++ inte
26270 72 66 61 63 65 20 74 6f 67 65 74 68 65 72 20 77  rface together w
26280 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
26290 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53  STMTSTATUS_FULLS
262a0 43 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53  CAN_STEP] and [S
262b0 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
262c0 5f 53 4f 52 54 5d 20 76 65 72 62 73 0a 63 61 6e  _SORT] verbs.can
262d0 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 74 65   be used to dete
262e0 63 74 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 77  ct at run-time w
262f0 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65  hen an SQL state
26300 6d 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69  ment is not.maki
26310 6e 67 20 65 66 66 65 63 74 69 76 65 20 75 73 65  ng effective use
26320 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 4d 61   of indices.  Ma
26330 6e 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  ny applications 
26340 6d 61 79 20 70 72 65 66 65 72 20 74 6f 0a 75 73  may prefer to.us
26350 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73  e the [sqlite3_s
26360 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 69 6e  tmt_status()] in
26370 74 65 72 66 61 63 65 20 74 6f 20 64 65 74 65 63  terface to detec
26380 74 20 69 6e 64 65 78 20 6d 69 73 75 73 65 0a 72  t index misuse.r
26390 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 49  ather than the I
263a0 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65  NDEXED BY phrase
263b0 20 64 65 73 63 72 69 62 65 64 20 68 65 72 65 2e   described here.
263c0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
263d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
263e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
263f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26410 23 23 23 23 23 23 23 23 23 0a 23 20 41 20 6c 69  #########.# A li
26420 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20  st of keywords. 
26430 20 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75   A asterisk occu
26440 72 73 20 61 66 74 65 72 20 74 68 65 20 6b 65 79  rs after the key
26450 77 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e  word if it is on
26460 0a 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20  .# the fallback 
26470 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77  list..#.set keyw
26480 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20  ord_list [lsort 
26490 7b 0a 20 20 20 41 42 4f 52 54 0a 20 20 20 41 43  {.   ABORT.   AC
264a0 54 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20 41  TION.   ADD.   A
264b0 46 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41  FTER.   ALL.   A
264c0 4c 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a  LTER.   ANALYZE.
264d0 20 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20     AND.   AS.   
264e0 41 53 43 0a 20 20 20 41 54 54 41 43 48 0a 20 20  ASC.   ATTACH.  
264f0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20   AUTOINCREMENT. 
26500 20 20 42 45 46 4f 52 45 0a 20 20 20 42 45 47 49    BEFORE.   BEGI
26510 4e 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20  N.   BETWEEN.   
26520 42 59 0a 20 20 20 43 41 53 43 41 44 45 0a 20 20  BY.   CASCADE.  
26530 20 43 41 53 45 0a 20 20 20 43 41 53 54 0a 20 20   CASE.   CAST.  
26540 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54   CHECK.   COLLAT
26550 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43  E.   COLUMN.   C
26560 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43  OMMIT.   CONFLIC
26570 54 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a  T.   CONSTRAINT.
26580 20 20 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f     CREATE.   CRO
26590 53 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41  SS.   CURRENT_DA
265a0 54 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  TE.   CURRENT_TI
265b0 4d 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  ME.   CURRENT_TI
265c0 4d 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41 42  MESTAMP.   DATAB
265d0 41 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a 20  ASE.   DEFAULT. 
265e0 20 20 44 45 46 45 52 52 45 44 0a 20 20 20 44 45    DEFERRED.   DE
265f0 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45  FERRABLE.   DELE
26600 54 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44 45  TE.   DESC.   DE
26610 54 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43 54  TACH.   DISTINCT
26620 0a 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a  .   DROP.   END.
26630 20 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45 0a     EACH.   ELSE.
26640 20 20 20 45 53 43 41 50 45 0a 20 20 20 45 58 43     ESCAPE.   EXC
26650 45 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45  EPT.   EXCLUSIVE
26660 0a 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58  .   EXISTS.   EX
26670 50 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20  PLAIN.   FAIL.  
26680 20 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a   FOR.   FOREIGN.
26690 20 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a     FROM.   FULL.
266a0 20 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50     GLOB.   GROUP
266b0 0a 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46  .   HAVING.   IF
266c0 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d  .   IGNORE.   IM
266d0 4d 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20 20  MEDIATE.   IN.  
266e0 20 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45   INDEX.   INDEXE
266f0 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20  D.   INITIALLY. 
26700 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52    INNER.   INSER
26710 54 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20 20  T.   INSTEAD.   
26720 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54  INTERSECT.   INT
26730 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c  O.   IS.   ISNUL
26740 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59  L.   JOIN.   KEY
26750 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45  .   LEFT.   LIKE
26760 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54  .   LIMIT.   MAT
26770 43 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20  CH.   NATURAL.  
26780 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f   NO.   NOT.   NO
26790 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20  TNULL.   NULL.  
267a0 20 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20   OF.   OFFSET.  
267b0 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44   ON.   OR.   ORD
267c0 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50  ER.   OUTER.   P
267d0 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20 20  LAN.   PRAGMA.  
267e0 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52   PRIMARY.   QUER
267f0 59 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52 45  Y.   RAISE.   RE
26800 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45 47 45  FERENCES.   REGE
26810 58 50 0a 20 20 20 52 45 49 4e 44 45 58 0a 20 20  XP.   REINDEX.  
26820 20 52 45 4c 45 41 53 45 0a 20 20 20 52 45 4e 41   RELEASE.   RENA
26830 4d 45 0a 20 20 20 52 45 50 4c 41 43 45 0a 20 20  ME.   REPLACE.  
26840 20 52 45 53 54 52 49 43 54 0a 20 20 20 52 49 47   RESTRICT.   RIG
26850 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20  HT.   ROLLBACK. 
26860 20 20 52 4f 57 0a 20 20 20 53 41 56 45 50 4f 49    ROW.   SAVEPOI
26870 4e 54 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20  NT.   SELECT.   
26880 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20 20 20  SET.   TABLE.   
26890 54 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41 52  TEMP.   TEMPORAR
268a0 59 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a  Y.   THEN.   TO.
268b0 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20     TRANSACTION. 
268c0 20 20 54 52 49 47 47 45 52 0a 20 20 20 55 4e 49    TRIGGER.   UNI
268d0 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20  ON.   UNIQUE.   
268e0 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a  UPDATE.   USING.
268f0 20 20 20 56 41 43 55 55 4d 0a 20 20 20 56 41 4c     VACUUM.   VAL
26900 55 45 53 0a 20 20 20 56 49 45 57 0a 20 20 20 56  UES.   VIEW.   V
26910 49 52 54 55 41 4c 0a 20 20 20 57 48 45 4e 0a 20  IRTUAL.   WHEN. 
26920 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70    WHERE.}]..hd_p
26930 75 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d  uts {<DIV class=
26940 22 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a  "pdf_section">}.
26950 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20  Section {SQLite 
26960 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72  Keywords} keywor
26970 64 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72  ds {{*SQL keywor
26980 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73  d} {SQL keywords
26990 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49  }}.hd_puts {</DI
269a0 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  V>}.</tcl>..<p>T
269b0 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
269c0 73 70 65 63 69 66 69 65 73 20 61 20 68 75 67 65  specifies a huge
269d0 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f   number of keywo
269e0 72 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f  rds which may no
269f0 74 0a 62 65 20 75 73 65 64 20 61 73 20 74 68 65  t.be used as the
26a00 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73   names of tables
26a10 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d  , indices, colum
26a20 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75  ns, databases, u
26a30 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63  ser-defined.func
26a40 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e  tions, collation
26a50 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  s, virtual table
26a60 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79   modules, or any
26a70 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a   other named obj
26a80 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66  ect..The list of
26a90 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20   keywords is so 
26aa0 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70 65  long that few pe
26ab0 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65  ople can remembe
26ac0 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20  r them all..For 
26ad0 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79  most SQL code, y
26ae0 6f 75 72 20 73 61 66 65 73 74 20 62 65 74 20 69  our safest bet i
26af0 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61  s to never use a
26b00 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75  ny English langu
26b10 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20  age.word as the 
26b20 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64  name of a user-d
26b30 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f  efined object.</
26b40 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61  p>..<p>If you wa
26b50 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77  nt to use a keyw
26b60 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79  ord as a name, y
26b70 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65  ou need to quote
26b80 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20   it.  There.are 
26b90 66 6f 75 72 20 77 61 79 73 20 6f 66 20 71 75 6f  four ways of quo
26ba0 74 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e  ting keywords in
26bb0 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70   SQLite:</p>..<p
26bc0 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  >.<blockquote>.<
26bd0 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20  table>.<tr>.<td 
26be0 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
26bf0 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74  'keyword'</b></t
26c00 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
26c10 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
26c20 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65  eyword in single
26c30 20 71 75 6f 74 65 73 20 69 73 20 61 20 73 74 72   quotes is a str
26c40 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64  ing literal.</td
26c50 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
26c60 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
26c70 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f  >"keyword"</b></
26c80 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74  td><td></td>..<t
26c90 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20  d>^A keyword in 
26ca0 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73  double-quotes is
26cb0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c   an identifier.<
26cc0 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09  /td></tr>..<tr>.
26cd0 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
26ce0 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64  ><b>&#91;keyword
26cf0 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  &#93;</b></td><t
26d00 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  d></td>..<td>^A 
26d10 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64  keyword enclosed
26d20 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b   in square brack
26d30 65 74 73 20 69 73 20 0a 20 20 20 20 20 20 20 20  ets is .        
26d40 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20  an identifier.  
26d50 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e  This is not stan
26d60 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20  dard SQL.  This 
26d70 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73  quoting mechanis
26d80 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65  m.        is use
26d90 64 20 62 79 20 4d 53 20 41 63 63 65 73 73 20 61  d by MS Access a
26da0 6e 64 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e  nd SQL Server an
26db0 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  d is included in
26dc0 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20   SQLite for.    
26dd0 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74      compatibilit
26de0 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  y.</td></tr>..<t
26df0 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
26e00 6f 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77  op"><b>&#96;keyw
26e10 6f 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64  ord&#96;</b></td
26e20 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  ><td></td>..<td>
26e30 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f  ^A keyword enclo
26e40 73 65 64 20 69 6e 20 67 72 61 76 65 20 61 63 63  sed in grave acc
26e50 65 6e 74 73 20 28 41 53 43 49 49 20 63 6f 64 65  ents (ASCII code
26e60 20 39 36 29 20 69 73 20 0a 20 20 20 20 20 20 20   96) is .       
26e70 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20   an identifier. 
26e80 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61   This is not sta
26e90 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73  ndard SQL.  This
26ea0 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69   quoting mechani
26eb0 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73  sm.        is us
26ec0 65 64 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20  ed by MySQL and 
26ed0 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53  is included in S
26ee0 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20  QLite for.      
26ef0 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e    compatibility.
26f00 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62  </td></tr>.</tab
26f10 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
26f20 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72  >.</p>..<p>For r
26f30 65 73 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63  esilience when c
26f40 6f 6e 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68  onfronted with h
26f50 69 73 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74  istorical SQL st
26f60 61 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65  atements, SQLite
26f70 0a 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20  .will sometimes 
26f80 62 65 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67  bend the quoting
26f90 20 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70   rules above:</p
26fa0 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e  >..<ul>.<li><p>^
26fb0 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20  If a keyword in 
26fc0 73 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28 65  single.quotes (e
26fd0 78 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20  x: <b>'key'</b> 
26fe0 6f 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e  or <b>'glob'</b>
26ff0 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63  ) is used in a c
27000 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 61 6e 20  ontext where.an 
27010 69 64 65 6e 74 69 66 69 65 72 20 69 73 20 61 6c  identifier is al
27020 6c 6f 77 65 64 20 62 75 74 20 77 68 65 72 65 20  lowed but where 
27030 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
27040 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c   is not allowed,
27050 20 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20   then.the token 
27060 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f  is understood to
27070 20 62 65 20 61 6e 20 69 64 65 6e 74 69 66 69 65   be an identifie
27080 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73  r instead of a s
27090 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c  tring literal..<
270a0 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
270b0 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69  >^If a keyword i
270c0 6e 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20  n double.quotes 
270d0 28 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62  (ex: <b>"key"</b
270e0 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f  > or <b>"glob"</
270f0 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61  b>) is used in a
27100 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 69   context where.i
27110 74 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f  t cannot be reso
27120 6c 76 65 64 20 74 6f 20 61 6e 20 69 64 65 6e 74  lved to an ident
27130 69 66 69 65 72 20 62 75 74 20 77 68 65 72 65 20  ifier but where 
27140 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
27150 0a 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65  .is allowed, the
27160 6e 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75  n the token is u
27170 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20  nderstood to be 
27180 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
27190 20 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20 69   instead.of an i
271a0 64 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f  dentifier.</p></
271b0 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72  li>.</ul>..<p>Pr
271c0 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 63 61  ogrammers are ca
271d0 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75  utioned not to u
271e0 73 65 20 74 68 65 20 74 77 6f 20 65 78 63 65 70  se the two excep
271f0 74 69 6f 6e 73 20 64 65 73 63 72 69 62 65 64 20  tions described 
27200 69 6e 0a 74 68 65 20 70 72 65 76 69 6f 75 73 20  in.the previous 
27210 62 75 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d 70  bullets.  We emp
27220 68 61 73 69 7a 65 20 74 68 61 74 20 74 68 65 79  hasize that they
27230 20 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74   exist only so t
27240 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d  hat old.and ill-
27250 66 6f 72 6d 65 64 20 53 51 4c 20 73 74 61 74 65  formed SQL state
27260 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20 63  ments will run c
27270 6f 72 72 65 63 74 6c 79 2e 20 20 46 75 74 75 72  orrectly.  Futur
27280 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51  e versions of.SQ
27290 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67  Lite might chang
272a0 65 20 74 6f 20 72 61 69 73 65 20 65 72 72 6f 72  e to raise error
272b0 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 63  s instead of acc
272c0 65 70 74 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f  epting the malfo
272d0 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74 73 20  rmed.statements 
272e0 63 6f 76 65 72 65 64 20 62 79 20 74 68 65 20 65  covered by the e
272f0 78 63 65 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e  xceptions above.
27300 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  </p>..<p>.SQLite
27310 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72   adds new keywor
27320 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20  ds from time to 
27330 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b  time when it tak
27340 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72  es on new featur
27350 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e  es..So to preven
27360 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d  t your code from
27370 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79   being broken by
27380 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d   future enhancem
27390 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64  ents, you should
273a0 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20  .normally quote 
273b0 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74  any identifier t
273c0 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73  hat is an Englis
273d0 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c  h language word,
273e0 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20   even if.you do 
273f0 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70  not have to..</p
27400 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20  >..<p>.The list 
27410 62 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20  below shows all 
27420 70 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f 72 64  possible keyword
27430 73 20 75 73 65 64 20 62 79 20 61 6e 79 20 62 75  s used by any bu
27440 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20 72 65  ild of.SQLite re
27450 67 61 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d  gardless of [com
27460 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
27470 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f  s].  .Most reaso
27480 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74  nable configurat
27490 69 6f 6e 73 20 75 73 65 20 6d 6f 73 74 20 6f 72  ions use most or
274a0 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b 65   all of these ke
274b0 79 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65  ywords,.but some
274c0 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 62 65   keywords may be
274d0 20 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 53 51   omitted when SQ
274e0 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75  L language featu
274f0 72 65 73 20 61 72 65 0a 64 69 73 61 62 6c 65 64  res are.disabled
27500 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73 73 20 6f  ..^(Regardless o
27510 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  f the compile-ti
27520 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
27530 2c 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72  , any identifier
27540 20 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e 0a   that is not on.
27550 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74  the following <t
27560 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65 6e  cl>hd_puts [llen
27570 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  gth $keyword_lis
27580 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e 74  t]</tcl> element
27590 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20 61 20 6b  .list is not a k
275a0 65 79 77 6f 72 64 20 74 6f 20 74 68 65 20 53 51  eyword to the SQ
275b0 4c 20 70 61 72 73 65 72 20 69 6e 20 53 51 4c 69  L parser in SQLi
275c0 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  te:.</p>..<block
275d0 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 77 69  quote>.<table wi
275e0 64 74 68 3d 22 31 30 30 25 22 3e 3c 74 72 3e 0a  dth="100%"><tr>.
275f0 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22  <td align="left"
27600 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77 69   valign="top" wi
27610 64 74 68 3d 22 32 30 25 22 3e 0a 3c 74 63 6c 3e  dth="20%">.<tcl>
27620 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20  .set n [llength 
27630 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73  $keyword_list].s
27640 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52  et nCol 5.set nR
27650 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e  ow [expr {($n+$n
27660 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73  Col-1)/$nCol}].s
27670 65 74 20 69 20 30 0a 66 6f 72 65 61 63 68 20 77  et i 0.foreach w
27680 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  ord $keyword_lis
27690 74 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e  t {.  if {$i==$n
276a0 52 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70 75  Row} {.    hd_pu
276b0 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c  ts "</td><td val
276c0 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67  ign=\"top\" alig
276d0 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68  n=\"left\" width
276e0 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73  =\"20%\">".    s
276f0 65 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20  et i 1.  } else 
27700 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d  {.    incr i.  }
27710 0a 20 20 68 64 5f 70 75 74 73 20 22 24 77 6f 72  .  hd_puts "$wor
27720 64 3c 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c  d<br>\n".}.</tcl
27730 3e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61  >.</td></tr></ta
27740 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ble></blockquote
27750 3e 29 5e 0a                                      >)^.