Documentation Source Text

Hex Artifact Content
Login

Artifact 7a3e5f1454274d848ae8227ab8ee30edc2ff2e89:


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 52 65 63 75 72 73 69  ALTER}}..Recursi
0e50: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
0e60: 61 6c 74 65 72 2d 74 61 62 6c 65 2d 73 74 6d 74  alter-table-stmt
0e70: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 53 51 4c 69  .</tcl>..<p>SQLi
0e80: 74 65 20 73 75 70 70 6f 72 74 73 20 61 20 6c 69  te supports a li
0e90: 6d 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20  mited subset of 
0ea0: 41 4c 54 45 52 20 54 41 42 4c 45 2e 0a 54 68 65  ALTER TABLE..The
0eb0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
0ec0: 6d 61 6e 64 20 69 6e 20 53 51 4c 69 74 65 20 61  mand in SQLite a
0ed0: 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74  llows the user t
0ee0: 6f 20 72 65 6e 61 6d 65 20 61 20 74 61 62 6c 65  o rename a table
0ef0: 0a 6f 72 20 74 6f 20 61 64 64 20 61 20 6e 65 77  .or to add a new
0f00: 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78   column to an ex
0f10: 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 3c 2f  isting table..</
0f20: 70 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45  p>..<p> ^(The RE
0f30: 4e 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 69  NAME TO syntax i
0f40: 73 20 75 73 65 64 20 74 6f 20 72 65 6e 61 6d 65  s used to rename
0f50: 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74   the table ident
0f60: 69 66 69 65 64 20 62 79 20 0a 3c 69 3e 26 23 39  ified by .<i>&#9
0f70: 31 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e  1;database-name.
0f80: 26 23 39 33 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c  &#93;table-name<
0f90: 2f 69 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74 61  /i> to <i>new-ta
0fa0: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a  ble-name</i>.)^.
0fb0: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61  This command .ca
0fc0: 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20  nnot be used to 
0fd0: 6d 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65 74  move a table bet
0fe0: 77 65 65 6e 20 61 74 74 61 63 68 65 64 20 64 61  ween attached da
0ff0: 74 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f  tabases, only to
1000: 20 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65   rename .a table
1010: 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
1020: 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a   database.</p>..
1030: 3c 70 3e 20 5e 49 66 20 74 68 65 20 74 61 62 6c  <p> ^If the tabl
1040: 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20  e being renamed 
1050: 68 61 73 20 74 72 69 67 67 65 72 73 20 6f 72 20  has triggers or 
1060: 69 6e 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68  indices, then th
1070: 65 73 65 20 72 65 6d 61 69 6e 0a 61 74 74 61 63  ese remain.attac
1080: 68 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65  hed to the table
1090: 20 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65   after it has be
10a0: 65 6e 20 72 65 6e 61 6d 65 64 2e 20 20 5e 48 6f  en renamed.  ^Ho
10b0: 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20  wever, if there 
10c0: 61 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66  are.any view def
10d0: 69 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61  initions, or sta
10e0: 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64  tements executed
10f0: 20 62 79 20 74 72 69 67 67 65 72 73 20 74 68 61   by triggers tha
1100: 74 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74  t refer to.the t
1110: 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d  able being renam
1120: 65 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f  ed, these are no
1130: 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  t automatically 
1140: 6d 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65 20  modified to use 
1150: 74 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61  the new.table na
1160: 6d 65 2e 20 49 66 20 74 68 69 73 20 69 73 20 72  me. If this is r
1170: 65 71 75 69 72 65 64 2c 20 74 68 65 20 74 72 69  equired, the tri
1180: 67 67 65 72 73 20 6f 72 20 76 69 65 77 20 64 65  ggers or view de
1190: 66 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62  finitions must b
11a0: 65 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65  e.dropped and re
11b0: 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74  created to use t
11c0: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d  he new table nam
11d0: 65 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a  e by hand..</p>.
11e0: 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e  .<p>^If [foreign
11f0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
1200: 5d 20 61 72 65 20 0a 5b 66 6f 72 65 69 67 6e 5f  ] are .[foreign_
1210: 6b 65 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e  keys pragma | en
1220: 61 62 6c 65 64 5d 20 77 68 65 6e 20 61 20 74 61  abled] when a ta
1230: 62 6c 65 20 69 73 20 72 65 6e 61 6d 65 64 2c 20  ble is renamed, 
1240: 74 68 65 6e 20 61 6e 79 0a 5b 66 6f 72 65 69 67  then any.[foreig
1250: 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52  n-key-clause | R
1260: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
1270: 73 5d 20 69 6e 20 61 6e 79 20 74 61 62 6c 65 20  s] in any table 
1280: 28 65 69 74 68 65 72 20 74 68 65 0a 74 61 62 6c  (either the.tabl
1290: 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20  e being renamed 
12a0: 6f 72 20 73 6f 6d 65 20 6f 74 68 65 72 20 74 61  or some other ta
12b0: 62 6c 65 29 0a 74 68 61 74 20 72 65 66 65 72 20  ble).that refer 
12c0: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
12d0: 6e 67 20 72 65 6e 61 6d 65 64 20 61 72 65 20 6d  ng renamed are m
12e0: 6f 64 69 66 69 65 64 20 74 6f 20 72 65 66 65 72  odified to refer
12f0: 20 0a 74 6f 20 74 68 65 20 72 65 6e 61 6d 65 64   .to the renamed
1300: 20 74 61 62 6c 65 20 62 79 20 69 74 73 20 6e 65   table by its ne
1310: 77 20 6e 61 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68  w name...<p> ^Th
1320: 65 20 41 44 44 20 43 4f 4c 55 4d 4e 20 73 79 6e  e ADD COLUMN syn
1330: 74 61 78 0a 69 73 20 75 73 65 64 20 74 6f 20 61  tax.is used to a
1340: 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
1350: 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74  to an existing t
1360: 61 62 6c 65 2e 0a 5e 54 68 65 20 6e 65 77 20 63  able..^The new c
1370: 6f 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79 73 20  olumn is always 
1380: 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20  appended to the 
1390: 65 6e 64 20 6f 66 20 74 68 65 20 6c 69 73 74 20  end of the list 
13a0: 6f 66 20 65 78 69 73 74 69 6e 67 20 63 6f 6c 75  of existing colu
13b0: 6d 6e 73 2e 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e  mns..The [column
13c0: 2d 64 65 66 5d 20 72 75 6c 65 20 64 65 66 69 6e  -def] rule defin
13d0: 65 73 20 74 68 65 20 63 68 61 72 61 63 74 65 72  es the character
13e0: 69 73 74 69 63 73 20 6f 66 20 74 68 65 20 6e 65  istics of the ne
13f0: 77 20 63 6f 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20  w column..^(The 
1400: 6e 65 77 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 74  new column may t
1410: 61 6b 65 20 61 6e 79 20 6f 66 20 74 68 65 20 66  ake any of the f
1420: 6f 72 6d 73 20 70 65 72 6d 69 73 73 69 62 6c 65  orms permissible
1430: 20 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54 41   in a [CREATE TA
1440: 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 2c 20  BLE].statement, 
1450: 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69  with the followi
1460: 6e 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 3a  ng restrictions:
1470: 29 5e 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65  )^.<ul>.<li>^The
1480: 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20   column may not 
1490: 68 61 76 65 20 61 20 50 52 49 4d 41 52 59 20 4b  have a PRIMARY K
14a0: 45 59 20 6f 72 20 55 4e 49 51 55 45 20 63 6f 6e  EY or UNIQUE con
14b0: 73 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c  straint.</li>.<l
14c0: 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61  i>^The column ma
14d0: 79 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65 66  y not have a def
14e0: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43 55  ault value of CU
14f0: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
1500: 45 4e 54 5f 44 41 54 45 2c 20 0a 20 20 20 20 43  ENT_DATE, .    C
1510: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
1520: 2c 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69  , or an expressi
1530: 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65  on in parenthese
1540: 73 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20  s.</li>.<li>^If 
1550: 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
1560: 72 61 69 6e 74 20 69 73 20 73 70 65 63 69 66 69  raint is specifi
1570: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  ed, then the col
1580: 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 0a  umn must have a.
1590: 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75      default valu
15a0: 65 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55 4c  e other than NUL
15b0: 4c 2e 0a 3c 6c 69 3e 5e 49 66 20 5b 66 6f 72 65  L..<li>^If [fore
15c0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
15d0: 6e 74 73 5d 20 61 72 65 20 5b 66 6f 72 65 69 67  nts] are [foreig
15e0: 6e 5f 6b 65 79 73 20 70 72 61 67 6d 61 20 7c 20  n_keys pragma | 
15f0: 65 6e 61 62 6c 65 64 5d 20 61 6e 64 0a 20 20 20  enabled] and.   
1600: 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61   a column with a
1610: 20 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c   [foreign-key-cl
1620: 61 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45  ause | REFERENCE
1630: 53 20 63 6c 61 75 73 65 5d 0a 20 20 20 20 69 73  S clause].    is
1640: 20 61 64 64 65 64 2c 20 74 68 65 20 63 6f 6c 75   added, the colu
1650: 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 20 64  mn must have a d
1660: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
1670: 4e 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  NULL..</ul>..<p>
1680: 5e 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20  ^Note also that 
1690: 77 68 65 6e 20 61 64 64 69 6e 67 20 61 20 5b 43  when adding a [C
16a0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 5d  HECK constraint]
16b0: 2c 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e 73  , the CHECK cons
16c0: 74 72 61 69 6e 74 0a 69 73 20 6e 6f 74 20 74 65  traint.is not te
16d0: 73 74 65 64 20 61 67 61 69 6e 73 74 20 70 72 65  sted against pre
16e0: 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20 6f 66  existing rows of
16f0: 20 74 68 65 20 74 61 62 6c 65 2e 0a 5e 54 68 69   the table..^Thi
1700: 73 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20  s can result in 
1710: 61 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  a table that con
1720: 74 61 69 6e 73 20 64 61 74 61 20 74 68 61 74 0a  tains data that.
1730: 69 73 20 69 6e 20 76 69 6f 6c 61 74 69 6f 6e 20  is in violation 
1740: 6f 66 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e  of the CHECK con
1750: 73 74 72 61 69 6e 74 2e 20 20 46 75 74 75 72 65  straint.  Future
1760: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
1770: 69 74 65 20 6d 69 67 68 74 0a 63 68 61 6e 67 65  ite might.change
1780: 20 74 6f 20 76 61 6c 69 64 61 74 65 20 43 48 45   to validate CHE
1790: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  CK constraints a
17a0: 73 20 74 68 65 79 20 61 72 65 20 61 64 64 65 64  s they are added
17b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 65  .</p>..<p> The e
17c0: 78 65 63 75 74 69 6f 6e 20 74 69 6d 65 20 6f 66  xecution time of
17d0: 20 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45   the ALTER TABLE
17e0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 64 65   command is inde
17f0: 70 65 6e 64 65 6e 74 20 6f 66 0a 74 68 65 20 61  pendent of.the a
1800: 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69 6e  mount of data in
1810: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65   the table.  The
1820: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
1830: 6d 61 6e 64 20 72 75 6e 73 20 61 73 20 71 75 69  mand runs as qui
1840: 63 6b 6c 79 0a 6f 6e 20 61 20 74 61 62 6c 65 20  ckly.on a table 
1850: 77 69 74 68 20 31 30 20 6d 69 6c 6c 69 6f 6e 20  with 10 million 
1860: 72 6f 77 73 20 61 73 20 69 74 20 64 6f 65 73 20  rows as it does 
1870: 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  on a table with 
1880: 31 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  1 row..</p>..<p>
1890: 41 66 74 65 72 20 41 44 44 20 43 4f 4c 55 4d 4e  After ADD COLUMN
18a0: 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 6f 6e   has been run on
18b0: 20 61 20 64 61 74 61 62 61 73 65 2c 20 74 68 61   a database, tha
18c0: 74 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20  t database will 
18d0: 6e 6f 74 0a 62 65 20 72 65 61 64 61 62 6c 65 20  not.be readable 
18e0: 62 79 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  by SQLite versio
18f0: 6e 20 33 2e 31 2e 33 20 61 6e 64 20 65 61 72 6c  n 3.1.3 and earl
1900: 69 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ier.</p>..<tcl>.
1910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
1960: 65 63 74 69 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d  ection {ANALYZE}
1970: 20 61 6e 61 6c 79 7a 65 20 41 4e 41 4c 59 5a 45   analyze ANALYZE
1980: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
1990: 65 44 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a 65  eDiagram analyze
19a0: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
19b0: 3e 20 5e 54 68 65 20 41 4e 41 4c 59 5a 45 20 63  > ^The ANALYZE c
19c0: 6f 6d 6d 61 6e 64 20 67 61 74 68 65 72 73 20 73  ommand gathers s
19d0: 74 61 74 69 73 74 69 63 73 20 61 62 6f 75 74 20  tatistics about 
19e0: 74 61 62 6c 65 73 20 61 6e 64 0a 69 6e 64 69 63  tables and.indic
19f0: 65 73 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68  es and stores th
1a00: 65 20 63 6f 6c 6c 65 63 74 65 64 20 69 6e 66 6f  e collected info
1a10: 72 6d 61 74 69 6f 6e 0a 69 6e 20 5b 69 6e 74 65  rmation.in [inte
1a20: 72 6e 61 6c 20 74 61 62 6c 65 73 5d 20 6f 66 20  rnal tables] of 
1a30: 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65  the database whe
1a40: 72 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  re the query opt
1a50: 69 6d 69 7a 65 72 20 63 61 6e 0a 61 63 63 65 73  imizer can.acces
1a60: 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  s the informatio
1a70: 6e 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20  n and use it to 
1a80: 68 65 6c 70 20 6d 61 6b 65 20 62 65 74 74 65 72  help make better
1a90: 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20   query planning 
1aa0: 63 68 6f 69 63 65 73 2e 0a 5e 49 66 20 6e 6f 20  choices..^If no 
1ab0: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67 69  arguments are gi
1ac0: 76 65 6e 2c 20 61 6c 6c 20 61 74 74 61 63 68 65  ven, all attache
1ad0: 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65 0a  d databases are.
1ae0: 61 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 61  analyzed.  ^If a
1af0: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69   database name i
1b00: 73 20 67 69 76 65 6e 20 61 73 20 74 68 65 20 61  s given as the a
1b10: 72 67 75 6d 65 6e 74 2c 20 74 68 65 6e 20 61 6c  rgument, then al
1b20: 6c 20 74 61 62 6c 65 73 0a 61 6e 64 20 69 6e 64  l tables.and ind
1b30: 69 63 65 73 20 69 6e 20 74 68 61 74 20 6f 6e 65  ices in that one
1b40: 20 64 61 74 61 62 61 73 65 20 61 72 65 20 61 6e   database are an
1b50: 61 6c 79 7a 65 64 2e 20 20 0a 5e 49 66 20 74 68  alyzed.  .^If th
1b60: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
1b70: 74 61 62 6c 65 20 6e 61 6d 65 2c 20 74 68 65 6e  table name, then
1b80: 20 6f 6e 6c 79 20 74 68 61 74 20 74 61 62 6c 65   only that table
1b90: 20 61 6e 64 20 74 68 65 0a 69 6e 64 69 63 65 73   and the.indices
1ba0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1bb0: 20 74 68 61 74 20 74 61 62 6c 65 20 61 72 65 20   that table are 
1bc0: 61 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 74  analyzed.  ^If t
1bd0: 68 65 20 61 72 67 75 6d 65 6e 74 0a 69 73 20 61  he argument.is a
1be0: 6e 20 69 6e 64 65 78 20 6e 61 6d 65 2c 20 74 68  n index name, th
1bf0: 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20 6f 6e 65  en only that one
1c00: 20 69 6e 64 65 78 20 69 73 20 61 6e 61 6c 79 7a   index is analyz
1c10: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68  ed.</p>..<p> ^Th
1c20: 65 20 64 65 66 61 75 6c 74 20 69 6d 70 6c 65 6d  e default implem
1c30: 65 6e 74 61 74 69 6f 6e 20 73 74 6f 72 65 73 20  entation stores 
1c40: 61 6c 6c 20 73 74 61 74 69 73 74 69 63 73 20 69  all statistics i
1c50: 6e 20 61 20 73 69 6e 67 6c 65 0a 74 61 62 6c 65  n a single.table
1c60: 20 6e 61 6d 65 64 20 22 5b 73 71 6c 69 74 65 5f   named "[sqlite_
1c70: 73 74 61 74 31 5d 22 2e 20 20 5e 49 66 20 53 51  stat1]".  ^If SQ
1c80: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
1c90: 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54   with the.[SQLIT
1ca0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20  E_ENABLE_STAT3] 
1cb0: 6f 70 74 69 6f 6e 20 61 6e 64 20 77 69 74 68 6f  option and witho
1cc0: 75 74 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45  ut the [SQLITE_E
1cd0: 4e 41 42 4c 45 5f 53 54 41 54 34 5d 0a 6f 70 74  NABLE_STAT4].opt
1ce0: 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74 69  ion, then additi
1cf0: 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20 64  onal histogram d
1d00: 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65 64  ata is.collected
1d10: 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20 5b   and stored in [
1d20: 73 71 6c 69 74 65 5f 73 74 61 74 33 5d 2e 0a 20  sqlite_stat3].. 
1d30: 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f  ^If SQLite is co
1d40: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a  mpiled with the.
1d50: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
1d60: 54 41 54 34 5d 20 6f 70 74 69 6f 6e 2c 20 74 68  TAT4] option, th
1d70: 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69  en additional hi
1d80: 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a  stogram data is.
1d90: 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74  collected and st
1da0: 6f 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f  ored in [sqlite_
1db0: 73 74 61 74 34 5d 2e 0a 4f 6c 64 65 72 20 76 65  stat4]..Older ve
1dc0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
1dd0: 20 77 6f 75 6c 64 20 6d 61 6b 65 20 75 73 65 20   would make use 
1de0: 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 73  of the [sqlite_s
1df0: 74 61 74 32 5d 20 74 61 62 6c 65 0a 77 68 65 6e  tat2] table.when
1e00: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 5b   compiled with [
1e10: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
1e20: 41 54 32 5d 20 62 75 74 20 61 6c 6c 20 72 65 63  AT2] but all rec
1e30: 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ent versions of.
1e40: 53 51 4c 69 74 65 20 69 67 6e 6f 72 65 20 74 68  SQLite ignore th
1e50: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
1e60: 61 62 6c 65 2e 0a 46 75 74 75 72 65 20 65 6e 68  able..Future enh
1e70: 61 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72  ancements may cr
1e80: 65 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20  eate.additional 
1e90: 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73  [internal tables
1ea0: 5d 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  ] with the same 
1eb0: 6e 61 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63  name pattern exc
1ec0: 65 70 74 20 77 69 74 68 0a 66 69 6e 61 6c 20 64  ept with.final d
1ed0: 69 67 69 74 20 6c 61 72 67 65 72 20 74 68 61 6e  igit larger than
1ee0: 20 22 34 22 2e 0a 41 6c 6c 20 6f 66 20 74 68 65   "4"..All of the
1ef0: 73 65 20 74 61 62 6c 65 73 20 61 72 65 20 63 6f  se tables are co
1f00: 6c 6c 65 63 74 69 76 65 6c 79 20 72 65 66 65 72  llectively refer
1f10: 72 65 64 20 74 6f 20 61 73 20 22 73 74 61 74 69  red to as "stati
1f20: 73 74 69 63 73 20 74 61 62 6c 65 73 22 2e 0a 3c  stics tables"..<
1f30: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 63 6f  /p>..<p> ^The co
1f40: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61  ntent of the sta
1f50: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 63  tistics tables c
1f60: 61 6e 20 62 65 20 71 75 65 72 69 65 64 20 75 73  an be queried us
1f70: 69 6e 67 20 5b 53 45 4c 45 43 54 5d 0a 61 6e 64  ing [SELECT].and
1f80: 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64 20   can be changed 
1f90: 75 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54  using the [DELET
1fa0: 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 61 6e  E], [INSERT], an
1fb0: 64 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d 61  d [UPDATE] comma
1fc0: 6e 64 73 2e 0a 5e 28 54 68 65 20 5b 44 52 4f 50  nds..^(The [DROP
1fd0: 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20   TABLE] command 
1fe0: 77 6f 72 6b 73 20 6f 6e 20 73 74 61 74 69 73 74  works on statist
1ff0: 69 63 73 20 74 61 62 6c 65 73 0a 61 73 20 6f 66  ics tables.as of
2000: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
2010: 33 2e 37 2e 39 2e 29 5e 0a 5e 54 68 65 20 5b 41  3.7.9.)^.^The [A
2020: 4c 54 45 52 20 54 41 42 4c 45 5d 20 63 6f 6d 6d  LTER TABLE] comm
2030: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72  and does not wor
2040: 6b 20 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20  k on statistics 
2050: 74 61 62 6c 65 73 2e 0a 41 70 70 72 6f 70 72 69  tables..Appropri
2060: 61 74 65 20 63 61 72 65 20 73 68 6f 75 6c 64 20  ate care should 
2070: 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 68 61  be used when cha
2080: 6e 67 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nging the conten
2090: 74 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74  t of the statist
20a0: 69 63 73 0a 74 61 62 6c 65 73 20 61 73 20 69 6e  ics.tables as in
20b0: 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 63 61  valid content ca
20c0: 6e 20 63 61 75 73 65 20 53 51 4c 69 74 65 20 74  n cause SQLite t
20d0: 6f 20 73 65 6c 65 63 74 20 69 6e 65 66 66 69 63  o select ineffic
20e0: 69 65 6e 74 0a 71 75 65 72 79 20 70 6c 61 6e 73  ient.query plans
20f0: 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65  .  Generally spe
2100: 61 6b 69 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c  aking, one shoul
2110: 64 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65  d not modify the
2120: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20   content of.the 
2130: 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65  statistics table
2140: 73 20 62 79 20 61 6e 79 20 6d 65 63 68 61 6e 69  s by any mechani
2150: 73 6d 20 6f 74 68 65 72 20 74 68 61 6e 20 69 6e  sm other than in
2160: 76 6f 6b 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59  voking the.ANALY
2170: 5a 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 53 65  ZE command.  .Se
2180: 65 20 22 5b 4d 61 6e 75 61 6c 20 43 6f 6e 74 72  e "[Manual Contr
2190: 6f 6c 20 4f 66 20 51 75 65 72 79 20 50 6c 61 6e  ol Of Query Plan
21a0: 73 20 55 73 69 6e 67 20 53 51 4c 49 54 45 5f 53  s Using SQLITE_S
21b0: 54 41 54 20 54 61 62 6c 65 73 5d 22 20 66 6f 72  TAT Tables]" for
21c0: 0a 66 75 72 74 68 65 72 20 69 6e 66 6f 72 6d 61  .further informa
21d0: 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  tion.</p>..<p> ^
21e0: 53 74 61 74 69 73 74 69 63 73 20 67 61 74 68 65  Statistics gathe
21f0: 72 65 64 20 62 79 20 41 4e 41 4c 59 5a 45 20 61  red by ANALYZE a
2200: 72 65 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63  re not automatic
2210: 61 6c 6c 79 20 75 70 64 61 74 65 64 20 61 73 0a  ally updated as.
2220: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
2230: 68 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  he database chan
2240: 67 65 73 2e 20 20 49 66 20 74 68 65 20 63 6f 6e  ges.  If the con
2250: 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61  tent of the data
2260: 62 61 73 65 0a 63 68 61 6e 67 65 73 20 73 69 67  base.changes sig
2270: 6e 69 66 69 63 61 6e 74 6c 79 2c 20 6f 72 20 69  nificantly, or i
2280: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  f the database s
2290: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
22a0: 68 65 6e 20 6f 6e 65 20 73 68 6f 75 6c 64 0a 63  hen one should.c
22b0: 6f 6e 73 69 64 65 72 20 72 65 72 75 6e 6e 69 6e  onsider rerunnin
22c0: 67 20 74 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f  g the ANALYZE co
22d0: 6d 6d 61 6e 64 20 69 6e 20 6f 72 64 65 72 20 74  mmand in order t
22e0: 6f 20 75 70 64 61 74 65 20 74 68 65 20 73 74 61  o update the sta
22f0: 74 69 73 74 69 63 73 2e 3c 2f 70 3e 0a 0a 3c 70  tistics.</p>..<p
2300: 3e 20 54 68 65 20 71 75 65 72 79 20 70 6c 61 6e  > The query plan
2310: 6e 65 72 20 6c 6f 61 64 73 20 74 68 65 20 63 6f  ner loads the co
2320: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61  ntent of the sta
2330: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 0a 69  tistics tables.i
2340: 6e 74 6f 20 6d 65 6d 6f 72 79 20 77 68 65 6e 20  nto memory when 
2350: 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 72 65  the schema is re
2360: 61 64 2e 20 20 5e 48 65 6e 63 65 2c 20 77 68 65  ad.  ^Hence, whe
2370: 6e 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  n an application
2380: 0a 63 68 61 6e 67 65 73 20 74 68 65 20 73 74 61  .changes the sta
2390: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 64  tistics tables d
23a0: 69 72 65 63 74 6c 79 2c 20 53 51 4c 69 74 65 20  irectly, SQLite 
23b0: 77 69 6c 6c 20 6e 6f 74 20 69 6d 6d 65 64 69 61  will not immedia
23c0: 74 65 6c 79 0a 6e 6f 74 69 63 65 20 74 68 65 20  tely.notice the 
23d0: 63 68 61 6e 67 65 73 2e 20 5e 41 6e 20 61 70 70  changes. ^An app
23e0: 6c 69 63 61 74 69 6f 6e 0a 63 61 6e 20 66 6f 72  lication.can for
23f0: 63 65 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  ce the query pla
2400: 6e 6e 65 72 20 74 6f 20 72 65 72 65 61 64 20 74  nner to reread t
2410: 68 65 20 73 74 61 74 69 73 74 69 63 73 20 74 61  he statistics ta
2420: 62 6c 65 73 20 62 79 20 72 75 6e 6e 69 6e 67 0a  bles by running.
2430: 3c 62 3e 41 4e 41 4c 59 5a 45 20 73 71 6c 69 74  <b>ANALYZE sqlit
2440: 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 2e 20 3c 2f  e_master</b>. </
2450: 70 3e 0a 0a 3c 70 3e 20 0a 0a 3c 74 63 6c 3e 0a  p>..<p> ..<tcl>.
2460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
24b0: 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44  ection {ATTACH D
24c0: 41 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20  ATABASE} attach 
24d0: 2a 41 54 54 41 43 48 0a 0a 52 65 63 75 72 73 69  *ATTACH..Recursi
24e0: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
24f0: 61 74 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63  attach-stmt.</tc
2500: 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54 54  l>..<p> ^The ATT
2510: 41 43 48 20 44 41 54 41 42 41 53 45 20 73 74 61  ACH DATABASE sta
2520: 74 65 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f 74  tement adds anot
2530: 68 65 72 20 64 61 74 61 62 61 73 65 20 0a 66 69  her database .fi
2540: 6c 65 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  le to the curren
2550: 74 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  t [database conn
2560: 65 63 74 69 6f 6e 5d 2e 20 0a 5e 54 68 65 20 66  ection]. .^The f
2570: 69 6c 65 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ilename for the 
2580: 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 61  database to be a
2590: 74 74 61 63 68 65 64 20 69 73 20 74 68 65 20 76  ttached is the v
25a0: 61 6c 75 65 20 6f 66 0a 74 68 65 20 65 78 70 72  alue of.the expr
25b0: 65 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75  ession that occu
25c0: 72 73 20 62 65 66 6f 72 65 20 74 68 65 20 41 53  rs before the AS
25d0: 20 6b 65 79 77 6f 72 64 2e 0a 5e 54 68 65 20 66   keyword..^The f
25e0: 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  ilename of the d
25f0: 61 74 61 62 61 73 65 20 66 6f 6c 6c 6f 77 73 20  atabase follows 
2600: 74 68 65 20 73 61 6d 65 20 73 65 6d 61 6e 74 69  the same semanti
2610: 63 73 20 61 73 20 74 68 65 0a 66 69 6c 65 6e 61  cs as the.filena
2620: 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 5b  me argument to [
2630: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 5d 20  sqlite3_open()] 
2640: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65  and [sqlite3_ope
2650: 6e 5f 76 32 28 29 5d 3b 20 74 68 65 0a 73 70 65  n_v2()]; the.spe
2660: 63 69 61 6c 20 6e 61 6d 65 20 22 5b 3a 6d 65 6d  cial name "[:mem
2670: 6f 72 79 3a 5d 22 20 72 65 73 75 6c 74 73 20 69  ory:]" results i
2680: 6e 20 61 6e 20 5b 69 6e 2d 6d 65 6d 6f 72 79 20  n an [in-memory 
2690: 64 61 74 61 62 61 73 65 5d 20 61 6e 64 20 61 6e  database] and an
26a0: 0a 65 6d 70 74 79 20 73 74 72 69 6e 67 20 72 65  .empty string re
26b0: 73 75 6c 74 73 20 69 6e 20 61 20 6e 65 77 20 74  sults in a new t
26c0: 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73  emporary databas
26d0: 65 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  e..^The filename
26e0: 20 61 72 67 75 6d 65 6e 74 20 63 61 6e 20 62 65   argument can be
26f0: 20 61 20 5b 55 52 49 20 66 69 6c 65 6e 61 6d 65   a [URI filename
2700: 5d 20 69 66 20 55 52 49 20 66 69 6c 65 6e 61 6d  ] if URI filenam
2710: 65 20 70 72 6f 63 65 73 73 69 6e 67 0a 69 73 20  e processing.is 
2720: 65 6e 61 62 6c 65 20 6f 6e 20 74 68 65 20 64 61  enable on the da
2730: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
2740: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  n.  The default 
2750: 62 65 68 61 76 69 6f 72 20 69 73 20 66 6f 72 0a  behavior is for.
2760: 55 52 49 20 66 69 6c 65 6e 61 6d 65 73 20 74 6f  URI filenames to
2770: 20 62 65 20 64 69 73 61 62 6c 65 64 2c 20 68 6f   be disabled, ho
2780: 77 65 76 65 72 20 74 68 61 74 20 6d 69 67 68 74  wever that might
2790: 20 63 68 61 6e 67 65 20 69 6e 20 61 20 66 75 74   change in a fut
27a0: 75 72 65 20 72 65 6c 65 61 73 65 0a 6f 66 20 53  ure release.of S
27b0: 51 4c 69 74 65 2c 20 73 6f 20 61 70 70 6c 69 63  QLite, so applic
27c0: 61 74 69 6f 6e 20 64 65 76 65 6c 6f 70 65 72 73  ation developers
27d0: 20 61 72 65 20 61 64 76 69 73 65 64 20 74 6f 20   are advised to 
27e0: 70 6c 61 6e 20 61 63 63 6f 72 64 69 6e 67 6c 79  plan accordingly
27f0: 2e 0a 0a 3c 70 3e 54 68 65 20 6e 61 6d 65 20 74  ...<p>The name t
2800: 68 61 74 20 6f 63 63 75 72 73 20 61 66 74 65 72  hat occurs after
2810: 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20   the AS keyword 
2820: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
2830: 68 65 20 64 61 74 61 62 61 73 65 0a 75 73 65 64  he database.used
2840: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53   internally by S
2850: 51 4c 69 74 65 2e 0a 5e 54 68 65 20 64 61 74 61  QLite..^The data
2860: 62 61 73 65 2d 6e 61 6d 65 73 20 27 6d 61 69 6e  base-names 'main
2870: 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20 72 65  ' and .'temp' re
2880: 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69 6e 20  fer to the main 
2890: 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 68 65  database and the
28a0: 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
28b0: 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20 74 61  or .temporary ta
28c0: 62 6c 65 73 2e 20 20 5e 54 68 65 20 6d 61 69 6e  bles.  ^The main
28d0: 20 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61   and temp databa
28e0: 73 65 73 20 63 61 6e 6e 6f 74 20 62 65 20 61 74  ses cannot be at
28f0: 74 61 63 68 65 64 20 6f 72 0a 64 65 74 61 63 68  tached or.detach
2900: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54  ed.</p>..<p> ^(T
2910: 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74 61  ables in an atta
2920: 63 68 65 64 20 64 61 74 61 62 61 73 65 20 63 61  ched database ca
2930: 6e 20 62 65 20 72 65 66 65 72 72 65 64 20 74 6f  n be referred to
2940: 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e 74 61   using the synta
2950: 78 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e  x .<i>database-n
2960: 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  ame.table-name</
2970: 69 3e 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 6e  i>.)^  ^If the n
2980: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
2990: 20 69 73 20 75 6e 69 71 75 65 0a 61 63 72 6f 73   is unique.acros
29a0: 73 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  s all attached d
29b0: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
29c0: 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64   main and temp d
29d0: 61 74 61 62 61 73 65 73 2c 20 74 68 65 6e 20 74  atabases, then t
29e0: 68 65 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e  he.<i>database-n
29f0: 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69  ame</i> prefix i
2a00: 73 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2e 20  s not required. 
2a10: 20 5e 49 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65   ^If two or more
2a20: 20 74 61 62 6c 65 73 20 69 6e 0a 64 69 66 66 65   tables in.diffe
2a30: 72 65 6e 74 20 64 61 74 61 62 61 73 65 73 20 68  rent databases h
2a40: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ave the same nam
2a50: 65 20 61 6e 64 20 74 68 65 20 0a 3c 69 3e 64 61  e and the .<i>da
2a60: 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20  tabase-name</i> 
2a70: 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 75 73  prefix is not us
2a80: 65 64 20 6f 6e 20 61 20 74 61 62 6c 65 20 72 65  ed on a table re
2a90: 66 65 72 65 6e 63 65 2c 20 74 68 65 6e 20 74 68  ference, then th
2aa0: 65 0a 74 61 62 6c 65 20 63 68 6f 73 65 6e 20 69  e.table chosen i
2ab0: 73 20 74 68 65 20 6f 6e 65 20 69 6e 20 74 68 65  s the one in the
2ac0: 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20 77   database that w
2ad0: 61 73 20 6c 65 61 73 74 20 72 65 63 65 6e 74 6c  as least recentl
2ae0: 79 20 61 74 74 61 63 68 65 64 2e 3c 2f 70 3e 0a  y attached.</p>.
2af0: 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f  .<p>.^Transactio
2b00: 6e 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  ns involving mul
2b10: 74 69 70 6c 65 20 61 74 74 61 63 68 65 64 20 64  tiple attached d
2b20: 61 74 61 62 61 73 65 73 20 61 72 65 20 61 74 6f  atabases are ato
2b30: 6d 69 63 2c 0a 61 73 73 75 6d 69 6e 67 20 74 68  mic,.assuming th
2b40: 61 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  at the main data
2b50: 62 61 73 65 20 69 73 20 6e 6f 74 20 22 5b 3a 6d  base is not "[:m
2b60: 65 6d 6f 72 79 3a 5d 22 20 61 6e 64 20 74 68 65  emory:]" and the
2b70: 20 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d   .[journal_mode]
2b80: 20 69 73 20 6e 6f 74 20 5b 57 41 4c 5d 2e 20 20   is not [WAL].  
2b90: 5e 28 49 66 20 74 68 65 20 6d 61 69 6e 0a 64 61  ^(If the main.da
2ba0: 74 61 62 61 73 65 20 69 73 20 22 3a 6d 65 6d 6f  tabase is ":memo
2bb0: 72 79 3a 22 20 6f 72 20 69 66 20 74 68 65 20 6a  ry:" or if the j
2bc0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 69 73 20 57  ournal_mode is W
2bd0: 41 4c 2c 20 74 68 65 6e 20 0a 74 72 61 6e 73 61  AL, then .transa
2be0: 63 74 69 6f 6e 73 20 63 6f 6e 74 69 6e 75 65 20  ctions continue 
2bf0: 74 6f 20 62 65 20 61 74 6f 6d 69 63 20 77 69 74  to be atomic wit
2c00: 68 69 6e 20 65 61 63 68 20 69 6e 64 69 76 69 64  hin each individ
2c10: 75 61 6c 0a 64 61 74 61 62 61 73 65 20 66 69 6c  ual.database fil
2c20: 65 2e 20 42 75 74 20 69 66 20 74 68 65 20 68 6f  e. But if the ho
2c30: 73 74 20 63 6f 6d 70 75 74 65 72 20 63 72 61 73  st computer cras
2c40: 68 65 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  hes in the middl
2c50: 65 0a 6f 66 20 61 20 5b 43 4f 4d 4d 49 54 5d 20  e.of a [COMMIT] 
2c60: 77 68 65 72 65 20 74 77 6f 20 6f 72 20 6d 6f 72  where two or mor
2c70: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  e database files
2c80: 20 61 72 65 20 75 70 64 61 74 65 64 2c 0a 73 6f   are updated,.so
2c90: 6d 65 20 6f 66 20 74 68 6f 73 65 20 66 69 6c 65  me of those file
2ca0: 73 20 6d 69 67 68 74 20 67 65 74 20 74 68 65 20  s might get the 
2cb0: 63 68 61 6e 67 65 73 20 77 68 65 72 65 20 6f 74  changes where ot
2cc0: 68 65 72 73 0a 6d 69 67 68 74 20 6e 6f 74 2e 29  hers.might not.)
2cd0: 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65  ^.</p>..<p> ^The
2ce0: 72 65 20 69 73 20 61 20 6c 69 6d 69 74 2c 20 73  re is a limit, s
2cf0: 65 74 20 75 73 69 6e 67 20 5b 73 71 6c 69 74 65  et using [sqlite
2d00: 33 5f 6c 69 6d 69 74 28 29 5d 20 61 6e 64 20 0a  3_limit()] and .
2d10: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 41 54  [SQLITE_LIMIT_AT
2d20: 54 41 43 48 45 44 5d 2c 20 74 6f 20 74 68 65 20  TACHED], to the 
2d30: 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61  number of databa
2d40: 73 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a  ses that can be.
2d50: 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 20 61  simultaneously a
2d60: 74 74 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e  ttached to a sin
2d70: 67 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  gle database con
2d80: 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  nection.</p>..<t
2d90: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
2da0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2de0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 42 45 47  ###.Section {BEG
2df0: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20  IN TRANSACTION} 
2e00: 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 2a 42 45  transaction {*BE
2e10: 47 49 4e 20 43 4f 4d 4d 49 54 20 52 4f 4c 4c 42  GIN COMMIT ROLLB
2e20: 41 43 4b 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  ACK}..RecursiveB
2e30: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 62 65 67  ubbleDiagram beg
2e40: 69 6e 2d 73 74 6d 74 20 63 6f 6d 6d 69 74 2d 73  in-stmt commit-s
2e50: 74 6d 74 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d  tmt rollback-stm
2e60: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 4e  t.</tcl>..<p>.^N
2e70: 6f 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65  o changes can be
2e80: 20 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61 74   made to the dat
2e90: 61 62 61 73 65 20 65 78 63 65 70 74 20 77 69 74  abase except wit
2ea0: 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
2eb0: 6e 2e 0a 5e 41 6e 79 20 63 6f 6d 6d 61 6e 64 20  n..^Any command 
2ec0: 74 68 61 74 20 63 68 61 6e 67 65 73 20 74 68 65  that changes the
2ed0: 20 64 61 74 61 62 61 73 65 20 28 62 61 73 69 63   database (basic
2ee0: 61 6c 6c 79 2c 20 61 6e 79 20 53 51 4c 20 63 6f  ally, any SQL co
2ef0: 6d 6d 61 6e 64 0a 6f 74 68 65 72 20 74 68 61 6e  mmand.other than
2f00: 20 5b 53 45 4c 45 43 54 5d 29 20 77 69 6c 6c 20   [SELECT]) will 
2f10: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74  automatically st
2f20: 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
2f30: 6e 20 69 66 0a 6f 6e 65 20 69 73 20 6e 6f 74 20  n if.one is not 
2f40: 61 6c 72 65 61 64 79 20 69 6e 20 65 66 66 65 63  already in effec
2f50: 74 2e 20 20 5e 41 75 74 6f 6d 61 74 69 63 61 6c  t.  ^Automatical
2f60: 6c 79 20 73 74 61 72 74 65 64 20 74 72 61 6e 73  ly started trans
2f70: 61 63 74 69 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d  actions.are comm
2f80: 69 74 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c  itted when the l
2f90: 61 73 74 20 71 75 65 72 79 20 66 69 6e 69 73 68  ast query finish
2fa0: 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54  es..</p>..<p>.^T
2fb0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20  ransactions can 
2fc0: 62 65 20 73 74 61 72 74 65 64 20 6d 61 6e 75 61  be started manua
2fd0: 6c 6c 79 20 75 73 69 6e 67 20 74 68 65 20 42 45  lly using the BE
2fe0: 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20 5e 28  GIN.command.  ^(
2ff0: 53 75 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e  Such transaction
3000: 73 20 75 73 75 61 6c 6c 79 20 70 65 72 73 69 73  s usually persis
3010: 74 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  t until the next
3020: 0a 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42  .COMMIT or ROLLB
3030: 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 42 75  ACK command.  Bu
3040: 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
3050: 77 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42  will also .ROLLB
3060: 41 43 4b 20 69 66 20 74 68 65 20 64 61 74 61 62  ACK if the datab
3070: 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 6f 72  ase is closed or
3080: 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   if an error occ
3090: 75 72 73 0a 61 6e 64 20 74 68 65 20 52 4f 4c 4c  urs.and the ROLL
30a0: 42 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20 72 65  BACK conflict re
30b0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
30c0: 68 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  hm is specified.
30d0: 29 5e 0a 53 65 65 20 74 68 65 20 64 6f 63 75 6d  )^.See the docum
30e0: 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20  entation on the 
30f0: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c  [ON CONFLICT].cl
3100: 61 75 73 65 20 66 6f 72 20 61 64 64 69 74 69 6f  ause for additio
3110: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  nal information 
3120: 61 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c 42 41  about the ROLLBA
3130: 43 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CK.conflict reso
3140: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
3150: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 45 4e 44  ..</p>..<p>.^END
3160: 20 54 52 41 4e 53 41 43 54 49 4f 4e 20 69 73 20   TRANSACTION is 
3170: 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 43 4f 4d  an alias for COM
3180: 4d 49 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  MIT..</p>..<p> ^
3190: 28 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 72  (Transactions cr
31a0: 65 61 74 65 64 20 75 73 69 6e 67 20 42 45 47 49  eated using BEGI
31b0: 4e 2e 2e 2e 43 4f 4d 4d 49 54 20 64 6f 20 6e 6f  N...COMMIT do no
31c0: 74 20 6e 65 73 74 2e 29 5e 0a 5e 46 6f 72 20 6e  t nest.)^.^For n
31d0: 65 73 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f  ested transactio
31e0: 6e 73 2c 20 75 73 65 20 74 68 65 20 5b 53 41 56  ns, use the [SAV
31f0: 45 50 4f 49 4e 54 5d 20 61 6e 64 20 5b 52 45 4c  EPOINT] and [REL
3200: 45 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a  EASE] commands..
3210: 54 68 65 20 22 54 4f 20 53 41 56 45 50 4f 49 4e  The "TO SAVEPOIN
3220: 54 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 22 20 63  T <i>name</i>" c
3230: 6c 61 75 73 65 20 6f 66 20 74 68 65 20 52 4f 4c  lause of the ROL
3240: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 73 68  LBACK command sh
3250: 6f 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e 74 61  own.in the synta
3260: 78 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 20  x diagram above 
3270: 69 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63 61 62  is only applicab
3280: 6c 65 20 74 6f 20 5b 53 41 56 45 50 4f 49 4e 54  le to [SAVEPOINT
3290: 5d 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  ].transactions. 
32a0: 20 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20   ^An attempt to 
32b0: 69 6e 76 6f 6b 65 20 74 68 65 20 42 45 47 49 4e  invoke the BEGIN
32c0: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 0a   command within.
32d0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
32e0: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
32f0: 65 72 72 6f 72 2c 20 72 65 67 61 72 64 6c 65 73  error, regardles
3300: 73 20 6f 66 20 77 68 65 74 68 65 72 0a 74 68 65  s of whether.the
3310: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73   transaction was
3320: 20 73 74 61 72 74 65 64 20 62 79 20 5b 53 41 56   started by [SAV
3330: 45 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70 72 69  EPOINT] or a pri
3340: 6f 72 20 42 45 47 49 4e 2e 0a 5e 54 68 65 20 43  or BEGIN..^The C
3350: 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 61 6e  OMMIT command an
3360: 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  d the ROLLBACK c
3370: 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 74  ommand without t
3380: 68 65 20 54 4f 20 63 6c 61 75 73 65 0a 77 6f 72  he TO clause.wor
3390: 6b 20 74 68 65 20 73 61 6d 65 20 6f 6e 20 5b 53  k the same on [S
33a0: 41 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e 73 61  AVEPOINT] transa
33b0: 63 74 69 6f 6e 73 20 61 73 20 74 68 65 79 20 64  ctions as they d
33c0: 6f 20 77 69 74 68 20 74 72 61 6e 73 61 63 74 69  o with transacti
33d0: 6f 6e 73 0a 73 74 61 72 74 65 64 20 62 79 20 42  ons.started by B
33e0: 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  EGIN.</p>..<tcl>
33f0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6d 6d 6d  hd_fragment immm
3400: 65 64 69 61 74 65 20 7b 42 45 47 49 4e 20 49 4d  ediate {BEGIN IM
3410: 4d 45 44 49 41 54 45 7d 20 7b 42 45 47 49 4e 20  MEDIATE} {BEGIN 
3420: 45 58 43 4c 55 53 49 56 45 7d 3c 2f 74 63 6c 3e  EXCLUSIVE}</tcl>
3430: 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f  .<p>.^Transactio
3440: 6e 73 20 63 61 6e 20 62 65 20 64 65 66 65 72 72  ns can be deferr
3450: 65 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f  ed, immediate, o
3460: 72 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 5e  r exclusive.  .^
3470: 54 68 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e  The default tran
3480: 73 61 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72  saction behavior
3490: 20 69 73 20 64 65 66 65 72 72 65 64 2e 0a 5e 44   is deferred..^D
34a0: 65 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74 68  eferred means th
34b0: 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20  at no locks are 
34c0: 61 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65 20  acquired.on the 
34d0: 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74  database until t
34e0: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 66  he database is f
34f0: 69 72 73 74 20 61 63 63 65 73 73 65 64 2e 20 20  irst accessed.  
3500: 5e 54 68 75 73 20 77 69 74 68 20 61 0a 64 65 66  ^Thus with a.def
3510: 65 72 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f  erred transactio
3520: 6e 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74 61  n, the BEGIN sta
3530: 74 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64 6f  tement itself do
3540: 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68  es nothing to th
3550: 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20 20 5e  e.filesystem.  ^
3560: 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63  Locks.are not ac
3570: 71 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65  quired until the
3580: 20 66 69 72 73 74 20 72 65 61 64 20 6f 72 20 77   first read or w
3590: 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rite operation. 
35a0: 20 5e 54 68 65 20 66 69 72 73 74 20 72 65 61 64   ^The first read
35b0: 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e  .operation again
35c0: 73 74 20 61 20 64 61 74 61 62 61 73 65 20 63 72  st a database cr
35d0: 65 61 74 65 73 20 61 20 5b 53 48 41 52 45 44 5d  eates a [SHARED]
35e0: 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66 69   lock and the fi
35f0: 72 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61 74  rst.write operat
3600: 69 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b 52  ion creates a [R
3610: 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20 20  ESERVED] lock.  
3620: 20 5e 42 65 63 61 75 73 65 20 74 68 65 20 61 63   ^Because the ac
3630: 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63  quisition of.loc
3640: 6b 73 20 69 73 20 64 65 66 65 72 72 65 64 20 75  ks is deferred u
3650: 6e 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65  ntil they are ne
3660: 65 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73  eded, it is poss
3670: 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65  ible that anothe
3680: 72 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63  r.thread or proc
3690: 65 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65  ess could create
36a0: 20 61 20 73 65 70 61 72 61 74 65 20 74 72 61 6e   a separate tran
36b0: 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74  saction and writ
36c0: 65 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73  e to.the databas
36d0: 65 20 61 66 74 65 72 20 74 68 65 20 42 45 47 49  e after the BEGI
36e0: 4e 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  N on the current
36f0: 20 74 68 72 65 61 64 20 68 61 73 20 65 78 65 63   thread has exec
3700: 75 74 65 64 2e 0a 5e 49 66 20 74 68 65 20 74 72  uted..^If the tr
3710: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d  ansaction is imm
3720: 65 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52 45  ediate, then [RE
3730: 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72  SERVED] locks.ar
3740: 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c  e acquired on al
3750: 6c 20 64 61 74 61 62 61 73 65 73 20 61 73 20 73  l databases as s
3760: 6f 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e  oon as the BEGIN
3770: 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63   command is.exec
3780: 75 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61  uted, without wa
3790: 69 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61  iting for the.da
37a0: 74 61 62 61 73 65 20 74 6f 20 62 65 20 75 73 65  tabase to be use
37b0: 64 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45 47  d.  ^After a BEG
37c0: 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a 6e  IN IMMEDIATE, .n
37d0: 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73  o other [databas
37e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77 69  e connection] wi
37f0: 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72  ll be able to wr
3800: 69 74 65 20 74 6f 20 74 68 65 20 64 61 74 61 62  ite to the datab
3810: 61 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47 49  ase or.do a BEGI
3820: 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20 42  N IMMEDIATE or B
3830: 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e 20  EGIN EXCLUSIVE. 
3840: 20 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65   ^Other processe
3850: 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74  s can continue.t
3860: 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20  o read from the 
3870: 64 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65  database, howeve
3880: 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69 76  r.  ^An exclusiv
3890: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61  e transaction ca
38a0: 75 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d  uses.[EXCLUSIVE]
38b0: 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71   locks to be acq
38c0: 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74  uired on all dat
38d0: 61 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72 20  abases.  ^After 
38e0: 61 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49 56  a BEGIN.EXCLUSIV
38f0: 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74  E, no other [dat
3900: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
3910: 5d 20 65 78 63 65 70 74 20 66 6f 72 20 5b 72 65  ] except for [re
3920: 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d 0a  ad_uncommitted].
3930: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c 6c  connections will
3940: 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64   be able to read
3950: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
3960: 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65  d no other conne
3970: 63 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65 78  ction without.ex
3980: 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ception will be 
3990: 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74 68  able to write th
39a0: 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c  e database until
39b0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
39c0: 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f   is.complete..</
39d0: 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d 70  p>..<p>.^(An imp
39e0: 6c 69 63 69 74 20 74 72 61 6e 73 61 63 74 69 6f  licit transactio
39f0: 6e 20 28 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  n (a transaction
3a00: 20 74 68 61 74 20 69 73 20 73 74 61 72 74 65 64   that is started
3a10: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c 0a   automatically,.
3a20: 6e 6f 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  not a transactio
3a30: 6e 20 73 74 61 72 74 65 64 20 62 79 20 42 45 47  n started by BEG
3a40: 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74 65 64  IN) is committed
3a50: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
3a60: 68 65 6e 0a 74 68 65 20 6c 61 73 74 20 61 63 74  hen.the last act
3a70: 69 76 65 20 73 74 61 74 65 6d 65 6e 74 20 66 69  ive statement fi
3a80: 6e 69 73 68 65 73 2e 20 20 41 20 73 74 61 74 65  nishes.  A state
3a90: 6d 65 6e 74 20 66 69 6e 69 73 68 65 73 20 77 68  ment finishes wh
3aa0: 65 6e 20 69 74 73 0a 70 72 65 70 61 72 65 64 20  en its.prepared 
3ab0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 5b 73 71  statement is [sq
3ac0: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c 20  lite3_reset() | 
3ad0: 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69 74  reset] or.[sqlit
3ae0: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c 20  e3_finalize() | 
3af0: 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e 20  finalized].  An 
3b00: 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62 6c  open [sqlite3_bl
3b10: 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e 63  ob] used for.inc
3b20: 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f  remental BLOB I/
3b30: 4f 20 63 6f 75 6e 74 73 20 61 73 20 61 6e 20 75  O counts as an u
3b40: 6e 66 69 6e 69 73 68 65 64 20 73 74 61 74 65 6d  nfinished statem
3b50: 65 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c 69 74  ent.  The [sqlit
3b60: 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68 65  e3_blob].finishe
3b70: 73 20 77 68 65 6e 20 69 74 20 69 73 20 5b 73 71  s when it is [sq
3b80: 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65  lite3_blob_close
3b90: 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e 0a  () | closed].)^.
3ba0: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65  </p>..<p>.^The e
3bb0: 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20 63  xplicit COMMIT c
3bc0: 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d 65  ommand runs imme
3bd0: 64 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69 66  diately, even if
3be0: 20 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64 69   there are.pendi
3bf0: 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  ng [SELECT] stat
3c00: 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76 65  ements.  ^Howeve
3c10: 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 20  r, if there are 
3c20: 70 65 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f 70  pending.write op
3c30: 65 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 43 4f  erations, the CO
3c40: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c  MMIT command.wil
3c50: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l fail with an e
3c60: 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54  rror code [SQLIT
3c70: 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c  E_BUSY]..</p>..<
3c80: 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20 74  p>.^An attempt t
3c90: 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54  o execute COMMIT
3ca0: 20 6d 69 67 68 74 20 61 6c 73 6f 20 72 65 73 75   might also resu
3cb0: 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45  lt in an [SQLITE
3cc0: 5f 42 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f  _BUSY] return co
3cd0: 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65 72  de.if an another
3ce0: 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65   thread or proce
3cf0: 73 73 20 68 61 73 20 61 20 5b 73 68 61 72 65 64  ss has a [shared
3d00: 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61   lock] on the da
3d10: 74 61 62 61 73 65 0a 74 68 61 74 20 70 72 65 76  tabase.that prev
3d20: 65 6e 74 65 64 20 74 68 65 20 64 61 74 61 62 61  ented the databa
3d30: 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70  se from being up
3d40: 64 61 74 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f  dated.  ^When CO
3d50: 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68  MMIT fails in th
3d60: 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e  is.way, the tran
3d70: 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20  saction remains 
3d80: 61 63 74 69 76 65 20 61 6e 64 20 74 68 65 20 43  active and the C
3d90: 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74  OMMIT can be ret
3da0: 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72  ried later.after
3db0: 20 74 68 65 20 72 65 61 64 65 72 20 68 61 73 20   the reader has 
3dc0: 68 61 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20  had a chance to 
3dd0: 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  clear..</p>..<p>
3de0: 0a 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77  .^The ROLLBACK w
3df0: 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
3e00: 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c   error code [SQL
3e10: 49 54 45 5f 42 55 53 59 5d 20 69 66 20 74 68 65  ITE_BUSY] if the
3e20: 72 65 0a 61 72 65 20 61 6e 79 20 70 65 6e 64 69  re.are any pendi
3e30: 6e 67 20 71 75 65 72 69 65 73 2e 20 20 5e 42 6f  ng queries.  ^Bo
3e40: 74 68 20 72 65 61 64 2d 6f 6e 6c 79 20 61 6e 64  th read-only and
3e50: 20 72 65 61 64 2f 77 72 69 74 65 20 71 75 65 72   read/write quer
3e60: 69 65 73 20 77 69 6c 6c 0a 63 61 75 73 65 20 61  ies will.cause a
3e70: 20 52 4f 4c 4c 42 41 43 4b 20 74 6f 20 66 61 69   ROLLBACK to fai
3e80: 6c 2e 20 20 41 20 52 4f 4c 4c 42 41 43 4b 20 6d  l.  A ROLLBACK m
3e90: 75 73 74 20 66 61 69 6c 20 69 66 20 74 68 65 72  ust fail if ther
3ea0: 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 72 65  e are pending.re
3eb0: 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 20 28 75  ad operations (u
3ec0: 6e 6c 69 6b 65 20 43 4f 4d 4d 49 54 20 77 68 69  nlike COMMIT whi
3ed0: 63 68 20 63 61 6e 20 73 75 63 63 65 65 64 29 20  ch can succeed) 
3ee0: 62 65 63 61 75 73 65 20 62 61 64 20 74 68 69 6e  because bad thin
3ef0: 67 73 0a 77 69 6c 6c 20 68 61 70 70 65 6e 20 69  gs.will happen i
3f00: 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
3f10: 69 6d 61 67 65 20 6f 66 20 74 68 65 20 64 61 74  image of the dat
3f20: 61 62 61 73 65 20 69 73 20 63 68 61 6e 67 65 64  abase is changed
3f30: 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 0a   out from under.
3f40: 61 6e 20 61 63 74 69 76 65 20 71 75 65 72 79 2e  an active query.
3f50: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50  .</p>..<p>.If [P
3f60: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
3f70: 64 65 5d 20 69 73 20 73 65 74 20 74 6f 20 4f 46  de] is set to OF
3f80: 46 20 28 74 68 75 73 20 64 69 73 61 62 6c 69 6e  F (thus disablin
3f90: 67 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  g the rollback j
3fa0: 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65  ournal.file) the
3fb0: 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f  n the behavior o
3fc0: 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  f the ROLLBACK c
3fd0: 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65 66 69  ommand is undefi
3fe0: 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52  ned..</p>..<h3>R
3ff0: 65 73 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72  esponse To Error
4000: 73 20 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73  s Within A Trans
4010: 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e  action</h3>..<p>
4020: 20 5e 28 49 66 20 63 65 72 74 61 69 6e 20 6b 69   ^(If certain ki
4030: 6e 64 73 20 6f 66 20 65 72 72 6f 72 73 20 6f 63  nds of errors oc
4040: 63 75 72 20 77 69 74 68 69 6e 20 61 20 74 72 61  cur within a tra
4050: 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72  nsaction, the.tr
4060: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72  ansaction may or
4070: 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c   may not be roll
4080: 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69  ed back automati
4090: 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f  cally.  The.erro
40a0: 72 73 20 74 68 61 74 20 63 61 6e 20 63 61 75 73  rs that can caus
40b0: 65 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  e an automatic r
40c0: 6f 6c 6c 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a  ollback include:
40d0: 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20  </p>..<ul>.<li> 
40e0: 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64  [SQLITE_FULL]: d
40f0: 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20  atabase or disk 
4100: 66 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  full.<li> [SQLIT
4110: 45 5f 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49  E_IOERR]: disk I
4120: 2f 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53  /O error.<li> [S
4130: 51 4c 49 54 45 5f 42 55 53 59 5d 3a 20 64 61 74  QLITE_BUSY]: dat
4140: 61 62 61 73 65 20 69 6e 20 75 73 65 20 62 79 20  abase in use by 
4150: 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73 0a  another process.
4160: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d  <li> [SQLITE_NOM
4170: 45 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f  EM]: out or memo
4180: 72 79 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ry.<li> [SQLITE_
4190: 49 4e 54 45 52 52 55 50 54 5d 3a 20 70 72 6f 63  INTERRUPT]: proc
41a0: 65 73 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f  essing [sqlite3_
41b0: 69 6e 74 65 72 72 75 70 74 7c 69 6e 74 65 72 72  interrupt|interr
41c0: 75 70 74 65 64 5d 0a 20 20 20 20 20 62 79 20 61  upted].     by a
41d0: 70 70 6c 69 63 61 74 69 6f 6e 20 72 65 71 75 65  pplication reque
41e0: 73 74 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a  st.</ul>)^..<p>.
41f0: 5e 46 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73  ^For all of thes
4200: 65 20 65 72 72 6f 72 73 2c 20 53 51 4c 69 74 65  e errors, SQLite
4210: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 6e 64   attempts to und
4220: 6f 20 6a 75 73 74 20 74 68 65 20 6f 6e 65 20 73  o just the one s
4230: 74 61 74 65 6d 65 6e 74 0a 69 74 20 77 61 73 20  tatement.it was 
4240: 77 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c  working on and l
4250: 65 61 76 65 20 63 68 61 6e 67 65 73 20 66 72 6f  eave changes fro
4260: 6d 20 70 72 69 6f 72 20 73 74 61 74 65 6d 65 6e  m prior statemen
4270: 74 73 20 77 69 74 68 69 6e 20 74 68 65 0a 73 61  ts within the.sa
4280: 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  me transaction i
4290: 6e 74 61 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e  ntact and contin
42a0: 75 65 20 77 69 74 68 20 74 68 65 20 74 72 61 6e  ue with the tran
42b0: 73 61 63 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76  saction.  ^Howev
42c0: 65 72 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f  er, .depending o
42d0: 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
42e0: 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20  being evaluated 
42f0: 61 6e 64 20 74 68 65 20 70 6f 69 6e 74 20 61 74  and the point at
4300: 20 77 68 69 63 68 20 74 68 65 0a 65 72 72 6f 72   which the.error
4310: 20 6f 63 63 75 72 73 2c 20 69 74 20 6d 69 67 68   occurs, it migh
4320: 74 20 62 65 20 6e 65 63 65 73 73 61 72 79 20 66  t be necessary f
4330: 6f 72 20 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c  or SQLite to rol
4340: 6c 62 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c  lback and.cancel
4350: 20 74 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e   the entire tran
4360: 73 61 63 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70  saction.  ^An ap
4370: 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20 74 65  plication can te
4380: 6c 6c 20 77 68 69 63 68 0a 63 6f 75 72 73 65 20  ll which.course 
4390: 6f 66 20 61 63 74 69 6f 6e 20 53 51 4c 69 74 65  of action SQLite
43a0: 20 74 6f 6f 6b 20 62 79 20 75 73 69 6e 67 20 74   took by using t
43b0: 68 65 0a 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f  he.[sqlite3_get_
43c0: 61 75 74 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d  autocommit()] C-
43d0: 6c 61 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61  language interfa
43e0: 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69  ce.</p>..<p>It i
43f0: 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68  s recommended th
4400: 61 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  at applications 
4410: 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 65  respond to the e
4420: 72 72 6f 72 73 0a 6c 69 73 74 65 64 20 61 62 6f  rrors.listed abo
4430: 76 65 20 62 79 20 65 78 70 6c 69 63 69 74 6c 79  ve by explicitly
4440: 20 69 73 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42   issuing a ROLLB
4450: 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49  ACK command.  ^I
4460: 66 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69  f the .transacti
4470: 6f 6e 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  on has already b
4480: 65 65 6e 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20  een rolled back 
4490: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79  automatically.by
44a0: 20 74 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f   the error respo
44b0: 6e 73 65 2c 20 74 68 65 6e 20 74 68 65 20 52 4f  nse, then the RO
44c0: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77  LLBACK command w
44d0: 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
44e0: 0a 65 72 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68  .error, but no h
44f0: 61 72 6d 20 69 73 20 63 61 75 73 65 64 20 62 79  arm is caused by
4500: 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46   this.</p>..<p>F
4510: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f  uture versions o
4520: 66 20 53 51 4c 69 74 65 20 6d 61 79 20 65 78 74  f SQLite may ext
4530: 65 6e 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20  end the list of 
4540: 65 72 72 6f 72 73 20 77 68 69 63 68 0a 6d 69 67  errors which.mig
4550: 68 74 20 63 61 75 73 65 20 61 75 74 6f 6d 61 74  ht cause automat
4560: 69 63 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72  ic transaction r
4570: 6f 6c 6c 62 61 63 6b 2e 20 20 46 75 74 75 72 65  ollback.  Future
4580: 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c   versions of.SQL
4590: 69 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65  ite might change
45a0: 20 74 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f   the error respo
45b0: 6e 73 65 2e 20 20 49 6e 20 70 61 72 74 69 63 75  nse.  In particu
45c0: 6c 61 72 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f  lar, we may.choo
45d0: 73 65 20 74 6f 20 73 69 6d 70 6c 69 66 79 20 74  se to simplify t
45e0: 68 65 20 69 6e 74 65 72 66 61 63 65 20 69 6e 20  he interface in 
45f0: 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  future versions 
4600: 6f 66 20 53 51 4c 69 74 65 20 62 79 0a 63 61 75  of SQLite by.cau
4610: 73 69 6e 67 20 74 68 65 20 65 72 72 6f 72 73 20  sing the errors 
4620: 61 62 6f 76 65 20 74 6f 20 66 6f 72 63 65 20 61  above to force a
4630: 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20  n unconditional 
4640: 72 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c  rollback.</p>..<
4650: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
4660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46a0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41  ####.Section {SA
46b0: 56 45 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69  VEPOINT} savepoi
46c0: 6e 74 20 7b 53 41 56 45 50 4f 49 4e 54 20 52 45  nt {SAVEPOINT RE
46d0: 4c 45 41 53 45 7d 0a 0a 52 65 63 75 72 73 69 76  LEASE}..Recursiv
46e0: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  eBubbleDiagram s
46f0: 61 76 65 70 6f 69 6e 74 2d 73 74 6d 74 20 72 65  avepoint-stmt re
4700: 6c 65 61 73 65 2d 73 74 6d 74 20 72 6f 6c 6c 62  lease-stmt rollb
4710: 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ack-stmt.</tcl>.
4720: 0a 3c 70 3e 20 5e 53 41 56 45 50 4f 49 4e 54 73  .<p> ^SAVEPOINTs
4730: 20 61 72 65 20 61 20 6d 65 74 68 6f 64 20 6f 66   are a method of
4740: 20 63 72 65 61 74 69 6e 67 20 74 72 61 6e 73 61   creating transa
4750: 63 74 69 6f 6e 73 2c 20 73 69 6d 69 6c 61 72 20  ctions, similar 
4760: 74 6f 0a 5b 42 45 47 49 4e 5d 20 61 6e 64 20 5b  to.[BEGIN] and [
4770: 43 4f 4d 4d 49 54 5d 2c 20 65 78 63 65 70 74 20  COMMIT], except 
4780: 74 68 61 74 20 74 68 65 20 53 41 56 45 50 4f 49  that the SAVEPOI
4790: 4e 54 20 61 6e 64 20 52 45 4c 45 41 53 45 20 63  NT and RELEASE c
47a0: 6f 6d 6d 61 6e 64 73 0a 61 72 65 20 6e 61 6d 65  ommands.are name
47b0: 64 20 61 6e 64 20 6d 61 79 20 62 65 20 6e 65 73  d and may be nes
47c0: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54  ted.</p>..<p> ^T
47d0: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d  he SAVEPOINT com
47e0: 6d 61 6e 64 20 73 74 61 72 74 73 20 61 20 6e 65  mand starts a ne
47f0: 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  w transaction wi
4800: 74 68 20 61 20 6e 61 6d 65 2e 0a 5e 54 68 65 20  th a name..^The 
4810: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 61 6d 65  transaction name
4820: 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 75 6e  s need not be un
4830: 69 71 75 65 2e 0a 5e 28 41 20 53 41 56 45 50 4f  ique..^(A SAVEPO
4840: 49 4e 54 20 63 61 6e 20 62 65 20 73 74 61 72 74  INT can be start
4850: 65 64 20 65 69 74 68 65 72 20 77 69 74 68 69 6e  ed either within
4860: 20 6f 72 20 6f 75 74 73 69 64 65 20 6f 66 0a 61   or outside of.a
4870: 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d   [BEGIN]...[COMM
4880: 49 54 5d 2e 29 5e 20 20 5e 28 57 68 65 6e 20 61  IT].)^  ^(When a
4890: 20 53 41 56 45 50 4f 49 4e 54 20 69 73 20 74 68   SAVEPOINT is th
48a0: 65 20 6f 75 74 65 72 2d 6d 6f 73 74 20 73 61 76  e outer-most sav
48b0: 65 70 6f 69 6e 74 0a 61 6e 64 20 69 74 20 69 73  epoint.and it is
48c0: 20 6e 6f 74 20 77 69 74 68 69 6e 20 61 20 5b 42   not within a [B
48d0: 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d  EGIN]...[COMMIT]
48e0: 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69   then the behavi
48f0: 6f 72 20 69 73 20 74 68 65 0a 73 61 6d 65 20 61  or is the.same a
4900: 73 20 42 45 47 49 4e 20 44 45 46 45 52 52 45 44  s BEGIN DEFERRED
4910: 20 54 52 41 4e 53 41 43 54 49 4f 4e 2e 29 5e 3c   TRANSACTION.)^<
4920: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c  /p>..<p>^The ROL
4930: 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64  LBACK TO command
4940: 20 72 65 76 65 72 74 73 20 74 68 65 20 73 74 61   reverts the sta
4950: 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  te of the databa
4960: 73 65 20 62 61 63 6b 20 74 6f 20 77 68 61 74 0a  se back to what.
4970: 69 74 20 77 61 73 20 6a 75 73 74 20 61 66 74 65  it was just afte
4980: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
4990: 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 2e 20 20  ing SAVEPOINT.  
49a0: 5e 4e 6f 74 65 20 74 68 61 74 20 75 6e 6c 69 6b  ^Note that unlik
49b0: 65 20 74 68 61 74 0a 70 6c 61 69 6e 20 5b 52 4f  e that.plain [RO
49c0: 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20  LLBACK] command 
49d0: 28 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f 20  (without the TO 
49e0: 6b 65 79 77 6f 72 64 29 20 74 68 65 20 52 4f 4c  keyword) the ROL
49f0: 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64  LBACK TO command
4a00: 0a 64 6f 65 73 20 6e 6f 74 20 63 61 6e 63 65 6c  .does not cancel
4a10: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4a20: 2e 20 20 5e 49 6e 73 74 65 61 64 20 6f 66 20 63  .  ^Instead of c
4a30: 61 6e 63 65 6c 6c 69 6e 67 20 74 68 65 20 74 72  ancelling the tr
4a40: 61 6e 73 61 63 74 69 6f 6e 2c 0a 74 68 65 20 52  ansaction,.the R
4a50: 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61  OLLBACK TO comma
4a60: 6e 64 20 72 65 73 74 61 72 74 73 20 74 68 65 20  nd restarts the 
4a70: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 67 61 69  transaction agai
4a80: 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  n at the beginni
4a90: 6e 67 2e 0a 5e 41 6c 6c 20 69 6e 74 65 72 76 65  ng..^All interve
4aa0: 6e 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 73 20  ning SAVEPOINTs 
4ab0: 61 72 65 20 63 61 6e 63 65 6c 65 64 2c 20 68 6f  are canceled, ho
4ac0: 77 65 76 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  wever.</p>..<p>^
4ad0: 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  The RELEASE comm
4ae0: 61 6e 64 20 69 73 20 6c 69 6b 65 20 61 20 5b 43  and is like a [C
4af0: 4f 4d 4d 49 54 5d 20 66 6f 72 20 61 20 53 41 56  OMMIT] for a SAV
4b00: 45 50 4f 49 4e 54 2e 0a 5e 54 68 65 20 52 45 4c  EPOINT..^The REL
4b10: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61 75  EASE command cau
4b20: 73 65 73 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e  ses all savepoin
4b30: 74 73 20 62 61 63 6b 20 74 6f 20 61 6e 64 20 69  ts back to and i
4b40: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 0a 6d 6f  ncluding the .mo
4b50: 73 74 20 72 65 63 65 6e 74 20 73 61 76 65 70 6f  st recent savepo
4b60: 69 6e 74 20 77 69 74 68 20 61 20 6d 61 74 63 68  int with a match
4b70: 69 6e 67 20 6e 61 6d 65 20 74 6f 20 62 65 20 72  ing name to be r
4b80: 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
4b90: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
4ba0: 63 6b 2e 20 20 5e 54 68 65 20 52 45 4c 45 41 53  ck.  ^The RELEAS
4bb0: 45 20 6f 66 20 61 6e 20 69 6e 6e 65 72 20 74 72  E of an inner tr
4bc0: 61 6e 73 61 63 74 69 6f 6e 0a 64 6f 65 73 20 6e  ansaction.does n
4bd0: 6f 74 20 63 61 75 73 65 20 61 6e 79 20 63 68 61  ot cause any cha
4be0: 6e 67 65 73 20 74 6f 20 62 65 20 77 72 69 74 74  nges to be writt
4bf0: 65 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  en to the databa
4c00: 73 65 20 66 69 6c 65 3b 20 69 74 20 6d 65 72 65  se file; it mere
4c10: 6c 79 0a 72 65 6d 6f 76 65 73 20 73 61 76 65 70  ly.removes savep
4c20: 6f 69 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 74  oints from the t
4c30: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
4c40: 20 73 75 63 68 20 74 68 61 74 20 69 74 20 69 73   such that it is
4c50: 0a 6e 6f 20 6c 6f 6e 67 65 72 20 70 6f 73 73 69  .no longer possi
4c60: 62 6c 65 20 74 6f 20 52 4f 4c 4c 42 41 43 4b 20  ble to ROLLBACK 
4c70: 54 4f 20 74 68 6f 73 65 20 73 61 76 65 70 6f 69  TO those savepoi
4c80: 6e 74 73 2e 0a 5e 49 66 20 61 20 52 45 4c 45 41  nts..^If a RELEA
4c90: 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61  SE command relea
4ca0: 73 65 73 20 74 68 65 20 6f 75 74 65 72 6d 6f 73  ses the outermos
4cb0: 74 20 73 61 76 65 70 6f 69 6e 74 2c 20 73 6f 0a  t savepoint, so.
4cc0: 74 68 61 74 20 74 68 65 20 74 72 61 6e 73 61 63  that the transac
4cd0: 74 69 6f 6e 20 73 74 61 63 6b 20 62 65 63 6f 6d  tion stack becom
4ce0: 65 73 20 65 6d 70 74 79 2c 20 74 68 65 6e 20 52  es empty, then R
4cf0: 45 4c 45 41 53 45 20 69 73 20 74 68 65 20 73 61  ELEASE is the sa
4d00: 6d 65 0a 61 73 20 5b 43 4f 4d 4d 49 54 5d 2e 0a  me.as [COMMIT]..
4d10: 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f  ^The [COMMIT] co
4d20: 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20 75 73 65  mmand may be use
4d30: 64 20 74 6f 20 72 65 6c 65 61 73 65 20 61 6c 6c  d to release all
4d40: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 6e 64 0a   savepoints and.
4d50: 63 6f 6d 6d 69 74 20 74 68 65 20 74 72 61 6e 73  commit the trans
4d60: 61 63 74 69 6f 6e 20 65 76 65 6e 20 69 66 20 74  action even if t
4d70: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  he transaction w
4d80: 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73 74  as originally st
4d90: 61 72 74 65 64 0a 62 79 20 61 20 53 41 56 45 50  arted.by a SAVEP
4da0: 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 69 6e 73  OINT command ins
4db0: 74 65 61 64 20 6f 66 20 61 20 5b 42 45 47 49 4e  tead of a [BEGIN
4dc0: 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a  ] command.</p>..
4dd0: 3c 70 3e 5e 49 66 20 74 68 65 20 73 61 76 65 70  <p>^If the savep
4de0: 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52  oint-name in a R
4df0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 64  ELEASE command d
4e00: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e  oes not match an
4e10: 79 0a 73 61 76 65 70 6f 69 6e 74 20 63 75 72 72  y.savepoint curr
4e20: 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 74 72 61  ently in the tra
4e30: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 20  nsaction stack, 
4e40: 74 68 65 6e 20 6e 6f 20 73 61 76 65 70 6f 69 6e  then no savepoin
4e50: 74 73 20 61 72 65 0a 72 65 6c 65 61 73 65 64 2c  ts are.released,
4e60: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
4e70: 20 75 6e 63 68 61 6e 67 65 64 2c 20 61 6e 64 20   unchanged, and 
4e80: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
4e90: 61 6e 64 20 72 65 74 75 72 6e 73 0a 61 6e 20 65  and returns.an e
4ea0: 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e  rror.</p>..<p>^N
4eb0: 6f 74 65 20 74 68 61 74 20 61 6e 20 69 6e 6e 65  ote that an inne
4ec0: 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69  r transaction mi
4ed0: 67 68 74 20 63 6f 6d 6d 69 74 20 28 75 73 69 6e  ght commit (usin
4ee0: 67 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  g the RELEASE co
4ef0: 6d 6d 61 6e 64 29 0a 62 75 74 20 74 68 65 6e 20  mmand).but then 
4f00: 6c 61 74 65 72 20 68 61 76 65 20 69 74 73 20 77  later have its w
4f10: 6f 72 6b 20 75 6e 64 6f 6e 65 20 62 79 20 61 20  ork undone by a 
4f20: 52 4f 4c 4c 42 41 43 4b 20 69 6e 20 61 6e 20 6f  ROLLBACK in an o
4f30: 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e  uter transaction
4f40: 2e 0a 5e 41 20 70 6f 77 65 72 20 66 61 69 6c 75  ..^A power failu
4f50: 72 65 20 6f 72 20 70 72 6f 67 72 61 6d 20 63 72  re or program cr
4f60: 61 73 68 20 6f 72 20 4f 53 20 63 72 61 73 68 20  ash or OS crash 
4f70: 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20 6f  will cause the o
4f80: 75 74 65 72 2d 6d 6f 73 74 0a 74 72 61 6e 73 61  uter-most.transa
4f90: 63 74 69 6f 6e 20 74 6f 20 72 6f 6c 6c 62 61 63  ction to rollbac
4fa0: 6b 2c 20 75 6e 64 6f 69 6e 67 20 61 6c 6c 20 63  k, undoing all c
4fb0: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
4fc0: 20 6f 63 63 75 72 72 65 64 20 77 69 74 68 69 6e   occurred within
4fd0: 0a 74 68 61 74 20 6f 75 74 65 72 20 74 72 61 6e  .that outer tran
4fe0: 73 61 63 74 69 6f 6e 2c 20 65 76 65 6e 20 63 68  saction, even ch
4ff0: 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20  anges that have 
5000: 73 75 70 70 6f 73 65 64 6c 79 20 62 65 65 6e 20  supposedly been 
5010: 22 63 6f 6d 6d 69 74 74 65 64 22 0a 62 79 20 74  "committed".by t
5020: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
5030: 6e 64 2e 20 20 5e 43 6f 6e 74 65 6e 74 20 69 73  nd.  ^Content is
5040: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 63 6f   not actually co
5050: 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 64  mmitted on the d
5060: 69 73 6b 20 0a 75 6e 74 69 6c 20 74 68 65 20 6f  isk .until the o
5070: 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73 61 63  utermost transac
5080: 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70  tion commits.</p
5090: 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
50a0: 73 65 76 65 72 61 6c 20 77 61 79 73 20 6f 66 20  several ways of 
50b0: 74 68 69 6e 6b 69 6e 67 20 61 62 6f 75 74 20 74  thinking about t
50c0: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
50d0: 6e 64 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  nd:</p>..<ul>.<l
50e0: 69 3e 3c 70 3e 0a 53 6f 6d 65 20 70 65 6f 70 6c  i><p>.Some peopl
50f0: 65 20 76 69 65 77 20 52 45 4c 45 41 53 45 20 61  e view RELEASE a
5100: 73 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74  s the equivalent
5110: 20 6f 66 20 43 4f 4d 4d 49 54 20 66 6f 72 20 61   of COMMIT for a
5120: 20 53 41 56 45 50 4f 49 4e 54 2e 0a 54 68 69 73   SAVEPOINT..This
5130: 20 69 73 20 61 6e 20 61 63 63 65 70 74 61 62 6c   is an acceptabl
5140: 65 20 70 6f 69 6e 74 20 6f 66 20 76 69 65 77 20  e point of view 
5150: 61 73 20 6c 6f 6e 67 20 61 73 20 6f 6e 65 20 72  as long as one r
5160: 65 6d 65 6d 62 65 72 73 20 74 68 61 74 20 74 68  emembers that th
5170: 65 0a 63 68 61 6e 67 65 73 20 63 6f 6d 6d 69 74  e.changes commit
5180: 74 65 64 20 62 79 20 61 6e 20 69 6e 6e 65 72 20  ted by an inner 
5190: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68  transaction migh
51a0: 74 20 6c 61 74 65 72 20 62 65 20 75 6e 64 6f 6e  t later be undon
51b0: 65 20 62 79 20 61 0a 72 6f 6c 6c 62 61 63 6b 20  e by a.rollback 
51c0: 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e  in an outer tran
51d0: 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69  saction.</p></li
51e0: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41 6e 6f 74 68  >..<li><p>.Anoth
51f0: 65 72 20 76 69 65 77 20 6f 66 20 52 45 4c 45 41  er view of RELEA
5200: 53 45 20 69 73 20 74 68 61 74 20 69 74 20 6d 65  SE is that it me
5210: 72 67 65 73 20 61 20 6e 61 6d 65 64 20 74 72 61  rges a named tra
5220: 6e 73 61 63 74 69 6f 6e 20 69 6e 74 6f 20 69 74  nsaction into it
5230: 73 0a 70 61 72 65 6e 74 20 74 72 61 6e 73 61 63  s.parent transac
5240: 74 69 6f 6e 2c 20 73 6f 20 74 68 61 74 20 74 68  tion, so that th
5250: 65 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74  e named transact
5260: 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65  ion and its pare
5270: 6e 74 20 62 65 63 6f 6d 65 0a 74 68 65 20 73 61  nt become.the sa
5280: 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  me transaction. 
5290: 20 41 66 74 65 72 20 52 45 4c 45 41 53 45 2c 20   After RELEASE, 
52a0: 74 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73 61  the named transa
52b0: 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61  ction and its pa
52c0: 72 65 6e 74 0a 77 69 6c 6c 20 63 6f 6d 6d 69 74  rent.will commit
52d0: 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 6f 67   or rollback tog
52e0: 65 74 68 65 72 2c 20 77 68 61 74 65 76 65 72 20  ether, whatever 
52f0: 74 68 65 69 72 20 66 61 74 65 20 6d 61 79 20 62  their fate may b
5300: 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  e..</p></li>..<l
5310: 69 3e 3c 70 3e 0a 4f 6e 65 20 63 61 6e 20 61 6c  i><p>.One can al
5320: 73 6f 20 74 68 69 6e 6b 20 6f 66 20 73 61 76 65  so think of save
5330: 70 6f 69 6e 74 73 20 61 73 0a 22 6d 61 72 6b 73  points as."marks
5340: 22 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63  " in the transac
5350: 74 69 6f 6e 20 74 69 6d 65 6c 69 6e 65 2e 20 20  tion timeline.  
5360: 49 6e 20 74 68 69 73 20 76 69 65 77 2c 20 74 68  In this view, th
5370: 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d  e SAVEPOINT comm
5380: 61 6e 64 0a 63 72 65 61 74 65 73 20 61 20 6e 65  and.creates a ne
5390: 77 20 6d 61 72 6b 2c 20 74 68 65 20 52 4f 4c 4c  w mark, the ROLL
53a0: 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20  BACK TO command 
53b0: 72 65 77 69 6e 64 73 20 74 68 65 20 74 69 6d 65  rewinds the time
53c0: 6c 69 6e 65 20 62 61 63 6b 0a 74 6f 20 61 20 70  line back.to a p
53d0: 6f 69 6e 74 20 6a 75 73 74 20 61 66 74 65 72 20  oint just after 
53e0: 74 68 65 20 6e 61 6d 65 64 20 6d 61 72 6b 2c 20  the named mark, 
53f0: 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45 20  and the RELEASE 
5400: 63 6f 6d 6d 61 6e 64 0a 65 72 61 73 65 73 20 6d  command.erases m
5410: 61 72 6b 73 20 66 72 6f 6d 20 74 68 65 20 74 69  arks from the ti
5420: 6d 65 6c 69 6e 65 20 77 69 74 68 6f 75 74 20 61  meline without a
5430: 63 74 75 61 6c 6c 79 20 6d 61 6b 69 6e 67 20 61  ctually making a
5440: 6e 79 0a 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ny.changes to th
5450: 65 20 64 61 74 61 62 61 73 65 2e 0a 3c 2f 70 3e  e database..</p>
5460: 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c  </li>.</ul>....<
5470: 68 33 3e 54 72 61 6e 73 61 63 74 69 6f 6e 20 4e  h3>Transaction N
5480: 65 73 74 69 6e 67 20 52 75 6c 65 73 3c 2f 68 33  esting Rules</h3
5490: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 61 73 74 20  >..<p>^The last 
54a0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 72  transaction star
54b0: 74 65 64 20 77 69 6c 6c 20 62 65 20 74 68 65 20  ted will be the 
54c0: 66 69 72 73 74 0a 74 72 61 6e 73 61 63 74 69 6f  first.transactio
54d0: 6e 20 63 6f 6d 6d 69 74 74 65 64 20 6f 72 20 72  n committed or r
54e0: 6f 6c 6c 65 64 20 62 61 63 6b 2e 3c 2f 70 3e 0a  olled back.</p>.
54f0: 0a 3c 70 3e 5e 54 68 65 20 5b 42 45 47 49 4e 5d  .<p>^The [BEGIN]
5500: 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 77 6f   command only wo
5510: 72 6b 73 20 69 66 20 74 68 65 20 74 72 61 6e 73  rks if the trans
5520: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 69 73 20  action stack is 
5530: 65 6d 70 74 79 2c 20 6f 72 0a 69 6e 20 6f 74 68  empty, or.in oth
5540: 65 72 20 77 6f 72 64 73 20 69 66 20 74 68 65 72  er words if ther
5550: 65 20 61 72 65 20 6e 6f 20 70 65 6e 64 69 6e 67  e are no pending
5560: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20   transactions.  
5570: 5e 49 66 20 74 68 65 20 74 72 61 6e 73 61 63 74  ^If the transact
5580: 69 6f 6e 0a 73 74 61 63 6b 20 69 73 20 6e 6f 74  ion.stack is not
5590: 20 65 6d 70 74 79 20 77 68 65 6e 20 74 68 65 20   empty when the 
55a0: 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20  [BEGIN] command 
55b0: 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 65 6e  is invoked, then
55c0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 66 61 69   the command.fai
55d0: 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  ls with an error
55e0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b  .</p>..<p>^The [
55f0: 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20  COMMIT] command 
5600: 63 6f 6d 6d 69 74 73 20 61 6c 6c 20 6f 75 74 73  commits all outs
5610: 74 61 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74  tanding transact
5620: 69 6f 6e 73 20 61 6e 64 20 6c 65 61 76 65 73 0a  ions and leaves.
5630: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
5640: 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e  stack empty.</p>
5650: 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41 53  ..<p>^The RELEAS
5660: 45 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74 73  E command starts
5670: 20 77 69 74 68 20 74 68 65 20 6d 6f 73 74 20 72   with the most r
5680: 65 63 65 6e 74 20 61 64 64 69 74 69 6f 6e 20 74  ecent addition t
5690: 6f 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f  o the.transactio
56a0: 6e 20 73 74 61 63 6b 20 61 6e 64 20 72 65 6c 65  n stack and rele
56b0: 61 73 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20  ases savepoints 
56c0: 62 61 63 6b 77 61 72 64 73 20 0a 69 6e 20 74 69  backwards .in ti
56d0: 6d 65 20 75 6e 74 69 6c 20 69 74 20 72 65 6c 65  me until it rele
56e0: 61 73 65 73 20 61 20 73 61 76 65 70 6f 69 6e 74  ases a savepoint
56f0: 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67   with a matching
5700: 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 2e   savepoint-name.
5710: 0a 5e 50 72 69 6f 72 20 73 61 76 65 70 6f 69 6e  .^Prior savepoin
5720: 74 73 2c 20 65 76 65 6e 20 73 61 76 65 70 6f 69  ts, even savepoi
5730: 6e 74 73 20 77 69 74 68 20 6d 61 74 63 68 69 6e  nts with matchin
5740: 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65  g savepoint-name
5750: 73 2c 20 61 72 65 0a 75 6e 63 68 61 6e 67 65 64  s, are.unchanged
5760: 2e 0a 5e 49 66 20 74 68 65 20 52 45 4c 45 41 53  ..^If the RELEAS
5770: 45 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73  E command causes
5780: 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e   the.transaction
5790: 20 73 74 61 63 6b 20 74 6f 20 62 65 63 6f 6d 65   stack to become
57a0: 20 65 6d 70 74 79 20 28 69 66 20 74 68 65 20 52   empty (if the R
57b0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72  ELEASE command r
57c0: 65 6c 65 61 73 65 73 20 74 68 65 0a 6f 75 74 65  eleases the.oute
57d0: 72 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f  rmost transactio
57e0: 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61 63 6b  n from the stack
57f0: 29 20 74 68 65 6e 20 74 68 65 20 74 72 61 6e 73  ) then the trans
5800: 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c  action commits.<
5810: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 52 4f  /p>..<p>^The [RO
5820: 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20  LLBACK] command 
5830: 77 69 74 68 6f 75 74 20 61 20 54 4f 20 63 6c 61  without a TO cla
5840: 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 73 20  use rolls backs 
5850: 61 6c 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  all transactions
5860: 0a 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65 20  .and leaves the 
5870: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
5880: 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70  k empty.</p>..<p
5890: 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  >^The ROLLBACK c
58a0: 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61 20 54 4f  ommand with a TO
58b0: 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62 61   clause rolls ba
58c0: 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ck transactions 
58d0: 67 6f 69 6e 67 0a 62 61 63 6b 77 61 72 64 73 20  going.backwards 
58e0: 69 6e 20 74 69 6d 65 20 62 61 63 6b 20 74 6f 20  in time back to 
58f0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
5900: 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20 61  SAVEPOINT with a
5910: 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e 0a   matching name..
5920: 5e 54 68 65 20 53 41 56 45 50 4f 49 4e 54 20 77  ^The SAVEPOINT w
5930: 69 74 68 20 74 68 65 20 6d 61 74 63 68 69 6e 67  ith the matching
5940: 20 6e 61 6d 65 20 72 65 6d 61 69 6e 73 20 6f 6e   name remains on
5950: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
5960: 20 73 74 61 63 6b 2c 0a 62 75 74 20 61 6c 6c 20   stack,.but all 
5970: 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73  database changes
5980: 20 74 68 61 74 20 6f 63 63 75 72 72 65 64 20 61   that occurred a
5990: 66 74 65 72 20 74 68 61 74 20 53 41 56 45 50 4f  fter that SAVEPO
59a0: 49 4e 54 20 77 61 73 20 63 72 65 61 74 65 64 0a  INT was created.
59b0: 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  are rolled back.
59c0: 20 20 5e 49 66 20 74 68 65 20 73 61 76 65 70 6f    ^If the savepo
59d0: 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52 4f  int-name in a RO
59e0: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
59f0: 64 20 64 6f 65 73 20 6e 6f 74 0a 6d 61 74 63 68  d does not.match
5a00: 20 61 6e 79 20 53 41 56 45 50 4f 49 4e 54 20 6f   any SAVEPOINT o
5a10: 6e 20 74 68 65 20 73 74 61 63 6b 2c 20 74 68 65  n the stack, the
5a20: 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  n the ROLLBACK c
5a30: 6f 6d 6d 61 6e 64 20 66 61 69 6c 73 20 77 69 74  ommand fails wit
5a40: 68 20 61 6e 0a 65 72 72 6f 72 20 61 6e 64 20 6c  h an.error and l
5a50: 65 61 76 65 73 20 74 68 65 20 73 74 61 74 65 20  eaves the state 
5a60: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
5a70: 75 6e 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a  unchanged.</p>..
5a80: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
5a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5aa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ad0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 63 6f  #####.Section co
5ae0: 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 7b 63  mment comment {c
5af0: 6f 6d 6d 65 6e 74 20 2a 63 6f 6d 6d 65 6e 74 73  omment *comments
5b00: 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
5b10: 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e  leDiagram commen
5b20: 74 2d 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a  t-syntax.</tcl>.
5b30: 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72  .<p>^Comments ar
5b40: 65 20 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e  e not SQL comman
5b50: 64 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75  ds, but can occu
5b60: 72 20 77 69 74 68 69 6e 20 74 68 65 20 74 65 78  r within the tex
5b70: 74 20 6f 66 0a 53 51 4c 20 71 75 65 72 69 65 73  t of.SQL queries
5b80: 20 70 61 73 73 65 64 20 74 6f 20 5b 73 71 6c 69   passed to [sqli
5b90: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
5ba0: 5d 20 61 6e 64 20 72 65 6c 61 74 65 64 20 69 6e  ] and related in
5bb0: 74 65 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65  terfaces..^Comme
5bc0: 6e 74 73 20 61 72 65 20 74 72 65 61 74 65 64 20  nts are treated 
5bd0: 61 73 20 77 68 69 74 65 73 70 61 63 65 20 62 79  as whitespace by
5be0: 20 74 68 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f   the parser..^Co
5bf0: 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65 67 69 6e  mments can begin
5c00: 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73   anywhere whites
5c10: 70 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75  pace .can be fou
5c20: 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e  nd, including in
5c30: 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73  side expressions
5c40: 20 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69   that span multi
5c50: 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a  ple lines..</p>.
5c60: 0a 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74  .<p>^SQL comment
5c70: 73 20 62 65 67 69 6e 20 77 69 74 68 20 74 77 6f  s begin with two
5c80: 20 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d 22   consecutive "-"
5c90: 20 63 68 61 72 61 63 74 65 72 73 20 28 41 53 43   characters (ASC
5ca0: 49 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78 74  II 0x2d).and ext
5cb0: 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e  end up to and in
5cc0: 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74  cluding the next
5cd0: 20 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63 74   newline charact
5ce0: 65 72 20 28 41 53 43 49 49 20 30 78 30 61 29 0a  er (ASCII 0x0a).
5cf0: 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64  or until the end
5d00: 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68   of input, which
5d10: 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74  ever comes first
5d20: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79  .</p>..<p>^C-sty
5d30: 6c 65 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69  le comments begi
5d40: 6e 0a 77 69 74 68 20 22 2f 2a 22 20 61 6e 64 20  n.with "/*" and 
5d50: 65 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64  extend up to and
5d60: 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e   including the n
5d70: 65 78 74 20 22 2a 2f 22 20 63 68 61 72 61 63 74  ext "*/" charact
5d80: 65 72 20 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c  er pair.or until
5d90: 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75   the end of inpu
5da0: 74 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d  t, whichever com
5db0: 65 73 20 66 69 72 73 74 2e 20 20 5e 43 2d 73 74  es first.  ^C-st
5dc0: 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e  yle comments.can
5dd0: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
5de0: 69 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ines. </p>..<p>^
5df0: 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70 70  Comments can app
5e00: 65 61 72 20 61 6e 79 77 68 65 72 65 20 77 68 69  ear anywhere whi
5e10: 74 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63 75  tespace can occu
5e20: 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73  r,.including ins
5e30: 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ide expressions 
5e40: 61 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  and in the middl
5e50: 65 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73  e of other SQL s
5e60: 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d  tatements..^Comm
5e70: 65 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74  ents do not nest
5e80: 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  ..</p>...<tcl>.#
5e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
5ee0: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e  ction {CREATE IN
5ef0: 44 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78  DEX} createindex
5f00: 20 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d   {{CREATE INDEX}
5f10: 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
5f20: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
5f30: 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63  -index-stmt.</tc
5f40: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41  l>..<p>^The CREA
5f50: 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64  TE INDEX command
5f60: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
5f70: 20 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41 54   keywords "CREAT
5f80: 45 20 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77 65  E INDEX" followe
5f90: 64 0a 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66  d.by the name of
5fa0: 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 2c 20   the new index, 
5fb0: 74 68 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e 22  the keyword "ON"
5fc0: 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  , the name of a 
5fd0: 70 72 65 76 69 6f 75 73 6c 79 0a 63 72 65 61 74  previously.creat
5fe0: 65 64 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  ed table that is
5ff0: 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 2c 20   to be indexed, 
6000: 61 6e 64 20 61 20 70 61 72 65 6e 74 68 65 73 69  and a parenthesi
6010: 7a 65 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  zed list of name
6020: 73 20 6f 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e 20  s of.columns in 
6030: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
6040: 72 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  re used for the 
6050: 69 6e 64 65 78 20 6b 65 79 2e 0a 49 66 20 74 68  index key..If th
6060: 65 20 6f 70 74 69 6f 6e 61 6c 20 57 48 45 52 45  e optional WHERE
6070: 20 63 6c 61 75 73 65 20 69 73 20 69 6e 63 6c 75   clause is inclu
6080: 64 65 64 2c 20 74 68 65 6e 20 74 68 65 20 69 6e  ded, then the in
6090: 64 65 78 20 69 73 20 61 20 22 5b 70 61 72 74 69  dex is a "[parti
60a0: 61 6c 20 69 6e 64 65 78 5d 22 2e 0a 3c 2f 70 3e  al index]"..</p>
60b0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
60c0: 6e 74 20 7b 64 65 73 63 69 64 78 7d 20 7b 64 65  nt {descidx} {de
60d0: 73 63 65 6e 64 69 6e 67 20 69 6e 64 69 63 65 73  scending indices
60e0: 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e  } {descending in
60f0: 64 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45  dex}</tcl>.<p>^E
6100: 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ach column name 
6110: 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  can be followed 
6120: 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 22 41  by one of the "A
6130: 53 43 22 20 6f 72 20 22 44 45 53 43 22 20 6b 65  SC" or "DESC" ke
6140: 79 77 6f 72 64 73 0a 74 6f 20 69 6e 64 69 63 61  ywords.to indica
6150: 74 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20  te sort order.  
6160: 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20  ^The sort order 
6170: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
6180: 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65 6e 64  e ignored depend
6190: 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74 61 62  ing.on the datab
61a0: 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2c  ase file format,
61b0: 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63 75 6c   and in particul
61c0: 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61 20 66  ar the [schema f
61d0: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e  ormat number]..^
61e0: 54 68 65 20 22 6c 65 67 61 63 79 22 20 73 63 68  The "legacy" sch
61f0: 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29 20 69  ema format (1) i
6200: 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72  gnores index.sor
6210: 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 64  t order.  ^The d
6220: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20  escending index 
6230: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 34  schema format (4
6240: 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f  ) takes index so
6250: 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63  rt order.into ac
6260: 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65 72  count.  Only ver
6270: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
6280: 33 2e 33 2e 30 20 61 6e 64 20 6c 61 74 65 72 20  3.3.0 and later 
6290: 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64 65  are able to unde
62a0: 72 73 74 61 6e 64 0a 74 68 65 20 64 65 73 63 65  rstand.the desce
62b0: 6e 64 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 6d  nding index form
62c0: 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69 62  at. For compatib
62d0: 69 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20 6f  ility, version o
62e0: 66 20 53 51 4c 69 74 65 20 62 65 74 77 65 65 6e  f SQLite between
62f0: 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e 39   3.3.0.and 3.7.9
6300: 20 75 73 65 20 74 68 65 20 6c 65 67 61 63 79 20   use the legacy 
6310: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62 79  schema format by
6320: 20 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20 6e   default.  The n
6330: 65 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72 6d  ewer schema form
6340: 61 74 20 69 73 0a 75 73 65 64 20 62 79 20 64 65  at is.used by de
6350: 66 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f 6e  fault in version
6360: 20 33 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74 65   3.7.10 and late
6370: 72 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f  r..^The [legacy_
6380: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67  file_format prag
6390: 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20  ma] can be used 
63a0: 74 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74 68  to change set th
63b0: 65 20 73 70 65 63 69 66 69 63 0a 62 65 68 61 76  e specific.behav
63c0: 69 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72 73  ior for any vers
63d0: 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c 2f  ion of SQLite.</
63e0: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c  p>..<p>^The COLL
63f0: 41 54 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f  ATE clause optio
6400: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20  nally following 
6410: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  each column name
6420: 20 64 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c 61   defines a.colla
6430: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 75 73  ting sequence us
6440: 65 64 20 66 6f 72 20 74 65 78 74 20 65 6e 74 72  ed for text entr
6450: 69 65 73 20 69 6e 20 74 68 61 74 20 63 6f 6c 75  ies in that colu
6460: 6d 6e 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74  mn..^The default
6470: 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65   collating.seque
6480: 6e 63 65 20 69 73 20 74 68 65 20 63 6f 6c 6c 61  nce is the colla
6490: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65  ting sequence de
64a0: 66 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20 63  fined for that c
64b0: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43 52  olumn in the.[CR
64c0: 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
64d0: 65 6d 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20 6e  ement.  ^Or if n
64e0: 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  o collating sequ
64f0: 65 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69 73  ence is otherwis
6500: 65 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62  e defined,.the b
6510: 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63  uilt-in BINARY c
6520: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
6530: 65 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  e is used.</p>..
6540: 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20  <p>There are no 
6550: 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73  arbitrary limits
6560: 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
6570: 66 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 63  f indices that c
6580: 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20 74  an be.attached t
6590: 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
65a0: 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20  .  ^(The number 
65b0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e  of columns in an
65c0: 20 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74   index is .limit
65d0: 65 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  ed to the value 
65e0: 73 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33 5f  set by.[sqlite3_
65f0: 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f 4c  limit]([SQLITE_L
6600: 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e  IMIT_COLUMN],...
6610: 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ).)^</p>..<tcl>h
6620: 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75  d_fragment uniqu
6630: 65 69 64 78 20 7b 75 6e 69 71 75 65 20 69 6e 64  eidx {unique ind
6640: 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66  ex}</tcl>.<p>^If
6650: 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77   the UNIQUE keyw
6660: 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 74 77  ord appears betw
6670: 65 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49  een CREATE and I
6680: 4e 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63  NDEX then duplic
6690: 61 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65  ate.index entrie
66a0: 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  s are not allowe
66b0: 64 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74  d.  ^Any attempt
66c0: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70   to insert a dup
66d0: 6c 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c  licate entry.wil
66e0: 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65  l result in an e
66f0: 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20  rror.  ^For the 
6700: 70 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71  purposes of uniq
6710: 75 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20  ue indices, all 
6720: 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20  NULL values.are 
6730: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64 69  considered to di
6740: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c  fferent from all
6750: 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
6760: 65 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20  es and are thus 
6770: 75 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20  unique..This is 
6780: 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70  one of the two p
6790: 6f 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65  ossible interpre
67a0: 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53  tations of the S
67b0: 51 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28  QL-92 standard.(
67c0: 74 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20  the language in 
67d0: 74 68 65 20 73 74 61 6e 64 61 72 64 20 69 73 20  the standard is 
67e0: 61 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69  ambiguous) and i
67f0: 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 61  s the interpreta
6800: 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79  tion.followed by
6810: 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53   PostgreSQL, MyS
6820: 51 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e  QL, Firebird, an
6830: 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72  d Oracle.  Infor
6840: 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66  mix and.Microsof
6850: 74 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c  t SQL Server fol
6860: 6c 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e  low the other in
6870: 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
6880: 74 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70  the standard.</p
6890: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70  >..<p>^If the op
68a0: 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58  tional IF NOT EX
68b0: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
68c0: 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68  resent and anoth
68d0: 65 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68  er index.with th
68e0: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65  e same name alre
68f0: 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e  ady exists, then
6900: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65   this command be
6910: 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f  comes a no-op.</
6920: 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20  p>..<p>^Indexes 
6930: 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68  are removed with
6940: 20 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58   the [DROP INDEX
6950: 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a  ] command.</p>..
6960: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
6970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69b0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
69c0: 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72  REATE TABLE} {cr
69d0: 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45  eatetable} {{CRE
69e0: 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63  ATE TABLE}}..Rec
69f0: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
6a00: 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65  ram create-table
6a10: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
6a20: 3e 54 68 65 20 22 43 52 45 41 54 45 20 54 41 42  >The "CREATE TAB
6a30: 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  LE" command is u
6a40: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
6a50: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20  new table in an 
6a60: 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65  SQLite .database
6a70: 2e 20 41 20 43 52 45 41 54 45 20 54 41 42 4c 45  . A CREATE TABLE
6a80: 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69   command specifi
6a90: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
6aa0: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 74   attributes of t
6ab0: 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c  he.new table:..<
6ac0: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65  ul>.  <li><p>The
6ad0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77   name of the new
6ae0: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
6af0: 70 3e 20 54 68 65 20 64 61 74 61 62 61 73 65 20  p> The database 
6b00: 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65 77  in which the new
6b10: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
6b20: 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65  d. Tables may be
6b30: 20 0a 20 20 20 20 20 20 63 72 65 61 74 65 64 20   .      created 
6b40: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
6b50: 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64  base, the temp d
6b60: 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61  atabase, or in a
6b70: 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20 20 20  ny attached.    
6b80: 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c    database...  <
6b90: 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20  li><p> The name 
6ba0: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
6bb0: 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20  n the table...  
6bc0: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c  <li><p> The decl
6bd0: 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63  ared type of eac
6be0: 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
6bf0: 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  table...  <li><p
6c00: 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75  > A default valu
6c10: 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20  e or expression 
6c20: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
6c30: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20  in the table... 
6c40: 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75   <li><p> A defau
6c50: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
6c60: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74  uence to use wit
6c70: 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a  h each column...
6c80: 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e    <li><p> Option
6c90: 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20  ally, a PRIMARY 
6ca0: 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
6cb0: 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63  e. Both single c
6cc0: 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20  olumn and.      
6cd0: 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74   composite (mult
6ce0: 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69  iple column) pri
6cf0: 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20 73 75  mary keys are su
6d00: 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e  pported...  <li>
6d10: 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c  <p> A set of SQL
6d20: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72   constraints for
6d30: 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c   each table. SQL
6d40: 69 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49  ite supports UNI
6d50: 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20  QUE, NOT.       
6d60: 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20  NULL, CHECK and 
6d70: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
6d80: 74 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e  traints...  <li>
6d90: 3c 70 3e 20 57 68 65 74 68 65 72 20 74 68 65 20  <p> Whether the 
6da0: 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
6db0: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
6dc0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72  ..</ul>..<p>Ever
6dd0: 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  y CREATE TABLE s
6de0: 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70  tatement must sp
6df0: 65 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72  ecify a name for
6e00: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a   the new table..
6e10: 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20    ^(Table names 
6e20: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
6e30: 22 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65  "sqlite_" are re
6e40: 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72  served for inter
6e50: 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73  nal use. It.  is
6e60: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74   an error to att
6e70: 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61  empt to create a
6e80: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61   table with a na
6e90: 6d 65 20 74 68 61 74 20 73 74 61 72 74 73 20 77  me that starts w
6ea0: 69 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e  ith.  "sqlite_".
6eb0: 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c  )^..<p> ^If a &l
6ec0: 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26  t;database-name&
6ed0: 67 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64  gt; is specified
6ee0: 2c 20 69 74 20 6d 75 73 74 20 62 65 20 65 69 74  , it must be eit
6ef0: 68 65 72 20 22 6d 61 69 6e 22 2c 20 0a 20 20 22  her "main", .  "
6f00: 74 65 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e 61  temp", or the na
6f10: 6d 65 20 6f 66 20 61 6e 20 5b 41 54 54 41 43 48  me of an [ATTACH
6f20: 20 44 41 54 41 42 41 53 45 7c 61 74 74 61 63 68   DATABASE|attach
6f30: 65 64 20 64 61 74 61 62 61 73 65 5d 2e 20 5e 49  ed database]. ^I
6f40: 6e 20 74 68 69 73 20 63 61 73 65 0a 20 20 74 68  n this case.  th
6f50: 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63  e new table is c
6f60: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6e 61  reated in the na
6f70: 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49  med database. ^I
6f80: 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20  f the "TEMP" or 
6f90: 22 54 45 4d 50 4f 52 41 52 59 22 0a 20 20 6b 65  "TEMPORARY".  ke
6fa0: 79 77 6f 72 64 20 6f 63 63 75 72 73 20 62 65 74  yword occurs bet
6fb0: 77 65 65 6e 20 74 68 65 20 22 43 52 45 41 54 45  ween the "CREATE
6fc0: 22 20 61 6e 64 20 22 54 41 42 4c 45 22 20 74 68  " and "TABLE" th
6fd0: 65 6e 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  en the new table
6fe0: 20 69 73 0a 20 20 63 72 65 61 74 65 64 20 69 6e   is.  created in
6ff0: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
7000: 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72  se. ^It is an er
7010: 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62  ror to specify b
7020: 6f 74 68 20 61 20 0a 20 20 26 6c 74 3b 64 61 74  oth a .  &lt;dat
7030: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 61  abase-name&gt; a
7040: 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72 20 54  nd the TEMP or T
7050: 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64  EMPORARY keyword
7060: 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a 20 20 26  , unless the.  &
7070: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
7080: 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20  &gt; is "temp". 
7090: 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20  ^If no database 
70a0: 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
70b0: 64 20 61 6e 64 20 74 68 65 0a 20 20 54 45 4d 50  d and the.  TEMP
70c0: 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20   keyword is not 
70d0: 70 72 65 73 65 6e 74 20 74 68 65 6e 20 74 68 65  present then the
70e0: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
70f0: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 0a 20 20  d in the main.  
7100: 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 0a 20  database...<p>. 
7110: 20 5e 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20   ^It is usually 
7120: 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65  an error to atte
7130: 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20  mpt to create a 
7140: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 20 64  new table in a d
7150: 61 74 61 62 61 73 65 20 74 68 61 74 0a 20 20 61  atabase that.  a
7160: 6c 72 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20  lready contains 
7170: 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f  a table, index o
7180: 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61  r view of the sa
7190: 6d 65 20 6e 61 6d 65 2e 20 5e 48 6f 77 65 76 65  me name. ^Howeve
71a0: 72 2c 20 69 66 20 74 68 65 0a 20 20 22 49 46 20  r, if the.  "IF 
71b0: 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75  NOT EXISTS" clau
71c0: 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  se is specified 
71d0: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43  as part of the C
71e0: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
71f0: 65 6d 65 6e 74 20 61 6e 64 0a 20 20 61 20 74 61  ement and.  a ta
7200: 62 6c 65 20 6f 72 20 76 69 65 77 20 6f 66 20 74  ble or view of t
7210: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72  he same name alr
7220: 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65  eady exists, the
7230: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
7240: 6d 6d 61 6e 64 0a 20 20 73 69 6d 70 6c 79 20 68  mmand.  simply h
7250: 61 73 20 6e 6f 20 65 66 66 65 63 74 20 28 61 6e  as no effect (an
7260: 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61  d no error messa
7270: 67 65 20 69 73 20 72 65 74 75 72 6e 65 64 29 2e  ge is returned).
7280: 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 73 74   ^An error is st
7290: 69 6c 6c 0a 20 20 72 65 74 75 72 6e 65 64 20 69  ill.  returned i
72a0: 66 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 6e  f the table cann
72b0: 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 62 65  ot be created be
72c0: 63 61 75 73 65 20 6f 66 20 61 6e 20 65 78 69 73  cause of an exis
72d0: 74 69 6e 67 20 69 6e 64 65 78 2c 20 65 76 65 6e  ting index, even
72e0: 20 0a 20 20 69 66 20 74 68 65 20 22 49 46 20 4e   .  if the "IF N
72f0: 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75 73  OT EXISTS" claus
7300: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
7310: 0a 3c 70 3e 5e 49 74 20 69 73 20 6e 6f 74 20 61  .<p>^It is not a
7320: 6e 20 65 72 72 6f 72 20 74 6f 20 63 72 65 61 74  n error to creat
7330: 65 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 68  e a table that h
7340: 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
7350: 20 61 73 20 61 6e 20 0a 20 20 65 78 69 73 74 69   as an .  existi
7360: 6e 67 20 5b 43 52 45 41 54 45 20 54 52 49 47 47  ng [CREATE TRIGG
7370: 45 52 7c 74 72 69 67 67 65 72 5d 2e 0a 0a 3c 70  ER|trigger]...<p
7380: 3e 5e 54 61 62 6c 65 73 20 61 72 65 20 72 65 6d  >^Tables are rem
7390: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  oved using the [
73a0: 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74  DROP TABLE] stat
73b0: 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c 68  ement.  </p>..<h
73c0: 33 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e  3>CREATE TABLE .
73d0: 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 53 74 61  .. AS SELECT Sta
73e0: 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70  tements</h3>..<p
73f0: 3e 5e 28 41 20 22 43 52 45 41 54 45 20 54 41 42  >^(A "CREATE TAB
7400: 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54  LE ... AS SELECT
7410: 22 20 73 74 61 74 65 6d 65 6e 74 20 63 72 65 61  " statement crea
7420: 74 65 73 20 61 6e 64 20 70 6f 70 75 6c 61 74 65  tes and populate
7430: 73 20 61 20 64 61 74 61 62 61 73 65 0a 74 61 62  s a database.tab
7440: 6c 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  le based on the 
7450: 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
7460: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e  ECT statement.)^
7470: 20 5e 28 54 68 65 20 74 61 62 6c 65 20 68 61 73   ^(The table has
7480: 20 74 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72   the same.number
7490: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74   of columns as t
74a0: 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  he rows returned
74b0: 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
74c0: 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61  tatement. The na
74d0: 6d 65 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d  me of.each colum
74e0: 6e 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  n is the same as
74f0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
7500: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63   corresponding c
7510: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73  olumn in the res
7520: 75 6c 74 0a 73 65 74 20 6f 66 20 74 68 65 20 53  ult.set of the S
7530: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
7540: 29 5e 20 5e 28 54 68 65 20 64 65 63 6c 61 72 65  )^ ^(The declare
7550: 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  d type of each c
7560: 6f 6c 75 6d 6e 20 69 73 20 64 65 74 65 72 6d 69  olumn is determi
7570: 6e 65 64 0a 62 79 20 74 68 65 20 5b 65 78 70 72  ned.by the [expr
7580: 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d  ession affinity]
7590: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
75a0: 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nding expression
75b0: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
75c0: 65 74 0a 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et.of the SELECT
75d0: 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 73 20 66   statement, as f
75e0: 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63  ollows:.</p>..<c
75f0: 65 6e 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72  enter><table bor
7600: 64 65 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68  der=1>.  <tr><th
7610: 3e 45 78 70 72 65 73 73 69 6f 6e 20 41 66 66 69  >Expression Affi
7620: 6e 69 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d  nity   <th>Colum
7630: 6e 20 44 65 63 6c 61 72 65 64 20 54 79 70 65 0a  n Declared Type.
7640: 20 20 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20 20    <tr><td>TEXT  
7650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7660: 3c 74 64 3e 22 54 45 58 54 22 0a 20 20 3c 74 72  <td>"TEXT".  <tr
7670: 3e 3c 74 64 3e 4e 55 4d 45 52 49 43 20 20 20 20  ><td>NUMERIC    
7680: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
7690: 4e 55 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49  NUM".  <tr><td>I
76a0: 4e 54 45 47 45 52 20 20 20 20 20 20 20 20 20 20  NTEGER          
76b0: 20 20 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20       <td>"INT". 
76c0: 20 3c 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20   <tr><td>REAL   
76d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c                 <
76e0: 74 64 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e  td>"REAL".  <tr>
76f0: 3c 74 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20 20  <td>NONE        
7700: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 22            <td>""
7710: 20 28 65 6d 70 74 79 20 73 74 72 69 6e 67 29 0a   (empty string).
7720: 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72  </table></center
7730: 3e 29 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c  >)^..<p>^(A tabl
7740: 65 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  e created using 
7750: 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20  CREATE TABLE AS 
7760: 68 61 73 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b  has no PRIMARY K
7770: 45 59 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72  EY and no.constr
7780: 61 69 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e  aints of any kin
7790: 64 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  d. The default v
77a0: 61 6c 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  alue of each col
77b0: 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65  umn is NULL. The
77c0: 20 64 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69   default.collati
77d0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  on sequence for 
77e0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  each column of t
77f0: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20  he new table is 
7800: 42 49 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54  BINARY.)^..<p>^T
7810: 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73  ables created us
7820: 69 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c 45  ing CREATE TABLE
7830: 20 41 53 20 61 72 65 20 69 6e 69 74 69 61 6c 6c   AS are initiall
7840: 79 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68  y populated with
7850: 20 74 68 65 0a 72 6f 77 73 20 6f 66 20 64 61 74   the.rows of dat
7860: 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  a returned by th
7870: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
7880: 6e 74 2e 20 5e 52 6f 77 73 20 61 72 65 20 61 73  nt. ^Rows are as
7890: 73 69 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75  signed contiguou
78a0: 73 6c 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72  sly.ascending [r
78b0: 6f 77 69 64 5d 20 76 61 6c 75 65 73 2c 20 73 74  owid] values, st
78c0: 61 72 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69  arting with 1, i
78d0: 6e 20 74 68 65 20 5b 6f 72 64 65 72 20 62 79 7c  n the [order by|
78e0: 6f 72 64 65 72 5d 20 74 68 61 74 20 74 68 65 79  order] that they
78f0: 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79  .are returned by
7900: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
7910: 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ement...<tcl>hd_
7920: 66 72 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63  fragment {tablec
7930: 6f 6c 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64  oldef} {column d
7940: 65 66 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75  efinition} {colu
7950: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c  mn definitions}<
7960: 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e  /tcl>.<h3>Column
7970: 20 44 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33   Definitions</h3
7980: 3e 0a 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20  >..<p>Unless it 
7990: 69 73 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  is a CREATE TABL
79a0: 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20  E ... AS SELECT 
79b0: 73 74 61 74 65 6d 65 6e 74 2c 20 61 20 43 52 45  statement, a CRE
79c0: 41 54 45 20 54 41 42 4c 45 20 69 6e 63 6c 75 64  ATE TABLE includ
79d0: 65 73 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b  es.one or more [
79e0: 63 6f 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d  column-def|colum
79f0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20  n definitions], 
7a00: 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
7a10: 77 65 64 20 62 79 20 61 20 6c 69 73 74 20 6f 66  wed by a list of
7a20: 0a 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69  .[table-constrai
7a30: 6e 74 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72 61  nt|table constra
7a40: 69 6e 74 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c  ints].  Each col
7a50: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 63  umn definition c
7a60: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 0a 6e  onsists of the.n
7a70: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ame of the colum
7a80: 6e 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  n, optionally fo
7a90: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 64 65  llowed by the de
7aa0: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
7ab0: 68 65 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20  he column,.then 
7ac0: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69  one or more opti
7ad0: 6f 6e 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e  onal [column-con
7ae0: 73 74 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63  straint|column c
7af0: 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63  onstraints]. Inc
7b00: 6c 75 64 65 64 20 69 6e 0a 74 68 65 20 64 65 66  luded in.the def
7b10: 69 6e 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75  inition of "colu
7b20: 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 22 20  mn constraints" 
7b30: 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
7b40: 20 6f 66 20 74 68 65 20 70 72 65 76 69 6f 75 73   of the previous
7b50: 0a 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20 74  .statement are t
7b60: 68 65 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44  he COLLATE and D
7b70: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 73 2c 20  EFAULT clauses, 
7b80: 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73  even though thes
7b90: 65 20 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79  e are not really
7ba0: 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20  .constraints in 
7bb0: 74 68 65 20 73 65 6e 73 65 20 74 68 61 74 20 74  the sense that t
7bc0: 68 65 79 20 64 6f 20 6e 6f 74 20 72 65 73 74 72  hey do not restr
7bd0: 69 63 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ict the data tha
7be0: 74 20 74 68 65 20 74 61 62 6c 65 20 6d 61 79 0a  t the table may.
7bf0: 63 6f 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74 68  contain. The oth
7c00: 65 72 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d  er constraints -
7c10: 20 4e 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b   NOT NULL, CHECK
7c20: 2c 20 55 4e 49 51 55 45 2c 20 50 52 49 4d 41 52  , UNIQUE, PRIMAR
7c30: 59 20 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49 47  Y KEY and.FOREIG
7c40: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
7c50: 73 20 2d 20 69 6d 70 6f 73 65 20 72 65 73 74 72  s - impose restr
7c60: 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74  ictions on the t
7c70: 61 62 6c 65 73 20 64 61 74 61 2c 20 61 6e 64 20  ables data, and 
7c80: 61 72 65 20 61 72 65 0a 64 65 73 63 72 69 62 65  are are.describe
7c90: 64 20 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61  d under [constra
7ca0: 69 6e 74 73 7c 53 51 4c 20 44 61 74 61 20 43 6f  ints|SQL Data Co
7cb0: 6e 73 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77  nstraints] below
7cc0: 2e 0a 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f  ...<p>^Unlike mo
7cd0: 73 74 20 53 51 4c 20 64 61 74 61 62 61 73 65 73  st SQL databases
7ce0: 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
7cf0: 74 20 72 65 73 74 72 69 63 74 20 74 68 65 20 74  t restrict the t
7d00: 79 70 65 20 6f 66 20 64 61 74 61 20 74 68 61 74  ype of data that
7d10: 0a 6d 61 79 20 62 65 20 69 6e 73 65 72 74 65 64  .may be inserted
7d20: 20 69 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62   into a column b
7d30: 61 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75  ased on the colu
7d40: 6d 6e 73 20 64 65 63 6c 61 72 65 64 20 74 79 70  mns declared typ
7d50: 65 2e 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69  e. Instead,.SQLi
7d60: 74 65 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63  te uses [dynamic
7d70: 20 74 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64   typing]. ^The d
7d80: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20  eclared type of 
7d90: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  a column is used
7da0: 20 74 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74 68   to.determine th
7db0: 65 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20  e [affinity] of 
7dc0: 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e  the column only.
7dd0: 0a 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54  ..<p>The DEFAULT
7de0: 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
7df0: 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  s a default valu
7e00: 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65  e to use for the
7e10: 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61   column if no.va
7e20: 6c 75 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c  lue is explicitl
7e30: 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  y provided by th
7e40: 65 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e  e user when doin
7e50: 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e  g an [INSERT]. ^
7e60: 49 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65  If there.is no e
7e70: 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20  xplicit DEFAULT 
7e80: 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
7e90: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
7ea0: 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nition, then the
7eb0: 20 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20   .default value 
7ec0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  of the column is
7ed0: 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c   NULL. ^(An expl
7ee0: 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61  icit DEFAULT cla
7ef0: 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a  use may specify.
7f00: 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  that the default
7f10: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
7f20: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  a string constan
7f30: 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61  t, a blob consta
7f40: 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d  nt, a.signed-num
7f50: 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73  ber, or any cons
7f60: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
7f70: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65  enclosed in pare
7f80: 6e 74 68 65 73 65 73 2e 20 41 6e 20 65 78 70 6c  ntheses. An expl
7f90: 69 63 69 74 0a 64 65 66 61 75 6c 74 20 76 61 6c  icit.default val
7fa0: 75 65 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f  ue may also be o
7fb0: 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 61  ne of the specia
7fc0: 6c 20 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65  l case-independe
7fd0: 6e 74 20 6b 65 79 77 6f 72 64 73 0a 43 55 52 52  nt keywords.CURR
7fe0: 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e  ENT_TIME, CURREN
7ff0: 54 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45 4e  T_DATE or CURREN
8000: 54 5f 54 49 4d 45 53 54 41 4d 50 2e 29 5e 20 5e  T_TIMESTAMP.)^ ^
8010: 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
8020: 20 6f 66 20 74 68 65 0a 44 45 46 41 55 4c 54 20   of the.DEFAULT 
8030: 63 6c 61 75 73 65 2c 20 61 6e 20 65 78 70 72 65  clause, an expre
8040: 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65  ssion is conside
8050: 72 65 64 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f  red constant pro
8060: 76 69 64 65 64 20 74 68 61 74 20 69 74 20 64 6f  vided that it do
8070: 65 73 0a 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  es.not contain a
8080: 6e 79 20 73 75 62 2d 71 75 65 72 69 65 73 20 6f  ny sub-queries o
8090: 72 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  r string constan
80a0: 74 73 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 64  ts enclosed in d
80b0: 6f 75 62 6c 65 20 71 75 6f 74 65 73 2e 0a 0a 3c  ouble quotes...<
80c0: 70 3e 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20  p>^(Each time a 
80d0: 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20  row is inserted 
80e0: 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  into the table b
80f0: 79 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  y an INSERT stat
8100: 65 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73  ement that .does
8110: 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70   not provide exp
8120: 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72  licit values for
8130: 20 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d   all table colum
8140: 6e 73 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  ns the values st
8150: 6f 72 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20  ored in.the new 
8160: 72 6f 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e  row are determin
8170: 65 64 20 62 79 20 74 68 65 69 72 20 64 65 66 61  ed by their defa
8180: 75 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73  ult values)^, as
8190: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a   follows:..<ul>.
81a0: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
81b0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
81c0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  f the column is 
81d0: 61 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c  a constant NULL,
81e0: 20 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20   text, blob or. 
81f0: 20 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72     signed-number
8200: 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61   value, then tha
8210: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
8220: 64 69 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20  directly in the 
8230: 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e  new row...  <li>
8240: 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75  <p>^If the defau
8250: 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f  lt value of a co
8260: 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
8270: 73 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68  ssion in parenth
8280: 65 73 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74  eses, then.    t
8290: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
82a0: 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
82b0: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73  for each row ins
82c0: 65 72 74 65 64 20 61 6e 64 20 74 68 65 20 72 65  erted and the re
82d0: 73 75 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69  sults.    used i
82e0: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a  n the new row...
82f0: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
8300: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
8310: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55  f a column is CU
8320: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
8330: 45 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20  ENT_DATE or.    
8340: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
8350: 50 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  P, then the valu
8360: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65  e used in the ne
8370: 77 20 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a  w row is a text.
8380: 20 20 20 20 72 65 70 72 65 73 65 6e 74 61 74 69      representati
8390: 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  on of the curren
83a0: 74 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f  t UTC date and/o
83b0: 72 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52  r time. ^For CUR
83c0: 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20  RENT_TIME, the. 
83d0: 20 20 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65     format of the
83e0: 20 76 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d   value is "HH:MM
83f0: 3a 53 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45  :SS". ^For CURRE
8400: 4e 54 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d  NT_DATE, "YYYY-M
8410: 4d 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20  M-DD". ^The.    
8420: 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45  format for CURRE
8430: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20  NT_TIMESTAMP is 
8440: 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  "YYYY-MM-DD HH:M
8450: 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  M:SS"..</ul>..<p
8460: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
8470: 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
8480: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f  he name of a [co
8490: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
84a0: 5d 20 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20  ] to use as.the 
84b0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
84c0: 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74  n sequence for t
84d0: 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e  he column. ^If n
84e0: 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  o COLLATE clause
84f0: 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
8500: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
8510: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
8520: 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e   [BINARY]...<p>^
8530: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
8540: 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65  lumns in a table
8550: 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74   is limited by t
8560: 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43  he [SQLITE_MAX_C
8570: 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74  OLUMN].compile-t
8580: 69 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e  ime parameter. ^
8590: 41 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  A single row of 
85a0: 61 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73  a table cannot s
85b0: 74 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b  tore more than.[
85c0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
85d0: 48 5d 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  H] bytes of data
85e0: 2e 20 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65  . ^Both of these
85f0: 20 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c   limits can be l
8600: 6f 77 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d  owered at.runtim
8610: 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  e using the [sql
8620: 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f  ite3_limit()] C/
8630: 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  C++ interface.</
8640: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
8650: 6d 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74  ment {constraint
8660: 73 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d  s} {constraints}
8670: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44  </tcl>.<h3>SQL D
8680: 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c  ata Constraints<
8690: 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /h3>..<tcl>hd_fr
86a0: 61 67 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f  agment primkeyco
86b0: 6e 73 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59  nst {PRIMARY KEY
86c0: 7d 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63  } {PRIMARY KEY c
86d0: 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e  onstraint}</tcl>
86e0: 0a 3c 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20  .<p>^Each table 
86f0: 69 6e 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61  in SQLite may ha
8700: 76 65 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c  ve at most one <
8710: 62 3e 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62  b>PRIMARY KEY</b
8720: 3e 2e 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79  >. ^If the.  key
8730: 77 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45  words PRIMARY KE
8740: 59 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  Y are added to a
8750: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
8760: 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69  on, then the pri
8770: 6d 61 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74  mary key.  for t
8780: 68 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74  he table consist
8790: 73 20 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65  s of that single
87a0: 20 63 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66   column. ^Or, if
87b0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
87c0: 6c 61 75 73 65 20 0a 20 20 69 73 20 73 70 65 63  lause .  is spec
87d0: 69 66 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c  ified as a [tabl
87e0: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74  e-constraint], t
87f0: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
8800: 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
8810: 0a 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  .  consists of t
8820: 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d  he list of colum
8830: 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ns specified as 
8840: 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d  part of the PRIM
8850: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a  ARY KEY clause..
8860: 20 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 72    ^An error is r
8870: 61 69 73 65 64 20 69 66 20 6d 6f 72 65 20 74 68  aised if more th
8880: 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b  an one PRIMARY K
8890: 45 59 20 63 6c 61 75 73 65 20 61 70 70 65 61 72  EY clause appear
88a0: 73 20 69 6e 20 61 0a 20 20 43 52 45 41 54 45 20  s in a.  CREATE 
88b0: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
88c0: 20 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b    ^The PRIMARY K
88d0: 45 59 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66  EY is optional f
88e0: 6f 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  or ordinary tabl
88f0: 65 73 0a 20 20 62 75 74 20 69 73 20 72 65 71 75  es.  but is requ
8900: 69 72 65 64 20 66 6f 72 20 5b 57 49 54 48 4f 55  ired for [WITHOU
8910: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e  T ROWID] tables.
8920: 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20  ..<p>If a table 
8930: 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  has a single col
8940: 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 20  umn primary key 
8950: 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64  and the declared
8960: 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20 20   type of that.  
8970: 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47  column is "INTEG
8980: 45 52 22 20 61 6e 64 20 74 68 65 20 74 61 62 6c  ER" and the tabl
8990: 65 20 69 73 20 6e 6f 74 20 61 20 5b 57 49 54 48  e is not a [WITH
89a0: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
89b0: 2c 0a 20 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  ,.  then the col
89c0: 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73 20  umn is known as 
89d0: 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an [INTEGER PRIM
89e0: 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65 20  ARY KEY]..  See 
89f0: 62 65 6c 6f 77 20 66 6f 72 20 61 20 64 65 73 63  below for a desc
8a00: 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ription of the s
8a10: 70 65 63 69 61 6c 20 70 72 6f 70 65 72 74 69 65  pecial propertie
8a20: 73 20 61 6e 64 20 62 65 68 61 76 69 6f 72 73 0a  s and behaviors.
8a30: 20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74    associated wit
8a40: 68 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52  h an [INTEGER PR
8a50: 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e  IMARY KEY]...<p>
8a60: 5e 45 61 63 68 20 72 6f 77 20 69 6e 20 61 20 74  ^Each row in a t
8a70: 61 62 6c 65 20 77 69 74 68 20 61 20 70 72 69 6d  able with a prim
8a80: 61 72 79 20 6b 65 79 20 6d 75 73 74 20 68 61 76  ary key must hav
8a90: 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69  e a unique combi
8aa0: 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75  nation.  of valu
8ab0: 65 73 20 69 6e 20 69 74 73 20 70 72 69 6d 61 72  es in its primar
8ac0: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e  y key columns. ^
8ad0: 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
8ae0: 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 0a   of determining.
8af0: 20 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73    the uniqueness
8b00: 20 6f 66 20 70 72 69 6d 61 72 79 20 6b 65 79 20   of primary key 
8b10: 76 61 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61 6c  values, NULL val
8b20: 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
8b30: 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ed distinct from
8b40: 0a 20 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c  .  all other val
8b50: 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f  ues, including o
8b60: 74 68 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66 20  ther NULLs. ^If 
8b70: 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b  an [INSERT] or [
8b80: 55 50 44 41 54 45 5d 0a 20 20 73 74 61 74 65 6d  UPDATE].  statem
8b90: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
8ba0: 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65  modify the table
8bb0: 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61 74   content so that
8bc0: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77   two or more row
8bd0: 73 0a 20 20 66 65 61 74 75 72 65 20 69 64 65 6e  s.  feature iden
8be0: 74 69 63 61 6c 20 70 72 69 6d 61 72 79 20 6b 65  tical primary ke
8bf0: 79 20 76 61 6c 75 65 73 2c 20 69 74 20 69 73 20  y values, it is 
8c00: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
8c10: 6c 61 74 69 6f 6e 2e 0a 20 20 41 63 63 6f 72 64  lation..  Accord
8c20: 69 6e 67 20 74 6f 20 74 68 65 20 53 51 4c 20 73  ing to the SQL s
8c30: 74 61 6e 64 61 72 64 2c 20 50 52 49 4d 41 52 59  tandard, PRIMARY
8c40: 20 4b 45 59 20 73 68 6f 75 6c 64 20 61 6c 77 61   KEY should alwa
8c50: 79 73 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c  ys imply NOT NUL
8c60: 4c 2e 0a 20 20 55 6e 66 6f 72 74 75 6e 61 74 65  L..  Unfortunate
8c70: 6c 79 2c 20 64 75 65 20 74 6f 20 61 20 62 75 67  ly, due to a bug
8c80: 20 69 6e 20 73 6f 6d 65 20 65 61 72 6c 79 20 76   in some early v
8c90: 65 72 73 69 6f 6e 73 2c 20 74 68 69 73 20 69 73  ersions, this is
8ca0: 20 6e 6f 74 20 74 68 65 0a 20 20 63 61 73 65 20   not the.  case 
8cb0: 69 6e 20 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65  in SQLite. ^Unle
8cc0: 73 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  ss the column is
8cd0: 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49   an [INTEGER PRI
8ce0: 4d 41 52 59 20 4b 45 59 5d 20 6f 72 0a 20 20 74  MARY KEY] or.  t
8cf0: 68 65 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57  he table is a [W
8d00: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
8d10: 62 6c 65 20 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ble or the colum
8d20: 6e 20 69 73 20 64 65 63 6c 61 72 65 64 20 4e 4f  n is declared NO
8d30: 54 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69 74 65  T NULL,.  SQLite
8d40: 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c   allows NULL val
8d50: 75 65 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59  ues in a PRIMARY
8d60: 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 53 51   KEY column.  SQ
8d70: 4c 69 74 65 20 63 6f 75 6c 64 20 62 65 20 66 69  Lite could be fi
8d80: 78 65 64 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d  xed to.  conform
8d90: 20 74 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64   to the standard
8da0: 2c 20 62 75 74 20 64 6f 69 6e 67 20 73 6f 20 6d  , but doing so m
8db0: 69 67 68 74 20 62 72 65 61 6b 20 6c 65 67 61 63  ight break legac
8dc0: 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a  y applications..
8dd0: 20 20 48 65 6e 63 65 2c 20 69 74 20 68 61 73 20    Hence, it has 
8de0: 62 65 65 6e 20 64 65 63 69 64 65 64 20 74 6f 20  been decided to 
8df0: 6d 65 72 65 6c 79 20 64 6f 63 75 6d 65 6e 74 20  merely document 
8e00: 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51  the fact that SQ
8e10: 4c 69 74 65 0a 20 20 61 6c 6c 6f 77 69 6e 67 20  Lite.  allowing 
8e20: 4e 55 4c 4c 73 20 69 6e 20 6d 6f 73 74 20 50 52  NULLs in most PR
8e30: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e  IMARY KEY column
8e40: 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  s...<tcl>hd_frag
8e50: 6d 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e 73 74  ment uniqueconst
8e60: 20 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69 71 75   {UNIQUE} {uniqu
8e70: 65 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74  e constraint}</t
8e80: 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55 4e 49  cl>.<p>^A <b>UNI
8e90: 51 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69  QUE</b> constrai
8ea0: 6e 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  nt is similar to
8eb0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
8ec0: 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78 63 65 70  onstraint, excep
8ed0: 74 0a 20 20 74 68 61 74 20 61 20 73 69 6e 67 6c  t.  that a singl
8ee0: 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65  e table may have
8ef0: 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 55   any number of U
8f00: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
8f10: 73 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20 20 55  s. ^For each.  U
8f20: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
8f30: 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 65   on the table, e
8f40: 61 63 68 20 72 6f 77 20 6d 75 73 74 20 63 6f 6e  ach row must con
8f50: 74 61 69 6e 20 61 20 75 6e 69 71 75 65 20 63 6f  tain a unique co
8f60: 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76  mbination.  of v
8f70: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c  alues in the col
8f80: 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20  umns identified 
8f90: 62 79 20 74 68 65 20 55 4e 49 51 55 45 20 63 6f  by the UNIQUE co
8fa0: 6e 73 74 72 61 69 6e 74 2e 20 0a 20 20 5e 46 6f  nstraint. .  ^Fo
8fb0: 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
8fc0: 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  f UNIQUE constra
8fd0: 69 6e 74 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65  ints, NULL value
8fe0: 73 0a 20 20 61 72 65 20 63 6f 6e 73 69 64 65 72  s.  are consider
8ff0: 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ed distinct from
9000: 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65   all other value
9010: 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68  s, including oth
9020: 65 72 20 4e 55 4c 4c 73 2e 0a 0a 3c 70 3e 5e 49  er NULLs...<p>^I
9030: 6e 20 6d 6f 73 74 20 63 61 73 65 73 2c 20 55 4e  n most cases, UN
9040: 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59  IQUE and PRIMARY
9050: 20 4b 45 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e   KEY.  constrain
9060: 74 73 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74  ts are implement
9070: 65 64 20 62 79 20 63 72 65 61 74 69 6e 67 20 61  ed by creating a
9080: 20 75 6e 69 71 75 65 20 69 6e 64 65 78 20 69 6e   unique index in
9090: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20   the database.. 
90a0: 20 28 54 68 65 20 65 78 63 65 70 74 69 6f 6e 73   (The exceptions
90b0: 20 61 72 65 20 5b 49 4e 54 45 47 45 52 20 50 52   are [INTEGER PR
90c0: 49 4d 41 52 59 20 4b 45 59 5d 20 61 6e 64 20 50  IMARY KEY] and P
90d0: 52 49 4d 41 52 59 20 4b 45 59 73 20 6f 6e 20 0a  RIMARY KEYs on .
90e0: 20 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44    [WITHOUT ROWID
90f0: 5d 20 74 61 62 6c 65 73 2e 29 0a 20 20 48 65 6e  ] tables.).  Hen
9100: 63 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ce, the followin
9110: 67 20 73 63 68 65 6d 61 73 20 61 72 65 20 6c 6f  g schemas are lo
9120: 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65  gically equivale
9130: 6e 74 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20 20 3c 6c  nt:..  <ol>.  <l
9140: 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c  i><p>CREATE TABL
9150: 45 20 74 31 28 61 2c 20 62 20 55 4e 49 51 55 45  E t1(a, b UNIQUE
9160: 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41  );.  <li><p>CREA
9170: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
9180: 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20   PRIMARY KEY);. 
9190: 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54   <li><p>CREATE T
91a0: 41 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 3c 62  ABLE t1(a, b);<b
91b0: 72 3e 0a 20 20 20 20 20 20 20 20 20 43 52 45 41  r>.         CREA
91c0: 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20  TE UNIQUE INDEX 
91d0: 74 31 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20  t1b ON t1(b);.  
91e0: 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </ol>..<tcl>hd_f
91f0: 72 61 67 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74  ragment {ckconst
9200: 7d 20 7b 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b  } {CHECK} {CHECK
9210: 20 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48   constraint} {CH
9220: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d  ECK constraints}
9230: 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62  </tcl>.<p>^(A <b
9240: 3e 43 48 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74  >CHECK</b> const
9250: 72 61 69 6e 74 20 6d 61 79 20 62 65 20 61 74 74  raint may be att
9260: 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d  ached to a colum
9270: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a  n definition or.
9280: 20 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61    specified as a
9290: 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e   table constrain
92a0: 74 2e 20 49 6e 20 70 72 61 63 74 69 63 65 20 69  t. In practice i
92b0: 74 20 6d 61 6b 65 73 20 6e 6f 20 64 69 66 66 65  t makes no diffe
92c0: 72 65 6e 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a  rence.)^ ^(Each.
92d0: 20 20 74 69 6d 65 20 61 20 6e 65 77 20 72 6f 77    time a new row
92e0: 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74   is inserted int
92f0: 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 61  o the table or a
9300: 6e 20 65 78 69 73 74 69 6e 67 20 72 6f 77 20 69  n existing row i
9310: 73 20 75 70 64 61 74 65 64 2c 0a 20 20 74 68 65  s updated,.  the
9320: 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 73 6f   expression asso
9330: 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68  ciated with each
9340: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
9350: 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61  t is evaluated a
9360: 6e 64 0a 20 20 63 61 73 74 20 74 6f 20 61 20 4e  nd.  cast to a N
9370: 55 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20  UMERIC value in 
9380: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
9390: 61 20 5b 43 41 53 54 20 65 78 70 72 65 73 73 69  a [CAST expressi
93a0: 6f 6e 5d 2e 20 49 66 20 74 68 65 20 0a 20 20 72  on]. If the .  r
93b0: 65 73 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69  esult is zero (i
93c0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f  nteger value 0 o
93d0: 72 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30  r real value 0.0
93e0: 29 2c 20 74 68 65 6e 20 61 20 63 6f 6e 73 74 72  ), then a constr
93f0: 61 69 6e 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e  aint.  violation
9400: 20 68 61 73 20 6f 63 63 75 72 72 65 64 2e 29 5e   has occurred.)^
9410: 20 5e 49 66 20 74 68 65 20 43 48 45 43 4b 20 65   ^If the CHECK e
9420: 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
9430: 74 65 73 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a  tes to NULL, or.
9440: 20 20 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d    any other non-
9450: 7a 65 72 6f 20 76 61 6c 75 65 2c 20 69 74 20 69  zero value, it i
9460: 73 20 6e 6f 74 20 61 20 63 6f 6e 73 74 72 61 69  s not a constrai
9470: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20  nt violation..  
9480: 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  ^The expression 
9490: 6f 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74  of a CHECK const
94a0: 72 61 69 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f  raint may not co
94b0: 6e 74 61 69 6e 20 61 20 73 75 62 71 75 65 72 79  ntain a subquery
94c0: 2e 0a 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73  ...<p>CHECK cons
94d0: 74 72 61 69 6e 74 73 20 68 61 76 65 20 62 65 65  traints have bee
94e0: 6e 20 73 75 70 70 6f 72 74 65 64 20 73 69 6e 63  n supported sinc
94f0: 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30  e [version 3.3.0
9500: 5d 2e 20 50 72 69 6f 72 20 74 6f 0a 20 20 76 65  ]. Prior to.  ve
9510: 72 73 69 6f 6e 20 33 2e 33 2e 30 2c 20 43 48 45  rsion 3.3.0, CHE
9520: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  CK constraints w
9530: 65 72 65 20 70 61 72 73 65 64 20 62 75 74 20 6e  ere parsed but n
9540: 6f 74 20 65 6e 66 6f 72 63 65 64 2e 0a 0a 3c 74  ot enforced...<t
9550: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
9560: 6e 6f 74 6e 75 6c 6c 63 6f 6e 73 74 7d 20 7b 4e  notnullconst} {N
9570: 4f 54 20 4e 55 4c 4c 7d 20 7b 4e 4f 54 20 4e 55  OT NULL} {NOT NU
9580: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f  LL constraint}</
9590: 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f  tcl>.<p>^A <b>NO
95a0: 54 20 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74  T NULL</b> const
95b0: 72 61 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 62  raint may only b
95c0: 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  e attached to a 
95d0: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
95e0: 6e 2c 0a 20 20 6e 6f 74 20 73 70 65 63 69 66 69  n,.  not specifi
95f0: 65 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f  ed as a table co
9600: 6e 73 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20 73  nstraint.  Not s
9610: 75 72 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28 61  urprisingly, ^(a
9620: 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73   NOT NULL.  cons
9630: 74 72 61 69 6e 74 20 64 69 63 74 61 74 65 73 20  traint dictates 
9640: 74 68 61 74 20 74 68 65 20 61 73 73 6f 63 69 61  that the associa
9650: 74 65 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e  ted column may n
9660: 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55 4c  ot contain a NUL
9670: 4c 20 76 61 6c 75 65 2e 0a 20 20 41 74 74 65 6d  L value..  Attem
9680: 70 74 69 6e 67 20 74 6f 20 73 65 74 20 74 68 65  pting to set the
9690: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f   column value to
96a0: 20 4e 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65 72   NULL when inser
96b0: 74 69 6e 67 20 61 20 6e 65 77 20 72 6f 77 20 6f  ting a new row o
96c0: 72 0a 20 20 75 70 64 61 74 69 6e 67 20 61 6e 20  r.  updating an 
96d0: 65 78 69 73 74 69 6e 67 20 6f 6e 65 20 63 61 75  existing one cau
96e0: 73 65 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  ses a constraint
96f0: 20 76 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c   violation.)^..<
9700: 70 3e 45 78 61 63 74 6c 79 20 68 6f 77 20 61 20  p>Exactly how 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 20 69 73 20 64 65 61 6c 74 20 77 69  tion is dealt wi
9730: 74 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  th is determined
9740: 20 62 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66 6c   by the.  [confl
9750: 69 63 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73 74  ict clause|const
9760: 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
9770: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
9780: 74 68 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50 52  thm]. Each .  PR
9790: 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55  IMARY KEY, UNIQU
97a0: 45 2c 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64 20  E, NOT NULL and 
97b0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
97c0: 20 68 61 73 20 61 20 64 65 66 61 75 6c 74 20 63   has a default c
97d0: 6f 6e 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c 75  onflict.  resolu
97e0: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20  tion algorithm. 
97f0: 5e 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e  ^PRIMARY KEY, UN
9800: 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
9810: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 61  L constraints ma
9820: 79 20 62 65 0a 20 20 65 78 70 6c 69 63 69 74 6c  y be.  explicitl
9830: 79 20 61 73 73 69 67 6e 65 64 20 61 20 64 65 66  y assigned a def
9840: 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  ault conflict re
9850: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
9860: 68 6d 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 0a  hm by including.
9870: 20 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c    a [conflict-cl
9880: 61 75 73 65 5d 20 69 6e 20 74 68 65 69 72 20 64  ause] in their d
9890: 65 66 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c  efinitions. ^Or,
98a0: 20 69 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74   if a constraint
98b0: 20 64 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64 6f   definition.  do
98c0: 65 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61  es not include a
98d0: 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73   [conflict-claus
98e0: 65 5d 20 6f 72 20 69 74 20 69 73 20 61 20 43 48  e] or it is a CH
98f0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  ECK constraint, 
9900: 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 63 6f  the default.  co
9910: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
9920: 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41  n algorithm is A
9930: 42 4f 52 54 2e 20 5e 44 69 66 66 65 72 65 6e 74  BORT. ^Different
9940: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 74   constraints wit
9950: 68 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 74  hin the.  same t
9960: 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69  able may have di
9970: 66 66 65 72 65 6e 74 20 64 65 66 61 75 6c 74 20  fferent default 
9980: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
9990: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e 20  ion algorithms. 
99a0: 53 65 65 0a 20 20 74 68 65 20 73 65 63 74 69 6f  See.  the sectio
99b0: 6e 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e  n titled [ON CON
99c0: 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
99d0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
99e0: 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  n...<tcl>hd_frag
99f0: 6d 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45  ment rowid {INTE
9a00: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d  GER PRIMARY KEY}
9a10: 20 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63   ROWID rowid</tc
9a20: 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e  l>.<h3>ROWIDs an
9a30: 64 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52  d the INTEGER PR
9a40: 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a  IMARY KEY</h3>..
9a50: 3c 70 3e 5e 45 78 63 65 70 74 20 66 6f 72 20 5b  <p>^Except for [
9a60: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
9a70: 61 62 6c 65 73 2c 20 61 6c 6c 20 72 6f 77 73 20  ables, all rows 
9a80: 77 69 74 68 69 6e 20 53 51 4c 69 74 65 20 74 61  within SQLite ta
9a90: 62 6c 65 73 0a 68 61 76 65 20 61 20 36 34 2d 62  bles.have a 64-b
9aa0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
9ab0: 72 20 6b 65 79 20 74 68 61 74 20 75 6e 69 71 75  r key that uniqu
9ac0: 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20 74  ely identifies t
9ad0: 68 65 20 72 6f 77 20 77 69 74 68 69 6e 20 69 74  he row within it
9ae0: 73 20 74 61 62 6c 65 2e 0a 54 68 69 73 20 69 6e  s table..This in
9af0: 74 65 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79  teger is usually
9b00: 0a 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77  .called the "row
9b10: 69 64 22 2e 20 5e 54 68 65 20 72 6f 77 69 64 20  id". ^The rowid 
9b20: 76 61 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63  value can be acc
9b30: 65 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20  essed using one 
9b40: 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 0a 63  of the special.c
9b50: 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20  ase-independent 
9b60: 6e 61 6d 65 73 20 22 72 6f 77 69 64 22 2c 20 22  names "rowid", "
9b70: 6f 69 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64  oid", or "_rowid
9b80: 5f 22 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  _" in place of a
9b90: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49   column name..^I
9ba0: 66 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  f a table contai
9bb0: 6e 73 20 61 20 75 73 65 72 20 64 65 66 69 6e 65  ns a user define
9bc0: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22  d column named "
9bd0: 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72  rowid", "oid" or
9be0: 20 22 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e   "_rowid_",.then
9bf0: 20 74 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79   that name alway
9c00: 73 20 72 65 66 65 72 73 20 74 68 65 20 65 78 70  s refers the exp
9c10: 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64  licitly declared
9c20: 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e   column and cann
9c30: 6f 74 20 62 65 20 75 73 65 64 0a 74 6f 20 72 65  ot be used.to re
9c40: 74 72 69 65 76 65 20 74 68 65 20 69 6e 74 65 67  trieve the integ
9c50: 65 72 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a  er rowid value..
9c60: 0a 3c 70 3e 54 68 65 20 72 6f 77 69 64 20 28 61  .<p>The rowid (a
9c70: 6e 64 20 22 6f 69 64 22 20 61 6e 64 20 22 5f 72  nd "oid" and "_r
9c80: 6f 77 69 64 5f 22 29 20 69 73 20 6f 6d 69 74 74  owid_") is omitt
9c90: 65 64 20 69 6e 20 5b 57 49 54 48 4f 55 54 20 52  ed in [WITHOUT R
9ca0: 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 57 49  OWID] tables..WI
9cb0: 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
9cc0: 65 73 20 61 72 65 20 6f 6e 6c 79 20 61 76 61 69  es are only avai
9cd0: 6c 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20  lable in SQLite 
9ce0: 5b 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32 5d 20  [version 3.8.2] 
9cf0: 61 6e 64 20 6c 61 74 65 72 2e 0a 41 20 74 61 62  and later..A tab
9d00: 6c 65 20 74 68 61 74 20 6c 61 63 6b 73 20 74 68  le that lacks th
9d10: 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  e WITHOUT ROWID 
9d20: 63 6c 61 75 73 65 20 69 73 20 63 61 6c 6c 65 64  clause is called
9d30: 20 61 20 22 72 6f 77 69 64 20 74 61 62 6c 65 22   a "rowid table"
9d40: 2e 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61 20 66  ...<p>The data f
9d50: 6f 72 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20  or rowid tables 
9d60: 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 42  is stored as a B
9d70: 2d 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  -Tree structure 
9d80: 63 6f 6e 74 61 69 6e 69 6e 67 0a 6f 6e 65 20 65  containing.one e
9d90: 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 74 61  ntry for each ta
9da0: 62 6c 65 20 72 6f 77 2c 20 75 73 69 6e 67 20 74  ble row, using t
9db0: 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61  he rowid value a
9dc0: 73 20 74 68 65 20 6b 65 79 2e 20 54 68 69 73 20  s the key. This 
9dd0: 6d 65 61 6e 73 20 74 68 61 74 0a 72 65 74 72 69  means that.retri
9de0: 65 76 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e 67  eving or sorting
9df0: 20 72 65 63 6f 72 64 73 20 62 79 20 72 6f 77 69   records by rowi
9e00: 64 20 69 73 20 66 61 73 74 2e 20 53 65 61 72 63  d is fast. Searc
9e10: 68 69 6e 67 20 66 6f 72 20 61 20 72 65 63 6f 72  hing for a recor
9e20: 64 20 77 69 74 68 20 61 0a 73 70 65 63 69 66 69  d with a.specifi
9e30: 63 20 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72 20  c rowid, or for 
9e40: 61 6c 6c 20 72 65 63 6f 72 64 73 20 77 69 74 68  all records with
9e50: 20 72 6f 77 69 64 73 20 77 69 74 68 69 6e 20 61   rowids within a
9e60: 20 73 70 65 63 69 66 69 65 64 20 72 61 6e 67 65   specified range
9e70: 20 69 73 0a 61 72 6f 75 6e 64 20 74 77 69 63 65   is.around twice
9e80: 20 61 73 20 66 61 73 74 20 61 73 20 61 20 73 69   as fast as a si
9e90: 6d 69 6c 61 72 20 73 65 61 72 63 68 20 6d 61 64  milar search mad
9ea0: 65 20 62 79 20 73 70 65 63 69 66 79 69 6e 67 20  e by specifying 
9eb0: 61 6e 79 20 6f 74 68 65 72 20 50 52 49 4d 41 52  any other PRIMAR
9ec0: 59 0a 4b 45 59 20 6f 72 20 69 6e 64 65 78 65 64  Y.KEY or indexed
9ed0: 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69   value...<p> ^Wi
9ee0: 74 68 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e  th one exception
9ef0: 20 6e 6f 74 65 64 20 62 65 6c 6f 77 2c 20 69 66   noted below, if
9f00: 20 61 20 72 6f 77 69 64 20 74 61 62 6c 65 20 68   a rowid table h
9f10: 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
9f20: 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 0a 6f   that consists.o
9f30: 66 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  f a single colum
9f40: 6e 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72  n and the declar
9f50: 65 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 20  ed type of that 
9f60: 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47  column is "INTEG
9f70: 45 52 22 20 69 6e 20 61 6e 79 20 6d 69 78 74 75  ER" in any mixtu
9f80: 72 65 20 6f 66 0a 75 70 70 65 72 20 61 6e 64 20  re of.upper and 
9f90: 6c 6f 77 65 72 20 63 61 73 65 2c 20 74 68 65 6e  lower case, then
9fa0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f   the column beco
9fb0: 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  mes an alias for
9fc0: 20 74 68 65 20 72 6f 77 69 64 2e 20 53 75 63 68   the rowid. Such
9fd0: 20 61 0a 63 6f 6c 75 6d 6e 20 69 73 20 75 73 75   a.column is usu
9fe0: 61 6c 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f  ally referred to
9ff0: 20 61 73 20 61 6e 20 22 69 6e 74 65 67 65 72 20   as an "integer 
a000: 70 72 69 6d 61 72 79 20 6b 65 79 22 2e 20 41 20  primary key". A 
a010: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
a020: 6d 6e 0a 6f 6e 6c 79 20 62 65 63 6f 6d 65 73 20  mn.only becomes 
a030: 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
a040: 72 79 20 6b 65 79 20 69 66 20 74 68 65 20 64 65  ry key if the de
a050: 63 6c 61 72 65 64 20 74 79 70 65 20 6e 61 6d 65  clared type name
a060: 20 69 73 20 65 78 61 63 74 6c 79 0a 22 49 4e 54   is exactly."INT
a070: 45 47 45 52 22 2e 20 20 5e 4f 74 68 65 72 20 69  EGER".  ^Other i
a080: 6e 74 65 67 65 72 20 74 79 70 65 20 6e 61 6d 65  nteger type name
a090: 73 20 6c 69 6b 65 20 22 49 4e 54 22 20 6f 72 20  s like "INT" or 
a0a0: 22 42 49 47 49 4e 54 22 20 6f 72 20 22 53 48 4f  "BIGINT" or "SHO
a0b0: 52 54 20 49 4e 54 45 47 45 52 22 0a 6f 72 20 22  RT INTEGER".or "
a0c0: 55 4e 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52  UNSIGNED INTEGER
a0d0: 22 20 63 61 75 73 65 73 20 74 68 65 20 70 72 69  " causes the pri
a0e0: 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20  mary key column 
a0f0: 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e 20  to behave as an 
a100: 6f 72 64 69 6e 61 72 79 0a 74 61 62 6c 65 20 63  ordinary.table c
a110: 6f 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74 65 67  olumn with integ
a120: 65 72 20 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e  er [affinity] an
a130: 64 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  d a unique index
a140: 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69 61  , not as an alia
a150: 73 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64 2e  s for.the rowid.
a160: 0a 0a 3c 70 3e 20 54 68 65 20 65 78 63 65 70 74  ..<p> The except
a170: 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62  ion mentioned ab
a180: 6f 76 65 20 69 73 20 74 68 61 74 20 5e 69 66 20  ove is that ^if 
a190: 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  the declaration 
a1a0: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68  of a column with
a1b0: 0a 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 22  .declared type "
a1c0: 49 4e 54 45 47 45 52 22 20 69 6e 63 6c 75 64 65  INTEGER" include
a1d0: 73 20 61 6e 20 22 50 52 49 4d 41 52 59 20 4b 45  s an "PRIMARY KE
a1e0: 59 20 44 45 53 43 22 20 63 6c 61 75 73 65 2c 20  Y DESC" clause, 
a1f0: 69 74 20 64 6f 65 73 20 6e 6f 74 0a 62 65 63 6f  it does not.beco
a200: 6d 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  me an alias for 
a210: 74 68 65 20 72 6f 77 69 64 20 61 6e 64 20 69 73  the rowid and is
a220: 20 6e 6f 74 20 63 6c 61 73 73 69 66 69 65 64 20   not classified 
a230: 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72  as an integer pr
a240: 69 6d 61 72 79 20 6b 65 79 2e 0a 54 68 69 73 20  imary key..This 
a250: 71 75 69 72 6b 20 69 73 20 6e 6f 74 20 62 79 20  quirk is not by 
a260: 64 65 73 69 67 6e 2e 20 49 74 20 69 73 20 64 75  design. It is du
a270: 65 20 74 6f 20 61 20 62 75 67 20 69 6e 20 65 61  e to a bug in ea
a280: 72 6c 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  rly versions of 
a290: 53 51 4c 69 74 65 2e 0a 42 75 74 20 66 69 78 69  SQLite..But fixi
a2a0: 6e 67 20 74 68 65 20 62 75 67 20 63 6f 75 6c 64  ng the bug could
a2b0: 20 72 65 73 75 6c 74 20 69 6e 20 62 61 63 6b 77   result in backw
a2c0: 61 72 64 73 20 69 6e 63 6f 6d 70 61 74 69 62 69  ards incompatibi
a2d0: 6c 69 74 69 65 73 2e 0a 48 65 6e 63 65 2c 20 74  lities..Hence, t
a2e0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68 61  he original beha
a2f0: 76 69 6f 72 20 68 61 73 20 62 65 65 6e 20 72 65  vior has been re
a300: 74 61 69 6e 65 64 20 28 61 6e 64 20 64 6f 63 75  tained (and docu
a310: 6d 65 6e 74 65 64 29 20 62 65 63 61 75 73 65 0a  mented) because.
a320: 62 65 68 61 76 69 6f 72 20 69 6e 20 61 20 63 6f  behavior in a co
a330: 72 6e 65 72 20 63 61 73 65 20 69 73 20 66 61 72  rner case is far
a340: 20 62 65 74 74 65 72 20 74 68 61 6e 20 61 20 63   better than a c
a350: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72 65  ompatibility bre
a360: 61 6b 2e 20 20 54 68 69 73 20 6d 65 61 6e 73 0a  ak.  This means.
a370: 74 68 61 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f  that ^(the follo
a380: 77 69 6e 67 20 74 68 72 65 65 20 74 61 62 6c 65  wing three table
a390: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c   declarations al
a3a0: 6c 20 63 61 75 73 65 20 74 68 65 20 63 6f 6c 75  l cause the colu
a3b0: 6d 6e 20 22 78 22 20 74 6f 20 62 65 20 61 6e 0a  mn "x" to be an.
a3c0: 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f  alias for the ro
a3d0: 77 69 64 20 28 61 6e 20 69 6e 74 65 67 65 72 20  wid (an integer 
a3e0: 70 72 69 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c  primary key):..<
a3f0: 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41  ul>.<li><tt>CREA
a400: 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
a410: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
a420: 20 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74   ASC, y, z);</tt
a430: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
a440: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
a450: 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52  ER, y, z, PRIMAR
a460: 59 20 4b 45 59 28 78 20 41 53 43 29 29 3b 3c 2f  Y KEY(x ASC));</
a470: 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41  tt>.<li><tt>CREA
a480: 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
a490: 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d  EGER, y, z, PRIM
a4a0: 41 52 59 20 4b 45 59 28 78 20 44 45 53 43 29 29  ARY KEY(x DESC))
a4b0: 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a  ;</tt>.</ul>)^..
a4c0: 3c 70 3e 42 75 74 20 5e 28 74 68 65 20 66 6f 6c  <p>But ^(the fol
a4d0: 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69  lowing declarati
a4e0: 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 75  on does not resu
a4f0: 6c 74 20 69 6e 20 22 78 22 20 62 65 69 6e 67 20  lt in "x" being 
a500: 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65  an alias for.the
a510: 20 72 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69   rowid:.<ul>.<li
a520: 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c  ><tt>CREATE TABL
a530: 45 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52  E t(x INTEGER PR
a540: 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43 2c 20  IMARY KEY DESC, 
a550: 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c  y, z);</tt>.</ul
a560: 3e 29 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76  >)^..<p>^Rowid v
a570: 61 6c 75 65 73 20 6d 61 79 20 62 65 20 6d 6f 64  alues may be mod
a580: 69 66 69 65 64 20 75 73 69 6e 67 20 61 6e 20 55  ified using an U
a590: 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
a5a0: 69 6e 20 74 68 65 20 73 61 6d 65 0a 77 61 79 20  in the same.way 
a5b0: 61 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c  as any other col
a5c0: 75 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65  umn value can, e
a5d0: 69 74 68 65 72 20 75 73 69 6e 67 20 6f 6e 65 20  ither using one 
a5e0: 6f 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  of the built-in 
a5f0: 61 6c 69 61 73 65 73 0a 28 22 72 6f 77 69 64 22  aliases.("rowid"
a600: 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77  , "oid" or "_row
a610: 69 64 5f 22 29 20 6f 72 20 62 79 20 75 73 69 6e  id_") or by usin
a620: 67 20 61 6e 20 61 6c 69 61 73 20 63 72 65 61 74  g an alias creat
a630: 65 64 20 62 79 20 61 6e 20 69 6e 74 65 67 65 72  ed by an integer
a640: 0a 70 72 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53  .primary key. ^S
a650: 69 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53  imilarly, an INS
a660: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6d 61  ERT statement ma
a670: 79 20 70 72 6f 76 69 64 65 20 61 20 76 61 6c 75  y provide a valu
a680: 65 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a  e to use as the.
a690: 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72  rowid for each r
a6a0: 6f 77 20 69 6e 73 65 72 74 65 64 2e 20 5e 28 55  ow inserted. ^(U
a6b0: 6e 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c  nlike normal SQL
a6c0: 69 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20  ite columns, an 
a6d0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a  integer primary.
a6e0: 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c  key or rowid col
a6f0: 75 6d 6e 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e  umn must contain
a700: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e   integer values.
a710: 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   Integer primary
a720: 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f   key or rowid.co
a730: 6c 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20 61 62  lumns are not ab
a740: 6c 65 20 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74  le to hold float
a750: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73  ing point values
a760: 2c 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73  , strings, BLOBs
a770: 2c 20 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c  , or NULLs.)^..<
a780: 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20  p>^If an UPDATE 
a790: 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70  statement attemp
a7a0: 74 73 20 74 6f 20 73 65 74 20 61 6e 20 69 6e 74  ts to set an int
a7b0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
a7c0: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
a7d0: 0a 74 6f 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c  .to a NULL or bl
a7e0: 6f 62 20 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20  ob value, or to 
a7f0: 61 20 73 74 72 69 6e 67 20 6f 72 20 72 65 61 6c  a string or real
a800: 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e   value that cann
a810: 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ot be losslessly
a820: 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e  .converted to an
a830: 20 69 6e 74 65 67 65 72 2c 20 61 20 22 64 61 74   integer, a "dat
a840: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20  atype mismatch" 
a850: 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64  error occurs and
a860: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 69   the statement.i
a870: 73 20 61 62 6f 72 74 65 64 2e 20 5e 49 66 20 61  s aborted. ^If a
a880: 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
a890: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69  nt attempts to i
a8a0: 6e 73 65 72 74 20 61 20 62 6c 6f 62 20 76 61 6c  nsert a blob val
a8b0: 75 65 2c 20 6f 72 20 61 20 73 74 72 69 6e 67 0a  ue, or a string.
a8c0: 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68  or real value th
a8d0: 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73  at cannot be los
a8e0: 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
a8f0: 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  d to an integer 
a900: 69 6e 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20  into an.integer 
a910: 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72  primary key or r
a920: 6f 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22  owid column, a "
a930: 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63  datatype mismatc
a940: 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20  h" error occurs 
a950: 61 6e 64 20 74 68 65 0a 73 74 61 74 65 6d 65 6e  and the.statemen
a960: 74 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c  t is aborted...<
a970: 70 3e 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20  p>^If an INSERT 
a980: 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70  statement attemp
a990: 74 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20 4e  ts to insert a N
a9a0: 55 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  ULL value into a
a9b0: 20 72 6f 77 69 64 20 6f 72 0a 69 6e 74 65 67 65   rowid or.intege
a9c0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f  r primary key co
a9d0: 6c 75 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d  lumn, the system
a9e0: 20 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65   chooses an inte
a9f0: 67 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65  ger value to use
aa00: 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20 61 75   as the.rowid au
aa10: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 41 20 64  tomatically. A d
aa20: 65 74 61 69 6c 65 64 20 64 65 73 63 72 69 70 74  etailed descript
aa30: 69 6f 6e 20 6f 66 20 68 6f 77 20 74 68 69 73 20  ion of how this 
aa40: 69 73 20 64 6f 6e 65 20 69 73 20 70 72 6f 76 69  is done is provi
aa50: 64 65 64 0a 3c 61 20 68 72 65 66 3d 22 61 75 74  ded.<a href="aut
aa60: 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72  oinc.html">separ
aa70: 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a  ately</a>.</p>..
aa80: 3c 70 3e 5e 28 54 68 65 20 5b 70 61 72 65 6e 74  <p>^(The [parent
aa90: 20 6b 65 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65   key] of a [fore
aaa0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
aab0: 6e 74 5d 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  nt] is not allow
aac0: 65 64 20 74 6f 0a 75 73 65 20 74 68 65 20 72 6f  ed to.use the ro
aad0: 77 69 64 2e 20 20 54 68 65 20 70 61 72 65 6e 74  wid.  The parent
aae0: 20 6b 65 79 20 6d 75 73 74 20 75 73 65 64 20 6e   key must used n
aaf0: 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c  amed columns onl
ab00: 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  y.)^</p>..<tcl>.
ab10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
ab60: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54  ection {CREATE T
ab70: 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72  RIGGER} createtr
ab80: 69 67 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54  igger {{CREATE T
ab90: 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73  RIGGER}}..Recurs
aba0: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
abb0: 20 63 72 65 61 74 65 2d 74 72 69 67 67 65 72 2d   create-trigger-
abc0: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
abd0: 5e 54 68 65 20 43 52 45 41 54 45 20 54 52 49 47  ^The CREATE TRIG
abe0: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73  GER statement is
abf0: 20 75 73 65 64 20 74 6f 20 61 64 64 20 74 72 69   used to add tri
ac00: 67 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61  ggers to the .da
ac10: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e  tabase schema. ^
ac20: 54 72 69 67 67 65 72 73 20 61 72 65 20 64 61 74  Triggers are dat
ac30: 61 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73  abase operations
ac40: 20 0a 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d   .that are autom
ac50: 61 74 69 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d  atically perform
ac60: 65 64 20 77 68 65 6e 20 61 20 73 70 65 63 69 66  ed when a specif
ac70: 69 65 64 20 64 61 74 61 62 61 73 65 20 65 76 65  ied database eve
ac80: 6e 74 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e  nt.occurs.  </p>
ac90: 0a 0a 3c 70 3e 5e 41 20 74 72 69 67 67 65 72 20  ..<p>^A trigger 
aca0: 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64  may be specified
acb0: 20 74 6f 20 66 69 72 65 20 77 68 65 6e 65 76 65   to fire wheneve
acc0: 72 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49  r a [DELETE], [I
acd0: 4e 53 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41  NSERT],.or [UPDA
ace0: 54 45 5d 20 6f 66 20 61 0a 70 61 72 74 69 63 75  TE] of a.particu
acf0: 6c 61 72 20 64 61 74 61 62 61 73 65 20 74 61 62  lar database tab
ad00: 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68  le occurs, or wh
ad10: 65 6e 65 76 65 72 20 61 6e 20 5b 55 50 44 41 54  enever an [UPDAT
ad20: 45 5d 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20  E] occurs on.on 
ad30: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 70 65 63  one or more spec
ad40: 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66  ified columns of
ad50: 20 61 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c   a table.</p>..<
ad60: 70 3e 5e 41 74 20 74 68 69 73 20 74 69 6d 65 20  p>^At this time 
ad70: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
ad80: 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f  only FOR EACH RO
ad90: 57 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20  W triggers, not 
ada0: 46 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45  FOR EACH.STATEME
adb0: 4e 54 20 74 72 69 67 67 65 72 73 2e 20 5e 48 65  NT triggers. ^He
adc0: 6e 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73  nce explicitly s
add0: 70 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41  pecifying FOR EA
ade0: 43 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e  CH ROW is option
adf0: 61 6c 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f  al..^FOR EACH RO
ae00: 57 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  W implies that t
ae10: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
ae20: 73 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  s specified in t
ae30: 68 65 20 74 72 69 67 67 65 72 0a 6d 61 79 20 62  he trigger.may b
ae40: 65 20 65 78 65 63 75 74 65 64 20 28 64 65 70 65  e executed (depe
ae50: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 57 48 45  nding on the WHE
ae60: 4e 20 63 6c 61 75 73 65 29 20 66 6f 72 20 65 61  N clause) for ea
ae70: 63 68 20 64 61 74 61 62 61 73 65 20 72 6f 77 20  ch database row 
ae80: 62 65 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20  being.inserted, 
ae90: 75 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74  updated or delet
aea0: 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d  ed by the statem
aeb0: 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20  ent causing the 
aec0: 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2e  trigger to fire.
aed0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20  </p>..<p>^(Both 
aee0: 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  the WHEN clause 
aef0: 61 6e 64 20 74 68 65 20 74 72 69 67 67 65 72 20  and the trigger 
af00: 61 63 74 69 6f 6e 73 20 6d 61 79 20 61 63 63 65  actions may acce
af10: 73 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a  ss elements of .
af20: 74 68 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e  the row being in
af30: 73 65 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20  serted, deleted 
af40: 6f 72 20 75 70 64 61 74 65 64 20 75 73 69 6e 67  or updated using
af50: 20 72 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74   references of t
af60: 68 65 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69  he form ."NEW.<i
af70: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e  >column-name</i>
af80: 22 20 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f  " and "OLD.<i>co
af90: 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20  lumn-name</i>", 
afa0: 77 68 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d  where.<i>column-
afb0: 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20  name</i> is the 
afc0: 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  name of a column
afd0: 20 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20   from the table 
afe0: 74 68 61 74 20 74 68 65 20 74 72 69 67 67 65 72  that the trigger
aff0: 0a 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  .is associated w
b000: 69 74 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64  ith.)^ ^(OLD and
b010: 20 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20   NEW references 
b020: 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  may only be used
b030: 20 69 6e 20 74 72 69 67 67 65 72 73 20 6f 6e 0a   in triggers on.
b040: 65 76 65 6e 74 73 20 66 6f 72 20 77 68 69 63 68  events for which
b050: 20 74 68 65 79 20 61 72 65 20 72 65 6c 65 76 61   they are releva
b060: 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  nt, as follows:<
b070: 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64  /p>..<table bord
b080: 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67  er=0 cellpadding
b090: 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61  =10>.<tr>.<td va
b0a0: 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
b0b0: 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31  ="right" width=1
b0c0: 32 30 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e  20><i>INSERT</i>
b0d0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
b0e0: 3d 22 74 6f 70 22 3e 4e 45 57 20 72 65 66 65 72  ="top">NEW refer
b0f0: 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c  ences are valid<
b100: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
b110: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
b120: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77   align="right" w
b130: 69 64 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41  idth=120><i>UPDA
b140: 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20  TE</i></td>.<td 
b150: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57  valign="top">NEW
b160: 20 61 6e 64 20 4f 4c 44 20 72 65 66 65 72 65 6e   and OLD referen
b170: 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74  ces are valid</t
b180: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
b190: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
b1a0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
b1b0: 74 68 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45  th=120><i>DELETE
b1c0: 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  </i></td>.<td va
b1d0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72  lign="top">OLD r
b1e0: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61  eferences are va
b1f0: 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  lid</td>.</tr>.<
b200: 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a  /table>.</p>)^..
b210: 3c 70 3e 5e 49 66 20 61 20 57 48 45 4e 20 63 6c  <p>^If a WHEN cl
b220: 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64  ause is supplied
b230: 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  , the SQL statem
b240: 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 0a 61  ents specified.a
b250: 72 65 20 6f 6e 6c 79 20 65 78 65 63 75 74 65 64  re only executed
b260: 20 66 6f 72 20 72 6f 77 73 20 66 6f 72 20 77 68   for rows for wh
b270: 69 63 68 20 74 68 65 20 57 48 45 4e 0a 63 6c 61  ich the WHEN.cla
b280: 75 73 65 20 69 73 20 74 72 75 65 2e 20 5e 49 66  use is true. ^If
b290: 20 6e 6f 20 57 48 45 4e 20 63 6c 61 75 73 65 20   no WHEN clause 
b2a0: 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65  is supplied, the
b2b0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a   SQL statements.
b2c0: 61 72 65 20 65 78 65 63 75 74 65 64 20 66 6f 72  are executed for
b2d0: 20 61 6c 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a   all rows.</p>..
b2e0: 3c 70 3e 5e 54 68 65 20 42 45 46 4f 52 45 20 6f  <p>^The BEFORE o
b2f0: 72 20 41 46 54 45 52 20 6b 65 79 77 6f 72 64 20  r AFTER keyword 
b300: 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20  determines when 
b310: 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69  the trigger acti
b320: 6f 6e 73 0a 77 69 6c 6c 20 62 65 20 65 78 65 63  ons.will be exec
b330: 75 74 65 64 20 72 65 6c 61 74 69 76 65 20 74 6f  uted relative to
b340: 20 74 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20   the insertion, 
b350: 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f 72 20  modification or 
b360: 72 65 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61  removal of the.a
b370: 73 73 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f  ssociated row.</
b380: 70 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43  p>..<p>^An [ON C
b390: 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20  ONFLICT] clause 
b3a0: 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64  may be specified
b3b0: 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 5b   as part of an [
b3c0: 55 50 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45  UPDATE] or [INSE
b3d0: 52 54 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68 69  RT].action withi
b3e0: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 74 68  n the body of th
b3f0: 65 20 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65  e trigger..^Howe
b400: 76 65 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f  ver if an [ON CO
b410: 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69  NFLICT] clause i
b420: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
b430: 61 72 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74  art of .the stat
b440: 65 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68  ement causing th
b450: 65 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72  e trigger to fir
b460: 65 2c 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74  e, then conflict
b470: 20 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79   handling.policy
b480: 20 6f 66 20 74 68 65 20 6f 75 74 65 72 20 73 74   of the outer st
b490: 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
b4a0: 69 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70  instead.</p>..<p
b4b0: 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65 20 61  >^Triggers are a
b4c0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52  utomatically [DR
b4d0: 4f 50 20 54 52 49 47 47 45 52 20 7c 20 64 72 6f  OP TRIGGER | dro
b4e0: 70 70 65 64 5d 0a 77 68 65 6e 20 74 68 65 20 74  pped].when the t
b4f0: 61 62 6c 65 20 74 68 61 74 20 74 68 65 79 20 61  able that they a
b500: 72 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20 77  re .associated w
b510: 69 74 68 20 28 74 68 65 20 3c 69 3e 74 61 62 6c  ith (the <i>tabl
b520: 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65  e-name</i> table
b530: 29 20 69 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c  ) is .[DROP TABL
b540: 45 20 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e  E | dropped].  ^
b550: 48 6f 77 65 76 65 72 20 69 66 20 74 68 65 20 74  However if the t
b560: 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72  rigger actions r
b570: 65 66 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74  eference.other t
b580: 61 62 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67  ables, the trigg
b590: 65 72 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65  er is not droppe
b5a0: 64 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66  d or modified if
b5b0: 20 74 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62   those other.tab
b5c0: 6c 65 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41  les are [DROP TA
b5d0: 42 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f  BLE | dropped] o
b5e0: 72 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c  r [ALTER TABLE |
b5f0: 20 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a   modified].</p>.
b600: 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72  .<p>^Triggers ar
b610: 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20  e removed using 
b620: 74 68 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45  the [DROP TRIGGE
b630: 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70  R] statement.</p
b640: 3e 0a 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65  >..<h3>Syntax Re
b650: 73 74 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50  strictions On UP
b660: 44 41 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e  DATE, DELETE, an
b670: 64 20 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65  d INSERT Stateme
b680: 6e 74 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54  nts Within.    T
b690: 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  riggers</h3>..<p
b6a0: 3e 5e 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20  >^The [UPDATE], 
b6b0: 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49  [DELETE], and [I
b6c0: 4e 53 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74  NSERT].statement
b6d0: 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
b6e0: 73 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74  s do not support
b6f0: 0a 74 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78  .the full syntax
b700: 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b   for [UPDATE], [
b710: 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e  DELETE], and [IN
b720: 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  SERT] statements
b730: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
b740: 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70  .restrictions ap
b750: 70 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c  ply:</p>..<ul>.<
b760: 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e  li><p>.  ^(The n
b770: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
b780: 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20   to be modified 
b790: 69 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20  in an [UPDATE], 
b7a0: 5b 44 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e  [DELETE], or [IN
b7b0: 53 45 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e  SERT].  statemen
b7c0: 74 20 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71  t must be an unq
b7d0: 75 61 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e  ualified table n
b7e0: 61 6d 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ame.  In other w
b7f0: 6f 72 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20  ords, one must. 
b800: 20 75 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61   use just "<i>ta
b810: 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74  blename</i>" not
b820: 20 22 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69   "<i>database</i
b830: 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c  ><b>.</b><i>tabl
b840: 65 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65  ename</i>".  whe
b850: 6e 20 73 70 65 63 69 66 79 69 6e 67 20 74 68 65  n specifying the
b860: 20 74 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20   table.)^  ^The 
b870: 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69  table to be modi
b880: 66 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20  fied must exist 
b890: 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61  in the.  same da
b8a0: 74 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61  tabase as the ta
b8b0: 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
b8c0: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
b8d0: 20 69 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20   is attached..  
b8e0: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
b8f0: 70 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52  p>.  ^The "INSER
b900: 54 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c  T INTO <i>table<
b910: 2f 69 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55  /i> DEFAULT VALU
b920: 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20  ES" form of the 
b930: 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65  [INSERT] stateme
b940: 6e 74 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70  nt.  is not supp
b950: 6f 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c  orted..  </p></l
b960: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54  i>..<li><p>.  ^T
b970: 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e  he INDEXED BY an
b980: 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  d NOT INDEXED cl
b990: 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75  auses are not su
b9a0: 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44  pported for [UPD
b9b0: 41 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45  ATE] and.  [DELE
b9c0: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  TE] statements..
b9d0: 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69    </p></li>..<li
b9e0: 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44  ><p>.  ^(The ORD
b9f0: 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
ba00: 63 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41  clauses on [UPDA
ba10: 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d  TE] and [DELETE]
ba20: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20   statements are 
ba30: 6e 6f 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e  not.  supported.
ba40: 20 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c    ORDER BY and L
ba50: 49 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72  IMIT are not nor
ba60: 6d 61 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20  mally supported 
ba70: 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a  for [UPDATE] or.
ba80: 20 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e    [DELETE] in an
ba90: 79 20 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61  y context but ca
baa0: 6e 20 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72  n be enabled for
bab0: 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
bac0: 6d 65 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68  ments.  using th
bad0: 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e [SQLITE_ENABLE
bae0: 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
baf0: 49 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69  IMIT] compile-ti
bb00: 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65  me option.  Howe
bb10: 76 65 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70  ver,.  that comp
bb20: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
bb30: 6f 6e 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20  only applies to 
bb40: 74 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54  top-level [UPDAT
bb50: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a  E] and [DELETE].
bb60: 20 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f    statements, no
bb70: 74 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b  t [UPDATE] and [
bb80: 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e  DELETE] statemen
bb90: 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
bba0: 72 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  rs.)^.  </p></li
bbb0: 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64  >.</ul>..<tcl>hd
bbc0: 5f 66 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61  _fragment instea
bbd0: 64 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e  d_of_trigger {IN
bbe0: 53 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45  STEAD OF} {INSTE
bbf0: 41 44 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f  AD OF trigger}</
bc00: 74 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44  tcl>.<h3>INSTEAD
bc10: 20 4f 46 20 74 72 69 67 67 65 72 3c 2f 68 33 3e   OF trigger</h3>
bc20: 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d  ..<p>^Triggers m
bc30: 61 79 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e  ay be created on
bc40: 20 5b 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c   [views], as wel
bc50: 6c 20 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61  l as ordinary ta
bc60: 62 6c 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79  bles, by.specify
bc70: 69 6e 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69  ing INSTEAD OF i
bc80: 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49  n the CREATE TRI
bc90: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20  GGER statement. 
bca0: 0a 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  .^If one or more
bcb0: 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44   ON INSERT, ON D
bcc0: 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41  ELETE.or ON UPDA
bcd0: 54 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20  TE triggers are 
bce0: 64 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65  defined on a vie
bcf0: 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f  w, then it is no
bd00: 74 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78  t an.error to ex
bd10: 65 63 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c  ecute an INSERT,
bd20: 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
bd30: 45 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74  E statement on t
bd40: 68 65 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63  he view, .respec
bd50: 74 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61  tively.  ^Instea
bd60: 64 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20  d,.executing an 
bd70: 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f  INSERT, DELETE o
bd80: 72 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20  r UPDATE on the 
bd90: 76 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20  view causes the 
bda0: 61 73 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67  associated.trigg
bdb0: 65 72 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68  ers to fire. ^Th
bdc0: 65 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e  e real tables un
bdd0: 64 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65  derlying the vie
bde0: 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69  w are not modifi
bdf0: 65 64 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69  ed.(except possi
be00: 62 6c 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20  bly explicitly, 
be10: 62 79 20 61 20 74 72 69 67 67 65 72 20 70 72 6f  by a trigger pro
be20: 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  gram).</p>..<p>^
be30: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5b 73  Note that the [s
be40: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
be50: 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74  ] and [sqlite3_t
be60: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20  otal_changes()] 
be70: 69 6e 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f  interfaces.do no
be80: 74 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20  t count INSTEAD 
be90: 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e  OF trigger firin
bea0: 67 73 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75  gs, but the.[cou
beb0: 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d  nt_changes pragm
bec0: 61 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e  a] does count IN
bed0: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
bee0: 20 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68   firing.</p>..<h
bef0: 33 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a  3>Examples</h3>.
bf00: 0a 3c 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74  .<p>^(Assuming t
bf10: 68 61 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63  hat customer rec
bf20: 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20  ords are stored 
bf30: 69 6e 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72  in the "customer
bf40: 73 22 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68  s" table, and.th
bf50: 61 74 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73  at order records
bf60: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
bf70: 68 65 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c  he "orders" tabl
bf80: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e, the following
bf90: 20 74 72 69 67 67 65 72 0a 65 6e 73 75 72 65 73   trigger.ensures
bfa0: 20 74 68 61 74 20 61 6c 6c 20 61 73 73 6f 63 69   that all associ
bfb0: 61 74 65 64 20 6f 72 64 65 72 73 20 61 72 65 20  ated orders are 
bfc0: 72 65 64 69 72 65 63 74 65 64 20 77 68 65 6e 20  redirected when 
bfd0: 61 20 63 75 73 74 6f 6d 65 72 20 63 68 61 6e 67  a customer chang
bfe0: 65 73 0a 68 69 73 20 6f 72 20 68 65 72 20 61 64  es.his or her ad
bff0: 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  dress:</p>..<tcl
c000: 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54  >Example {.CREAT
c010: 45 20 54 52 49 47 47 45 52 20 75 70 64 61 74 65  E TRIGGER update
c020: 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73  _customer_addres
c030: 73 20 55 50 44 41 54 45 20 4f 46 20 61 64 64 72  s UPDATE OF addr
c040: 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73  ess ON customers
c050: 20 0a 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50   .  BEGIN.    UP
c060: 44 41 54 45 20 6f 72 64 65 72 73 20 53 45 54 20  DATE orders SET 
c070: 61 64 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64  address = new.ad
c080: 64 72 65 73 73 20 57 48 45 52 45 20 63 75 73 74  dress WHERE cust
c090: 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e  omer_name = old.
c0a0: 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f  name;.  END;.}</
c0b0: 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68  tcl>..<p>With th
c0c0: 69 73 20 74 72 69 67 67 65 72 20 69 6e 73 74 61  is trigger insta
c0d0: 6c 6c 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20  lled, executing 
c0e0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f  the statement:</
c0f0: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
c100: 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d   {.UPDATE custom
c110: 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20  ers SET address 
c120: 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57  = '1 Main St.' W
c130: 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63  HERE name = 'Jac
c140: 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c  k Jones';.}</tcl
c150: 3e 0a 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65  >..<p>causes the
c160: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65   following to be
c170: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65   automatically e
c180: 78 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74  xecuted:</p>..<t
c190: 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44  cl>Example {.UPD
c1a0: 41 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61  ATE orders SET a
c1b0: 64 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e  ddress = '1 Main
c1c0: 20 53 74 2e 27 20 57 48 45 52 45 20 63 75 73 74   St.' WHERE cust
c1d0: 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63  omer_name = 'Jac
c1e0: 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c  k Jones';.}</tcl
c1f0: 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  >)^..<tcl>hd_fra
c200: 67 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f  gment undef_befo
c210: 72 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45  re {undefined BE
c220: 46 4f 52 45 20 74 72 69 67 67 65 72 20 62 65 68  FORE trigger beh
c230: 61 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  avior}</tcl>.<h3
c240: 3e 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65  >Cautions On The
c250: 20 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74   Use Of BEFORE t
c260: 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  riggers</h3>..<p
c270: 3e 49 66 20 61 20 42 45 46 4f 52 45 20 55 50 44  >If a BEFORE UPD
c280: 41 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45  ATE or BEFORE DE
c290: 4c 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64  LETE trigger mod
c2a0: 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73  ifies or deletes
c2b0: 20 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20   a row.that was 
c2c0: 74 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70 64  to have been upd
c2d0: 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c  ated or deleted,
c2e0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
c2f0: 20 6f 66 20 74 68 65 20 73 75 62 73 65 71 75 65   of the subseque
c300: 6e 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c  nt.update or del
c310: 65 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  ete operation is
c320: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72   undefined.  Fur
c330: 74 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42  thermore, if a B
c340: 45 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f  EFORE trigger.mo
c350: 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65  difies or delete
c360: 73 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74  s a row, then it
c370: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68   is undefined wh
c380: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54  ether or not AFT
c390: 45 52 20 74 72 69 67 67 65 72 73 0a 74 68 61 74  ER triggers.that
c3a0: 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65   would have othe
c3b0: 72 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f  rwise run on tho
c3c0: 73 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20  se rows will in 
c3d0: 66 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a  fact run..</p>..
c3e0: 3c 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20  <p>The value of 
c3f0: 4e 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64  NEW.rowid is und
c400: 65 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f  efined in a BEFO
c410: 52 45 20 49 4e 53 45 52 54 20 74 72 69 67 67 65  RE INSERT trigge
c420: 72 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72  r in which.the r
c430: 6f 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c  owid is not expl
c440: 69 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e  icitly set to an
c450: 20 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c   integer.</p>..<
c460: 70 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68 65  p>Because of the
c470: 20 62 65 68 61 76 69 6f 72 73 20 64 65 73 63 72   behaviors descr
c480: 69 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67  ibed above, prog
c490: 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f  rammers are enco
c4a0: 75 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72  uraged to.prefer
c4b0: 20 41 46 54 45 52 20 74 72 69 67 67 65 72 73 20   AFTER triggers 
c4c0: 6f 76 65 72 20 42 45 46 4f 52 45 20 74 72 69 67  over BEFORE trig
c4d0: 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54  gers.</p>..<h3>T
c4e0: 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74  he RAISE() funct
c4f0: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41  ion</h3>..<p>^(A
c500: 20 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e   special SQL fun
c510: 63 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61  ction RAISE() ma
c520: 79 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e  y be used within
c530: 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
c540: 61 6d 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66  am,)^.with the f
c550: 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c  ollowing syntax<
c560: 2f 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  /p> ..<tcl>Bubbl
c570: 65 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66  eDiagram raise-f
c580: 75 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c  unction</tcl>..<
c590: 70 3e 5e 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20  p>^(When one of 
c5a0: 52 41 49 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e  RAISE(ROLLBACK,.
c5b0: 2e 2e 29 2c 20 52 41 49 53 45 28 41 42 4f 52 54  ..), RAISE(ABORT
c5c0: 2c 2e 2e 2e 29 20 6f 72 20 52 41 49 53 45 28 46  ,...) or RAISE(F
c5d0: 41 49 4c 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c  AIL,...).is call
c5e0: 65 64 20 64 75 72 69 6e 67 20 74 72 69 67 67 65  ed during trigge
c5f0: 72 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74  r-program.execut
c600: 69 6f 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69  ion, the specifi
c610: 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
c620: 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70   processing is p
c630: 65 72 66 6f 72 6d 65 64 0a 74 68 65 20 63 75 72  erformed.the cur
c640: 72 65 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69  rent query termi
c650: 6e 61 74 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f  nates.)^.An erro
c660: 72 20 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54  r code of [SQLIT
c670: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73  E_CONSTRAINT] is
c680: 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
c690: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c   application,.al
c6a0: 6f 6e 67 20 77 69 74 68 20 74 68 65 20 73 70 65  ong with the spe
c6b0: 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73  cified error mes
c6c0: 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57  sage.</p>..<p>^W
c6d0: 68 65 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45  hen RAISE(IGNORE
c6e0: 29 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65  ) is called, the
c6f0: 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68   remainder of th
c700: 65 20 63 75 72 72 65 6e 74 20 74 72 69 67 67 65  e current trigge
c710: 72 20 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73  r program,.the s
c720: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61  tatement that ca
c730: 75 73 65 64 20 74 68 65 20 74 72 69 67 67 65 72  used the trigger
c740: 20 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63   program to exec
c750: 75 74 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73  ute and any subs
c760: 65 71 75 65 6e 74 0a 74 72 69 67 67 65 72 20 70  equent.trigger p
c770: 72 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75  rograms that wou
c780: 6c 64 20 68 61 76 65 20 62 65 65 6e 20 65 78 65  ld have been exe
c790: 63 75 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f  cuted are abando
c7a0: 6e 65 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73  ned. ^No databas
c7b0: 65 0a 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f  e.changes are ro
c7c0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20  lled back.  ^If 
c7d0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68  the statement th
c7e0: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72  at caused the tr
c7f0: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f  igger program.to
c800: 20 65 78 65 63 75 74 65 20 69 73 20 69 74 73 65   execute is itse
c810: 6c 66 20 70 61 72 74 20 6f 66 20 61 20 74 72 69  lf part of a tri
c820: 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 20 74 68  gger program, th
c830: 65 6e 20 74 68 61 74 20 74 72 69 67 67 65 72 20  en that trigger 
c840: 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73 20  program.resumes 
c850: 65 78 65 63 75 74 69 6f 6e 20 61 74 20 74 68 65  execution at the
c860: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
c870: 65 20 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70  e next step..</p
c880: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
c890: 65 6e 74 20 74 65 6d 70 74 72 69 67 20 7b 54 45  ent temptrig {TE
c8a0: 4d 50 20 74 72 69 67 67 65 72 73 20 6f 6e 20 6e  MP triggers on n
c8b0: 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c  on-TEMP tables}<
c8c0: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54  /tcl>.<h3>TEMP T
c8d0: 72 69 67 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54  riggers on Non-T
c8e0: 45 4d 50 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a  EMP Tables</h3>.
c8f0: 0a 3c 70 3e 5e 28 41 20 74 72 69 67 67 65 72 20  .<p>^(A trigger 
c900: 6e 6f 72 6d 61 6c 6c 79 20 65 78 69 73 74 73 20  normally exists 
c910: 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  in the same data
c920: 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c  base as the tabl
c930: 65 20 6e 61 6d 65 64 0a 61 66 74 65 72 20 74 68  e named.after th
c940: 65 20 22 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69  e "ON" keyword i
c950: 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49  n the CREATE TRI
c960: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20  GGER statement. 
c970: 20 45 78 63 65 70 74 2c 20 69 74 20 69 73 0a 70   Except, it is.p
c980: 6f 73 73 69 62 6c 65 20 74 6f 20 63 72 65 61 74  ossible to creat
c990: 65 20 61 20 54 45 4d 50 20 54 52 49 47 47 45 52  e a TEMP TRIGGER
c9a0: 20 6f 6e 20 61 20 74 61 62 6c 65 20 69 6e 20 61   on a table in a
c9b0: 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 2e  nother database.
c9c0: 29 5e 20 20 0a 53 75 63 68 20 61 20 74 72 69 67  )^  .Such a trig
c9d0: 67 65 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69  ger will only fi
c9e0: 72 65 20 77 68 65 6e 20 63 68 61 6e 67 65 73 0a  re when changes.
c9f0: 61 72 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20  are made to the 
ca00: 74 61 72 67 65 74 20 74 61 62 6c 65 20 62 79 20  target table by 
ca10: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  the application 
ca20: 74 68 61 74 20 64 65 66 69 6e 65 64 20 74 68 65  that defined the
ca30: 20 74 72 69 67 67 65 72 2e 0a 4f 74 68 65 72 20   trigger..Other 
ca40: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61  applications tha
ca50: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74  t modify the dat
ca60: 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62  abase will not b
ca70: 65 20 61 62 6c 65 20 74 6f 20 73 65 65 20 74 68  e able to see th
ca80: 65 0a 54 45 4d 50 20 74 72 69 67 67 65 72 20 61  e.TEMP trigger a
ca90: 6e 64 20 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20  nd hence cannot 
caa0: 72 75 6e 20 74 68 65 20 74 72 69 67 67 65 72 2e  run the trigger.
cab0: 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65  </p>..<p>When de
cac0: 66 69 6e 69 6e 67 20 61 20 54 45 4d 50 20 74 72  fining a TEMP tr
cad0: 69 67 67 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54  igger on a non-T
cae0: 45 4d 50 20 74 61 62 6c 65 2c 20 69 74 20 69 73  EMP table, it is
caf0: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70   important to.sp
cb00: 65 63 69 66 79 20 74 68 65 20 64 61 74 61 62 61  ecify the databa
cb10: 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e  se holding the n
cb20: 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65 2e 20 20  on-TEMP table.  
cb30: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20  For example,.in 
cb40: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
cb50: 61 74 65 6d 65 6e 74 2c 20 69 74 20 69 73 20 69  atement, it is i
cb60: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 61 79 20  mportant to say 
cb70: 22 6d 61 69 6e 2e 74 61 62 31 22 20 69 6e 73 74  "main.tab1" inst
cb80: 65 61 64 0a 6f 66 20 6a 75 73 74 20 22 74 61 62  ead.of just "tab
cb90: 31 22 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  1":</p>..<blockq
cba0: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
cbb0: 45 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 65  E TEMP TRIGGER e
cbc0: 78 31 20 41 46 54 45 52 20 49 4e 53 45 52 54 20  x1 AFTER INSERT 
cbd0: 4f 4e 20 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74  ON <b>main.</b>t
cbe0: 61 62 31 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f  ab1 BEGIN ....</
cbf0: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
cc00: 3e 0a 0a 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f  >..<p>Failure to
cc10: 20 73 70 65 63 69 66 79 20 74 68 65 20 64 61 74   specify the dat
cc20: 61 62 61 73 65 20 6e 61 6d 65 20 6f 6e 20 74 68  abase name on th
cc30: 65 20 74 61 72 67 65 74 20 74 61 62 6c 65 20 63  e target table c
cc40: 6f 75 6c 64 20 72 65 73 75 6c 74 0a 69 6e 20 74  ould result.in t
cc50: 68 65 20 54 45 4d 50 20 74 72 69 67 67 65 72 20  he TEMP trigger 
cc60: 62 65 69 6e 67 20 72 65 61 74 74 61 63 68 65 64  being reattached
cc70: 20 74 6f 20 61 20 74 61 62 6c 65 20 77 69 74 68   to a table with
cc80: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 69   the same name i
cc90: 6e 0a 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61  n.another databa
cca0: 73 65 20 77 68 65 6e 65 76 65 72 20 61 6e 79 20  se whenever any 
ccb0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 20 6f 63  schema change oc
ccc0: 63 75 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  curs.</p>..<tcl>
ccd0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
cce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ccf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd20: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
cd30: 20 56 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69   VIEW} {createvi
cd40: 65 77 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45  ew} {{CREATE VIE
cd50: 57 7d 20 76 69 65 77 20 2a 76 69 65 77 73 7d 0a  W} view *views}.
cd60: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
cd70: 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76  Diagram create-v
cd80: 69 65 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  iew-stmt.</tcl>.
cd90: 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20  .<p>^The CREATE 
cda0: 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73  VIEW command ass
cdb0: 69 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61  igns a name to a
cdc0: 20 70 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b   pre-packaged .[
cdd0: 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
cde0: 74 2e 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69  t. .^Once the vi
cdf0: 65 77 20 69 73 20 63 72 65 61 74 65 64 2c 20 69  ew is created, i
ce00: 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  t can be used in
ce10: 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
ce20: 0a 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c  .of another [SEL
ce30: 45 43 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66  ECT] in place of
ce40: 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c   a table name..<
ce50: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
ce60: 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f  "TEMP" or "TEMPO
ce70: 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63  RARY" keyword oc
ce80: 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20  curs in between 
ce90: 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49  "CREATE".and "VI
cea0: 45 57 22 20 74 68 65 6e 20 74 68 65 20 76 69 65  EW" then the vie
ceb0: 77 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65  w that is create
cec0: 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c  d is only visibl
ced0: 65 20 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73  e to the.process
cee0: 20 74 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65   that opened the
cef0: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 69 73   database and is
cf00: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
cf10: 65 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20  eleted when.the 
cf20: 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  database is clos
cf30: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66  ed.</p>..<p> ^If
cf40: 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d   a &lt;database-
cf50: 6e 61 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63  name&gt; is spec
cf60: 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20  ified, then the 
cf70: 76 69 65 77 20 69 73 20 63 72 65 61 74 65 64 20  view is created 
cf80: 69 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61  in .the named da
cf90: 74 61 62 61 73 65 2e 20 5e 49 74 20 69 73 20 61  tabase. ^It is a
cfa0: 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69  n error to speci
cfb0: 66 79 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61  fy both a &lt;da
cfc0: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a  tabase-name&gt;.
cfd0: 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79  and the TEMP key
cfe0: 77 6f 72 64 20 6f 6e 20 61 20 56 49 45 57 2c 20  word on a VIEW, 
cff0: 75 6e 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64  unless the &lt;d
d000: 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b  atabase-name&gt;
d010: 20 69 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20   is "temp"..^If 
d020: 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  no database name
d030: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61   is specified, a
d040: 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77  nd the TEMP keyw
d050: 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65  ord is not prese
d060: 6e 74 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20  nt,.the VIEW is 
d070: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d  created in the m
d080: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70  ain database.</p
d090: 3e 0a 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f  >..<p>^You canno
d0a0: 74 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53  t [DELETE], [INS
d0b0: 45 52 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45  ERT], or [UPDATE
d0c0: 5d 20 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77  ] a view.  ^View
d0d0: 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20  s are read-only 
d0e0: 0a 69 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f  .in SQLite.  ^Ho
d0f0: 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63  wever, in many c
d100: 61 73 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65  ases you can use
d110: 20 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20   an.[INSTEAD OF 
d120: 74 72 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20  trigger] on the 
d130: 76 69 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69  view to accompli
d140: 73 68 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69  sh .the same thi
d150: 6e 67 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20  ng.  ^Views are 
d160: 72 65 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68  removed .with th
d170: 65 20 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f  e [DROP VIEW] co
d180: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  mmand.</p>..<tcl
d190: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
d1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1e0: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
d1f0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
d200: 7b 63 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43  {createvtab} {{C
d210: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
d220: 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  BLE}}..Recursive
d230: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
d240: 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62  eate-virtual-tab
d250: 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  le-stmt.</tcl>..
d260: 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61  <p>A [virtual ta
d270: 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72  ble] is an inter
d280: 66 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72  face to an exter
d290: 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63  nal storage or c
d2a0: 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e  omputation.engin
d2b0: 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20 74  e that appears t
d2c0: 6f 20 62 65 20 61 20 74 61 62 6c 65 20 62 75 74  o be a table but
d2d0: 20 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c   does not actual
d2e0: 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61  ly store informa
d2f0: 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61  tion.in the data
d300: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
d310: 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79  <p>In general, y
d320: 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69  ou can do anythi
d330: 6e 67 20 77 69 74 68 20 61 20 5b 76 69 72 74 75  ng with a [virtu
d340: 61 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63  al table] that c
d350: 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20  an be done.with 
d360: 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  an ordinary tabl
d370: 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 5e  e, except that ^
d380: 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74  you cannot creat
d390: 65 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69  e indices or tri
d3a0: 67 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75  ggers on a.virtu
d3b0: 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65  al table.  ^Some
d3c0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
d3d0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d  mplementations m
d3e0: 69 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69  ight impose addi
d3f0: 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69  tional.restricti
d400: 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ons.  For exampl
d410: 65 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20  e, many virtual 
d420: 74 61 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d  tables are read-
d430: 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  only.</p>..<p>Th
d440: 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d  e &lt;module-nam
d450: 65 26 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d  e&gt; is the nam
d460: 65 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74  e of an object t
d470: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74  hat implements.t
d480: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
d490: 2e 20 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75  .  ^The &lt;modu
d4a0: 6c 65 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74  le-name&gt; must
d4b0: 20 62 65 20 72 65 67 69 73 74 65 72 65 64 20 77   be registered w
d4c0: 69 74 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64  ith.the SQLite d
d4d0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
d4e0: 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65  on using.[sqlite
d4f0: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
d500: 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63  )] or [sqlite3_c
d510: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28  reate_module_v2(
d520: 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75  )].prior to issu
d530: 69 6e 67 20 74 68 65 20 43 52 45 41 54 45 20 56  ing the CREATE V
d540: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d550: 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64  tement..^The mod
d560: 75 6c 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f  ule takes zero o
d570: 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70  r more comma-sep
d580: 61 72 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73  arated arguments
d590: 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73  ..^The arguments
d5a0: 20 63 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f   can be just abo
d5b0: 75 74 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c  ut any text as l
d5c0: 6f 6e 67 20 61 73 20 69 74 20 68 61 73 20 62 61  ong as it has ba
d5d0: 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73  lanced.parenthes
d5e0: 65 73 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e  es.  The argumen
d5f0: 74 20 73 79 6e 74 61 78 20 69 73 20 73 75 66 66  t syntax is suff
d600: 69 63 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c  iciently general
d610: 20 74 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65   that the.argume
d620: 6e 74 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  nts can be made 
d630: 74 6f 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f  to appear as [co
d640: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  lumn definitions
d650: 5d 20 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e  ] in a tradition
d660: 61 6c 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  al.[CREATE TABLE
d670: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e  ] statement.  .^
d680: 53 51 4c 69 74 65 20 70 61 73 73 65 73 20 74 68  SQLite passes th
d690: 65 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  e module argumen
d6a0: 74 73 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74  ts directly.to t
d6b0: 68 65 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64  he [xCreate] and
d6c0: 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68   [xConnect] meth
d6d0: 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  ods of the modul
d6e0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
d6f0: 0a 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74  .without any int
d700: 65 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74  erpretation.  It
d710: 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69   is the responsi
d720: 62 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f  bility.of the mo
d730: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
d740: 69 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64  ion to parse and
d750: 20 69 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f   interpret its o
d760: 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70  wn arguments.</p
d770: 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c  >..<p>^A virtual
d780: 20 74 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f   table is destro
d790: 79 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72  yed using the or
d7a0: 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42  dinary.[DROP TAB
d7b0: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
d7c0: 54 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50  There is no.DROP
d7d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
d7e0: 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c  tatement.</p>..<
d7f0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
d800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d840: 23 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45  ###.Section DELE
d850: 54 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54  TE delete {DELET
d860: 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a 52 65 63  E *DELETEs}..Rec
d870: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
d880: 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 0a  ram delete-stmt.
d890: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44  </tcl>..<p>The D
d8a0: 45 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65  ELETE command re
d8b0: 6d 6f 76 65 73 20 72 65 63 6f 72 64 73 20 66 72  moves records fr
d8c0: 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 69 64 65  om the table ide
d8d0: 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 0a 20  ntified by the. 
d8e0: 20 20 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74    <i>qualified-t
d8f0: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 0a  able-name</i>. .
d900: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 57 48 45 52  .<p>^If the WHER
d910: 45 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20  E clause is not 
d920: 70 72 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63  present, all rec
d930: 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ords in the tabl
d940: 65 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20  e are deleted.. 
d950: 20 20 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c    ^If a WHERE cl
d960: 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64  ause is supplied
d970: 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73  , then only thos
d980: 65 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  e rows for which
d990: 20 74 68 65 0a 20 20 20 72 65 73 75 6c 74 20 6f   the.   result o
d9a0: 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
d9b0: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 61 73   WHERE clause as
d9c0: 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72   a [boolean expr
d9d0: 65 73 73 69 6f 6e 7c 0a 20 20 20 62 6f 6f 6c 65  ession|.   boole
d9e0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  an expression is
d9f0: 20 74 72 75 65 5d 20 61 72 65 20 64 65 6c 65 74   true] are delet
da00: 65 64 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63  ed...<h3>Restric
da10: 74 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20  tions on DELETE 
da20: 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69  Statements Withi
da30: 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  n CREATE TRIGGER
da40: 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h3>..<p>The fo
da50: 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74  llowing restrict
da60: 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45  ions apply to DE
da70: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  LETE statements 
da80: 74 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69  that occur withi
da90: 6e 20 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66  n the.   body of
daa0: 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47   a [CREATE TRIGG
dab0: 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a  ER] statement:..
dac0: 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54  <ul>.  <li><p>^T
dad0: 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65  he <i>table-name
dae0: 3c 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61  </i> specified a
daf0: 73 20 70 61 72 74 20 6f 66 20 61 20 44 45 4c 45  s part of a DELE
db00: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74  TE statement wit
db10: 68 69 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65  hin.    a trigge
db20: 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75  r body must be u
db30: 6e 71 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49  nqualified.  ^(I
db40: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
db50: 68 65 0a 20 20 20 20 3c 69 3e 64 61 74 61 62 61  he.    <i>databa
db60: 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c  se-name</i><b>.<
db70: 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68  /b> prefix on th
db80: 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20  e table name is 
db90: 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20  not allowed .   
dba0: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
dbb0: 2e 29 5e 20 5e 49 66 20 74 68 65 20 74 61 62 6c  .)^ ^If the tabl
dbc0: 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  e to which the t
dbd0: 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68  rigger is attach
dbe0: 65 64 20 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e  ed is.    not in
dbf0: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
dc00: 73 65 2c 20 74 68 65 6e 20 44 45 4c 45 54 45 20  se, then DELETE 
dc10: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
dc20: 6e 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20  n the trigger.  
dc30: 20 20 62 6f 64 79 20 6d 75 73 74 20 6f 70 65 72    body must oper
dc40: 61 74 65 20 6f 6e 20 74 61 62 6c 65 73 20 77 69  ate on tables wi
dc50: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61  thin the same da
dc60: 74 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49  tabase as it. ^I
dc70: 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20  f the table.    
dc80: 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
dc90: 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
dca0: 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20   is in the TEMP 
dcb0: 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74  database, then t
dcc0: 68 65 0a 20 20 20 20 75 6e 71 75 61 6c 69 66 69  he.    unqualifi
dcd0: 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
dce0: 61 62 6c 65 20 62 65 69 6e 67 20 64 65 6c 65 74  able being delet
dcf0: 65 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69  ed is resolved i
dd00: 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
dd10: 73 0a 20 20 20 20 69 74 20 69 73 20 66 6f 72 20  s.    it is for 
dd20: 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74  a top-level stat
dd30: 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68  ement (by search
dd40: 69 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45  ing first the TE
dd50: 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  MP database, the
dd60: 6e 0a 20 20 20 20 74 68 65 20 6d 61 69 6e 20 64  n.    the main d
dd70: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e  atabase, then an
dd80: 79 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  y other database
dd90: 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74  s in the order t
dda0: 68 65 79 20 77 65 72 65 0a 20 20 20 20 61 74 74  hey were.    att
ddb0: 61 63 68 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c  ached)..    .  <
ddc0: 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  li><p>^The INDEX
ddd0: 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
dde0: 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
ddf0: 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e  e not allowed on
de00: 20 44 45 4c 45 54 45 0a 20 20 20 20 73 74 61 74   DELETE.    stat
de10: 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
de20: 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c  iggers.</p>..  <
de30: 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54  li><p>^The LIMIT
de40: 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c   and ORDER BY cl
de50: 61 75 73 65 73 20 28 64 65 73 63 72 69 62 65 64  auses (described
de60: 20 62 65 6c 6f 77 29 20 61 72 65 20 75 6e 73 75   below) are unsu
de70: 70 70 6f 72 74 65 64 20 66 6f 72 0a 20 20 20 20  pported for.    
de80: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
de90: 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
dea0: 73 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68  s.</p>.</ul>..<h
deb0: 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54  3>Optional LIMIT
dec0: 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c   and ORDER BY cl
ded0: 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  auses</h3>..<p>^
dee0: 28 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f  (If SQLite is co
def0: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20  mpiled with the 
df00: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  [SQLITE_ENABLE_U
df10: 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
df20: 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  IT].compile-time
df30: 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68   option, then th
df40: 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20  e syntax of the 
df50: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
df60: 20 69 73 0a 65 78 74 65 6e 64 65 64 20 62 79 20   is.extended by 
df70: 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20  the addition of 
df80: 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42  optional ORDER B
df90: 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75  Y and LIMIT clau
dfa0: 73 65 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ses:)^</p>..<tcl
dfb0: 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  >BubbleDiagram d
dfc0: 65 6c 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74  elete-stmt-limit
dfd0: 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66  ed</tcl>..<p>^If
dfe0: 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
dff0: 65 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20  ent has a LIMIT 
e000: 63 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69  clause, the maxi
e010: 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mum number of ro
e020: 77 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20  ws that.will be 
e030: 64 65 6c 65 74 65 64 20 69 73 20 66 6f 75 6e 64  deleted is found
e040: 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74   by evaluating t
e050: 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20  he accompanying 
e060: 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63  expression and c
e070: 61 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20  asting.it to an 
e080: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e  integer value. ^
e090: 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  If the result of
e0a0: 20 74 68 65 20 65 76 61 6c 75 61 74 69 6e 67 20   the evaluating 
e0b0: 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  the LIMIT clause
e0c0: 0a 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c  .cannot be lossl
e0d0: 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
e0e0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
e0f0: 6c 75 65 2c 20 69 74 20 69 73 20 61 6e 20 65 72  lue, it is an er
e100: 72 6f 72 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76  ror. ^A .negativ
e110: 65 20 4c 49 4d 49 54 20 76 61 6c 75 65 20 69 73  e LIMIT value is
e120: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
e130: 22 6e 6f 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66  "no limit". ^(If
e140: 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
e150: 65 6d 65 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20  ement .also has 
e160: 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  an OFFSET clause
e170: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d  , then it is sim
e180: 69 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64  ilarly evaluated
e190: 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 0a   and cast to an.
e1a0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 41  integer value. A
e1b0: 67 61 69 6e 2c 20 69 74 20 69 73 20 61 6e 20 65  gain, it is an e
e1c0: 72 72 6f 72 20 69 66 20 74 68 65 20 76 61 6c 75  rror if the valu
e1d0: 65 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73  e cannot be loss
e1e0: 6c 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64  lessly.converted
e1f0: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 29   to an integer.)
e200: 5e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e  ^ ^If there is n
e210: 6f 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  o OFFSET clause,
e220: 20 6f 72 20 74 68 65 20 63 61 6c 63 75 6c 61 74   or the calculat
e230: 65 64 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ed.integer value
e240: 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68   is negative, th
e250: 65 20 65 66 66 65 63 74 69 76 65 20 4f 46 46 53  e effective OFFS
e260: 45 54 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f  ET value is zero
e270: 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 44  ...<p>^(If the D
e280: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
e290: 68 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20  has an ORDER BY 
e2a0: 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c  clause, then all
e2b0: 20 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64   rows that would
e2c0: 20 0a 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20   .be deleted in 
e2d0: 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74  the absence of t
e2e0: 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
e2f0: 61 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72  are sorted accor
e300: 64 69 6e 67 20 74 6f 20 74 68 65 20 0a 4f 52 44  ding to the .ORD
e310: 45 52 20 42 59 2e 20 54 68 65 20 66 69 72 73 74  ER BY. The first
e320: 20 3c 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20   <i>M</i> rows, 
e330: 77 68 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69  where <i>M</i> i
e340: 73 20 74 68 65 20 76 61 6c 75 65 20 66 6f 75 6e  s the value foun
e350: 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20  d by.evaluating 
e360: 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73  the OFFSET claus
e370: 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72  e expression, ar
e380: 65 20 73 6b 69 70 70 65 64 2c 20 61 6e 64 20 74  e skipped, and t
e390: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69  he following .<i
e3a0: 3e 4e 3c 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69  >N</i>, where <i
e3b0: 3e 4e 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61  >N</i> is the va
e3c0: 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  lue of the LIMIT
e3d0: 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65   expression, are
e3e0: 20 64 65 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20   deleted.)^.^If 
e3f0: 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
e400: 68 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77  han <i>N</i> row
e410: 73 20 72 65 6d 61 69 6e 69 6e 67 20 61 66 74 65  s remaining afte
e420: 72 20 74 61 6b 69 6e 67 20 74 68 65 20 4f 46 46  r taking the OFF
e430: 53 45 54 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20  SET clause.into 
e440: 61 63 63 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74  account, or if t
e450: 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
e460: 65 76 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6e  evaluated to a n
e470: 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74  egative value, t
e480: 68 65 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e  hen all.remainin
e490: 67 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74  g rows are delet
e4a0: 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  ed...<p>^If the 
e4b0: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
e4c0: 20 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59   has no ORDER BY
e4d0: 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c   clause, then al
e4e0: 6c 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c  l rows that.woul
e4f0: 64 20 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20  d be deleted in 
e500: 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74  the absence of t
e510: 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
e520: 61 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e  are assembled in
e530: 20 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72   an.arbitrary or
e540: 64 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79  der before apply
e550: 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e  ing the LIMIT an
e560: 64 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73  d OFFSET clauses
e570: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 74   to determine .t
e580: 68 65 20 73 75 62 73 65 74 20 74 68 61 74 20 61  he subset that a
e590: 72 65 20 61 63 74 75 61 6c 6c 79 20 64 65 6c 65  re actually dele
e5a0: 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f  ted...<p>^(The O
e5b0: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f  RDER BY clause o
e5c0: 6e 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65  n a DELETE state
e5d0: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c  ment is used onl
e5e0: 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  y to determine w
e5f0: 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77  hich.rows fall w
e600: 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e  ithin the LIMIT.
e610: 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   The order in wh
e620: 69 63 68 20 72 6f 77 73 20 61 72 65 20 64 65 6c  ich rows are del
e630: 65 74 65 64 20 69 73 20 61 72 62 69 74 72 61 72  eted is arbitrar
e640: 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66  y.and is not inf
e650: 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f  luenced by the O
e660: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29  RDER BY clause.)
e670: 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
e680: 65 6e 74 20 74 72 75 6e 63 61 74 65 6f 70 74 20  ent truncateopt 
e690: 7b 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69  {truncate optimi
e6a0: 7a 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68  zation}</tcl>.<h
e6b0: 33 3e 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f  3>The Truncate O
e6c0: 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e  ptimization</h3>
e6d0: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57  ..<p>^When the W
e6e0: 48 45 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20  HERE is omitted 
e6f0: 66 72 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74  from a DELETE st
e700: 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20  atement and the 
e710: 74 61 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65  table.being dele
e720: 74 65 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67  ted has no trigg
e730: 65 72 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73  ers,.SQLite uses
e740: 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
e750: 20 74 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e   to erase the en
e760: 74 69 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65  tire table conte
e770: 6e 74 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e  nt.without havin
e780: 67 20 74 6f 20 76 69 73 69 74 20 65 61 63 68 20  g to visit each 
e790: 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65  row of the table
e7a0: 20 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54   individually..T
e7b0: 68 69 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f  his "truncate" o
e7c0: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65  ptimization make
e7d0: 73 20 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e  s the delete run
e7e0: 20 6d 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72   much faster..Pr
e7f0: 69 6f 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76  ior to SQLite [v
e800: 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74  ersion 3.6.5], t
e810: 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69  he truncate opti
e820: 6d 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65  mization.also me
e830: 61 6e 74 20 74 68 61 74 20 74 68 65 20 5b 73 71  ant that the [sq
e840: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
e850: 20 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f   and.[sqlite3_to
e860: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69  tal_changes()] i
e870: 6e 74 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68  nterfaces.and th
e880: 65 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  e [count_changes
e890: 20 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f   pragma].will no
e8a0: 74 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72  t actually retur
e8b0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
e8c0: 64 65 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a  deleted rows.  .
e8d0: 54 68 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73  That problem has
e8e0: 20 62 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f   been fixed as o
e8f0: 66 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35  f [version 3.6.5
e900: 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e  ]...<p>^The trun
e910: 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
e920: 6e 20 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65  n can be permane
e930: 6e 74 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f  ntly disabled fo
e940: 72 20 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79  r all queries.by
e950: 20 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c   recompiling.SQL
e960: 69 74 65 20 77 69 74 68 20 74 68 65 20 5b 53 51  ite with the [SQ
e970: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41  LITE_OMIT_TRUNCA
e980: 54 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d  TE_OPTIMIZATION]
e990: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77   compile-time sw
e9a0: 69 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  itch.</p>..<p>Th
e9b0: 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d  e truncate optim
e9c0: 69 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f  ization can also
e9d0: 20 62 65 20 64 69 73 61 62 6c 65 64 20 61 74 20   be disabled at 
e9e0: 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68  runtime using.th
e9f0: 65 20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  e [sqlite3_set_a
ea00: 75 74 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74  uthorizer()] int
ea10: 65 72 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20  erface.  ^If an 
ea20: 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62  authorizer callb
ea30: 61 63 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c  ack.returns [SQL
ea40: 49 54 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20  ITE_IGNORE] for 
ea50: 61 6e 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54  an [SQLITE_DELET
ea60: 45 5d 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20  E] action code, 
ea70: 74 68 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20  then.the DELETE 
ea80: 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70  operation will p
ea90: 72 6f 63 65 65 64 20 62 75 74 20 74 68 65 20 74  roceed but the t
eaa0: 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
eab0: 74 69 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70  tion will.be byp
eac0: 61 73 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77  assed and rows w
ead0: 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f  ill be deleted o
eae0: 6e 65 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a  ne by one.</p>..
eaf0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
eb00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb40: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
eb50: 45 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  ETACH DATABASE} 
eb60: 64 65 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a  detach *DETACH..
eb70: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
eb80: 69 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74  iagram detach-st
eb90: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
eba0: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65  his statement de
ebb0: 74 61 63 68 65 73 20 61 6e 20 61 64 64 69 74 69  taches an additi
ebc0: 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f  onal database co
ebd0: 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75  nnection previou
ebe0: 73 6c 79 20 0a 61 74 74 61 63 68 65 64 20 75 73  sly .attached us
ebf0: 69 6e 67 20 74 68 65 20 5b 41 54 54 41 43 48 5d  ing the [ATTACH]
ec00: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 57   statement.  .^W
ec10: 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 73 68 61 72  hen not in [shar
ec20: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20  ed cache mode], 
ec30: 0a 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20  .it is possible 
ec40: 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  to have the same
ec50: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
ec60: 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65  ttached multiple
ec70: 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69   times using .di
ec80: 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61  fferent names, a
ec90: 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65  nd detaching one
eca0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61   connection to a
ecb0: 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65   file will leave
ecc0: 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74   the .others int
ecd0: 61 63 74 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68  act.</p>.^In [sh
ece0: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d  ared cache mode]
ecf0: 2c 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  , attempting to 
ed00: 61 74 74 61 63 68 20 74 68 65 20 73 61 6d 65 20  attach the same 
ed10: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 6f  database file mo
ed20: 72 65 0a 74 68 61 6e 20 6f 6e 63 65 20 72 65 73  re.than once res
ed30: 75 6c 74 73 20 69 6e 20 61 6e 20 65 72 72 6f 72  ults in an error
ed40: 2e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74  ...<p>^This stat
ed50: 65 6d 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20  ement will fail 
ed60: 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20  if SQLite is in 
ed70: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20  the middle of a 
ed80: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e  transaction.</p>
ed90: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
eda0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ede0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
edf0: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f  {DROP INDEX} dro
ee00: 70 69 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e  pindex {{DROP IN
ee10: 44 45 58 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  DEX}}..Recursive
ee20: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
ee30: 6f 70 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f  op-index-stmt.</
ee40: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
ee50: 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  OP INDEX stateme
ee60: 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e  nt removes an in
ee70: 64 65 78 20 61 64 64 65 64 0a 77 69 74 68 20 74  dex added.with t
ee80: 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58  he [CREATE INDEX
ee90: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
eea0: 65 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c  e index is compl
eeb0: 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72  etely removed fr
eec0: 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68  om.the disk.  Th
eed0: 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65  e only way to re
eee0: 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78 20  cover the index 
eef0: 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68  is to reenter th
ef00: 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43  e.appropriate [C
ef10: 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d  REATE INDEX] com
ef20: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  mand.</p>..<tcl>
ef30: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
ef40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a  ###############.
ef80: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41  Section {DROP TA
ef90: 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b  BLE} droptable {
efa0: 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 52  {DROP TABLE}}..R
efb0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
efc0: 61 67 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65  agram drop-table
efd0: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
efe0: 3e 5e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45  >^The DROP TABLE
eff0: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76   statement remov
f000: 65 73 20 61 20 74 61 62 6c 65 20 61 64 64 65 64  es a table added
f010: 20 77 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54   with the.[CREAT
f020: 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
f030: 6e 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70  nt.  The name sp
f040: 65 63 69 66 69 65 64 20 69 73 20 74 68 65 0a 74  ecified is the.t
f050: 61 62 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65  able name.  ^The
f060: 20 64 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69   dropped table i
f070: 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d  s completely rem
f080: 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  oved from the da
f090: 74 61 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61  tabase .schema a
f0a0: 6e 64 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  nd the disk file
f0b0: 2e 20 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e  .  The table can
f0c0: 20 6e 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65   not be recovere
f0d0: 64 2e 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65  d.  .^All indice
f0e0: 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61  s and triggers.a
f0f0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
f100: 68 65 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73  he table are als
f110: 6f 20 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a  o deleted.</p>..
f120: 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  <p>^The optional
f130: 20 49 46 20 45 58 49 53 54 53 20 63 6c 61 75 73   IF EXISTS claus
f140: 65 20 73 75 70 70 72 65 73 73 65 73 20 74 68 65  e suppresses the
f150: 20 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c   error that woul
f160: 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c  d normally.resul
f170: 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 64  t if the table d
f180: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f  oes not exist.</
f190: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65  p>..<p>^If [fore
f1a0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
f1b0: 6e 74 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64  nts] are enabled
f1c0: 2c 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  , a DROP TABLE c
f1d0: 6f 6d 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20  ommand performs 
f1e0: 61 6e 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c  an.implicit [DEL
f1f0: 45 54 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f  ETE | DELETE FRO
f200: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63  M &lt;tbl&gt;] c
f210: 6f 6d 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65  ommand before re
f220: 6d 6f 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65  moving the.table
f230: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
f240: 73 65 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20  se schema. ^Any 
f250: 74 72 69 67 67 65 72 73 20 61 74 74 61 63 68 65  triggers attache
f260: 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61  d to the table a
f270: 72 65 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  re.dropped from 
f280: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
f290: 65 6d 61 20 62 65 66 6f 72 65 20 74 68 65 20 69  ema before the i
f2a0: 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46  mplicit DELETE F
f2b0: 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20  ROM &lt;tbl&gt; 
f2c0: 0a 69 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f  .is executed, so
f2d0: 20 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75   this cannot cau
f2e0: 73 65 20 61 6e 79 20 74 72 69 67 67 65 72 73 20  se any triggers 
f2f0: 74 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74  to fire. By cont
f300: 72 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63  rast, ^an.implic
f310: 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26  it DELETE FROM &
f320: 6c 74 3b 74 62 6c 26 67 74 3b 20 64 6f 65 73 20  lt;tbl&gt; does 
f330: 63 61 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67  cause any config
f340: 75 72 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65  ured.[foreign ke
f350: 79 20 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61  y actions] to ta
f360: 6b 65 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74  ke place. .^If t
f370: 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
f380: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
f390: 67 74 3b 20 65 78 65 63 75 74 65 64 0a 61 73 20  gt; executed.as 
f3a0: 70 61 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54  part of a DROP T
f3b0: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f  ABLE command vio
f3c0: 6c 61 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69  lates any immedi
f3d0: 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
f3e0: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20  constraints,.an 
f3f0: 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
f400: 64 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  d and the table 
f410: 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20  is not dropped. 
f420: 5e 49 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69  ^If .the implici
f430: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
f440: 74 3b 74 62 6c 26 67 74 3b 20 63 61 75 73 65 73  t;tbl&gt; causes
f450: 20 61 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66   any .deferred f
f460: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
f470: 72 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f  raints to be vio
f480: 6c 61 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76  lated, and the v
f490: 69 6f 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a  iolations still.
f4a0: 65 78 69 73 74 20 77 68 65 6e 20 74 68 65 20 74  exist when the t
f4b0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f  ransaction is co
f4c0: 6d 6d 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f  mmitted, an erro
f4d0: 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 74  r is returned at
f4e0: 20 74 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d   the time.of com
f4f0: 6d 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  mit...<tcl>.####
f500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f540: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
f550: 6f 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52  on {DROP TRIGGER
f560: 7d 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b  } droptrigger {{
f570: 44 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a  DROP TRIGGER}}..
f580: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
f590: 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67  iagram drop-trig
f5a0: 67 65 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ger-stmt.</tcl>.
f5b0: 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 52  .<p>^The DROP TR
f5c0: 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20  IGGER statement 
f5d0: 72 65 6d 6f 76 65 73 20 61 20 74 72 69 67 67 65  removes a trigge
f5e0: 72 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65  r created by the
f5f0: 20 0a 5b 43 52 45 41 54 45 20 54 52 49 47 47 45   .[CREATE TRIGGE
f600: 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 4f  R] statement. ^O
f610: 6e 63 65 20 72 65 6d 6f 76 65 64 2c 20 74 68 65  nce removed, the
f620: 20 74 72 69 67 67 65 72 20 64 65 66 69 6e 69 74   trigger definit
f630: 69 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72  ion is no.longer
f640: 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
f650: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 6f  sqlite_master (o
f660: 72 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  r sqlite_temp_ma
f670: 73 74 65 72 29 20 74 61 62 6c 65 20 61 6e 64 20  ster) table and 
f680: 69 73 0a 6e 6f 74 20 66 69 72 65 64 20 62 79 20  is.not fired by 
f690: 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74 20 49  any subsequent I
f6a0: 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
f6b0: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
f6c0: 74 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68  ts...<p>^Note th
f6d0: 61 74 20 74 72 69 67 67 65 72 73 20 61 72 65 20  at triggers are 
f6e0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72  automatically dr
f6f0: 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65 20 61  opped when the a
f700: 73 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20  ssociated table 
f710: 69 73 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74 63  is.dropped...<tc
f720: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
f730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f770: 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20  #.Section {DROP 
f780: 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77 20 7b  VIEW} dropview {
f790: 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 52 65  {DROP VIEW}}..Re
f7a0: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
f7b0: 67 72 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73  gram drop-view-s
f7c0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
f7d0: 54 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74  The DROP VIEW st
f7e0: 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20  atement removes 
f7f0: 61 20 76 69 65 77 20 63 72 65 61 74 65 64 20 62  a view created b
f800: 79 20 74 68 65 20 5b 43 52 45 41 54 45 20 56 49  y the [CREATE VI
f810: 45 57 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e 74  EW] .  statement
f820: 2e 20 5e 54 68 65 20 76 69 65 77 20 64 65 66 69  . ^The view defi
f830: 6e 69 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65  nition is remove
f840: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
f850: 61 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20  ase schema, but 
f860: 0a 20 20 6e 6f 20 61 63 74 75 61 6c 20 64 61 74  .  no actual dat
f870: 61 20 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79  a in the underly
f880: 69 6e 67 20 62 61 73 65 20 74 61 62 6c 65 73 20  ing base tables 
f890: 69 73 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c 70  is modified...<p
f8a0: 3e 5e 28 54 68 65 20 76 69 65 77 20 74 6f 20 64  >^(The view to d
f8b0: 72 6f 70 20 69 73 20 69 64 65 6e 74 69 66 69 65  rop is identifie
f8c0: 64 20 62 79 20 74 68 65 20 76 69 65 77 2d 6e 61  d by the view-na
f8d0: 6d 65 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 20  me and optional 
f8e0: 0a 20 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  .  database-name
f8f0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
f900: 72 74 20 6f 66 20 74 68 65 20 44 52 4f 50 20 56  rt of the DROP V
f910: 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  IEW statement. T
f920: 68 69 73 20 0a 20 20 72 65 66 65 72 65 6e 63 65  his .  reference
f930: 20 69 73 20 72 65 73 6f 6c 76 65 64 20 75 73 69   is resolved usi
f940: 6e 67 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  ng the standard 
f950: 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 5b 6f  procedure for [o
f960: 62 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  bject resolution
f970: 5d 2e 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20  ].)^..<p>.  ^If 
f980: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69  the specified vi
f990: 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75  ew cannot be fou
f9a0: 6e 64 20 61 6e 64 20 74 68 65 20 49 46 20 45 58  nd and the IF EX
f9b0: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 6e  ISTS clause is n
f9c0: 6f 74 20 0a 20 20 70 72 65 73 65 6e 74 2c 20 69  ot .  present, i
f9d0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e  t is an error. ^
f9e0: 49 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  If the specified
f9f0: 20 76 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20   view cannot be 
fa00: 66 6f 75 6e 64 20 61 6e 64 20 61 6e 20 49 46 0a  found and an IF.
fa10: 20 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20    EXISTS clause 
fa20: 69 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  is present in th
fa30: 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74  e DROP VIEW stat
fa40: 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  ement, then the 
fa50: 73 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 61  statement.  is a
fa60: 20 6e 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a   no-op....<tcl>.
fa70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fa80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fa90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
faa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
fac0: 65 63 74 69 6f 6e 20 7b 44 61 74 61 62 61 73 65  ection {Database
fad0: 20 4f 62 6a 65 63 74 20 4e 61 6d 65 20 52 65 73   Object Name Res
fae0: 6f 6c 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67  olution} {naming
faf0: 7d 20 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c  } {{object resol
fb00: 75 74 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a  ution}}.</tcl>..
fb10: 3c 70 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65 2c  <p>.  In SQLite,
fb20: 20 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65   a database obje
fb30: 63 74 20 28 61 20 74 61 62 6c 65 2c 20 69 6e 64  ct (a table, ind
fb40: 65 78 2c 20 74 72 69 67 67 65 72 20 6f 72 20 76  ex, trigger or v
fb50: 69 65 77 29 20 69 73 20 69 64 65 6e 74 69 66 69  iew) is identifi
fb60: 65 64 0a 20 20 62 79 20 74 68 65 20 6e 61 6d 65  ed.  by the name
fb70: 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20 61   of the object a
fb80: 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  nd the name of t
fb90: 68 65 20 64 61 74 61 62 61 73 65 20 74 68 61 74  he database that
fba0: 20 69 74 20 72 65 73 69 64 65 73 20 69 6e 2e 20   it resides in. 
fbb0: 0a 20 20 44 61 74 61 62 61 73 65 20 6f 62 6a 65  .  Database obje
fbc0: 63 74 73 20 6d 61 79 20 72 65 73 69 64 65 20 69  cts may reside i
fbd0: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
fbe0: 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61  ase, the temp da
fbf0: 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20 20  tabase, or in.  
fc00: 61 6e 20 5b 41 54 54 41 43 48 7c 61 74 74 61 63  an [ATTACH|attac
fc10: 68 65 64 20 64 61 74 61 62 61 73 65 5d 2e 0a 0a  hed database]...
fc20: 3c 70 3e 0a 20 20 54 68 65 20 73 79 6e 74 61 78  <p>.  The syntax
fc30: 20 6f 66 20 74 68 65 20 5b 44 52 4f 50 20 54 41   of the [DROP TA
fc40: 42 4c 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44 45  BLE], [DROP INDE
fc50: 58 5d 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d 2c  X], [DROP VIEW],
fc60: 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d 2c   [DROP TRIGGER],
fc70: 0a 20 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b 41  .  [REINDEX], [A
fc80: 4c 54 45 52 20 54 41 42 4c 45 5d 20 61 6e 64 20  LTER TABLE] and 
fc90: 6d 61 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d 61  many other comma
fca0: 6e 64 73 20 61 6c 6c 20 70 65 72 6d 69 74 20 74  nds all permit t
fcb0: 68 65 20 75 73 65 72 20 74 6f 0a 20 20 73 70 65  he user to.  spe
fcc0: 63 69 66 79 20 61 20 64 61 74 61 62 61 73 65 20  cify a database 
fcd0: 6f 62 6a 65 63 74 20 65 69 74 68 65 72 20 62 79  object either by
fce0: 20 69 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c   its name alone,
fcf0: 20 6f 72 20 62 79 20 61 20 63 6f 6d 62 69 6e 61   or by a combina
fd00: 74 69 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e 61  tion of.  its na
fd10: 6d 65 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20  me and the name 
fd20: 6f 66 20 69 74 73 20 64 61 74 61 62 61 73 65 2e  of its database.
fd30: 20 5e 28 49 66 20 6e 6f 20 64 61 74 61 62 61 73   ^(If no databas
fd40: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  e is specified a
fd50: 73 20 70 61 72 74 0a 20 20 6f 66 20 74 68 65 20  s part.  of the 
fd60: 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65  object reference
fd70: 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73 65  , then SQLite se
fd80: 61 72 63 68 65 73 20 74 68 65 20 6d 61 69 6e 2c  arches the main,
fd90: 20 74 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61 74   temp and all at
fda0: 74 61 63 68 65 64 0a 20 20 64 61 74 61 62 61 73  tached.  databas
fdb0: 65 73 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74  es for an object
fdc0: 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67   with a matching
fdd0: 20 6e 61 6d 65 2e 20 54 68 65 20 74 65 6d 70 20   name. The temp 
fde0: 64 61 74 61 62 61 73 65 20 69 73 20 73 65 61 72  database is sear
fdf0: 63 68 65 64 0a 20 20 66 69 72 73 74 2c 20 66 6f  ched.  first, fo
fe00: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 6d 61  llowed by the ma
fe10: 69 6e 20 64 61 74 61 62 61 73 65 2c 20 66 6f 6c  in database, fol
fe20: 6c 6f 77 65 64 20 61 6c 6c 20 61 74 74 61 63 68  lowed all attach
fe30: 65 64 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ed databases in 
fe40: 74 68 65 0a 20 20 6f 72 64 65 72 20 74 68 61 74  the.  order that
fe50: 20 74 68 65 79 20 77 65 72 65 20 61 74 74 61 63   they were attac
fe60: 68 65 64 2e 20 54 68 65 20 72 65 66 65 72 65 6e  hed. The referen
fe70: 63 65 20 72 65 73 6f 6c 76 65 73 20 74 6f 20 74  ce resolves to t
fe80: 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 0a 20  he first match. 
fe90: 20 66 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65 78   found.)^ For ex
fea0: 61 6d 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a  ample:..<pre>^(.
feb0: 20 20 20 20 20 20 2f 2a 20 41 64 64 20 61 20 74        /* Add a t
fec0: 61 62 6c 65 20 6e 61 6d 65 64 20 27 74 31 27 20  able named 't1' 
fed0: 74 6f 20 74 68 65 20 74 65 6d 70 2c 20 6d 61 69  to the temp, mai
fee0: 6e 20 61 6e 64 20 61 6e 20 61 74 74 61 63 68 65  n and an attache
fef0: 64 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  d database */.  
ff00: 20 20 20 20 41 54 54 41 43 48 20 27 66 69 6c 65      ATTACH 'file
ff10: 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20  .db' AS aux;.   
ff20: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
ff30: 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20  t1(x, y);.      
ff40: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
ff50: 45 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20  E t1(x, y);.    
ff60: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61    CREATE TABLE a
ff70: 75 78 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20 20  ux.t1(x, y);..  
ff80: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
ff90: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  1;         /* Dr
ffa0: 6f 70 20 74 61 62 6c 65 20 69 6e 20 74 65 6d 70  op table in temp
ffb0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20   database */.   
ffc0: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
ffd0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f  ;         /* Dro
ffe0: 70 20 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e 20  p table in main 
fff0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20  database */.    
10000 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
10010 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70           /* Drop
10020 20 74 61 62 6c 65 20 69 6e 20 61 75 78 20 64 61   table in aux da
10030 74 61 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72  tabase */.)^</pr
10040 65 3e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61 20  e>..<p>.  ^If a 
10050 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73  database name is
10060 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
10070 72 74 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20  rt of an object 
10080 72 65 66 65 72 65 6e 63 65 2c 20 69 74 20 6d 75  reference, it mu
10090 73 74 20 62 65 0a 20 20 65 69 74 68 65 72 20 22  st be.  either "
100a0 6d 61 69 6e 22 2c 20 6f 72 20 22 74 65 6d 70 22  main", or "temp"
100b0 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   or the name of 
100c0 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
100d0 62 61 73 65 2e 20 5e 4c 69 6b 65 20 6f 74 68 65  base. ^Like othe
100e0 72 0a 20 20 53 51 4c 20 69 64 65 6e 74 69 66 69  r.  SQL identifi
100f0 65 72 73 2c 20 64 61 74 61 62 61 73 65 20 6e 61  ers, database na
10100 6d 65 73 20 61 72 65 20 63 61 73 65 2d 69 6e 73  mes are case-ins
10110 65 6e 73 69 74 69 76 65 2e 20 5e 49 66 20 61 20  ensitive. ^If a 
10120 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 20 20  database name.  
10130 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
10140 65 6e 20 6f 6e 6c 79 20 74 68 65 20 6e 61 6d 65  en only the name
10150 64 20 64 61 74 61 62 61 73 65 20 69 73 20 73 65  d database is se
10160 61 72 63 68 65 64 20 66 6f 72 20 74 68 65 20 6e  arched for the n
10170 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70  amed object...<p
10180 3e 0a 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74 20  >.  Most object 
10190 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f  references may o
101a0 6e 6c 79 20 72 65 73 6f 6c 76 65 20 74 6f 20 61  nly resolve to a
101b0 20 73 70 65 63 69 66 69 63 20 74 79 70 65 20 6f   specific type o
101c0 66 20 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20 20  f object (for.  
101d0 65 78 61 6d 70 6c 65 20 61 20 72 65 66 65 72 65  example a refere
101e0 6e 63 65 20 74 68 61 74 20 69 73 20 70 61 72 74  nce that is part
101f0 20 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45   of a DROP TABLE
10200 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6f   statement may o
10210 6e 6c 79 20 72 65 73 6f 6c 76 65 0a 20 20 74 6f  nly resolve.  to
10220 20 61 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c   a table object,
10230 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20 74   not an index, t
10240 72 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 2e  rigger or view).
10250 20 48 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d 65   However in some
10260 20 63 6f 6e 74 65 78 74 73 20 0a 20 20 28 65 2e   contexts .  (e.
10270 67 2e 20 5b 52 45 49 4e 44 45 58 5d 29 20 61 6e  g. [REINDEX]) an
10280 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
10290 65 20 6d 61 79 20 62 65 20 72 65 73 6f 6c 76 65  e may be resolve
102a0 20 74 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e   to more than on
102b0 65 20 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a 65  e type.  of obje
102c0 63 74 2e 20 5e 57 68 65 6e 20 73 65 61 72 63 68  ct. ^When search
102d0 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68  ing database sch
102e0 65 6d 61 73 20 66 6f 72 20 61 20 6e 61 6d 65 64  emas for a named
102f0 20 6f 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74 73   object, objects
10300 20 6f 66 0a 20 20 74 79 70 65 73 20 74 68 61 74   of.  types that
10310 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20   cannot be used 
10320 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f  in the context o
10330 66 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 20  f the reference 
10340 61 72 65 20 61 6c 77 61 79 73 20 0a 20 20 69 67  are always .  ig
10350 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  nored...<tcl>.##
10360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
103a0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
103b0 74 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70  tion EXPLAIN exp
103c0 6c 61 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75  lain EXPLAIN..Bu
103d0 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d  bbleDiagram sql-
103e0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
103f0 5e 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ^An SQL statemen
10400 74 20 63 61 6e 20 62 65 20 70 72 65 63 65 64 65  t can be precede
10410 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64  d by the keyword
10420 20 22 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79   "EXPLAIN" or.by
10430 20 74 68 65 20 70 68 72 61 73 65 20 22 45 58 50   the phrase "EXP
10440 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22  LAIN QUERY PLAN"
10450 2e 20 20 5e 45 69 74 68 65 72 20 6d 6f 64 69 66  .  ^Either modif
10460 69 63 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ication causes t
10470 68 65 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he.SQL statement
10480 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20   to behave as a 
10490 71 75 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74  query and to ret
104a0 75 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  urn information 
104b0 61 62 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51  about.how the SQ
104c0 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  L statement woul
104d0 64 20 68 61 76 65 20 6f 70 65 72 61 74 65 64 20  d have operated 
104e0 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b  if the EXPLAIN k
104f0 65 79 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65  eyword or.phrase
10500 20 68 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65   had been omitte
10510 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f  d.</p>..<p>The o
10520 75 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41  utput from EXPLA
10530 49 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51  IN and EXPLAIN Q
10540 55 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74  UERY PLAN is int
10550 65 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61  ended for.intera
10560 63 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61  ctive analysis a
10570 6e 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69  nd troubleshooti
10580 6e 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65  ng only.  The de
10590 74 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75  tails of the .ou
105a0 74 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20  tput format are 
105b0 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67  subject to chang
105c0 65 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61  e from one relea
105d0 73 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20  se of SQLite to 
105e0 74 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63  the next..Applic
105f0 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f  ations should no
10600 74 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72  t use EXPLAIN or
10610 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
10620 4c 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20  LAN since.their 
10630 65 78 61 63 74 20 62 65 68 61 76 69 6f 72 20 69  exact behavior i
10640 73 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20 6f  s variable and o
10650 6e 6c 79 20 70 61 72 74 69 61 6c 6c 79 20 64 6f  nly partially do
10660 63 75 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c  cumented.</p>..<
10670 70 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50 4c  p>^When the EXPL
10680 41 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70 65  AIN keyword appe
10690 61 72 73 20 62 79 20 69 74 73 65 6c 66 20 69 74  ars by itself it
106a0 20 63 61 75 73 65 73 20 74 68 65 20 73 74 61 74   causes the stat
106b0 65 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65 20  ement.to behave 
106c0 61 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20  as a query that 
106d0 72 65 74 75 72 6e 73 20 74 68 65 20 73 65 71 75  returns the sequ
106e0 65 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75 61  ence of .[virtua
106f0 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75  l machine instru
10700 63 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c 64  ctions] it would
10710 20 68 61 76 65 20 75 73 65 64 20 74 6f 20 65 78   have used to ex
10720 65 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e  ecute the comman
10730 64 20 68 61 64 0a 74 68 65 20 45 58 50 4c 41 49  d had.the EXPLAI
10740 4e 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62 65  N keyword not be
10750 65 6e 20 70 72 65 73 65 6e 74 2e 20 5e 57 68 65  en present. ^Whe
10760 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55  n the EXPLAIN QU
10770 45 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65 0a  ERY PLAN phrase.
10780 61 70 70 65 61 72 73 2c 20 74 68 65 20 73 74 61  appears, the sta
10790 74 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 20 68  tement returns h
107a0 69 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d  igh-level inform
107b0 61 74 69 6f 6e 20 72 65 67 61 72 64 69 6e 67 20  ation regarding 
107c0 74 68 65 20 71 75 65 72 79 0a 70 6c 61 6e 20 74  the query.plan t
107d0 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62  hat would have b
107e0 65 65 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20 45  een used...The E
107f0 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
10800 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65 73  N command is des
10810 63 72 69 62 65 64 20 69 6e 20 0a 5b 65 78 70 6c  cribed in .[expl
10820 61 69 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c 6d  ain query plan|m
10830 6f 72 65 20 64 65 74 61 69 6c 20 68 65 72 65 5d  ore detail here]
10840 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
10850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10890 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
108a0 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 20  expression expr 
108b0 7b 2a 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78  {*expression {ex
108c0 70 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d  pression syntax}
108d0 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
108e0 6c 65 44 69 61 67 72 61 6d 20 65 78 70 72 20 31  leDiagram expr 1
108f0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73  .</tcl>..<p>This
10900 20 73 65 63 74 69 6f 6e 20 69 73 20 64 69 66 66   section is diff
10910 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 6f  erent from the o
10920 74 68 65 72 73 2e 20 20 4d 6f 73 74 20 6f 74 68  thers.  Most oth
10930 65 72 20 73 65 63 74 69 6f 6e 73 20 6f 66 0a 74  er sections of.t
10940 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 74 61 6c  his document tal
10950 6b 73 20 61 62 6f 75 74 20 61 20 70 61 72 74 69  ks about a parti
10960 63 75 6c 61 72 20 53 51 4c 20 63 6f 6d 6d 61 6e  cular SQL comman
10970 64 2e 20 20 54 68 69 73 20 73 65 63 74 69 6f 6e  d.  This section
10980 20 64 6f 65 73 0a 6e 6f 74 20 74 61 6c 6b 20 61   does.not talk a
10990 62 6f 75 74 20 61 20 73 74 61 6e 64 61 6c 6f 6e  bout a standalon
109a0 65 20 63 6f 6d 6d 61 6e 64 20 62 75 74 20 61 62  e command but ab
109b0 6f 75 74 20 22 65 78 70 72 65 73 73 69 6f 6e 73  out "expressions
109c0 22 20 77 68 69 63 68 20 61 72 65 20 0a 73 75 62  " which are .sub
109d0 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f  components of mo
109e0 73 74 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64  st other command
109f0 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  s.</p>..<tcl>hd_
10a00 66 72 61 67 6d 65 6e 74 20 62 69 6e 61 72 79 6f  fragment binaryo
10a10 70 73 20 7b 62 69 6e 61 72 79 20 6f 70 65 72 61  ps {binary opera
10a20 74 6f 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  tors}</tcl>.<h3>
10a30 4f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c  Operators</h3>.<
10a40 70 3e 5e 28 53 51 4c 69 74 65 20 75 6e 64 65 72  p>^(SQLite under
10a50 73 74 61 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f  stands the follo
10a60 77 69 6e 67 20 62 69 6e 61 72 79 20 6f 70 65 72  wing binary oper
10a70 61 74 6f 72 73 2c 20 69 6e 20 6f 72 64 65 72 20  ators, in order 
10a80 66 72 6f 6d 0a 68 69 67 68 65 73 74 20 74 6f 20  from.highest to 
10a90 6c 6f 77 65 73 74 20 70 72 65 63 65 64 65 6e 63  lowest precedenc
10aa0 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e:</p>..<blockqu
10ab0 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20  ote><pre>.<font 
10ac0 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22 3e  color="#2c2cf0">
10ad0 3c 62 69 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20  <big>||.*    /  
10ae0 20 20 25 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26    %.+    -.&lt;&
10af0 6c 74 3b 20 20 20 26 67 74 3b 26 67 74 3b 20 20  lt;   &gt;&gt;  
10b00 20 26 61 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b   &amp;    |.&lt;
10b10 20 20 20 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b      &lt;=   &gt;
10b20 20 20 20 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d      &gt;=.=    =
10b30 3d 20 20 20 21 3d 20 20 20 26 6c 74 3b 26 67 74  =   !=   &lt;&gt
10b40 3b 20 20 20 3c 2f 62 69 67 3e 49 53 20 20 20 49  ;   </big>IS   I
10b50 53 20 4e 4f 54 20 20 20 49 4e 20 20 20 4c 49 4b  S NOT   IN   LIK
10b60 45 20 20 20 47 4c 4f 42 20 20 20 4d 41 54 43 48  E   GLOB   MATCH
10b70 20 20 20 52 45 47 45 58 50 0a 41 4e 44 20 20 20     REGEXP.AND   
10b80 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65  .OR</font>.</pre
10b90 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
10ba0 0a 0a 3c 70 3e 5e 28 53 75 70 70 6f 72 74 65 64  ..<p>^(Supported
10bb0 20 75 6e 61 72 79 20 70 72 65 66 69 78 20 6f 70   unary prefix op
10bc0 65 72 61 74 6f 72 73 20 61 72 65 20 74 68 65 73  erators are thes
10bd0 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e:</p>..<blockqu
10be0 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20  ote><pre>.<font 
10bf0 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22 3e  color="#2c2cf0">
10c00 3c 62 69 67 3e 2d 20 20 20 20 2b 20 20 20 20 7e  <big>-    +    ~
10c10 20 20 20 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66      NOT</big></f
10c20 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  ont>.</pre></blo
10c30 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c  ckquote>)^..<tcl
10c40 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c  >hd_fragment col
10c50 6c 61 74 65 6f 70 20 7b 43 4f 4c 4c 41 54 45 20  lateop {COLLATE 
10c60 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a  operator}</tcl>.
10c70 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  <p>^The COLLATE 
10c80 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 75 6e  operator is a un
10c90 61 72 79 20 70 6f 73 74 66 69 78 0a 6f 70 65 72  ary postfix.oper
10ca0 61 74 6f 72 20 74 68 61 74 20 61 73 73 69 67 6e  ator that assign
10cb0 73 20 61 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73  s a [collating s
10cc0 65 71 75 65 6e 63 65 5d 20 74 6f 20 61 6e 20 65  equence] to an e
10cd0 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 54 68 65 20  xpression..^The 
10ce0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
10cf0 20 68 61 73 20 61 20 68 69 67 68 65 72 20 70 72   has a higher pr
10d00 65 63 65 64 65 6e 63 65 20 28 62 69 6e 64 73 20  ecedence (binds 
10d10 6d 6f 72 65 20 74 69 67 68 74 6c 79 29 20 74 68  more tightly) th
10d20 61 6e 20 61 6e 79 0a 62 69 6e 61 72 79 20 6f 70  an any.binary op
10d30 65 72 61 74 6f 72 20 61 6e 64 20 61 6e 79 20 75  erator and any u
10d40 6e 61 72 79 20 70 72 65 66 69 78 20 6f 70 65 72  nary prefix oper
10d50 61 74 6f 72 20 65 78 63 65 70 74 20 22 7e 22 2e  ator except "~".
10d60 0a 28 43 4f 4c 4c 41 54 45 20 61 6e 64 20 22 7e  .(COLLATE and "~
10d70 22 20 61 72 65 20 61 73 73 6f 63 69 61 74 69 76  " are associativ
10d80 65 20 73 6f 20 74 68 65 69 72 20 62 69 6e 64 69  e so their bindi
10d90 6e 67 20 6f 72 64 65 72 20 64 6f 65 73 20 6e 6f  ng order does no
10da0 74 20 6d 61 74 74 65 72 2e 29 0a 5e 54 68 65 20  t matter.).^The 
10db0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10dc0 63 65 20 73 65 74 20 62 79 20 74 68 65 20 43 4f  ce set by the CO
10dd0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 6f  LLATE operator o
10de0 76 65 72 72 69 64 65 73 20 74 68 65 0a 63 6f 6c  verrides the.col
10df0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
10e00 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
10e10 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
10e20 20 69 6e 20 61 20 74 61 62 6c 65 0a 5b 63 6f 6c   in a table.[col
10e30 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e  umn definition].
10e40 0a 53 65 65 20 74 68 65 20 5b 63 6f 6c 6c 61 74  .See the [collat
10e50 69 6e 67 20 73 65 71 75 65 6e 63 65 7c 20 64 65  ing sequence| de
10e60 74 61 69 6c 65 64 20 64 69 73 63 75 73 73 69 6f  tailed discussio
10e70 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73  n on collating s
10e80 65 71 75 65 6e 63 65 73 5d 0a 69 6e 20 74 68 65  equences].in the
10e90 20 5b 64 61 74 61 74 79 70 65 20 7c 20 44 61 74   [datatype | Dat
10ea0 61 74 79 70 65 20 49 6e 20 53 51 4c 69 74 65 33  atype In SQLite3
10eb0 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61  ] document for a
10ec0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
10ed0 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  ation..</p>..<tc
10ee0 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e  l>hd_puts ".<p>^
10ef0 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72 61 74  The unary operat
10f00 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20  or [Operator +] 
10f10 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74  is a no-op.  ^It
10f20 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65 64 0a   can be applied.
10f30 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62  to strings, numb
10f40 65 72 73 2c 20 62 6c 6f 62 73 20 6f 72 20 4e 55  ers, blobs or NU
10f50 4c 4c 20 61 6e 64 20 69 74 20 61 6c 77 61 79 73  LL and it always
10f60 20 72 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c   returns a resul
10f70 74 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  t.with the same 
10f80 76 61 6c 75 65 20 61 73 20 74 68 65 20 6f 70 65  value as the ope
10f90 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e  rand.</p>"</tcl>
10fa0 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74  ..<p>Note that t
10fb0 68 65 72 65 20 61 72 65 20 74 77 6f 20 76 61 72  here are two var
10fc0 69 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 65  iations of the e
10fd0 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71  quals and not eq
10fe0 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20  uals.operators. 
10ff0 20 5e 45 71 75 61 6c 73 20 63 61 6e 20 62 65 20   ^Equals can be 
11000 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64  either..<tcl>.hd
11010 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72  _puts "[Operator
11020 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72   =] or [Operator
11030 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65   ==]..^The non-e
11040 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72 20 63  quals operator c
11050 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b 4f 70  an be either.[Op
11060 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f  erator !=] or [O
11070 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74  perator {&lt;&gt
11080 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70 65 72 61  ;}]..^The [Opera
11090 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72  tor ||] operator
110a0 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74   is \"concatenat
110b0 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74  e\" - it joins t
110c0 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77 6f 20  ogether.the two 
110d0 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73 20 6f  strings of its o
110e0 70 65 72 61 6e 64 73 2e 0a 5e 54 68 65 20 6f 70  perands..^The op
110f0 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72  erator [Operator
11100 20 25 5d 20 6f 75 74 70 75 74 73 20 74 68 65 20   %] outputs the 
11110 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c 65 66  value of its lef
11120 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c  t .operand modul
11130 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70 65 72  o its right oper
11140 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  and.</p>..<p>^Th
11150 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 79 20  e result of any 
11160 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20  binary operator 
11170 69 73 20 65 69 74 68 65 72 20 61 20 6e 75 6d 65  is either a nume
11180 72 69 63 20 76 61 6c 75 65 20 6f 72 20 0a 4e 55  ric value or .NU
11190 4c 4c 2c 20 65 78 63 65 70 74 20 66 6f 72 20 74  LL, except for t
111a0 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d  he [Operator ||]
111b0 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f   concatenation o
111c0 70 65 72 61 74 6f 72 20 77 68 69 63 68 20 61 6c  perator which al
111d0 77 61 79 73 20 0a 65 76 61 6c 75 61 74 65 73 20  ways .evaluates 
111e0 74 6f 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  to either NULL o
111f0 72 20 61 20 74 65 78 74 20 76 61 6c 75 65 2e 3c  r a text value.<
11200 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e  /p>"..hd_fragmen
11210 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20  t {isisnot} {IS 
11220 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f  operator} {IS NO
11230 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f  T operator}..hd_
11240 70 75 74 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f  puts "<p>^The [O
11250 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20  perator IS] and 
11260 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f  [Operator {IS NO
11270 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73 20 77 6f  T}] operators wo
11280 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f  rk.like [Operato
11290 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74  r =] and [Operat
112a0 6f 72 20 21 3d 5d 20 65 78 63 65 70 74 20 77 68  or !=] except wh
112b0 65 6e 20 6f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  en one or both o
112c0 66 20 74 68 65 0a 6f 70 65 72 61 6e 64 73 20 61  f the.operands a
112d0 72 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20 74 68 69  re NULL. ^In thi
112e0 73 20 63 61 73 65 2c 20 69 66 20 62 6f 74 68 20  s case, if both 
112f0 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
11300 4c 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f  L, then the.IS o
11310 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
11320 73 20 74 6f 20 31 20 28 74 72 75 65 29 20 61 6e  s to 1 (true) an
11330 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70 65  d the IS NOT ope
11340 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 0a  rator evaluates.
11350 74 6f 20 30 20 28 66 61 6c 73 65 29 2e 20 5e 49  to 0 (false). ^I
11360 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  f one operand is
11370 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65 20 6f 74   NULL and the ot
11380 68 65 72 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e  her is not, then
11390 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72   the.IS operator
113a0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30 20   evaluates to 0 
113b0 28 66 61 6c 73 65 29 20 61 6e 64 20 74 68 65 20  (false) and the 
113c0 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20  IS NOT operator 
113d0 69 73 20 31 20 28 74 72 75 65 29 2e 0a 5e 49 74  is 1 (true)..^It
113e0 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
113f0 20 66 6f 72 20 61 6e 20 49 53 20 6f 72 20 49 53   for an IS or IS
11400 20 4e 4f 54 20 65 78 70 72 65 73 73 69 6f 6e 20   NOT expression 
11410 74 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 4e  to evaluate to N
11420 55 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f 72 73 20  ULL..^Operators 
11430 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e  [Operator IS] an
11440 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20  d [Operator {IS 
11450 4e 4f 54 7d 5d 20 68 61 76 65 20 74 68 65 20 73  NOT}] have the s
11460 61 6d 65 20 0a 70 72 65 63 65 64 65 6e 63 65 20  ame .precedence 
11470 61 73 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e  as [Operator =].
11480 22 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  "..<tcl>hd_fragm
11490 65 6e 74 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69  ent litvalue {li
114a0 74 65 72 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63  teral value}</tc
114b0 6c 3e 0a 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56  l>.<h3>Literal V
114c0 61 6c 75 65 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e  alues</h3>.<p>.^
114d0 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20  A literal value 
114e0 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 66  is a constant of
114f0 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 5e 4c 69 74   some kind..^Lit
11500 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20  eral values may 
11510 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f  be integers, flo
11520 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
11530 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c  ers, strings,.BL
11540 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f  OBs, or NULLs.</
11550 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61  p>..<p>The synta
11560 78 20 66 6f 72 20 69 6e 74 65 67 65 72 20 61 6e  x for integer an
11570 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  d floating point
11580 20 6c 69 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65   literals (colle
11590 63 74 69 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63  ctively."numeric
115a0 20 6c 69 74 65 72 61 6c 73 22 29 20 69 73 20 73   literals") is s
115b0 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c  hown by the foll
115c0 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f  owing diagram:</
115d0 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  p>..<tcl>BubbleD
115e0 69 61 67 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c  iagram numeric-l
115f0 69 74 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70  iteral</tcl>..<p
11600 3e 0a 5e 28 49 66 20 61 20 6e 75 6d 65 72 69 63  >.^(If a numeric
11610 20 6c 69 74 65 72 61 6c 20 68 61 73 20 61 20 64   literal has a d
11620 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20  ecimal point or 
11630 61 6e 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f  an exponentiatio
11640 6e 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 69  n.clause, then i
11650 74 20 69 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  t is a floating 
11660 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 2e 20 20  point literal.  
11670 4f 74 68 65 72 77 69 73 65 20 69 73 20 69 74 20  Otherwise is it 
11680 69 73 20 61 6e 20 0a 69 6e 74 65 67 65 72 20 6c  is an .integer l
11690 69 74 65 72 61 6c 2e 29 5e 20 20 5e 54 68 65 20  iteral.)^  ^The 
116a0 22 45 22 20 63 68 61 72 61 63 74 65 72 20 74 68  "E" character th
116b0 61 74 20 62 65 67 69 6e 73 20 74 68 65 20 65 78  at begins the ex
116c0 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61  ponentiation.cla
116d0 75 73 65 20 6f 66 20 61 20 66 6c 6f 61 74 69 6e  use of a floatin
116e0 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 20  g point literal 
116f0 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 75 70  can be either up
11700 70 65 72 20 6f 72 20 6c 6f 77 65 72 20 63 61 73  per or lower cas
11710 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63 68 61  e..^(The "." cha
11720 72 61 63 74 65 72 20 69 73 20 61 6c 77 61 79 73  racter is always
11730 20 75 73 65 64 20 0a 61 73 20 74 68 65 20 64 65   used .as the de
11740 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65 6e  cimal point even
11750 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65 20 73   if the locale s
11760 65 74 74 69 6e 67 20 73 70 65 63 69 66 69 65 73  etting specifies
11770 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20 72 6f   "," for.this ro
11780 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f 66 20  le - the use of 
11790 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65 63 69  "," for the deci
117a0 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64 20  mal point would 
117b0 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61 63  result in.syntac
117c0 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e 29 5e  tic ambiguity.)^
117d0 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72  </p>..<p> ^A str
117e0 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73 20  ing constant is 
117f0 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73  formed by enclos
11800 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20 69  ing the.string i
11810 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20  n single quotes 
11820 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20  (').  ^A single 
11830 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68 65  quote within the
11840 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20 65   string can.be e
11850 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74 69 6e  ncoded by puttin
11860 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f  g two single quo
11870 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20 61  tes in a row - a
11880 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73  s in Pascal..C-s
11890 74 79 6c 65 20 65 73 63 61 70 65 73 20 75 73 69  tyle escapes usi
118a0 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73 68  ng the backslash
118b0 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20 6e   character are n
118c0 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62 65 63  ot supported bec
118d0 61 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e 6f  ause.they are no
118e0 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a  t standard SQL..
118f0 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73 20 61  ^BLOB literals a
11900 72 65 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61  re string litera
11910 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65  ls containing he
11920 78 61 64 65 63 69 6d 61 6c 20 64 61 74 61 20 61  xadecimal data a
11930 6e 64 0a 70 72 65 63 65 64 65 64 20 62 79 20 61  nd.preceded by a
11940 20 73 69 6e 67 6c 65 20 22 78 22 20 6f 72 20 22   single "x" or "
11950 58 22 20 63 68 61 72 61 63 74 65 72 2e 20 20 5e  X" character.  ^
11960 28 46 6f 72 20 65 78 61 6d 70 6c 65 3a 3c 2f 70  (For example:</p
11970 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
11980 70 72 65 3e 0a 58 27 35 33 35 31 34 43 36 39 37  pre>.X'53514C697
11990 34 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  465'.</pre></blo
119a0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a  ckquote>)^..<p>.
119b0 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65  ^A literal value
119c0 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74 68 65   can also be the
119d0 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c   token "NULL"..<
119e0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
119f0 67 6d 65 6e 74 20 76 61 72 70 61 72 61 6d 20 70  gment varparam p
11a00 61 72 61 6d 65 74 65 72 20 70 61 72 61 6d 65 74  arameter paramet
11a10 65 72 73 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d  ers {bound param
11a20 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20 70 61 72  eter} {bound par
11a30 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c  ameters}</tcl>.<
11a40 68 33 3e 50 61 72 61 6d 65 74 65 72 73 3c 2f 68  h3>Parameters</h
11a50 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69 61 62  3>.<p>.A "variab
11a60 6c 65 22 20 6f 72 20 22 70 61 72 61 6d 65 74 65  le" or "paramete
11a70 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69 66 69  r" token.specifi
11a80 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64 65 72  es a placeholder
11a90 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
11aa0 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c 75 65 20  on for a .value 
11ab0 74 68 61 74 20 69 73 20 66 69 6c 6c 65 64 20 69  that is filled i
11ac0 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  n at runtime usi
11ad0 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f  ng the.[sqlite3_
11ae0 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71  bind_blob() | sq
11af0 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 66 61  lite3_bind()] fa
11b00 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20 69 6e  mily of C/C++ in
11b10 74 65 72 66 61 63 65 73 2e 0a 50 61 72 61 6d 65  terfaces..Parame
11b20 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20 73 65  ters can take se
11b30 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70  veral forms:.</p
11b40 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
11b50 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64  <table>.<tr>.<td
11b60 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
11b70 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f  align="top"><b>?
11b80 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f  </b><i>NNN</i></
11b90 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
11ba0 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28 41 20  "></td>.<td>^(A 
11bb0 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f  question mark fo
11bc0 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62  llowed by a numb
11bd0 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f  er <i>NNN</i> ho
11be0 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 74  lds a spot for t
11bf0 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65  he.NNN-th parame
11c00 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62  ter.  NNN must b
11c10 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
11c20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49  [SQLITE_MAX_VARI
11c30 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29 5e 0a  ABLE_NUMBER].)^.
11c40 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
11c50 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  .<td align="righ
11c60 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  t" valign="top">
11c70 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  <b>?</b></td><td
11c80 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
11c90 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73 74 69 6f  >.<td>^A questio
11ca0 6e 20 6d 61 72 6b 20 74 68 61 74 20 69 73 20 6e  n mark that is n
11cb0 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ot followed by a
11cc0 20 6e 75 6d 62 65 72 20 63 72 65 61 74 65 73 20   number creates 
11cd0 61 20 70 61 72 61 6d 65 74 65 72 0a 77 69 74 68  a parameter.with
11ce0 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65 20 67 72   a number one gr
11cf0 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6c  eater than the l
11d00 61 72 67 65 73 74 20 70 61 72 61 6d 65 74 65 72  argest parameter
11d10 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20   number already 
11d20 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66 20 74 68  assigned..^If th
11d30 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72  is means the par
11d40 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73  ameter number is
11d50 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 5b 53   greater than.[S
11d60 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
11d70 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69  LE_NUMBER], it i
11d80 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 2f 74 64  s an error..</td
11d90 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
11da0 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
11db0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a  align="top"><b>:
11dc0 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c  </b><i>AAAA</i><
11dd0 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
11de0 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20  0"></td>.<td>^A 
11df0 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62  colon followed b
11e00 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  y an identifier 
11e10 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73 70 6f  name holds a spo
11e20 74 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69 74 65  t for a .[sqlite
11e30 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
11e40 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61 72 61  _name|named para
11e50 6d 65 74 65 72 5d 20 77 69 74 68 20 74 68 65 20  meter] with the 
11e60 6e 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a 5e 28  name :AAAA.  .^(
11e70 4e 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 73  Named parameters
11e80 20 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72   are also number
11e90 65 64 2e 20 54 68 65 20 6e 75 6d 62 65 72 20 61  ed. The number a
11ea0 73 73 69 67 6e 65 64 20 69 73 20 6f 6e 65 20 67  ssigned is one g
11eb0 72 65 61 74 65 72 20 74 68 61 6e 0a 74 68 65 20  reater than.the 
11ec0 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65 74 65  largest paramete
11ed0 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79  r number already
11ee0 20 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e 49 66   assigned.)^ ^If
11ef0 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20   this means the 
11f00 70 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c 64 20  parameter.would 
11f10 62 65 20 61 73 73 69 67 6e 65 64 20 61 20 6e 75  be assigned a nu
11f20 6d 62 65 72 20 67 72 65 61 74 65 72 20 74 68 61  mber greater tha
11f30 6e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  n [SQLITE_MAX_VA
11f40 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20  RIABLE_NUMBER], 
11f50 69 74 20 69 73 0a 61 6e 20 65 72 72 6f 72 2e 20  it is.an error. 
11f60 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  To avoid confusi
11f70 6f 6e 2c 20 69 74 20 69 73 20 62 65 73 74 20 74  on, it is best t
11f80 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e  o avoid mixing n
11f90 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65 72 65  amed and numbere
11fa0 64 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74  d.parameters.</t
11fb0 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
11fc0 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
11fd0 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
11fe0 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e  @</b><i>AAAA</i>
11ff0 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
12000 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41  20"></td>.<td>^A
12010 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f 72 6b  n "at" sign work
12020 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 61  s exactly like a
12030 20 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74 20 74   colon, except t
12040 68 61 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a  hat the name of.
12050 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 63 72  the parameter cr
12060 65 61 74 65 64 20 69 73 20 40 41 41 41 41 2e 3c  eated is @AAAA.<
12070 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
12080 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
12090 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
120a0 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>$</b><i>AAAA</
120b0 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
120c0 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
120d0 5e 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e 20 66  ^A dollar-sign f
120e0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64  ollowed by an id
120f0 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 61 6c  entifier name al
12100 73 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20  so holds a spot 
12110 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61  for a named.para
12120 6d 65 74 65 72 20 77 69 74 68 20 74 68 65 20 6e  meter with the n
12130 61 6d 65 20 24 41 41 41 41 2e 20 20 5e 28 54 68  ame $AAAA.  ^(Th
12140 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  e identifier nam
12150 65 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 63  e in this case c
12160 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f  an include.one o
12170 72 20 6d 6f 72 65 20 6f 63 63 75 72 72 65 6e 63  r more occurrenc
12180 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61  es of "::" and a
12190 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73 65 64   suffix enclosed
121a0 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74   in "(...)" cont
121b0 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74 20  aining.any text 
121c0 61 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69 73 20  at all.)^  This 
121d0 73 79 6e 74 61 78 20 69 73 20 74 68 65 20 66 6f  syntax is the fo
121e0 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62 6c 65  rm of a variable
121f0 20 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b 68 74   name in the.[ht
12200 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f  tp://www.tcl.tk/
12210 20 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69   | Tcl programmi
12220 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54  ng language].  T
12230 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74  he presence.of t
12240 68 69 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c  his syntax resul
12250 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74  ts from the fact
12260 20 74 68 61 74 20 53 51 4c 69 74 65 20 69 73 20   that SQLite is 
12270 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65  really a .[Tcl e
12280 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68  xtension] that h
12290 61 73 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20  as escaped into 
122a0 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c  the wild.</td>.<
122b0 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
122c0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
122d0 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68 61 74  ^Parameters that
122e0 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65   are not assigne
122f0 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b  d values using.[
12300 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
12310 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69  b() | sqlite3_bi
12320 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61 74 65  nd()] are treate
12330 64 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a  d.as NULL.</p>..
12340 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20  <p>^The maximum 
12350 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
12360 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d 70 69   is set at compi
12370 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65 20 5b  le-time by.the [
12380 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
12390 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72  BLE_NUMBER] macr
123a0 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76 69 64  o.  ^(An individ
123b0 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20 63 6f  ual [database co
123c0 6e 6e 65 63 74 69 6f 6e 73 5d 0a 44 20 63 61 6e  nnections].D can
123d0 20 72 65 64 75 63 65 20 69 74 73 20 6d 61 78 69   reduce its maxi
123e0 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75  mum parameter nu
123f0 6d 62 65 72 20 62 65 6c 6f 77 20 74 68 65 20 63  mber below the c
12400 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69  ompile-time maxi
12410 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65 20 5b 73  mum.using the [s
12420 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 44 2c  qlite3_limit](D,
12430 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56   [SQLITE_LIMIT_V
12440 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c  ARIABLE_NUMBER],
12450 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 2e 29  ...) interface.)
12460 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ^.</p>..<tcl>hd_
12470 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49  fragment like LI
12480 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a  KE ESCAPE</tcl>.
12490 3c 68 33 3e 54 68 65 20 4c 49 4b 45 20 61 6e 64  <h3>The LIKE and
124a0 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 73 3c   GLOB operators<
124b0 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b  /h3>.<p>^The LIK
124c0 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20  E operator does 
124d0 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 69  a pattern matchi
124e0 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e  ng comparison. ^
124f0 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74  The operand.to t
12500 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65 20  he right of the 
12510 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 6f  LIKE operator co
12520 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74 74 65  ntains the patte
12530 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66 74 20  rn and the left 
12540 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63 6f 6e  hand.operand con
12550 74 61 69 6e 73 20 74 68 65 20 73 74 72 69 6e 67  tains the string
12560 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69 6e 73   to match agains
12570 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a  t the pattern...
12580 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 5e 41  <tcl>hd_puts "^A
12590 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20   percent symbol 
125a0 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65 20 4c  (\"%\") in the L
125b0 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63  IKE pattern matc
125c0 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e 63 65  hes any.sequence
125d0 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   of zero or more
125e0 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
125f0 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41 6e 20  he string.  ^An 
12600 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22 5f 5c  underscore.(\"_\
12610 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70  ") in the LIKE p
12620 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61  attern matches a
12630 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63  ny single charac
12640 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69 6e  ter in the.strin
12650 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65 72 20  g.  ^(Any other 
12660 63 68 61 72 61 63 74 65 72 20 6d 61 74 63 68 65  character matche
12670 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74 73 20  s itself or its 
12680 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73 65  lower/upper case
12690 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e 65  .equivalent (i.e
126a0 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  . case-insensiti
126b0 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29 5e 20  ve matching).)^ 
126c0 20 28 41 20 62 75 67 3a 20 5e 53 51 4c 69 74 65   (A bug: ^SQLite
126d0 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64   only.understand
126e0 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63 61  s upper/lower ca
126f0 73 65 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  se for ASCII cha
12700 72 61 63 74 65 72 73 20 62 79 20 64 65 66 61 75  racters by defau
12710 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f  lt.  ^The.LIKE o
12720 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65 20  perator is case 
12730 73 65 6e 73 69 74 69 76 65 20 62 79 20 64 65 66  sensitive by def
12740 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64 65  ault for unicode
12750 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
12760 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68 65 20   are.beyond the 
12770 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20 46 6f  ASCII range.  Fo
12780 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20  r example,.^the 
12790 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61  expression <b>'a
127a0 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
127b0 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45  ;'A'</b>.is TRUE
127c0 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b   but <b>'&aelig;
127d0 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
127e0 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69  ;'&AElig;'</b> i
127f0 73 20 46 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74  s FALSE.)<p>"</t
12800 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  cl>..<p>^If the 
12810 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20  optional ESCAPE 
12820 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
12830 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72  t, then the expr
12840 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67  ession.following
12850 20 74 68 65 20 45 53 43 41 50 45 20 6b 65 79 77   the ESCAPE keyw
12860 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75 61 74  ord must evaluat
12870 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f  e to a string co
12880 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20 73 69  nsisting of.a si
12890 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 2e 20  ngle character. 
128a0 5e 54 68 69 73 20 63 68 61 72 61 63 74 65 72 20  ^This character 
128b0 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 74  may be used in t
128c0 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a  he LIKE pattern.
128d0 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74 65 72  to include liter
128e0 61 6c 20 70 65 72 63 65 6e 74 20 6f 72 20 75 6e  al percent or un
128f0 64 65 72 73 63 6f 72 65 20 63 68 61 72 61 63 74  derscore charact
12900 65 72 73 2e 20 5e 54 68 65 20 65 73 63 61 70 65  ers. ^The escape
12910 0a 63 68 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f  .character follo
12920 77 65 64 20 62 79 20 61 20 70 65 72 63 65 6e 74  wed by a percent
12930 20 73 79 6d 62 6f 6c 20 28 25 29 2c 20 75 6e 64   symbol (%), und
12940 65 72 73 63 6f 72 65 20 28 5f 29 2c 20 6f 72 20  erscore (_), or 
12950 61 20 73 65 63 6f 6e 64 0a 69 6e 73 74 61 6e 63  a second.instanc
12960 65 20 6f 66 20 74 68 65 20 65 73 63 61 70 65 20  e of the escape 
12970 63 68 61 72 61 63 74 65 72 20 69 74 73 65 6c 66  character itself
12980 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74 65 72   matches a.liter
12990 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f  al percent symbo
129a0 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 2c 20 6f  l, underscore, o
129b0 72 20 61 20 73 69 6e 67 6c 65 20 65 73 63 61 70  r a single escap
129c0 65 20 63 68 61 72 61 63 74 65 72 2c 0a 72 65 73  e character,.res
129d0 70 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e  pectively...<p>^
129e0 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f  The infix LIKE o
129f0 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65  perator is imple
12a00 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e  mented by callin
12a10 67 20 74 68 65 0a 61 70 70 6c 69 63 61 74 69 6f  g the.applicatio
12a20 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75  n-defined SQL fu
12a30 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69  nctions [like(<i
12a40 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29  >Y</i>,<i>X</i>)
12a50 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c  ] or.[like(<i>Y<
12a60 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e  /i>,<i>X</i>,<i>
12a70 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e  Z</i>)]</a>.</p>
12a80 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f  ..<p>^The LIKE o
12a90 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 6d  perator can be m
12aa0 61 64 65 20 63 61 73 65 20 73 65 6e 73 69 74 69  ade case sensiti
12ab0 76 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 63 61  ve using the.[ca
12ac0 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b  se_sensitive_lik
12ad0 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a  e pragma].</p>..
12ae0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
12af0 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e   glob GLOB</tcl>
12b00 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70  .<p>^The GLOB op
12b10 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69 6c 61  erator is simila
12b20 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20 75 73  r to LIKE but us
12b30 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69 6c 65  es the Unix.file
12b40 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61 78   globbing syntax
12b50 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63 61 72   for its wildcar
12b60 64 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42  ds.  ^Also, GLOB
12b70 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74 69   is case.sensiti
12b80 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e  ve, unlike LIKE.
12b90 20 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64    ^Both GLOB and
12ba0 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65   LIKE may be pre
12bb0 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54  ceded by.the NOT
12bc0 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65   keyword to inve
12bd0 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20  rt the sense of 
12be0 74 68 65 20 74 65 73 74 2e 20 20 5e 54 68 65 20  the test.  ^The 
12bf0 69 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72  infix GLOB .oper
12c00 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e  ator is implemen
12c10 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ted by calling t
12c20 68 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f  he function.[glo
12c30 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  b(<i>Y</i>,<i>X<
12c40 2f 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62 65  /i>)] and can be
12c50 20 6d 6f 64 69 66 69 65 64 20 62 79 20 6f 76 65   modified by ove
12c60 72 72 69 64 69 6e 67 0a 74 68 61 74 20 66 75 6e  rriding.that fun
12c70 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ction.</p>..<tcl
12c80 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 67  >hd_fragment reg
12c90 65 78 70 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e  exp REGEXP</tcl>
12ca0 0a 3c 70 3e 5e 54 68 65 20 52 45 47 45 58 50 20  .<p>^The REGEXP 
12cb0 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70  operator is a sp
12cc0 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72  ecial syntax for
12cd0 20 74 68 65 20 72 65 67 65 78 70 28 29 0a 75 73   the regexp().us
12ce0 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e  er function.  ^N
12cf0 6f 20 72 65 67 65 78 70 28 29 20 75 73 65 72 20  o regexp() user 
12d00 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
12d10 6e 65 64 20 62 79 20 64 65 66 61 75 6c 74 0a 61  ned by default.a
12d20 6e 64 20 73 6f 20 75 73 65 20 6f 66 20 74 68 65  nd so use of the
12d30 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72   REGEXP operator
12d40 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72   will normally r
12d50 65 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f  esult in an.erro
12d60 72 20 6d 65 73 73 61 67 65 2e 20 20 5e 49 66 20  r message.  ^If 
12d70 61 6e 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d  an [application-
12d80 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63  defined SQL func
12d90 74 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67  tion] named "reg
12da0 65 78 70 22 0a 69 73 20 61 64 64 65 64 20 61 74  exp".is added at
12db0 20 72 75 6e 2d 74 69 6d 65 2c 20 74 68 65 6e 20   run-time, then 
12dc0 74 68 65 20 22 3c 69 3e 58 3c 2f 69 3e 20 52 45  the "<i>X</i> RE
12dd0 47 45 58 50 20 3c 69 3e 59 3c 2f 69 3e 22 20 6f  GEXP <i>Y</i>" o
12de0 70 65 72 61 74 6f 72 20 77 69 6c 6c 0a 62 65 20  perator will.be 
12df0 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  implemented as a
12e00 20 63 61 6c 6c 20 74 6f 20 22 72 65 67 65 78 70   call to "regexp
12e10 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f  (<i>Y</i>,<i>X</
12e20 69 3e 29 22 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  i>)".</p>..<tcl>
12e30 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61 74 63  hd_fragment matc
12e40 68 20 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70  h MATCH</tcl>.<p
12e50 3e 5e 54 68 65 20 4d 41 54 43 48 20 6f 70 65 72  >^The MATCH oper
12e60 61 74 6f 72 20 69 73 20 61 20 73 70 65 63 69 61  ator is a specia
12e70 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65  l syntax for the
12e80 20 6d 61 74 63 68 28 29 0a 61 70 70 6c 69 63 61   match().applica
12e90 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e  tion-defined fun
12ea0 63 74 69 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66  ction.  ^The def
12eb0 61 75 6c 74 20 6d 61 74 63 68 28 29 20 66 75 6e  ault match() fun
12ec0 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  ction implementa
12ed0 74 69 6f 6e 0a 72 61 69 73 65 73 20 61 6e 20 65  tion.raises an e
12ee0 78 63 65 70 74 69 6f 6e 20 61 6e 64 20 69 73 20  xception and is 
12ef0 6e 6f 74 20 72 65 61 6c 6c 79 20 75 73 65 66 75  not really usefu
12f00 6c 20 66 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a  l for anything..
12f10 5e 42 75 74 20 65 78 74 65 6e 73 69 6f 6e 73 20  ^But extensions 
12f20 63 61 6e 20 6f 76 65 72 72 69 64 65 20 74 68 65  can override the
12f30 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f   match() functio
12f40 6e 20 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70  n with more.help
12f50 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a  ful logic.</p>..
12f60 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
12f70 20 62 65 74 77 65 65 6e 20 42 45 54 57 45 45 4e   between BETWEEN
12f80 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42  </tcl>.<h3>The B
12f90 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c  ETWEEN operator<
12fa0 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45  /h3>.<p>^(The BE
12fb0 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69  TWEEN operator i
12fc0 73 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69  s logically equi
12fd0 76 61 6c 65 6e 74 20 74 6f 20 61 20 70 61 69 72  valent to a pair
12fe0 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e   of comparisons.
12ff0 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45  ."<i>x</i> <b>BE
13000 54 57 45 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f  TWEEN</b> <i>y</
13010 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69  i> <b>AND</b> <i
13020 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a 65 71 75 69  >z</i>" is .equi
13030 76 61 6c 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78  valent to ."<i>x
13040 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e  </i><b>&gt;=</b>
13050 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c  <i>y</i> <b>AND<
13060 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26  /b> <i>x</i><b>&
13070 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e  lt;=</b><i>z</i>
13080 22 20 65 78 63 65 70 74 0a 74 68 61 74 20 77 69  " except.that wi
13090 74 68 20 42 45 54 57 45 45 4e 2c 20 74 68 65 20  th BETWEEN, the 
130a0 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73  <i>x</i> express
130b0 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c  ion is only eval
130c0 75 61 74 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54  uated once.)^.^T
130d0 68 65 20 70 72 65 63 65 64 65 6e 63 65 20 6f 66  he precedence of
130e0 20 74 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65   the BETWEEN ope
130f0 72 61 74 6f 72 20 69 73 20 74 68 65 20 73 61 6d  rator is the sam
13100 65 20 61 73 20 74 68 65 20 70 72 65 63 65 64 65  e as the precede
13110 6e 63 65 0a 61 73 20 6f 70 65 72 61 74 6f 72 73  nce.as operators
13120 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c   <b>==</b> and <
13130 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e  b>!=</b> and <b>
13140 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f  LIKE</b> and gro
13150 75 70 73 20 6c 65 66 74 20 74 6f 20 72 69 67 68  ups left to righ
13160 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  t...<tcl>hd_frag
13170 6d 65 6e 74 20 63 61 73 65 20 7b 43 41 53 45 20  ment case {CASE 
13180 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c  expression}</tcl
13190 3e 0a 3c 68 33 3e 54 68 65 20 43 41 53 45 20 65  >.<h3>The CASE e
131a0 78 70 72 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c  xpression</h3>.<
131b0 70 3e 41 20 43 41 53 45 20 65 78 70 72 65 73 73  p>A CASE express
131c0 69 6f 6e 20 73 65 72 76 65 73 20 61 20 72 6f 6c  ion serves a rol
131d0 65 20 73 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d  e similar to IF-
131e0 54 48 45 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68  THEN-ELSE in oth
131f0 65 72 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c  er.programming l
13200 61 6e 67 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e  anguages.  ..<p>
13210 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70  The optional exp
13220 72 65 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63  ression that occ
13230 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 74  urs in between t
13240 68 65 20 43 41 53 45 20 6b 65 79 77 6f 72 64 20  he CASE keyword 
13250 61 6e 64 20 74 68 65 0a 66 69 72 73 74 20 57 48  and the.first WH
13260 45 4e 20 6b 65 79 77 6f 72 64 20 69 73 20 63 61  EN keyword is ca
13270 6c 6c 65 64 20 74 68 65 20 22 62 61 73 65 22 20  lled the "base" 
13280 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65  expression. ^The
13290 72 65 20 61 72 65 20 74 77 6f 20 62 61 73 69 63  re are two basic
132a0 20 66 6f 72 6d 73 0a 6f 66 20 74 68 65 20 43 41   forms.of the CA
132b0 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 74  SE expression: t
132c0 68 6f 73 65 20 77 69 74 68 20 61 20 62 61 73 65  hose with a base
132d0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
132e0 74 68 6f 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a  those without...
132f0 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69  <p>^In a CASE wi
13300 74 68 6f 75 74 20 61 20 62 61 73 65 20 65 78 70  thout a base exp
13310 72 65 73 73 69 6f 6e 2c 20 65 61 63 68 20 57 48  ression, each WH
13320 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  EN expression is
13330 20 65 76 61 6c 75 61 74 65 64 0a 61 6e 64 20 74   evaluated.and t
13340 68 65 20 72 65 73 75 6c 74 20 74 72 65 61 74 65  he result treate
13350 64 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20  d as a boolean, 
13360 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 74 68  starting with th
13370 65 20 6c 65 66 74 6d 6f 73 74 20 61 6e 64 20 63  e leftmost and c
13380 6f 6e 74 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65  ontinuing.to the
13390 20 72 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73   right. ^The res
133a0 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20  ult of the CASE 
133b0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
133c0 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20  e evaluation of 
133d0 74 68 65 20 54 48 45 4e 0a 65 78 70 72 65 73 73  the THEN.express
133e0 69 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70  ion that corresp
133f0 6f 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73  onds to the firs
13400 74 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  t WHEN expressio
13410 6e 20 74 68 61 74 20 65 76 61 6c 75 61 74 65 73  n that evaluates
13420 20 74 6f 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69   to.true. ^Or, i
13430 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48  f none of the WH
13440 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65  EN expressions e
13450 76 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65 2c  valuate to true,
13460 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 65   the result of.e
13470 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c  valuating the EL
13480 53 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  SE expression, i
13490 66 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65  f any. ^If there
134a0 20 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72   is no ELSE expr
134b0 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20  ession and.none 
134c0 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72  of the WHEN expr
134d0 65 73 73 69 6f 6e 73 20 61 72 65 20 74 72 75 65  essions are true
134e0 2c 20 74 68 65 6e 20 74 68 65 20 6f 76 65 72 61  , then the overa
134f0 6c 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  ll result is NUL
13500 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72  L...<p>^A NULL r
13510 65 73 75 6c 74 20 69 73 20 63 6f 6e 73 69 64 65  esult is conside
13520 72 65 64 20 75 6e 74 72 75 65 20 77 68 65 6e 20  red untrue when 
13530 65 76 61 6c 75 61 74 69 6e 67 20 57 48 45 4e 20  evaluating WHEN 
13540 74 65 72 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61  terms...<p>^In a
13550 20 43 41 53 45 20 77 69 74 68 20 61 20 62 61 73   CASE with a bas
13560 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68  e expression, th
13570 65 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  e base expressio
13580 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6a  n is evaluated j
13590 75 73 74 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65  ust.once and the
135a0 20 72 65 73 75 6c 74 20 69 73 20 63 6f 6d 70 61   result is compa
135b0 72 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20  red against the 
135c0 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61  evaluation of ea
135d0 63 68 20 57 48 45 4e 20 0a 65 78 70 72 65 73 73  ch WHEN .express
135e0 69 6f 6e 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  ion from left to
135f0 20 72 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73   right. ^The res
13600 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20  ult of the CASE 
13610 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
13620 65 20 0a 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  e .evaluation of
13630 20 74 68 65 20 54 48 45 4e 20 65 78 70 72 65 73   the THEN expres
13640 73 69 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73  sion that corres
13650 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72  ponds to the fir
13660 73 74 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69  st WHEN.expressi
13670 6f 6e 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  on for which the
13680 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
13690 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e  rue. ^Or, if non
136a0 65 20 6f 66 20 74 68 65 20 57 48 45 4e 0a 65 78  e of the WHEN.ex
136b0 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61  pressions evalua
136c0 74 65 20 74 6f 20 61 20 76 61 6c 75 65 20 65 71  te to a value eq
136d0 75 61 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20  ual to the base 
136e0 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
136f0 72 65 73 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61  result.of evalua
13700 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78  ting the ELSE ex
13710 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79  pression, if any
13720 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e  . ^If there is n
13730 6f 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f  o ELSE expressio
13740 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68  n and.none of th
13750 65 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  e WHEN expressio
13760 6e 73 20 70 72 6f 64 75 63 65 20 61 20 72 65 73  ns produce a res
13770 75 6c 74 20 65 71 75 61 6c 20 74 6f 20 74 68 65  ult equal to the
13780 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
13790 2c 0a 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65  ,.the overall re
137a0 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c  sult is NULL...<
137b0 70 3e 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e  p>^When comparin
137c0 67 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73  g a base express
137d0 69 6f 6e 20 61 67 61 69 6e 73 74 20 61 20 57 48  ion against a WH
137e0 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74  EN expression, t
137f0 68 65 20 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e  he same.collatin
13800 67 20 73 65 71 75 65 6e 63 65 2c 20 61 66 66 69  g sequence, affi
13810 6e 69 74 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68  nity, and NULL-h
13820 61 6e 64 6c 69 6e 67 20 72 75 6c 65 73 20 61 70  andling rules ap
13830 70 6c 79 20 61 73 20 69 66 20 74 68 65 0a 62 61  ply as if the.ba
13840 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  se expression an
13850 64 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  d WHEN expressio
13860 6e 20 61 72 65 20 72 65 73 70 65 63 74 69 76 65  n are respective
13870 6c 79 20 74 68 65 20 6c 65 66 74 2d 20 61 6e 64  ly the left- and
13880 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72  .right-hand oper
13890 61 6e 64 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e  ands of an <big>
138a0 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f  <b>=</b></big> o
138b0 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66  perator.</p> ^If
138c0 20 74 68 65 20 62 61 73 65 20 0a 65 78 70 72 65   the base .expre
138d0 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68  ssion is NULL th
138e0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
138f0 20 74 68 65 20 43 41 53 45 20 69 73 20 61 6c 77   the CASE is alw
13900 61 79 73 20 74 68 65 20 72 65 73 75 6c 74 20 0a  ays the result .
13910 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
13920 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f  e ELSE expressio
13930 6e 20 69 66 20 69 74 20 65 78 69 73 74 73 2c 20  n if it exists, 
13940 6f 72 20 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f  or NULL if it do
13950 65 73 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74  es not...<p>^Bot
13960 68 20 66 6f 72 6d 73 20 6f 66 20 74 68 65 20 43  h forms of the C
13970 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 75  ASE expression u
13980 73 65 20 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72  se lazy, or shor
13990 74 2d 63 69 72 63 75 69 74 2c 20 0a 65 76 61 6c  t-circuit, .eval
139a0 75 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68  uation...<p>^(Th
139b0 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63  e only differenc
139c0 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 66 6f  e between the fo
139d0 6c 6c 6f 77 69 6e 67 20 74 77 6f 20 43 41 53 45  llowing two CASE
139e0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20   expressions is 
139f0 74 68 61 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f  that .the <i>x</
13a00 69 3e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  i> expression is
13a10 20 65 76 61 6c 75 61 74 65 64 20 65 78 61 63 74   evaluated exact
13a20 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 66  ly once in the f
13a30 69 72 73 74 20 65 78 61 6d 70 6c 65 20 62 75 74  irst example but
13a40 20 0a 6d 69 67 68 74 20 62 65 20 65 76 61 6c 75   .might be evalu
13a50 61 74 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69  ated multiple ti
13a60 6d 65 73 20 69 6e 20 74 68 65 20 73 65 63 6f 6e  mes in the secon
13a70 64 3a 0a 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c  d:..<ul><pre>.<l
13a80 69 3e 43 41 53 45 20 78 20 57 48 45 4e 20 77 31  i>CASE x WHEN w1
13a90 20 54 48 45 4e 20 72 31 20 57 48 45 4e 20 77 32   THEN r1 WHEN w2
13aa0 20 54 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33   THEN r2 ELSE r3
13ab0 20 45 4e 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48   END.<li>CASE WH
13ac0 45 4e 20 78 3d 77 31 20 54 48 45 4e 20 72 31 20  EN x=w1 THEN r1 
13ad0 57 48 45 4e 20 78 3d 77 32 20 54 48 45 4e 20 72  WHEN x=w2 THEN r
13ae0 32 20 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f  2 ELSE r3 END.</
13af0 70 72 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74  pre></ul>)^...<t
13b00 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69  cl>hd_fragment i
13b10 6e 5f 6f 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f  n_op {IN operato
13b20 72 7d 20 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61  r} {NOT IN opera
13b30 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  tor}</tcl>.<h3>T
13b40 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e  he IN and NOT IN
13b50 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a   operators</h3>.
13b60 3c 70 3e 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e  <p>^The IN and N
13b70 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 20  OT IN operators 
13b80 74 61 6b 65 20 61 20 73 69 6e 67 6c 65 20 73 63  take a single sc
13b90 61 6c 61 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20  alar operand on 
13ba0 74 68 65 0a 6c 65 66 74 20 61 6e 64 20 61 20 76  the.left and a v
13bb0 65 63 74 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e  ector operand on
13bc0 20 74 68 65 20 72 69 67 68 74 0a 66 6f 72 6d 65   the right.forme
13bd0 64 20 62 79 20 61 6e 20 65 78 70 6c 69 63 69 74  d by an explicit
13be0 20 6c 69 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72   list of zero or
13bf0 20 6d 6f 72 65 20 73 63 61 6c 61 72 73 20 6f 72   more scalars or
13c00 20 62 79 20 61 20 0a 73 69 6e 67 6c 65 20 73 75   by a .single su
13c10 62 71 75 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68  bquery..^When th
13c20 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  e right operand 
13c30 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20  of an IN or NOT 
13c40 49 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61  IN operator is a
13c50 20 73 75 62 71 75 65 72 79 2c 20 74 68 65 0a 73   subquery, the.s
13c60 75 62 71 75 65 72 79 20 6d 75 73 74 20 68 61 76  ubquery must hav
13c70 65 20 61 20 73 69 6e 67 6c 65 20 72 65 73 75 6c  e a single resul
13c80 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20  t column..^When 
13c90 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e  the right operan
13ca0 64 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65  d is an empty se
13cb0 74 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  t, the result of
13cc0 20 49 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64   IN is false and
13cd0 20 74 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e   the.result of N
13ce0 4f 54 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72  OT IN is true, r
13cf0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
13d00 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e   left operand an
13d10 64 20 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65  d even if the.le
13d20 66 74 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ft operand is NU
13d30 4c 4c 2e 0a 5e 28 54 68 65 20 72 65 73 75 6c 74  LL..^(The result
13d40 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54   of an IN or NOT
13d50 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20   IN operator is 
13d60 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
13d70 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72  e following.matr
13d80 69 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74  ix:..<center>.<t
13d90 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  able border=1>.<
13da0 74 72 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65  tr>.<th>Left ope
13db0 72 61 6e 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c  rand <br>is NULL
13dc0 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61  .<th>Right opera
13dd0 6e 64 20 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20  nd <br>contains 
13de0 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f  NULL.<th>Right o
13df0 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e  perand <br>is an
13e00 20 65 6d 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c   empty set.<th>L
13e10 65 66 74 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e  eft operand foun
13e20 64 20 3c 62 72 3e 77 69 74 68 69 6e 20 72 69 67  d <br>within rig
13e30 68 74 20 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52  ht operand.<th>R
13e40 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20  esult of <br>IN 
13e50 6f 70 65 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73  operator.<th>Res
13e60 75 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49  ult of <br>NOT I
13e70 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a  N operator.<tr>.
13e80 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13e90 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
13ea0 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
13eb0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13ec0 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13ed0 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
13ee0 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65  n="center">false
13ef0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13f00 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74  er">true.<tr>.<t
13f10 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13f20 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
13f30 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13f40 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
13f50 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
13f60 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13f70 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
13f80 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64  enter">false.<td
13f90 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13fa0 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  true.<tr>.<td al
13fb0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
13fc0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13fd0 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74  r">does not matt
13fe0 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  er.<td align="ce
13ff0 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
14000 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a  gn="center">yes.
14010 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
14020 72 22 3e 74 72 75 65 0a 3c 74 64 20 61 6c 69 67  r">true.<td alig
14030 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65  n="center">false
14040 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
14050 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
14060 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79  align="center">y
14070 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  es.<td align="ce
14080 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
14090 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
140a0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
140b0 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e  ">NULL.<td align
140c0 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c  ="center">NULL.<
140d0 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
140e0 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61  enter">yes.<td a
140f0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f  lign="center">do
14100 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74  es not matter.<t
14110 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
14120 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
14130 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20  enter">does not 
14140 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e  matter.<td align
14150 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c  ="center">NULL.<
14160 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
14170 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a  ">NULL.</table>.
14180 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e  </center>)^..<p>
14190 5e 4e 6f 74 65 20 74 68 61 74 20 53 51 4c 69 74  ^Note that SQLit
141a0 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 70 61 72  e allows the par
141b0 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20  enthesized list 
141c0 6f 66 20 73 63 61 6c 61 72 20 76 61 6c 75 65 73  of scalar values
141d0 20 6f 6e 0a 74 68 65 20 72 69 67 68 74 2d 68 61   on.the right-ha
141e0 6e 64 20 73 69 64 65 20 6f 66 20 61 6e 20 49 4e  nd side of an IN
141f0 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61   or NOT IN opera
14200 74 6f 72 20 74 6f 20 62 65 20 61 6e 20 65 6d 70  tor to be an emp
14210 74 79 20 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74  ty list but.most
14220 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62   other SQL datab
14230 61 73 65 20 64 61 74 61 62 61 73 65 20 65 6e 67  ase database eng
14240 69 6e 65 73 20 61 6e 64 20 74 68 65 20 53 51 4c  ines and the SQL
14250 39 32 20 73 74 61 6e 64 61 72 64 20 72 65 71 75  92 standard requ
14260 69 72 65 0a 74 68 65 20 6c 69 73 74 20 74 6f 20  ire.the list to 
14270 63 6f 6e 74 61 69 6e 20 61 74 20 6c 65 61 73 74  contain at least
14280 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70   one element.</p
14290 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
142a0 65 6e 74 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54  ent in_op {EXIST
142b0 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54  S operator} {NOT
142c0 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
142d0 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
142e0 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 3c  EXISTS operator<
142f0 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58  /h3>..<p>^The EX
14300 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 61 6c  ISTS operator al
14310 77 61 79 73 20 65 76 61 6c 75 61 74 65 73 20 74  ways evaluates t
14320 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 74  o one of the int
14330 65 67 65 72 20 76 61 6c 75 65 73 20 30 20 0a 61  eger values 0 .a
14340 6e 64 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74  nd 1. ^If execut
14350 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 73  ing the SELECT s
14360 74 61 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69  tatement specifi
14370 65 64 20 61 73 20 74 68 65 20 72 69 67 68 74 2d  ed as the right-
14380 68 61 6e 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66  hand .operand of
14390 20 74 68 65 20 45 58 49 53 54 53 20 6f 70 65 72   the EXISTS oper
143a0 61 74 6f 72 20 77 6f 75 6c 64 20 72 65 74 75 72  ator would retur
143b0 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f  n one or more ro
143c0 77 73 2c 20 74 68 65 6e 20 74 68 65 0a 45 58 49  ws, then the.EXI
143d0 53 54 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61  STS operator eva
143e0 6c 75 61 74 65 73 20 74 6f 20 31 2e 20 5e 49 66  luates to 1. ^If
143f0 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 53   executing the S
14400 45 4c 45 43 54 20 77 6f 75 6c 64 20 72 65 74 75  ELECT would retu
14410 72 6e 0a 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c  rn.no rows at al
14420 6c 2c 20 74 68 65 6e 20 74 68 65 20 45 58 49 53  l, then the EXIS
14430 54 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c  TS operator eval
14440 75 61 74 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70  uates to 0. ..<p
14450 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  >^The number of 
14460 63 6f 6c 75 6d 6e 73 20 69 6e 20 65 61 63 68 20  columns in each 
14470 72 6f 77 20 72 65 74 75 72 6e 65 64 20 62 79 20  row returned by 
14480 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
14490 6d 65 6e 74 0a 28 69 66 20 61 6e 79 29 20 61 6e  ment.(if any) an
144a0 64 20 74 68 65 20 73 70 65 63 69 66 69 63 20 76  d the specific v
144b0 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20 68  alues returned h
144c0 61 76 65 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e  ave no effect on
144d0 20 74 68 65 20 72 65 73 75 6c 74 73 0a 6f 66 20   the results.of 
144e0 74 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61  the EXISTS opera
144f0 74 6f 72 2e 20 5e 49 6e 20 70 61 72 74 69 63 75  tor. ^In particu
14500 6c 61 72 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69  lar, rows contai
14510 6e 69 6e 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ning NULL values
14520 20 61 72 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64   are.not handled
14530 20 61 6e 79 20 64 69 66 66 65 72 65 6e 74 6c 79   any differently
14540 20 66 72 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f   from rows witho
14550 75 74 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a  ut NULL values..
14560 0a 3c 68 33 3e 53 63 61 6c 61 72 20 53 75 62 71  .<h3>Scalar Subq
14570 75 65 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ueries</h3>..<p>
14580 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  ^A [SELECT] stat
14590 65 6d 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69  ement enclosed i
145a0 6e 20 70 61 72 65 6e 74 68 65 73 65 73 20 6d 61  n parentheses ma
145b0 79 20 61 70 70 65 61 72 20 61 73 20 61 20 73 63  y appear as a sc
145c0 61 6c 61 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e  alar.quantity. ^
145d0 41 20 5b 53 45 4c 45 43 54 5d 20 75 73 65 64 20  A [SELECT] used 
145e0 61 73 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e  as a scalar quan
145f0 74 69 74 79 20 6d 75 73 74 20 72 65 74 75 72 6e  tity must return
14600 20 61 20 72 65 73 75 6c 74 20 73 65 74 0a 77 69   a result set.wi
14610 74 68 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  th a single colu
14620 6d 6e 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20  mn. ^The result 
14630 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
14640 6e 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f  n is the value o
14650 66 20 74 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d  f the.only colum
14660 6e 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 72  n in the first r
14670 6f 77 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ow returned by t
14680 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
14690 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 53 45 4c  ent. ^If the SEL
146a0 45 43 54 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65  ECT .yields more
146b0 20 74 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74   than one result
146c0 20 72 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61   row, all rows a
146d0 66 74 65 72 20 74 68 65 20 66 69 72 73 74 20 61  fter the first a
146e0 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a  re ignored. ^If.
146f0 74 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64  the SELECT yield
14700 73 20 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20  s no rows, then 
14710 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
14720 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e   expression is N
14730 55 4c 4c 2e 0a 5e 28 54 68 65 20 4c 49 4d 49 54  ULL..^(The LIMIT
14740 20 6f 66 20 61 20 73 63 61 6c 61 72 20 73 75 62   of a scalar sub
14750 71 75 65 72 79 20 69 73 20 61 6c 77 61 79 73 20  query is always 
14760 31 2e 0a 41 6e 79 20 6f 74 68 65 72 20 4c 49 4d  1..Any other LIM
14770 49 54 20 76 61 6c 75 65 20 67 69 76 65 6e 20 69  IT value given i
14780 6e 20 74 68 65 20 53 51 4c 20 74 65 78 74 20 69  n the SQL text i
14790 73 20 69 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70  s ignored.)^..<p
147a0 3e 5e 41 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b  >^All types of [
147b0 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
147c0 74 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 67 67  t, including agg
147d0 72 65 67 61 74 65 20 61 6e 64 20 63 6f 6d 70 6f  regate and compo
147e0 75 6e 64 20 53 45 4c 45 43 54 0a 71 75 65 72 69  und SELECT.queri
147f0 65 73 20 28 71 75 65 72 69 65 73 20 77 69 74 68  es (queries with
14800 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55   keywords like U
14810 4e 49 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20  NION or EXCEPT) 
14820 61 72 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73  are allowed as s
14830 63 61 6c 61 72 0a 73 75 62 71 75 65 72 69 65 73  calar.subqueries
14840 2e 0a 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c  ...<h3>Table Col
14850 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a  umn Names</h3>..
14860 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d  <p>^A column nam
14870 65 20 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20  e can be any of 
14880 74 68 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65  the names define
14890 64 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45  d in the [CREATE
148a0 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e   TABLE].statemen
148b0 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20  t or one of the 
148c0 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61  following specia
148d0 6c 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22  l identifiers: "
148e0 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22  <b>ROWID</b>",."
148f0 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20  <b>OID</b>", or 
14900 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22  "<b>_ROWID_</b>"
14910 2e 0a 5e 54 68 65 73 65 20 73 70 65 63 69 61 6c  ..^These special
14920 20 69 64 65 6e 74 69 66 69 65 72 73 20 61 6c 6c   identifiers all
14930 20 64 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e   describe the.un
14940 69 71 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79  ique integer key
14950 20 28 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61   (the [rowid]) a
14960 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65  ssociated with e
14970 76 65 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65  very .row of eve
14980 72 79 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73  ry table..^The s
14990 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65  pecial identifie
149a0 72 73 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f  rs only refer to
149b0 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20   the row key if 
149c0 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c  the [CREATE TABL
149d0 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65  E].statement doe
149e0 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72  s not define a r
149f0 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20  eal column with 
14a00 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e  the same name..^
14a10 54 68 65 20 72 6f 77 69 64 20 63 61 6e 20 62 65  The rowid can be
14a20 20 75 73 65 64 20 61 6e 79 77 68 65 72 65 20 61   used anywhere a
14a30 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20   regular.column 
14a40 63 61 6e 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e  can be used.</p>
14a50 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d  ..<p>^A [SELECT]
14a60 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20   statement used 
14a70 61 73 20 65 69 74 68 65 72 20 61 20 73 63 61 6c  as either a scal
14a80 61 72 20 73 75 62 71 75 65 72 79 20 6f 72 20 61  ar subquery or a
14a90 73 20 74 68 65 20 0a 72 69 67 68 74 2d 68 61 6e  s the .right-han
14aa0 64 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20  d operand of an 
14ab0 49 4e 2c 20 4e 4f 54 20 49 4e 20 6f 72 20 45 58  IN, NOT IN or EX
14ac0 49 53 54 53 20 65 78 70 72 65 73 73 69 6f 6e 20  ISTS expression 
14ad0 6d 61 79 20 63 6f 6e 74 61 69 6e 20 0a 72 65 66  may contain .ref
14ae0 65 72 65 6e 63 65 73 20 74 6f 20 63 6f 6c 75 6d  erences to colum
14af0 6e 73 20 69 6e 20 74 68 65 20 6f 75 74 65 72 20  ns in the outer 
14b00 71 75 65 72 79 2e 20 53 75 63 68 20 61 20 73 75  query. Such a su
14b10 62 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20  bquery is known 
14b20 61 73 0a 61 20 63 6f 72 72 65 6c 61 74 65 64 20  as.a correlated 
14b30 73 75 62 71 75 65 72 79 2e 20 5e 41 20 63 6f 72  subquery. ^A cor
14b40 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79  related subquery
14b50 20 69 73 20 72 65 65 76 61 6c 75 61 74 65 64 20   is reevaluated 
14b60 65 61 63 68 20 74 69 6d 65 0a 69 74 73 20 72 65  each time.its re
14b70 73 75 6c 74 20 69 73 20 72 65 71 75 69 72 65 64  sult is required
14b80 2e 20 5e 41 6e 20 75 6e 63 6f 72 72 65 6c 61 74  . ^An uncorrelat
14b90 65 64 20 73 75 62 71 75 65 72 79 20 69 73 20 65  ed subquery is e
14ba0 76 61 6c 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e  valuated only on
14bb0 63 65 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c  ce.and the resul
14bc0 74 20 72 65 75 73 65 64 20 61 73 20 6e 65 63 65  t reused as nece
14bd0 73 73 61 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ssary...<tcl>hd_
14be0 66 72 61 67 6d 65 6e 74 20 63 61 73 74 65 78 70  fragment castexp
14bf0 72 20 7b 43 41 53 54 20 65 78 70 72 65 73 73 69  r {CAST expressi
14c00 6f 6e 7d 20 7b 43 41 53 54 7d 20 7b 63 61 73 74  on} {CAST} {cast
14c10 7d 20 7b 43 41 53 54 20 6f 70 65 72 61 74 6f 72  } {CAST operator
14c20 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54  }</tcl>.<h3>CAST
14c30 20 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   expressions</h3
14c40 3e 0a 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70  >..<p>A CAST exp
14c50 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
14c60 6f 72 6d 20 22 43 41 53 54 28 26 6c 74 3b 65 78  orm "CAST(&lt;ex
14c70 70 72 26 67 74 3b 20 54 4f 20 26 6c 74 3b 74 79  pr&gt; TO &lt;ty
14c80 70 65 2d 6e 61 6d 65 26 67 74 3b 29 22 0a 69 73  pe-name&gt;)".is
14c90 20 75 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74   used to convert
14ca0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 26 6c   the value of &l
14cb0 74 3b 65 78 70 72 26 67 74 3b 20 74 6f 20 0a 61  t;expr&gt; to .a
14cc0 20 64 69 66 66 65 72 65 6e 74 20 5b 73 74 6f 72   different [stor
14cd0 61 67 65 20 63 6c 61 73 73 5d 20 73 70 65 63 69  age class] speci
14ce0 66 69 65 64 20 62 79 20 26 6c 74 3b 74 79 70 65  fied by &lt;type
14cf0 2d 6e 61 6d 65 26 67 74 3b 2e 0a 5e 41 20 43 41  -name&gt;..^A CA
14d00 53 54 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ST conversion is
14d10 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20   similar to the 
14d20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 68 61 74 20  conversion that 
14d30 74 61 6b 65 73 0a 70 6c 61 63 65 20 77 68 65 6e  takes.place when
14d40 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e   a [column affin
14d50 69 74 79 5d 20 69 73 20 61 70 70 6c 69 65 64 20  ity] is applied 
14d60 74 6f 20 61 20 76 61 6c 75 65 20 65 78 63 65 70  to a value excep
14d70 74 20 74 68 61 74 20 77 69 74 68 0a 74 68 65 20  t that with.the 
14d80 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20 74 68  CAST operator th
14d90 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61 6c 77  e conversion alw
14da0 61 79 73 20 74 61 6b 65 73 20 70 6c 61 63 65 20  ays takes place 
14db0 65 76 65 6e 20 69 66 20 74 68 65 20 63 6f 6e 76  even if the conv
14dc0 65 72 73 69 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64  ersion.lossy and
14dd0 20 69 72 72 65 76 65 72 73 69 62 6c 65 2c 20 77   irreversible, w
14de0 68 65 72 65 61 73 20 63 6f 6c 75 6d 6e 20 61 66  hereas column af
14df0 66 69 6e 69 74 79 20 6f 6e 6c 79 20 63 68 61 6e  finity only chan
14e00 67 65 73 20 74 68 65 20 64 61 74 61 20 74 79 70  ges the data typ
14e10 65 0a 6f 66 20 61 20 76 61 6c 75 65 20 69 66 20  e.of a value if 
14e20 74 68 65 20 63 68 61 6e 67 65 20 69 73 20 6c 6f  the change is lo
14e30 73 73 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72  ssless and rever
14e40 73 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74  sible...<p>^If t
14e50 68 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b  he value of &lt;
14e60 65 78 70 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c  expr&gt; is NULL
14e70 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
14e80 74 20 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78  t of the CAST.ex
14e90 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f  pression is also
14ea0 20 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73   NULL. ^Otherwis
14eb0 65 2c 20 74 68 65 20 73 74 6f 72 61 67 65 20 63  e, the storage c
14ec0 6c 61 73 73 20 6f 66 20 74 68 65 20 72 65 73 75  lass of the resu
14ed0 6c 74 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64  lt.is determined
14ee0 20 62 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65   by applying the
14ef0 20 5b 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65   [rules for dete
14f00 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61  rmining column a
14f10 66 66 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20  ffinity] to.the 
14f20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74  &lt;type-name&gt
14f30 3b 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  ;...<table borde
14f40 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e  r=1>.<tr>.  <th>
14f50 20 41 66 66 69 6e 69 74 79 20 6f 66 20 26 6c 74   Affinity of &lt
14f60 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 0a 20  ;type-name&gt;. 
14f70 20 3c 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e   <th> Conversion
14f80 20 50 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e   Processing.<tr>
14f90 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20  .  <td> NONE .  
14fa0 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20  <td> ^Casting a 
14fb0 76 61 6c 75 65 20 74 6f 20 61 20 26 6c 74 3b 74  value to a &lt;t
14fc0 79 70 65 2d 6e 61 6d 65 26 67 74 3b 20 77 69 74  ype-name&gt; wit
14fd0 68 20 6e 6f 20 61 66 66 69 6e 69 74 79 20 63 61  h no affinity ca
14fe0 75 73 65 73 20 74 68 65 20 76 61 6c 75 65 20 74  uses the value t
14ff0 6f 0a 20 20 62 65 20 63 6f 6e 76 65 72 74 65 64  o.  be converted
15000 20 69 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e   into a BLOB.  ^
15010 43 61 73 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f  Casting to a BLO
15020 42 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 66 69  B consists of fi
15030 72 73 74 20 63 61 73 74 69 6e 67 0a 20 20 74 68  rst casting.  th
15040 65 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 20  e value to TEXT 
15050 69 6e 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67  in the [encoding
15060 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
15070 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68  e connection, th
15080 65 6e 0a 20 20 69 6e 74 65 72 70 72 65 74 69 6e  en.  interpretin
15090 67 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  g the resulting 
150a0 62 79 74 65 20 73 65 71 75 65 6e 63 65 20 61 73  byte sequence as
150b0 20 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 20   a BLOB instead 
150c0 6f 66 20 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72  of as TEXT...<tr
150d0 3e 0a 20 20 3c 74 64 3e 20 54 45 58 54 0a 20 20  >.  <td> TEXT.  
150e0 3c 74 64 3e 20 5e 54 6f 20 63 61 73 74 20 61 20  <td> ^To cast a 
150f0 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 54 45  BLOB value to TE
15100 58 54 2c 20 74 68 65 20 73 65 71 75 65 6e 63 65  XT, the sequence
15110 20 6f 66 20 62 79 74 65 73 20 74 68 61 74 20 6d   of bytes that m
15120 61 6b 65 20 75 70 20 74 68 65 0a 20 20 42 4c 4f  ake up the.  BLO
15130 42 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64  B is interpreted
15140 20 61 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64   as text encoded
15150 20 75 73 69 6e 67 20 74 68 65 20 64 61 74 61 62   using the datab
15160 61 73 65 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20  ase encoding..  
15170 3c 70 3e 0a 20 20 20 5e 43 61 73 74 69 6e 67 20  <p>.   ^Casting 
15180 61 6e 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45  an INTEGER or RE
15190 41 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 54 45  AL value into TE
151a0 58 54 20 72 65 6e 64 65 72 73 20 74 68 65 20 76  XT renders the v
151b0 61 6c 75 65 20 61 73 20 69 66 20 76 69 61 20 0a  alue as if via .
151c0 20 20 20 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70      [sqlite3_snp
151d0 72 69 6e 74 66 28 29 5d 20 65 78 63 65 70 74 20  rintf()] except 
151e0 74 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 69  that the resulti
151f0 6e 67 20 54 45 58 54 20 75 73 65 73 20 74 68 65  ng TEXT uses the
15200 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20   [encoding] of. 
15210 20 20 20 74 68 65 20 64 61 74 61 62 61 73 65 20     the database 
15220 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72  connection...<tr
15230 3e 0a 20 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20  >.  <td> REAL.  
15240 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69  <td> ^When casti
15250 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20  ng a BLOB value 
15260 74 6f 20 61 20 52 45 41 4c 2c 20 74 68 65 20 76  to a REAL, the v
15270 61 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f  alue is first co
15280 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20  nverted to.     
15290 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20     TEXT..       
152a0 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  <p>^When casting
152b0 20 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f   a TEXT value to
152c0 20 52 45 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65   REAL, the longe
152d0 73 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66  st possible pref
152e0 69 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68  ix of.        th
152f0 65 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  e value that can
15300 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
15310 61 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72  as a real number
15320 20 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72   is extracted fr
15330 6f 6d 0a 20 20 20 20 20 20 20 20 74 68 65 20 54  om.        the T
15340 45 58 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68  EXT value and th
15350 65 20 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f  e remainder igno
15360 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e  red. ^Any leadin
15370 67 20 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a  g spaces in the.
15380 20 20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c          TEXT val
15390 75 65 20 61 72 65 20 69 67 6e 6f 72 65 64 20 77  ue are ignored w
153a0 68 65 6e 20 63 6f 6e 76 65 72 67 69 6e 67 20 66  hen converging f
153b0 72 6f 6d 20 54 45 58 54 20 74 6f 20 52 45 41 4c  rom TEXT to REAL
153c0 2e 20 5e 28 49 66 20 74 68 65 72 65 20 69 73 0a  . ^(If there is.
153d0 20 20 20 20 20 20 20 20 6e 6f 20 70 72 65 66 69          no prefi
153e0 78 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e  x that can be in
153f0 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20 72  terpreted as a r
15400 65 61 6c 20 6e 75 6d 62 65 72 2c 20 74 68 65 20  eal number, the 
15410 72 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 20 20  result of the.  
15420 20 20 20 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e        conversion
15430 20 69 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e   is 0.0.)^..<tr>
15440 0a 20 20 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a  .  <td> INTEGER.
15450 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73    <td> ^When cas
15460 74 69 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75  ting a BLOB valu
15470 65 20 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68  e to INTEGER, th
15480 65 20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74  e value is first
15490 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20   converted to.  
154a0 20 20 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20        TEXT..    
154b0 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74     <p>^When cast
154c0 69 6e 67 20 61 20 54 45 58 54 20 76 61 6c 75 65  ing a TEXT value
154d0 20 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65   to INTEGER, the
154e0 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c   longest possibl
154f0 65 20 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20  e prefix of.    
15500 20 20 20 20 74 68 65 20 76 61 6c 75 65 20 74 68      the value th
15510 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70  at can be interp
15520 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65  reted as an inte
15530 67 65 72 20 6e 75 6d 62 65 72 20 69 73 20 65 78  ger number is ex
15540 74 72 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20  tracted from.   
15550 20 20 20 20 20 74 68 65 20 54 45 58 54 20 76 61       the TEXT va
15560 6c 75 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61  lue and the rema
15570 69 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e  inder ignored. ^
15580 41 6e 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63  Any leading spac
15590 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20  es in the.      
155a0 20 20 54 45 58 54 20 76 61 6c 75 65 20 77 68 65    TEXT value whe
155b0 6e 20 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f  n converting fro
155c0 6d 20 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45  m TEXT to INTEGE
155d0 52 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e  R are ignored. ^
155e0 49 66 20 74 68 65 72 65 0a 20 20 20 20 20 20 20  If there.       
155f0 20 69 73 20 6e 6f 20 70 72 65 66 69 78 20 74 68   is no prefix th
15600 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70  at can be interp
15610 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65  reted as an inte
15620 67 65 72 20 6e 75 6d 62 65 72 2c 20 74 68 65 20  ger number, the 
15630 72 65 73 75 6c 74 0a 20 20 20 20 20 20 20 20 6f  result.        o
15640 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  f the conversion
15650 20 69 73 20 30 2e 0a 0a 20 20 20 20 20 20 3c 70   is 0...      <p
15660 3e 5e 41 20 63 61 73 74 20 6f 66 20 61 20 52 45  >^A cast of a RE
15670 41 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e  AL value into an
15680 20 49 4e 54 45 47 45 52 20 72 65 73 75 6c 74 73   INTEGER results
15690 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a   in the integer.
156a0 20 20 20 20 20 20 62 65 74 77 65 65 6e 20 74 68        between th
156b0 65 20 52 45 41 4c 20 76 61 6c 75 65 20 61 6e 64  e REAL value and
156c0 20 7a 65 72 6f 20 74 68 61 74 20 69 73 20 63 6c   zero that is cl
156d0 6f 73 65 73 74 20 74 6f 20 74 68 65 20 52 45 41  osest to the REA
156e0 4c 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 5e  L value..      ^
156f0 49 66 20 61 20 52 45 41 4c 20 69 73 20 67 72 65  If a REAL is gre
15700 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 67 72  ater than the gr
15710 65 61 74 65 73 74 20 70 6f 73 73 69 62 6c 65 20  eatest possible 
15720 73 69 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74  signed.      int
15730 65 67 65 72 20 28 2b 39 32 32 33 33 37 32 30 33  eger (+922337203
15740 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
15750 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
15760 68 65 20 67 72 65 61 74 65 73 74 20 70 6f 73 73  he greatest poss
15770 69 62 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65  ible.      signe
15780 64 20 69 6e 74 65 67 65 72 20 61 6e 64 20 69 66  d integer and if
15790 20 74 68 65 20 52 45 41 4c 20 69 73 20 6c 65 73   the REAL is les
157a0 73 20 74 68 61 6e 20 74 68 65 20 6c 65 61 73 74  s than the least
157b0 20 70 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64   possible signed
157c0 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72 20 28  .      integer (
157d0 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
157e0 35 38 30 38 29 20 74 68 65 6e 20 74 68 65 20 72  5808) then the r
157f0 65 73 75 6c 74 20 69 73 20 74 68 65 20 6c 65 61  esult is the lea
15800 73 74 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20  st possible.    
15810 20 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72    signed integer
15820 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 50 72 69 6f  ...      <p>Prio
15830 72 20 74 6f 20 53 51 4c 69 74 65 20 76 65 72 73  r to SQLite vers
15840 69 6f 6e 20 33 2e 38 2e 32 2c 20 63 61 73 74 69  ion 3.8.2, casti
15850 6e 67 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20  ng a REAL value 
15860 67 72 65 61 74 65 72 20 74 68 61 6e 0a 20 20 20  greater than.   
15870 20 20 20 2b 39 32 32 33 33 37 32 30 33 36 38 35     +922337203685
15880 34 37 37 35 38 30 37 2e 30 20 69 6e 74 6f 20 61  4775807.0 into a
15890 6e 20 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74  n integer result
158a0 65 64 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 6e  ed in the most n
158b0 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 69 6e  egative.      in
158c0 74 65 67 65 72 2c 20 2d 39 32 32 33 33 37 32 30  teger, -92233720
158d0 33 36 38 35 34 37 37 35 38 30 38 2e 20 20 54 68  36854775808.  Th
158e0 69 73 20 62 65 68 61 76 69 6f 72 20 77 61 73 20  is behavior was 
158f0 6d 65 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65  meant to emulate
15900 20 74 68 65 0a 20 20 20 20 20 20 62 65 68 61 76   the.      behav
15910 69 6f 72 20 6f 66 20 78 38 36 2f 78 36 34 20 68  ior of x86/x64 h
15920 61 72 64 77 61 72 65 20 77 68 65 6e 20 64 6f 69  ardware when doi
15930 6e 67 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  ng the equivalen
15940 74 20 63 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20  t cast...<tr>.  
15950 3c 74 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c  <td> NUMERIC.  <
15960 74 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54  td> ^Casting a T
15970 45 58 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75  EXT or BLOB valu
15980 65 20 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66  e into NUMERIC f
15990 69 72 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63  irst does a forc
159a0 65 64 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e  ed.   conversion
159b0 20 69 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74   into REAL but t
159c0 68 65 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76  hen further conv
159d0 65 72 74 73 20 74 68 65 20 72 65 73 75 6c 74 20  erts the result 
159e0 69 6e 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a  into INTEGER if.
159f0 20 20 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74     and only if t
15a00 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72  he conversion fr
15a10 6f 6d 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47  om REAL to INTEG
15a20 45 52 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61  ER is lossless a
15a30 6e 64 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20  nd reversible.. 
15a40 20 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e    This is the on
15a50 6c 79 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51  ly context in SQ
15a60 4c 69 74 65 20 77 68 65 72 65 20 74 68 65 20 4e  Lite where the N
15a70 55 4d 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47  UMERIC and INTEG
15a80 45 52 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a  ER [affinities].
15a90 20 20 20 62 65 68 61 76 65 20 64 69 66 66 65 72     behave differ
15aa0 65 6e 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43  ently..   <p> ^C
15ab0 61 73 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72  asting a REAL or
15ac0 20 49 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74   INTEGER value t
15ad0 6f 20 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e  o NUMERIC is a n
15ae0 6f 2d 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20  o-op, even if a 
15af0 72 65 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f  real.   value co
15b00 75 6c 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  uld be losslessl
15b10 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
15b20 6e 20 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72  n integer...</tr
15b30 3e 0a 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e  >..</table>..<p>
15b40 5e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 72  ^Note that the r
15b50 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69  esult from casti
15b60 6e 67 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20  ng any non-BLOB 
15b70 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c  value into a .BL
15b80 4f 42 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c  OB and the resul
15b90 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61  t from casting a
15ba0 6e 79 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e  ny BLOB value in
15bb0 74 6f 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61  to a non-BLOB va
15bc0 6c 75 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65  lue.may be diffe
15bd0 72 65 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f  rent depending o
15be0 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 64 61  n whether the da
15bf0 74 61 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67  tabase [encoding
15c00 5d 20 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d  ] is UTF-8,.UTF-
15c10 31 36 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c  16be, or UTF-16l
15c20 65 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  e....<tcl>hd_fra
15c30 67 6d 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70  gment booleanexp
15c40 72 20 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  r {boolean expre
15c50 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ssion}</tcl>.<h3
15c60 3e 42 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73  >Boolean Express
15c70 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ions</h3>..<p>Th
15c80 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66  e SQL language f
15c90 65 61 74 75 72 65 73 20 73 65 76 65 72 61 6c 20  eatures several 
15ca0 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20 61  contexts where a
15cb0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
15cc0 0a 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74  .evaluated and t
15cd0 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72  he result conver
15ce0 74 65 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e  ted to a boolean
15cf0 20 28 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29   (true or false)
15d00 20 76 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f   value. These.co
15d10 6e 74 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c  ntexts are:..  <
15d20 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  ul>.    <li> the
15d30 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
15d40 20 61 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54   a SELECT, UPDAT
15d50 45 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74  E or DELETE stat
15d60 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20  ement,.    <li> 
15d70 74 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20  the ON or USING 
15d80 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
15d90 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61   in a SELECT sta
15da0 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e  tement,.    <li>
15db0 20 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   the HAVING clau
15dc0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
15dd0 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c  tatement,.    <l
15de0 69 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75  i> the WHEN clau
15df0 73 65 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69  se of an SQL tri
15e00 67 67 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c  gger, and.    <l
15e10 69 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75  i> the WHEN clau
15e20 73 65 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66  se or clauses of
15e30 20 73 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65   some CASE expre
15e40 73 73 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a  ssions..  </ul>.
15e50 0a 3c 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74  .<p>^(To convert
15e60 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
15e70 61 6e 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f  an SQL expressio
15e80 6e 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76  n to a boolean v
15e90 61 6c 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72  alue, SQLite.fir
15ea0 73 74 20 63 61 73 74 73 20 74 68 65 20 72 65 73  st casts the res
15eb0 75 6c 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43  ult to a NUMERIC
15ec0 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61   value in the sa
15ed0 6d 65 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41  me way as a .[CA
15ee0 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  ST expression]. 
15ef0 41 20 4e 55 4c 4c 20 6f 72 20 7a 65 72 6f 20 76  A NULL or zero v
15f00 61 6c 75 65 20 28 69 6e 74 65 67 65 72 20 76 61  alue (integer va
15f10 6c 75 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61  lue 0 or real va
15f20 6c 75 65 20 30 2e 30 29 20 69 73 0a 63 6f 6e 73  lue 0.0) is.cons
15f30 69 64 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c  idered to be fal
15f40 73 65 2e 20 41 6c 6c 20 6f 74 68 65 72 20 76 61  se. All other va
15f50 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
15f60 72 65 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e  red true.)^..<p>
15f70 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  ^(For example, t
15f80 68 65 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20  he values NULL, 
15f90 30 2e 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68  0.0, 0, 'english
15fa0 27 20 61 6e 64 20 27 30 27 20 61 72 65 20 61 6c  ' and '0' are al
15fb0 6c 20 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20  l considered.to 
15fc0 62 65 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61  be false.)^ ^(Va
15fd0 6c 75 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31  lues 1, 1.0, 0.1
15fe0 2c 20 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e 67  , -0.1 and '1eng
15ff0 6c 69 73 68 27 20 61 72 65 20 63 6f 6e 73 69 64  lish' are consid
16000 65 72 65 64 20 74 6f 20 0a 62 65 20 74 72 75 65  ered to .be true
16010 2e 29 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f  .)^..<h3>Functio
16020 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68  ns</h3>.<p>^Both
16030 20 5b 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c   [corefunc|simpl
16040 65 5d 20 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c  e] and [aggfunc|
16050 61 67 67 72 65 67 61 74 65 5d 20 66 75 6e 63 74  aggregate] funct
16060 69 6f 6e 73 20 61 72 65 20 73 75 70 70 6f 72 74  ions are support
16070 65 64 2e 0a 28 46 6f 72 20 70 72 65 73 65 6e 74  ed..(For present
16080 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20  ation purposes, 
16090 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  simple functions
160a0 20 61 72 65 20 66 75 72 74 68 65 72 20 73 75 62   are further sub
160b0 64 69 76 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f  divided into.[co
160c0 72 65 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75  refunc | core fu
160d0 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61  nctions] and [da
160e0 74 65 66 75 6e 63 20 7c 20 64 61 74 65 2d 74 69  tefunc | date-ti
160f0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a  me functions].).
16100 5e 41 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69  ^A simple functi
16110 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
16120 6e 20 61 6e 79 20 65 78 70 72 65 73 73 69 6f 6e  n any expression
16130 2e 20 20 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74  .  ^Simple funct
16140 69 6f 6e 73 20 72 65 74 75 72 6e 0a 61 20 72 65  ions return.a re
16150 73 75 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  sult immediately
16160 20 62 61 73 65 64 20 6f 6e 20 74 68 65 69 72 20   based on their 
16170 69 6e 70 75 74 73 2e 20 20 5e 41 67 67 72 65 67  inputs.  ^Aggreg
16180 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61  ate functions.ma
16190 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69  y only be used i
161a0 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
161b0 6d 65 6e 74 2e 20 20 5e 41 67 67 72 65 67 61 74  ment.  ^Aggregat
161c0 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70  e functions comp
161d0 75 74 65 0a 74 68 65 69 72 20 72 65 73 75 6c 74  ute.their result
161e0 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73   across all rows
161f0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   of the result s
16200 65 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  et.</p>..<tcl>.#
16210 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16250 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
16260 63 74 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63  ction {Core Func
16270 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20  tions} corefunc 
16280 7b 2a 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63  {*corefunc}.proc
16290 20 66 75 6e 63 64 65 66 20 7b 73 79 6e 74 61 78   funcdef {syntax
162a0 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20   keywords desc} 
162b0 7b 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 72  {.  hd_puts {<tr
162c0 3e 7d 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  >}.  regsub -all
162d0 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74   {\s+} [string t
162e0 72 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62  rim $syntax] {<b
162f0 72 20 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72  r />} syntax.  r
16300 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b  egsub -all {\(([
16310 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61  ^*)]+)\)} $synta
16320 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20  x {(<i>\1</i>)} 
16330 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
16340 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78  -all {,} $syntax
16350 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74   {</i>,<i>} synt
16360 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
16370 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d   {<i>\.\.\.</i>}
16380 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73   $syntax {...} s
16390 79 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20  yntax.  hd_puts 
163a0 22 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  "<td valign=\"to
163b0 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68  p\" align=\"righ
163c0 74 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c  t\" width=\"120\
163d0 22 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67  ">".  if {[lleng
163e0 74 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30  th $keywords]==0
163f0 7d 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b  } {.    regexp {
16400 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78  [a-z_]+} $syntax
16410 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61   name.    hd_fra
16420 67 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61  gment $name *$na
16430 6d 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51  me "${name}() SQ
16440 4c 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20  L function".  } 
16450 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66  else {.    set f
16460 72 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20  ragname [lindex 
16470 24 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20  $keywords 0].   
16480 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e   regsub -all {[^
16490 61 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20  a-z]} $fragname 
164a0 7b 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20  {} fragname.    
164b0 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61  hd_fragment $fra
164c0 67 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68  gname.    eval h
164d0 64 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69  d_keywords [stri
164e0 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20  ng map {\n { }} 
164f0 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20  $keywords].  }. 
16500 20 68 64 5f 70 75 74 73 20 22 24 73 79 6e 74 61   hd_puts "$synta
16510 78 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75 74  x</td>".  hd_put
16520 73 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  s {<td valign="t
16530 6f 70 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f 6c  op">}.  hd_resol
16540 76 65 20 24 64 65 73 63 0a 20 20 68 64 5f 70 75  ve $desc.  hd_pu
16550 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a  ts {</td></tr>}.
16560 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  }.</tcl>..<p>The
16570 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20   core functions 
16580 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20  shown below are 
16590 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
165a0 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63  ault. .[datefunc
165b0 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69   | Date &amp; Ti
165c0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e  me functions] an
165d0 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67  d.[aggfunc | agg
165e0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
165f0 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64  ] are documented
16600 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 6e   separately.  An
16610 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79  .application may
16620 20 64 65 66 69 6e 65 20 61 64 64 69 74 69 6f 6e   define addition
16630 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72 69  al.functions wri
16640 74 74 65 6e 20 69 6e 20 43 20 61 6e 64 20 61 64  tten in C and ad
16650 64 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ded to the datab
16660 61 73 65 20 65 6e 67 69 6e 65 20 75 73 69 6e 67  ase engine using
16670 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72  .the [sqlite3_cr
16680 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
16690 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c   API.</p>..<tabl
166a0 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
166b0 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e  adding=10>.<tcl>
166c0 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29  .funcdef {abs(X)
166d0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62  } {} {.  ^The ab
166e0 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  s(X) function re
166f0 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75  turns the absolu
16700 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  te value of the 
16710 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65  numeric.  argume
16720 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72  nt X.  ^Abs(X) r
16730 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58  eturns NULL if X
16740 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41   is NULL. .  ^(A
16750 62 73 28 58 29 20 72 65 74 75 72 6e 20 30 2e 30  bs(X) return 0.0
16760 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69 6e   if X is a strin
16770 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61 74  g or blob.  that
16780 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
16790 72 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72 69  rted to a numeri
167a0 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66 20  c value.)^  ^If 
167b0 58 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74 65  X is the .  inte
167c0 67 65 72 20 2d 39 32 32 33 33 37 32 30 33 36 38  ger -92233720368
167d0 35 34 37 37 35 38 30 38 20 74 68 65 6e 20 61 62  54775808 then ab
167e0 73 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20 69  s(X) throws an i
167f0 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 0a  nteger overflow.
16800 20 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74 68    error since th
16810 65 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76 61  ere is no equiva
16820 6c 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36 34  lent positive 64
16830 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65 6d  -bit two complem
16840 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75  ent value..}..fu
16850 6e 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28 29  ncdef {changes()
16860 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68  } {} {.  ^The ch
16870 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e  anges() function
16880 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
16890 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 20  ber of database 
168a0 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20 63  rows that were c
168b0 68 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73 65  hanged.  or inse
168c0 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20  rted or deleted 
168d0 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  by the most rece
168e0 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20 49  ntly completed I
168f0 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a 20  NSERT, DELETE,. 
16900 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
16910 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65 20  ment, exclusive 
16920 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  of statements in
16930 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72 69   lower-level tri
16940 67 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63 68  ggers..  ^The ch
16950 61 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e 63  anges() SQL func
16960 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65  tion is a wrappe
16970 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
16980 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
16990 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f  .  C/C++ functio
169a0 6e 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c 6c  n and hence foll
169b0 6f 77 73 20 74 68 65 20 73 61 6d 65 20 72 75 6c  ows the same rul
169c0 65 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20  es for counting 
169d0 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63  changes..}..func
169e0 64 65 66 20 7b 63 68 61 72 28 58 31 2c 58 32 2c  def {char(X1,X2,
169f0 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20 20  ...,XN)} {} {.  
16a00 5e 28 54 68 65 20 63 68 61 72 28 58 31 2c 58 32  ^(The char(X1,X2
16a10 2c 2e 2e 2e 2c 58 4e 29 20 66 75 6e 63 74 69 6f  ,...,XN) functio
16a20 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
16a30 6e 67 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 63  ng composed of c
16a40 68 61 72 61 63 74 65 72 73 20 68 61 76 69 6e 67  haracters having
16a50 20 74 68 65 0a 20 20 20 75 6e 69 63 6f 64 65 20   the.   unicode 
16a60 63 6f 64 65 20 70 6f 69 6e 74 20 76 61 6c 75 65  code point value
16a70 73 20 6f 66 20 69 6e 74 65 67 65 72 73 20 58 31  s of integers X1
16a80 20 74 68 72 6f 75 67 68 20 58 4e 2c 20 72 65 73   through XN, res
16a90 70 65 63 74 69 76 65 6c 79 2e 29 5e 0a 7d 0a 0a  pectively.)^.}..
16aa0 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73 63  funcdef {coalesc
16ab0 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b  e(X,Y,...)} {} {
16ac0 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65 73 63 65  .  ^The coalesce
16ad0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
16ae0 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 74  rns a copy of it
16af0 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c  s first non-NULL
16b00 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20   argument, or.  
16b10 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61 72 67 75  NULL if all argu
16b20 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20  ments are NULL. 
16b30 20 5e 43 6f 61 6c 65 73 63 65 28 29 20 6d 75 73   ^Coalesce() mus
16b40 74 20 68 61 76 65 20 61 74 20 6c 65 61 73 74 20  t have at least 
16b50 0a 20 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a  .  2 arguments..
16b60 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f 62  }..funcdef {glob
16b70 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
16b80 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e  he glob(X,Y) fun
16b90 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
16ba0 65 6e 74 20 74 6f 20 74 68 65 0a 20 20 65 78 70  ent to the.  exp
16bb0 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59 20 47 4c  ression "<b>Y GL
16bc0 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74  OB X</b>"..  Not
16bd0 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e 64  e that the X and
16be0 20 59 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65   Y arguments are
16bf0 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68 65   reversed in the
16c00 20 67 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f 6e   glob() function
16c10 0a 20 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  .  relative to t
16c20 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d 20  he infix [GLOB] 
16c30 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 49 66 20  operator..  ^If 
16c40 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65  the [sqlite3_cre
16c50 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20  ate_function()] 
16c60 69 6e 74 65 72 66 61 63 65 20 69 73 20 75 73 65  interface is use
16c70 64 20 74 6f 0a 20 20 6f 76 65 72 72 69 64 65 20  d to.  override 
16c80 74 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75  the glob(X,Y) fu
16c90 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 6e 20 61  nction with an a
16ca0 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65  lternative imple
16cb0 6d 65 6e 74 61 74 69 6f 6e 20 74 68 65 6e 0a 20  mentation then. 
16cc0 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f 70 65 72   the [GLOB] oper
16cd0 61 74 6f 72 20 77 69 6c 6c 20 69 6e 76 6f 6b 65  ator will invoke
16ce0 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76 65   the alternative
16cf0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
16d00 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 66 6e  .}..funcdef {ifn
16d10 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  ull(X,Y)} {} {. 
16d20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66   ^The ifnull() f
16d30 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
16d40 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69  a copy of its fi
16d50 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67  rst non-NULL arg
16d60 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c  ument, or.  NULL
16d70 20 69 66 20 62 6f 74 68 20 61 72 67 75 6d 65 6e   if both argumen
16d80 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 49  ts are NULL.  ^I
16d90 66 6e 75 6c 6c 28 29 20 6d 75 73 74 20 68 61 76  fnull() must hav
16da0 65 20 65 78 61 63 74 6c 79 20 32 20 61 72 67 75  e exactly 2 argu
16db0 6d 65 6e 74 73 2e 0a 20 20 5e 54 68 65 20 69 66  ments..  ^The if
16dc0 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20  null() function 
16dd0 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  is equivalent to
16de0 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d 20 77 69   [coalesce()] wi
16df0 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  th two arguments
16e00 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 6e  ..}..funcdef {in
16e10 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  str(X,Y)} {} {. 
16e20 20 5e 54 68 65 20 69 6e 73 74 72 28 58 2c 59 29   ^The instr(X,Y)
16e30 20 66 75 6e 63 74 69 6f 6e 20 66 69 6e 64 73 20   function finds 
16e40 74 68 65 20 66 69 72 73 74 20 6f 63 63 75 72 72  the first occurr
16e50 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59  ence of string Y
16e60 20 77 69 74 68 69 6e 20 0a 20 20 73 74 72 69 6e   within .  strin
16e70 67 20 58 20 61 6e 64 20 72 65 74 75 72 6e 73 20  g X and returns 
16e80 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 72  the number of pr
16e90 69 6f 72 20 63 68 61 72 61 63 74 65 72 73 20 70  ior characters p
16ea0 6c 75 73 20 31 2c 20 6f 72 20 30 20 69 66 0a 20  lus 1, or 0 if. 
16eb0 20 59 20 69 73 20 6e 6f 77 68 65 72 65 20 66 6f   Y is nowhere fo
16ec0 75 6e 64 20 77 69 74 68 69 6e 20 58 2e 0a 20 20  und within X..  
16ed0 5e 4f 72 2c 20 69 66 20 58 20 61 6e 64 20 59 20  ^Or, if X and Y 
16ee0 61 72 65 20 62 6f 74 68 20 42 4c 4f 42 73 2c 20  are both BLOBs, 
16ef0 74 68 65 6e 20 69 6e 73 74 72 28 58 2c 59 29 20  then instr(X,Y) 
16f00 72 65 74 75 72 6e 73 20 6f 6e 65 0a 20 20 6d 6f  returns one.  mo
16f10 72 65 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62  re than the numb
16f20 65 72 20 62 79 74 65 73 20 70 72 69 6f 72 20 74  er bytes prior t
16f30 6f 20 74 68 65 20 66 69 72 73 74 20 6f 63 63 75  o the first occu
16f40 72 72 65 6e 63 65 20 6f 66 20 59 2c 20 6f 72 20  rrence of Y, or 
16f50 30 20 69 66 0a 20 20 59 20 64 6f 65 73 20 6e 6f  0 if.  Y does no
16f60 74 20 6f 63 63 75 72 20 61 6e 79 77 68 65 72 65  t occur anywhere
16f70 20 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 49 66   within X..  ^If
16f80 20 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20   both arguments 
16f90 58 20 61 6e 64 20 59 20 74 6f 20 69 6e 73 74 72  X and Y to instr
16fa0 28 58 2c 59 29 20 61 72 65 20 6e 6f 6e 2d 4e 55  (X,Y) are non-NU
16fb0 4c 4c 20 61 6e 64 20 61 72 65 20 6e 6f 74 20 42  LL and are not B
16fc0 4c 4f 42 73 0a 20 20 74 68 65 6e 20 62 6f 74 68  LOBs.  then both
16fd0 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
16fe0 20 61 73 20 73 74 72 69 6e 67 73 2e 0a 20 20 5e   as strings..  ^
16ff0 49 66 20 65 69 74 68 65 72 20 58 20 6f 72 20 59  If either X or Y
17000 20 61 72 65 20 4e 55 4c 4c 20 69 6e 20 69 6e 73   are NULL in ins
17010 74 72 28 58 2c 59 29 20 74 68 65 6e 20 74 68 65  tr(X,Y) then the
17020 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
17030 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65 78  .}..funcdef {hex
17040 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
17050 20 68 65 78 28 29 20 66 75 6e 63 74 69 6f 6e 20   hex() function 
17060 69 6e 74 65 72 70 72 65 74 73 20 69 74 73 20 61  interprets its a
17070 72 67 75 6d 65 6e 74 20 61 73 20 61 20 42 4c 4f  rgument as a BLO
17080 42 20 61 6e 64 20 72 65 74 75 72 6e 73 0a 20 20  B and returns.  
17090 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69  a string which i
170a0 73 20 74 68 65 20 75 70 70 65 72 2d 63 61 73 65  s the upper-case
170b0 20 68 65 78 61 64 65 63 69 6d 61 6c 20 72 65 6e   hexadecimal ren
170c0 64 65 72 69 6e 67 20 6f 66 20 74 68 65 20 63 6f  dering of the co
170d0 6e 74 65 6e 74 20 6f 66 0a 20 20 74 68 61 74 20  ntent of.  that 
170e0 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  blob..}..funcdef
170f0 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f   {last_insert_ro
17100 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  wid()} {} {.  ^T
17110 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  he last_insert_r
17120 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  owid() function 
17130 72 65 74 75 72 6e 73 20 74 68 65 20 5b 52 4f 57  returns the [ROW
17140 49 44 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61 73  ID].  of the las
17150 74 20 72 6f 77 20 69 6e 73 65 72 74 20 66 72 6f  t row insert fro
17160 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  m the database c
17170 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69 63 68 20  onnection which 
17180 69 6e 76 6f 6b 65 64 20 74 68 65 0a 20 20 66 75  invoked the.  fu
17190 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c  nction..  ^The l
171a0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
171b0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  () SQL function 
171c0 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f  is a wrapper aro
171d0 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74  und the.  [sqlit
171e0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
171f0 6f 77 69 64 28 29 5d 20 43 2f 43 2b 2b 20 69 6e  owid()] C/C++ in
17200 74 65 72 66 61 63 65 20 66 75 6e 63 74 69 6f 6e  terface function
17210 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 65  ..}..funcdef {le
17220 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  ngth(X)} {} {.  
17230 5e 46 6f 72 20 61 20 73 74 72 69 6e 67 20 76 61  ^For a string va
17240 6c 75 65 20 58 2c 20 74 68 65 20 6c 65 6e 67 74  lue X, the lengt
17250 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  h(X) function re
17260 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
17270 20 6f 66 20 0a 20 20 63 68 61 72 61 63 74 65 72   of .  character
17280 73 20 28 6e 6f 74 20 62 79 74 65 73 29 20 69 6e  s (not bytes) in
17290 20 58 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20   X prior to the 
172a0 66 69 72 73 74 20 4e 55 4c 20 63 68 61 72 61 63  first NUL charac
172b0 74 65 72 2e 0a 20 20 53 69 6e 63 65 20 53 51 4c  ter..  Since SQL
172c0 69 74 65 20 73 74 72 69 6e 67 73 20 64 6f 20 6e  ite strings do n
172d0 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74  ot normally cont
172e0 61 69 6e 20 4e 55 4c 20 63 68 61 72 61 63 74 65  ain NUL characte
172f0 72 73 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58  rs, the length(X
17300 29 0a 20 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c  ).  function wil
17310 6c 20 75 73 75 61 6c 6c 79 20 72 65 74 75 72 6e  l usually return
17320 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
17330 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
17340 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e  in the string X.
17350 0a 20 20 5e 46 6f 72 20 61 20 62 6c 6f 62 20 76  .  ^For a blob v
17360 61 6c 75 65 20 58 2c 20 6c 65 6e 67 74 68 28 58  alue X, length(X
17370 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  ) returns the nu
17380 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
17390 20 74 68 65 20 62 6c 6f 62 2e 0a 20 20 5e 49 66   the blob..  ^If
173a0 20 58 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20   X is NULL then 
173b0 6c 65 6e 67 74 68 28 58 29 20 69 73 20 4e 55 4c  length(X) is NUL
173c0 4c 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 6e 75  L..  ^If X is nu
173d0 6d 65 72 69 63 20 74 68 65 6e 20 6c 65 6e 67 74  meric then lengt
173e0 68 28 58 29 20 72 65 74 75 72 6e 73 20 74 68 65  h(X) returns the
173f0 20 6c 65 6e 67 74 68 20 6f 66 20 61 20 73 74 72   length of a str
17400 69 6e 67 0a 20 20 72 65 70 72 65 73 65 6e 74 61  ing.  representa
17410 74 69 6f 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75  tion of X..}..fu
17420 6e 63 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59 29  ncdef {like(X,Y)
17430 20 6c 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d   like(X,Y,Z)} {}
17440 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 28 29   {.  ^The like()
17450 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
17460 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
17470 68 65 0a 20 20 22 3c 62 3e 59 20 4c 49 4b 45 20  he.  "<b>Y LIKE 
17480 58 20 26 23 39 31 3b 45 53 43 41 50 45 20 5a 26  X &#91;ESCAPE Z&
17490 23 39 33 3b 3c 2f 62 3e 22 20 65 78 70 72 65 73  #93;</b>" expres
174a0 73 69 6f 6e 2e 20 0a 20 20 5e 49 66 20 74 68 65  sion. .  ^If the
174b0 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45   optional ESCAPE
174c0 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65   clause is prese
174d0 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 6c  nt, then the.  l
174e0 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  ike() function i
174f0 73 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74  s invoked with t
17500 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73 2e 20  hree arguments. 
17510 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20   ^Otherwise, it 
17520 69 73 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69 74  is.  invoked wit
17530 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20  h two arguments 
17540 6f 6e 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74 20  only. Note that 
17550 74 68 65 20 58 20 61 6e 64 20 59 20 70 61 72 61  the X and Y para
17560 6d 65 74 65 72 73 20 61 72 65 0a 20 20 72 65 76  meters are.  rev
17570 65 72 73 65 64 20 69 6e 20 74 68 65 20 6c 69 6b  ersed in the lik
17580 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c  e() function rel
17590 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66  ative to the inf
175a0 69 78 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74  ix [LIKE] operat
175b0 6f 72 2e 0a 20 20 5e 54 68 65 20 5b 73 71 6c 69  or..  ^The [sqli
175c0 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
175d0 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ion()] interface
175e0 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
175f0 6f 76 65 72 72 69 64 65 20 74 68 65 0a 20 20 6c  override the.  l
17600 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61  ike() function a
17610 6e 64 20 74 68 65 72 65 62 79 20 63 68 61 6e 67  nd thereby chang
17620 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  e the operation 
17630 6f 66 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20  of the.  [LIKE] 
17640 6f 70 65 72 61 74 6f 72 2e 20 20 57 68 65 6e 20  operator.  When 
17650 6f 76 65 72 72 69 64 69 6e 67 20 74 68 65 20 6c  overriding the l
17660 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  ike() function, 
17670 69 74 20 6d 61 79 20 62 65 20 69 6d 70 6f 72 74  it may be import
17680 61 6e 74 0a 20 20 74 6f 20 6f 76 65 72 72 69 64  ant.  to overrid
17690 65 20 62 6f 74 68 20 74 68 65 20 74 77 6f 20 61  e both the two a
176a0 6e 64 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e  nd three argumen
176b0 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68  t versions of th
176c0 65 20 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e 63  e like() .  func
176d0 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c  tion. Otherwise,
176e0 20 64 69 66 66 65 72 65 6e 74 20 63 6f 64 65 20   different code 
176f0 6d 61 79 20 62 65 20 63 61 6c 6c 65 64 20 74 6f  may be called to
17700 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20   implement the. 
17710 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72   [LIKE] operator
17720 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
17730 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
17740 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 77 61  ESCAPE clause wa
17750 73 20 0a 20 20 73 70 65 63 69 66 69 65 64 2e 0a  s .  specified..
17760 7d 0a 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b  }...funcdef {lik
17770 65 6c 69 68 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d  elihood(X,Y)} {}
17780 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69   {.  ^The likeli
17790 68 6f 6f 64 28 58 2c 59 29 20 66 75 6e 63 74 69  hood(X,Y) functi
177a0 6f 6e 20 72 65 74 75 72 6e 73 20 61 72 67 75 6d  on returns argum
177b0 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e  ent X unchanged.
177c0 0a 20 20 5e 28 54 68 65 20 76 61 6c 75 65 20 59  .  ^(The value Y
177d0 20 69 6e 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58   in likelihood(X
177e0 2c 59 29 20 6d 75 73 74 20 62 65 20 61 20 66 6c  ,Y) must be a fl
177f0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 63 6f 6e  oating point con
17800 73 74 61 6e 74 0a 20 20 62 65 74 77 65 65 6e 20  stant.  between 
17810 30 2e 30 20 61 6e 64 20 31 2e 30 2c 20 69 6e 63  0.0 and 1.0, inc
17820 6c 75 73 69 76 65 2e 29 5e 0a 20 20 5e 54 68 65  lusive.)^.  ^The
17830 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 29 20 66   likelihood(X) f
17840 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  unction is a no-
17850 6f 70 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  op that the code
17860 20 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74   generator.  opt
17870 69 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74  imizes away so t
17880 68 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20  hat it consumes 
17890 6e 6f 20 43 50 55 20 63 79 63 6c 65 73 20 64 75  no CPU cycles du
178a0 72 69 6e 67 20 72 75 6e 2d 74 69 6d 65 0a 20 20  ring run-time.  
178b0 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67  (that is, during
178c0 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74   calls to [sqlit
178d0 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e  e3_step()])..  ^
178e0 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74  The purpose of t
178f0 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c  he likelihood(X,
17900 59 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74  Y) function is t
17910 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74  o provide a hint
17920 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20  .  to the query 
17930 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65  planner that the
17940 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61   argument X is a
17950 20 62 6f 6f 6c 65 61 6e 20 74 68 61 74 20 69 73   boolean that is
17960 0a 20 20 74 72 75 65 20 77 69 74 68 20 61 20 70  .  true with a p
17970 72 6f 62 61 62 69 6c 69 74 79 20 6f 66 20 61 70  robability of ap
17980 70 72 6f 78 69 6d 61 74 65 6c 79 20 59 2e 0a 20  proximately Y.. 
17990 20 5e 28 54 68 65 20 5b 75 6e 6c 69 6b 65 6c 79   ^(The [unlikely
179a0 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73  (X)] function is
179b0 20 73 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20   short-hand for 
179c0 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 30  likelihood(X,0.0
179d0 36 32 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64  625).)^.}..funcd
179e0 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ef {load_extensi
179f0 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e  on(X) load_exten
17a00 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  sion(X,Y)} {} {.
17a10 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65    ^The load_exte
17a20 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74  nsion(X,Y) funct
17a30 69 6f 6e 20 6c 6f 61 64 73 20 5b 53 51 4c 69 74  ion loads [SQLit
17a40 65 20 65 78 74 65 6e 73 69 6f 6e 73 5d 20 6f 75  e extensions] ou
17a50 74 20 6f 66 20 74 68 65 20 73 68 61 72 65 64 0a  t of the shared.
17a60 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e    library file n
17a70 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74 68 65  amed X using the
17a80 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e 20   entry point Y. 
17a90 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
17aa0 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
17ab0 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61 20 4e  .  is always a N
17ac0 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73 20 6f  ULL.  ^If Y is o
17ad0 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68 65 20  mitted then the 
17ae0 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20 70 6f  default entry po
17af0 69 6e 74 20 6e 61 6d 65 20 69 73 20 75 73 65 64  int name is used
17b00 2e 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78  ..  ^The load_ex
17b10 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69  tension() functi
17b20 6f 6e 20 72 61 69 73 65 73 20 61 6e 20 65 78 63  on raises an exc
17b30 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78  eption if the ex
17b40 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f  tension fails to
17b50 0a 20 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69  .  load or initi
17b60 61 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e  alize correctly.
17b70 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64  ..  <p>^The load
17b80 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e  _extension() fun
17b90 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20  ction will fail 
17ba0 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  if the extension
17bb0 20 61 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20   attempts to .  
17bc0 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65  modify or delete
17bd0 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
17be0 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
17bf0 71 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20  quence.  ^The.  
17c00 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64  extension can ad
17c10 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20  d new functions 
17c20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
17c30 75 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e  uences, but cann
17c40 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64  ot.  modify or d
17c50 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 66  elete existing f
17c60 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
17c70 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
17c80 62 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20  because.  those 
17c90 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72  functions and/or
17ca0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
17cb0 6e 63 65 73 20 6d 69 67 68 74 20 62 65 20 75 73  nces might be us
17cc0 65 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69  ed elsewhere.  i
17cd0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  n the currently 
17ce0 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74  running SQL stat
17cf0 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20  ement.  To load 
17d00 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61  an extension tha
17d10 74 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64  t.  changes or d
17d20 65 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73  eletes functions
17d30 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
17d40 71 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65  quences, use the
17d50 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64  .  [sqlite3_load
17d60 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d  _extension()] C-
17d70 6c 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70  language API.</p
17d80 3e 0a 0a 20 20 3c 70 3e 46 6f 72 20 73 65 63 75  >..  <p>For secu
17d90 72 69 74 79 20 72 65 61 73 6f 6e 73 2c 20 65 78  rity reasons, ex
17da0 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 65 64 20 69  tension loaded i
17db0 73 20 74 75 72 6e 65 64 20 6f 66 66 20 62 79 20  s turned off by 
17dc0 64 65 66 61 75 6c 74 20 61 6e 64 20 6d 75 73 74  default and must
17dd0 0a 20 20 62 65 20 65 6e 61 62 6c 65 64 20 62 79  .  be enabled by
17de0 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f   a prior call to
17df0 20 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65   [sqlite3_enable
17e00 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
17e10 29 5d 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64  )].</p>.}..funcd
17e20 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d  ef {lower(X)} {}
17e30 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 77 65 72 28   {.  ^The lower(
17e40 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
17e50 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 73 74  rns a copy of st
17e60 72 69 6e 67 20 58 20 77 69 74 68 20 61 6c 6c 20  ring X with all 
17e70 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
17e80 0a 20 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  .  converted to 
17e90 6c 6f 77 65 72 20 63 61 73 65 2e 20 20 5e 54 68  lower case.  ^Th
17ea0 65 20 64 65 66 61 75 6c 74 20 62 75 69 6c 74 2d  e default built-
17eb0 69 6e 20 6c 6f 77 65 72 28 29 20 66 75 6e 63 74  in lower() funct
17ec0 69 6f 6e 20 77 6f 72 6b 73 0a 20 20 66 6f 72 20  ion works.  for 
17ed0 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
17ee0 20 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f 20 63 61   only.  To do ca
17ef0 73 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f  se conversions o
17f00 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a 20 20 63 68  n non-ASCII.  ch
17f10 61 72 61 63 74 65 72 73 2c 20 6c 6f 61 64 20 74  aracters, load t
17f20 68 65 20 49 43 55 20 65 78 74 65 6e 73 69 6f 6e  he ICU extension
17f30 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 74  ..}..funcdef {lt
17f40 72 69 6d 28 58 29 20 6c 74 72 69 6d 28 58 2c 59  rim(X) ltrim(X,Y
17f50 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
17f60 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69  trim(X,Y) functi
17f70 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
17f80 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65  ing formed by re
17f90 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61  moving any and a
17fa0 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73 20  ll.  characters 
17fb0 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 59  that appear in Y
17fc0 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73   from the left s
17fd0 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20  ide of X..  ^If 
17fe0 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69  the Y argument i
17ff0 73 20 6f 6d 69 74 74 65 64 2c 20 6c 74 72 69 6d  s omitted, ltrim
18000 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63  (X) removes spac
18010 65 73 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74  es from the left
18020 20 73 69 64 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a   side.  of X..}.
18030 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c  .funcdef {max(X,
18040 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72  Y,...)} {*maxCor
18050 65 46 75 6e 63 20 2a 6d 61 78 20 7b 6d 61 78 28  eFunc *max {max(
18060 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d  ) SQL function}}
18070 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d   {.  ^The multi-
18080 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66  argument max() f
18090 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
180a0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74  the argument wit
180b0 68 20 74 68 65 20 0a 20 20 6d 61 78 69 6d 75 6d  h the .  maximum
180c0 20 76 61 6c 75 65 2c 20 6f 72 20 72 65 74 75 72   value, or retur
180d0 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79 20 61 72  n NULL if any ar
180e0 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 20  gument is NULL. 
180f0 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
18100 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e  gument max() fun
18110 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69  ction searches i
18120 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  ts arguments fro
18130 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a  m left to right.
18140 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e    for an argumen
18150 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61  t that defines a
18160 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
18170 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61  ion and uses tha
18180 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75  t collating.  fu
18190 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73  nction for all s
181a0 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e  tring comparison
181b0 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20  s.  ^If none of 
181c0 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  the arguments to
181d0 20 6d 61 78 28 29 0a 20 20 64 65 66 69 6e 65 20   max().  define 
181e0 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
181f0 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42  tion, then the B
18200 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
18210 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
18220 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62  ..  Note that <b
18230 3e 6d 61 78 28 29 3c 2f 62 3e 20 69 73 20 61 20  >max()</b> is a 
18240 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
18250 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20  when.  it has 2 
18260 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
18270 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61  s but operates a
18280 73 20 61 6e 0a 20 20 5b 6d 69 6e 41 67 67 46 75  s an.  [minAggFu
18290 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66  nc | aggregate f
182a0 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65  unction] if give
182b0 6e 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20  n only a single 
182c0 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e  argument..}..fun
182d0 63 64 65 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e  cdef {min(X,Y,..
182e0 2e 29 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e  .)} {*minCoreFun
182f0 63 20 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51  c *min {min() SQ
18300 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  L function}} {. 
18310 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75   ^The multi-argu
18320 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74  ment min() funct
18330 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
18340 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68  argument with th
18350 65 0a 20 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75  e.  minimum valu
18360 65 2e 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d  e..  ^The multi-
18370 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66  argument min() f
18380 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73  unction searches
18390 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66   its arguments f
183a0 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
183b0 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d  t.  for an argum
183c0 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73  ent that defines
183d0 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
183e0 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74  ction and uses t
183f0 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20  hat collating.  
18400 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c  function for all
18410 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73   string comparis
18420 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f  ons.  ^If none o
18430 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
18440 74 6f 20 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e  to min().  defin
18450 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  e a collating fu
18460 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nction, then the
18470 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e   BINARY collatin
18480 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  g function is us
18490 65 64 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20  ed..  Note that 
184a0 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20  <b>min()</b> is 
184b0 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a simple functio
184c0 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20  n when.  it has 
184d0 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65  2 or more argume
184e0 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74 65 73  nts but operates
184f0 20 61 73 20 61 6e 20 0a 20 20 5b 6d 61 78 41 67   as an .  [maxAg
18500 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74  gFunc | aggregat
18510 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67  e function] if g
18520 69 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69  iven.  only a si
18530 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 0a 7d  ngle argument..}
18540 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69  ..funcdef {nulli
18550 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  f(X,Y)} {} {.  ^
18560 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20  The nullif(X,Y) 
18570 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
18580 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d   its first argum
18590 65 6e 74 20 69 66 20 74 68 65 20 61 72 67 75 6d  ent if the argum
185a0 65 6e 74 73 20 61 72 65 0a 20 20 64 69 66 66 65  ents are.  diffe
185b0 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69 66  rent and NULL if
185c0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61   the arguments a
185d0 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 5e 54  re the same.  ^T
185e0 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66  he nullif(X,Y) f
185f0 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72 63 68  unction.  search
18600 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73  es its arguments
18610 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
18620 67 68 74 20 66 6f 72 20 61 6e 20 61 72 67 75 6d  ght for an argum
18630 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73  ent that defines
18640 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 66   a.  collating f
18650 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73  unction and uses
18660 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 20   that collating 
18670 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c  function for all
18680 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61 72   string.  compar
18690 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69 74  isons.  ^If neit
186a0 68 65 72 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  her argument to 
186b0 6e 75 6c 6c 69 66 28 29 20 64 65 66 69 6e 65 73  nullif() defines
186c0 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
186d0 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68 65  ction.  then the
186e0 20 42 49 4e 41 52 59 20 69 73 20 75 73 65 64 2e   BINARY is used.
186f0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 70 72 69  .}..funcdef {pri
18700 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 7d  ntf(FORMAT,...)}
18710 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20 70 72   {} {.  ^(The pr
18720 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29  intf(FORMAT,...)
18730 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 6f   SQL function wo
18740 72 6b 73 20 6c 69 6b 65 20 74 68 65 20 5b 73 71  rks like the [sq
18750 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 5d  lite3_mprintf()]
18760 20 43 2d 6c 61 6e 67 75 61 67 65 0a 20 20 66 75   C-language.  fu
18770 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 20 70  nction and the p
18780 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
18790 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61   from the standa
187a0 72 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a  rd C library.)^.
187b0 20 20 54 68 65 20 66 69 72 73 74 20 61 72 67 75    The first argu
187c0 6d 65 6e 74 20 69 73 20 61 20 66 6f 72 6d 61 74  ment is a format
187d0 20 73 74 72 69 6e 67 20 74 68 61 74 20 73 70 65   string that spe
187e0 63 69 66 69 65 73 20 68 6f 77 20 74 6f 20 63 6f  cifies how to co
187f0 6e 73 74 72 75 63 74 20 74 68 65 20 6f 75 74 70  nstruct the outp
18800 75 74 0a 20 20 73 74 72 69 6e 67 20 75 73 69 6e  ut.  string usin
18810 67 20 76 61 6c 75 65 73 20 74 61 6b 65 6e 20 66  g values taken f
18820 72 6f 6d 20 73 75 62 73 65 71 75 65 6e 74 20 61  rom subsequent a
18830 72 67 75 6d 65 6e 74 73 2e 20 20 5e 49 66 20 74  rguments.  ^If t
18840 68 65 20 46 4f 52 4d 41 54 20 61 72 67 75 6d 65  he FORMAT argume
18850 6e 74 20 69 73 0a 20 20 6d 69 73 73 69 6e 67 20  nt is.  missing 
18860 6f 72 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  or NULL then the
18870 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
18880 20 20 5e 54 68 65 20 25 6e 20 66 6f 72 6d 61 74    ^The %n format
18890 20 69 73 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e   is silently ign
188a0 6f 72 65 64 20 61 6e 64 0a 20 20 64 6f 65 73 20  ored and.  does 
188b0 6e 6f 74 20 63 6f 6e 73 75 6d 65 20 61 6e 20 61  not consume an a
188c0 72 67 75 6d 65 6e 74 2e 20 20 5e 54 68 65 20 25  rgument.  ^The %
188d0 70 20 66 6f 72 6d 61 74 20 69 73 20 61 6e 20 61  p format is an a
188e0 6c 69 61 73 20 66 6f 72 20 25 58 2e 20 20 5e 54  lias for %X.  ^T
188f0 68 65 20 25 7a 20 66 6f 72 6d 61 74 0a 20 20 69  he %z format.  i
18900 73 20 69 6e 74 65 72 63 68 61 6e 67 61 62 6c 65  s interchangable
18910 20 77 69 74 68 20 25 73 2e 20 20 5e 28 49 66 20   with %s.  ^(If 
18920 74 68 65 72 65 20 61 72 65 20 74 6f 6f 20 66 65  there are too fe
18930 77 20 61 72 67 75 6d 65 6e 74 73 20 69 6e 20 74  w arguments in t
18940 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 73 74  he argument list
18950 2c 0a 20 20 6d 69 73 73 69 6e 67 20 61 72 67 75  ,.  missing argu
18960 6d 65 6e 74 73 20 61 72 65 20 61 73 73 75 6d 65  ments are assume
18970 64 20 74 6f 20 68 61 76 65 20 61 20 4e 55 4c 4c  d to have a NULL
18980 20 76 61 6c 75 65 2c 20 77 68 69 63 68 20 69 73   value, which is
18990 20 74 72 61 6e 73 6c 61 74 65 64 20 69 6e 74 6f   translated into
189a0 0a 20 20 30 20 6f 72 20 30 2e 30 20 66 6f 72 20  .  0 or 0.0 for 
189b0 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61 74 73 20  numeric formats 
189c0 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  or an empty stri
189d0 6e 67 20 66 6f 72 20 25 73 2e 29 5e 0a 7d 0a 20  ng for %s.)^.}. 
189e0 20 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75 6f 74   ..funcdef {quot
189f0 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  e(X)} {} {.  ^Th
18a00 65 20 71 75 6f 74 65 28 58 29 20 66 75 6e 63 74  e quote(X) funct
18a10 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
18a20 74 65 78 74 20 6f 66 20 61 6e 20 53 51 4c 20 6c  text of an SQL l
18a30 69 74 65 72 61 6c 20 77 68 69 63 68 0a 20 20 69  iteral which.  i
18a40 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 69  s the value of i
18a50 74 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74  ts argument suit
18a60 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69  able for inclusi
18a70 6f 6e 20 69 6e 74 6f 20 61 6e 20 53 51 4c 20 73  on into an SQL s
18a80 74 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72  tatement..  ^Str
18a90 69 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75 6e  ings are surroun
18aa0 64 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71 75  ded by single-qu
18ab0 6f 74 65 73 20 77 69 74 68 20 65 73 63 61 70 65  otes with escape
18ac0 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71 75  s on interior qu
18ad0 6f 74 65 73 0a 20 20 61 73 20 6e 65 65 64 65 64  otes.  as needed
18ae0 2e 20 20 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e  .  ^BLOBs are en
18af0 63 6f 64 65 64 20 61 73 20 68 65 78 61 64 65 63  coded as hexadec
18b00 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20  imal literals.. 
18b10 20 5e 53 74 72 69 6e 67 73 20 77 69 74 68 20 65   ^Strings with e
18b20 6d 62 65 64 64 65 64 20 4e 55 4c 20 63 68 61 72  mbedded NUL char
18b30 61 63 74 65 72 73 20 63 61 6e 6e 6f 74 20 62 65  acters cannot be
18b40 20 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20   represented as 
18b50 73 74 72 69 6e 67 0a 20 20 6c 69 74 65 72 61 6c  string.  literal
18b60 73 20 69 6e 20 53 51 4c 20 61 6e 64 20 68 65 6e  s in SQL and hen
18b70 63 65 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  ce the returned 
18b80 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69  string literal i
18b90 73 20 74 72 75 6e 63 61 74 65 64 20 70 72 69 6f  s truncated prio
18ba0 72 0a 20 20 74 6f 20 74 68 65 20 66 69 72 73 74  r.  to the first
18bb0 20 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66   NUL..}..funcdef
18bc0 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b   {random()} {} {
18bd0 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29  .  ^The random()
18be0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
18bf0 73 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f  s a pseudo-rando
18c00 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65 74 77  m integer.  betw
18c10 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38  een -92233720368
18c20 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b 39 32  54775808 and +92
18c30 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
18c40 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  7..}..funcdef {r
18c50 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d  andomblob(N)} {}
18c60 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d   {.  ^The random
18c70 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e  blob(N) function
18c80 20 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74   return an N-byt
18c90 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e  e blob containin
18ca0 67 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a  g pseudo-random.
18cb0 20 20 62 79 74 65 73 2e 20 5e 49 66 20 4e 20 69    bytes. ^If N i
18cc0 73 20 6c 65 73 73 20 74 68 61 6e 20 31 20 74 68  s less than 1 th
18cd0 65 6e 20 61 20 31 2d 62 79 74 65 20 72 61 6e 64  en a 1-byte rand
18ce0 6f 6d 20 62 6c 6f 62 20 69 73 20 72 65 74 75 72  om blob is retur
18cf0 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a  ned...  <p>Hint:
18d00 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 63    applications c
18d10 61 6e 20 67 65 6e 65 72 61 74 65 20 67 6c 6f 62  an generate glob
18d20 61 6c 6c 79 20 75 6e 69 71 75 65 20 69 64 65 6e  ally unique iden
18d30 74 69 66 69 65 72 73 0a 20 20 75 73 69 6e 67 20  tifiers.  using 
18d40 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f  this function to
18d50 67 65 74 68 65 72 20 77 69 74 68 20 5b 68 65 78  gether with [hex
18d60 28 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f  ()] and/or.  [lo
18d70 77 65 72 28 29 5d 20 6c 69 6b 65 20 74 68 69 73  wer()] like this
18d80 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71  :</p>..  <blockq
18d90 75 6f 74 65 3e 0a 20 20 68 65 78 28 72 61 6e 64  uote>.  hex(rand
18da0 6f 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c  omblob(16))<br><
18db0 2f 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78  /br>.  lower(hex
18dc0 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29  (randomblob(16))
18dd0 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ).  </blockquote
18de0 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65  >.}..funcdef {re
18df0 70 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d  place(X,Y,Z)} {}
18e00 20 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c 61 63   {.  ^The replac
18e10 65 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f  e(X,Y,Z) functio
18e20 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
18e30 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75 62  ng formed by sub
18e40 73 74 69 74 75 74 69 6e 67 0a 20 20 73 74 72 69  stituting.  stri
18e50 6e 67 20 5a 20 66 6f 72 20 65 76 65 72 79 20 6f  ng Z for every o
18e60 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72  ccurrence of str
18e70 69 6e 67 20 59 20 69 6e 20 73 74 72 69 6e 67 20  ing Y in string 
18e80 58 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41 52 59  X.  ^The [BINARY
18e90 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ].  collating se
18ea0 71 75 65 6e 63 65 20 69 73 20 75 73 65 64 20 66  quence is used f
18eb0 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  or comparisons. 
18ec0 20 5e 49 66 20 59 20 69 73 20 61 6e 20 65 6d 70   ^If Y is an emp
18ed0 74 79 0a 20 20 73 74 72 69 6e 67 20 74 68 65 6e  ty.  string then
18ee0 20 72 65 74 75 72 6e 20 58 20 75 6e 63 68 61 6e   return X unchan
18ef0 67 65 64 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e  ged.  ^If Z is n
18f00 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61  ot initially.  a
18f10 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 63   string, it is c
18f20 61 73 74 20 74 6f 20 61 20 55 54 46 2d 38 20 73  ast to a UTF-8 s
18f30 74 72 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 70  tring prior to p
18f40 72 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75  rocessing..}..fu
18f50 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28 58 29 20  ncdef {round(X) 
18f60 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b  round(X,Y)} {} {
18f70 0a 20 20 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c  .  ^The round(X,
18f80 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
18f90 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70  rns a floating-p
18fa0 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58 20 72  oint.  value X r
18fb0 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69 67 69  ounded to Y digi
18fc0 74 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  ts to the right 
18fd0 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70  of the decimal p
18fe0 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65 20  oint..  ^If the 
18ff0 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  Y argument is om
19000 69 74 74 65 64 2c 20 69 74 20 69 73 20 61 73 73  itted, it is ass
19010 75 6d 65 64 20 74 6f 20 62 65 20 30 2e 0a 7d 0a  umed to be 0..}.
19020 0a 66 75 6e 63 64 65 66 20 7b 72 74 72 69 6d 28  .funcdef {rtrim(
19030 58 29 20 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b  X) rtrim(X,Y)} {
19040 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74 72 69 6d  } {.  ^The rtrim
19050 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
19060 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
19070 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69  formed by removi
19080 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20  ng any and all. 
19090 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
190a0 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f   appear in Y fro
190b0 6d 20 74 68 65 20 72 69 67 68 74 20 73 69 64 65  m the right side
190c0 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65   of X..  ^If the
190d0 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f   Y argument is o
190e0 6d 69 74 74 65 64 2c 20 72 74 72 69 6d 28 58 29  mitted, rtrim(X)
190f0 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20   removes spaces 
19100 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 0a 20  from the right. 
19110 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66   side of X..}..f
19120 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65 78 28  uncdef {soundex(
19130 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
19140 73 6f 75 6e 64 65 78 28 58 29 20 66 75 6e 63 74  soundex(X) funct
19150 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
19160 72 69 6e 67 20 74 68 61 74 20 69 73 20 74 68 65  ring that is the
19170 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e   soundex encodin
19180 67 20 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69  g .  of the stri
19190 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20 73 74 72  ng X..  ^The str
191a0 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20 72 65  ing "?000" is re
191b0 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 61 72  turned if the ar
191c0 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f  gument is NULL o
191d0 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20  r contains.  no 
191e0 41 53 43 49 49 20 61 6c 70 68 61 62 65 74 69 63  ASCII alphabetic
191f0 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20 5e   characters..  ^
19200 28 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69  (This function i
19210 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 53  s omitted from S
19220 51 4c 69 74 65 20 62 79 20 64 65 66 61 75 6c 74  QLite by default
19230 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 61  ..  It is only a
19240 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65 20  vailable if the 
19250 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d  [SQLITE_SOUNDEX]
19260 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
19270 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64 20 77  tion.  is used w
19280 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20 62 75  hen SQLite is bu
19290 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  ilt.)^.}..funcde
192a0 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  f {sqlite_compil
192b0 65 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20  eoption_get(N)} 
192c0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
192d0 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
192e0 5f 67 65 74 28 29 20 53 51 4c 20 66 75 6e 63 74  _get() SQL funct
192f0 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72  ion is a wrapper
19300 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73   around the.  [s
19310 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
19320 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b  tion_get()] C/C+
19330 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54  + function..  ^T
19340 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75  his routine retu
19350 72 6e 73 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d  rns the N-th com
19360 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
19370 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53   used to build S
19380 51 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20  QLite.  or NULL 
19390 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72  if N is out of r
193a0 61 6e 67 65 2e 20 20 53 65 65 20 61 6c 73 6f 20  ange.  See also 
193b0 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74  the [compile_opt
193c0 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a  ions pragma]..}.
193d0 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65  .funcdef {sqlite
193e0 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
193f0 73 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  sed(X)} {} {.  ^
19400 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69  The sqlite_compi
19410 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 20  leoption_used() 
19420 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
19430 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
19440 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
19450 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
19460 65 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63  ed()] C/C++ func
19470 74 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68  tion..  ^When th
19480 65 20 61 72 67 75 6d 65 6e 74 20 58 20 74 6f 20  e argument X to 
19490 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
194a0 74 69 6f 6e 5f 75 73 65 64 28 58 29 20 69 73 20  tion_used(X) is 
194b0 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 0a 20  a string which. 
194c0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
194d0 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  a compile-time o
194e0 70 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74  ption, this rout
194f0 69 6e 65 20 72 65 74 75 72 6e 73 20 74 72 75 65  ine returns true
19500 20 28 31 29 20 6f 72 0a 20 20 66 61 6c 73 65 20   (1) or.  false 
19510 28 30 29 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  (0) depending on
19520 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
19530 74 68 61 74 20 6f 70 74 69 6f 6e 20 77 61 73 20  that option was 
19540 75 73 65 64 20 64 75 72 69 6e 67 20 74 68 65 0a  used during the.
19550 20 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63    build..}..func
19560 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72  def {sqlite_sour
19570 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20  ce_id()} {} {.  
19580 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75 72  ^The sqlite_sour
19590 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  ce_id() function
195a0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
195b0 67 20 74 68 61 74 20 69 64 65 6e 74 69 66 69 65  g that identifie
195c0 73 20 74 68 65 0a 20 20 73 70 65 63 69 66 69 63  s the.  specific
195d0 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
195e0 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61 74  source code that
195f0 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75 69   was used to bui
19600 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20  ld the SQLite.  
19610 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20 73  library.  ^The s
19620 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62  tring returned b
19630 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  y sqlite_source_
19640 69 64 28 29 20 62 65 67 69 6e 73 20 77 69 74 68  id() begins with
19650 0a 20 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  .  the date and 
19660 74 69 6d 65 20 74 68 61 74 20 74 68 65 20 73 6f  time that the so
19670 75 72 63 65 20 63 6f 64 65 20 77 61 73 20 63 68  urce code was ch
19680 65 63 6b 65 64 20 69 6e 20 61 6e 64 20 69 73 20  ecked in and is 
19690 66 6f 6c 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20  follows by.  an 
196a0 53 48 41 31 20 68 61 73 68 20 74 68 61 74 20 75  SHA1 hash that u
196b0 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69  niquely identifi
196c0 65 73 20 74 68 65 20 73 6f 75 72 63 65 20 74 72  es the source tr
196d0 65 65 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74  ee.  ^This funct
196e0 69 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c 20  ion is.  an SQL 
196f0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
19700 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72  he [sqlite3_sour
19710 63 65 69 64 28 29 5d 20 43 20 69 6e 74 65 72 66  ceid()] C interf
19720 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ace..}..funcdef 
19730 7b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28  {sqlite_version(
19740 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
19750 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
19760 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19770 20 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72   the version str
19780 69 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ing for the SQLi
19790 74 65 0a 20 20 6c 69 62 72 61 72 79 20 74 68 61  te.  library tha
197a0 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e  t is running.  ^
197b0 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
197c0 20 61 6e 20 53 51 4c 0a 20 20 77 72 61 70 70 65   an SQL.  wrappe
197d0 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
197e0 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
197f0 28 29 5d 20 43 2d 69 6e 74 65 72 66 61 63 65 2e  ()] C-interface.
19800 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 62  .}..funcdef {sub
19810 73 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73 74  str(X,Y,Z) subst
19820 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  r(X,Y)} {} {.  ^
19830 54 68 65 20 73 75 62 73 74 72 28 58 2c 59 2c 5a  The substr(X,Y,Z
19840 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
19850 6e 73 20 61 20 73 75 62 73 74 72 69 6e 67 20 6f  ns a substring o
19860 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58  f input string X
19870 20 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20 77   that begins.  w
19880 69 74 68 20 74 68 65 20 59 2d 74 68 20 63 68 61  ith the Y-th cha
19890 72 61 63 74 65 72 20 61 6e 64 20 77 68 69 63 68  racter and which
198a0 20 69 73 20 5a 20 63 68 61 72 61 63 74 65 72 73   is Z characters
198b0 20 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69   long..  ^If Z i
198c0 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 73  s omitted then s
198d0 75 62 73 74 72 28 58 2c 59 29 20 72 65 74 75 72  ubstr(X,Y) retur
198e0 6e 73 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72  ns all character
198f0 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e  s through the en
19900 64 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e  d.  of the strin
19910 67 20 58 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  g X beginning wi
19920 74 68 20 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e  th the Y-th..  ^
19930 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68  The left-most ch
19940 61 72 61 63 74 65 72 20 6f 66 20 58 20 69 73 20  aracter of X is 
19950 6e 75 6d 62 65 72 20 31 2e 20 20 5e 49 66 20 59  number 1.  ^If Y
19960 20 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74   is negative.  t
19970 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 63 68  hen the first ch
19980 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73  aracter of the s
19990 75 62 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e  ubstring is foun
199a0 64 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72  d by counting fr
199b0 6f 6d 20 74 68 65 0a 20 20 72 69 67 68 74 20 72  om the.  right r
199c0 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c  ather than the l
199d0 65 66 74 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e  eft.  ^If Z is n
199e0 65 67 61 74 69 76 65 20 74 68 65 6e 0a 20 20 74  egative then.  t
199f0 68 65 20 61 62 73 28 5a 29 20 63 68 61 72 61 63  he abs(Z) charac
19a00 74 65 72 73 20 70 72 65 63 65 64 69 6e 67 20 74  ters preceding t
19a10 68 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65  he Y-th characte
19a20 72 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a  r are returned..
19a30 20 20 5e 49 66 20 58 20 69 73 20 61 20 73 74 72    ^If X is a str
19a40 69 6e 67 20 74 68 65 6e 20 63 68 61 72 61 63 74  ing then charact
19a50 65 72 73 20 69 6e 64 69 63 65 73 20 72 65 66 65  ers indices refe
19a60 72 20 74 6f 20 61 63 74 75 61 6c 20 55 54 46 2d  r to actual UTF-
19a70 38 20 0a 20 20 63 68 61 72 61 63 74 65 72 73 2e  8 .  characters.
19a80 20 20 5e 49 66 20 58 20 69 73 20 61 20 42 4c 4f    ^If X is a BLO
19a90 42 20 74 68 65 6e 20 74 68 65 20 69 6e 64 69 63  B then the indic
19aa0 65 73 20 72 65 66 65 72 20 74 6f 20 62 79 74 65  es refer to byte
19ab0 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74  s..}..funcdef {t
19ac0 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20  otal_changes()} 
19ad0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61  {} {.  ^The tota
19ae0 6c 5f 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63  l_changes() func
19af0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
19b00 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 20 63   number of row c
19b10 68 61 6e 67 65 73 0a 20 20 63 61 75 73 65 64 20  hanges.  caused 
19b20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  by INSERT, UPDAT
19b30 45 20 6f 72 20 44 45 4c 45 54 45 0a 20 20 73 74  E or DELETE.  st
19b40 61 74 65 6d 65 6e 74 73 20 73 69 6e 63 65 20 74  atements since t
19b50 68 65 20 63 75 72 72 65 6e 74 20 64 61 74 61 62  he current datab
19b60 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77  ase connection w
19b70 61 73 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68  as opened..  ^Th
19b80 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  is function is a
19b90 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
19ba0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74  the [sqlite3_tot
19bb0 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20  al_changes()].  
19bc0 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e  C/C++ interface.
19bd0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72 69  .}..funcdef {tri
19be0 6d 28 58 29 20 74 72 69 6d 28 58 2c 59 29 7d 20  m(X) trim(X,Y)} 
19bf0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d  {} {.  ^The trim
19c00 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
19c10 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
19c20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69  formed by removi
19c30 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20  ng any and all. 
19c40 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
19c50 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f   appear in Y fro
19c60 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58  m both ends of X
19c70 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72  ..  ^If the Y ar
19c80 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
19c90 64 2c 20 74 72 69 6d 28 58 29 20 72 65 6d 6f 76  d, trim(X) remov
19ca0 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 62  es spaces from b
19cb0 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d  oth ends of X..}
19cc0 0a 0a 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f  ..funcdef {typeo
19cd0 66 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  f(X)} {} {.  ^Th
19ce0 65 20 74 79 70 65 6f 66 28 58 29 20 66 75 6e 63  e typeof(X) func
19cf0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
19d00 74 72 69 6e 67 20 74 68 61 74 20 69 6e 64 69 63  tring that indic
19d10 61 74 65 73 20 74 68 65 20 5b 64 61 74 61 74 79  ates the [dataty
19d20 70 65 5d 20 6f 66 0a 20 20 74 68 65 20 65 78 70  pe] of.  the exp
19d30 72 65 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c  ression X: "null
19d40 22 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 22 72  ", "integer", "r
19d50 65 61 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f 72  eal", "text", or
19d60 20 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63   "blob"..}..func
19d70 64 65 66 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29  def {unlikely(X)
19d80 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e  } {} {.  ^The un
19d90 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69  likely(X) functi
19da0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
19db0 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e  rgument X unchan
19dc0 67 65 64 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69  ged..  ^The unli
19dd0 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e  kely(X) function
19de0 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74   is a no-op that
19df0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
19e00 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20  tor.  optimizes 
19e10 61 77 61 79 20 73 6f 20 74 68 61 74 20 69 74 20  away so that it 
19e20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55 20  consumes no CPU 
19e30 63 79 63 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d  cycles at.  run-
19e40 74 69 6d 65 20 28 74 68 61 74 20 69 73 2c 20 64  time (that is, d
19e50 75 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b  uring calls to [
19e60 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29  sqlite3_step()])
19e70 2e 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65  ..  ^The purpose
19e80 20 6f 66 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79   of the unlikely
19e90 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
19ea0 74 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e  to provide a hin
19eb0 74 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79  t.  to the query
19ec0 20 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68   planner that th
19ed0 65 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20  e argument X is 
19ee0 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a  a boolean value.
19ef0 20 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c    that is usuall
19f00 79 20 6e 6f 74 20 74 72 75 65 2e 20 5e 28 54 68  y not true. ^(Th
19f10 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75  e unlikely(X) fu
19f20 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61  nction is equiva
19f30 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c  lent.  to [likel
19f40 69 68 6f 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35  ihood](X, 0.0625
19f50 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ).)^.}..funcdef 
19f60 7b 75 6e 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20  {unicode(X)} {} 
19f70 7b 0a 20 20 5e 54 68 65 20 75 6e 69 63 6f 64 65  {.  ^The unicode
19f80 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
19f90 75 72 6e 73 20 74 68 65 20 6e 75 6d 65 72 69 63  urns the numeric
19fa0 20 75 6e 69 63 6f 64 65 20 63 6f 64 65 20 70 6f   unicode code po
19fb0 69 6e 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  int correspondin
19fc0 67 20 74 6f 0a 20 20 74 68 65 20 66 69 72 73 74  g to.  the first
19fd0 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
19fe0 65 20 73 74 72 69 6e 67 20 58 2e 20 20 49 66 20  e string X.  If 
19ff0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
1a000 75 6e 69 63 6f 64 65 28 58 29 20 69 73 20 6e 6f  unicode(X) is no
1a010 74 20 61 20 73 74 72 69 6e 67 0a 20 20 74 68 65  t a string.  the
1a020 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
1a030 75 6e 64 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75  undefined..}..fu
1a040 6e 63 64 65 66 20 7b 75 70 70 65 72 28 58 29 7d  ncdef {upper(X)}
1a050 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 70 70   {} {.  ^The upp
1a060 65 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  er(X) function r
1a070 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
1a080 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20   input string X 
1a090 69 6e 20 77 68 69 63 68 20 61 6c 6c 20 0a 20 20  in which all .  
1a0a0 6c 6f 77 65 72 2d 63 61 73 65 20 41 53 43 49 49  lower-case ASCII
1a0b0 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20   characters are 
1a0c0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68 65  converted to the
1a0d0 69 72 20 75 70 70 65 72 2d 63 61 73 65 20 65 71  ir upper-case eq
1a0e0 75 69 76 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e  uivalent..}..fun
1a0f0 63 64 65 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e  cdef {zeroblob(N
1a100 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a  )} {} {.  ^The z
1a110 65 72 6f 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74  eroblob(N) funct
1a120 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 42 4c  ion returns a BL
1a130 4f 42 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66  OB consisting of
1a140 20 4e 20 62 79 74 65 73 20 6f 66 20 30 78 30 30   N bytes of 0x00
1a150 2e 0a 20 20 53 51 4c 69 74 65 20 6d 61 6e 61 67  ..  SQLite manag
1a160 65 73 20 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f  es these zeroblo
1a170 62 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e  bs very efficien
1a180 74 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20  tly.  Zeroblobs 
1a190 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 0a 20  can be used to. 
1a1a0 20 72 65 73 65 72 76 65 20 73 70 61 63 65 20 66   reserve space f
1a1b0 6f 72 20 61 20 42 4c 4f 42 20 74 68 61 74 20 69  or a BLOB that i
1a1c0 73 20 6c 61 74 65 72 20 77 72 69 74 74 65 6e 20  s later written 
1a1d0 75 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65  using .  [sqlite
1a1e0 33 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20  3_blob_open() | 
1a1f0 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42  incremental BLOB
1a200 20 49 2f 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53   I/O]..  ^This S
1a210 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  QL function is i
1a220 6d 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67  mplemented using
1a230 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65   the [sqlite3_re
1a240 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d  sult_zeroblob()]
1a250 0a 20 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20  .  routine from 
1a260 74 68 65 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  the C/C++ interf
1a270 61 63 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f  ace..}.</tcl>.</
1a280 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  table>..<tcl>.##
1a290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2d0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1a2e0 74 69 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20 54  tion {Date And T
1a2f0 69 6d 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64  ime Functions} d
1a300 61 74 65 66 75 6e 63 20 7b 2a 64 61 74 65 66 75  atefunc {*datefu
1a310 6e 63 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  nc}.hd_keywords 
1a320 7b 64 61 74 65 28 29 20 53 51 4c 20 66 75 6e 63  {date() SQL func
1a330 74 69 6f 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51  tion} {time() SQ
1a340 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b  L function}.hd_k
1a350 65 79 77 6f 72 64 73 20 7b 64 61 74 65 74 69 6d  eywords {datetim
1a360 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
1a370 7d 20 7b 6a 75 6c 69 61 6e 64 61 79 28 29 20 53  } {julianday() S
1a380 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f  QL function}.hd_
1a390 6b 65 79 77 6f 72 64 73 20 7b 73 74 72 66 74 69  keywords {strfti
1a3a0 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  me() SQL functio
1a3b0 6e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53  n}.</tcl>..<p>.S
1a3c0 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 66  QLite supports f
1a3d0 69 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ive date and tim
1a3e0 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 20 66  e functions as f
1a3f0 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70  ollows:.</p>..<p
1a400 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62  >.<ol>.<li> ^(<b
1a410 3e 64 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d  >date(</b><i>tim
1a420 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
1a430 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
1a440 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
1a450 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74  /li>.<li> ^(<b>t
1a460 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  ime(</b><i>times
1a470 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
1a480 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
1a490 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
1a4a0 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74  i>.<li> ^(<b>dat
1a4b0 65 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d  etime(</b><i>tim
1a4c0 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
1a4d0 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
1a4e0 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
1a4f0 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a  /li>.<li> ^(<b>j
1a500 75 6c 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e  ulianday(</b><i>
1a510 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
1a520 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
1a530 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
1a540 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c  ^ </li>.<li> ^(<
1a550 62 3e 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c  b>strftime(</b><
1a560 69 3e 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74  i>format, timest
1a570 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
1a580 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
1a590 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
1a5a0 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c  >.</ol>..<p>.^Al
1a5b0 6c 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20  l five date and 
1a5c0 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74  time functions t
1a5d0 61 6b 65 20 61 20 74 69 6d 65 20 73 74 72 69 6e  ake a time strin
1a5e0 67 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74  g as an argument
1a5f0 2e 20 0a 5e 54 68 65 20 74 69 6d 65 20 73 74 72  . .^The time str
1a600 69 6e 67 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ing is followed 
1a610 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  by zero or more 
1a620 6d 6f 64 69 66 69 65 72 73 2e 20 0a 5e 54 68 65  modifiers. .^The
1a630 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63   strftime() func
1a640 74 69 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20  tion also takes 
1a650 61 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  a format string 
1a660 61 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67  as its first arg
1a670 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ument..</p>..<p>
1a680 0a 54 68 65 20 64 61 74 65 20 61 6e 64 20 74 69  .The date and ti
1a690 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65  me functions use
1a6a0 20 61 20 73 75 62 73 65 74 20 6f 66 0a 5b 68 74   a subset of.[ht
1a6b0 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1a6c0 61 2e 6f 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38  a.org/wiki/ISO_8
1a6d0 36 30 31 20 7c 20 49 53 30 2d 38 36 30 31 5d 20  601 | IS0-8601] 
1a6e0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f  date and time.fo
1a6f0 72 6d 61 74 73 2e 0a 5e 54 68 65 20 64 61 74 65  rmats..^The date
1a700 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1a710 72 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e 20  rns the date in 
1a720 74 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59  this format: YYY
1a730 59 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74  Y-MM-DD. .^The t
1a740 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ime() function r
1a750 65 74 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20  eturns the time 
1a760 61 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54  as HH:MM:SS. .^T
1a770 68 65 20 64 61 74 65 74 69 6d 65 28 29 20 66 75  he datetime() fu
1a780 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22  nction returns "
1a790 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
1a7a0 3a 53 53 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c  :SS". .^(The jul
1a7b0 69 61 6e 64 61 79 28 29 20 66 75 6e 63 74 69 6f  ianday() functio
1a7c0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 0a 5b  n returns the .[
1a7d0 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1a7e0 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c  dia.org/wiki/Jul
1a7f0 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e  ian_day | Julian
1a800 20 64 61 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62   day] - the.numb
1a810 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65  er of days since
1a820 20 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69   noon in Greenwi
1a830 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32  ch on November 2
1a840 34 2c 20 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b  4, 4714 B.C. .([
1a850 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1a860 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f  dia.org/wiki/Pro
1a870 6c 65 70 74 69 63 5f 47 72 65 67 6f 72 69 61 6e  leptic_Gregorian
1a880 5f 63 61 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c  _calendar | Prol
1a890 65 70 74 69 63 20 47 72 65 67 6f 72 69 61 6e 20  eptic Gregorian 
1a8a0 63 61 6c 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54  calendar]).)^.^T
1a8b0 68 65 20 73 74 72 66 74 69 6d 65 28 29 20 72 6f  he strftime() ro
1a8c0 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68  utine returns th
1a8d0 65 20 64 61 74 65 20 66 6f 72 6d 61 74 74 65 64  e date formatted
1a8e0 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74   according to .t
1a8f0 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
1a900 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
1a910 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
1a920 2e 0a 5e 54 68 65 20 66 6f 72 6d 61 74 20 73 74  ..^The format st
1a930 72 69 6e 67 20 73 75 70 70 6f 72 74 73 20 74 68  ring supports th
1a940 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75  e most common su
1a950 62 73 74 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e  bstitutions foun
1a960 64 20 69 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a  d in the .[http:
1a970 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f  //opengroup.org/
1a980 6f 6e 6c 69 6e 65 70 75 62 73 2f 30 30 37 39 30  onlinepubs/00790
1a990 38 37 39 39 2f 78 73 68 2f 73 74 72 66 74 69 6d  8799/xsh/strftim
1a9a0 65 2e 68 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d  e.html | strftim
1a9b0 65 28 29 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72  e() function].fr
1a9c0 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  om the standard 
1a9d0 43 20 6c 69 62 72 61 72 79 20 70 6c 75 73 20 74  C library plus t
1a9e0 77 6f 20 6e 65 77 20 73 75 62 73 74 69 74 75 74  wo new substitut
1a9f0 69 6f 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e  ions, %f and %J.
1aa00 0a 5e 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .^(The following
1aa10 20 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c   is a complete l
1aa20 69 73 74 20 6f 66 20 76 61 6c 69 64 20 73 74 72  ist of valid str
1aa30 66 74 69 6d 65 28 29 20 73 75 62 73 74 69 74 75  ftime() substitu
1aa40 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  tions:.</p>..<bl
1aa50 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
1aa60 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c   border="0" cell
1aa70 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c  padding="0" cell
1aa80 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72  spacing="0">.<tr
1aa90 3e 3c 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  ><td><td width="
1aaa0 31 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c  10"><td></tr>..<
1aab0 74 72 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c  tr><td> %d <td><
1aac0 74 64 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68  td> day of month
1aad0 3a 20 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66  : 00.<tr><td> %f
1aae0 20 3c 74 64 3e 3c 74 64 3e 20 66 72 61 63 74 69   <td><td> fracti
1aaf0 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53  onal seconds: SS
1ab00 2e 53 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48  .SSS.<tr><td> %H
1ab10 20 3c 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20   <td><td> hour: 
1ab20 30 30 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20  00-24 .<tr><td> 
1ab30 25 6a 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %j <td><td> day 
1ab40 6f 66 20 79 65 61 72 3a 20 30 30 31 2d 33 36 36  of year: 001-366
1ab50 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64  .<tr><td> %J <td
1ab60 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79  ><td> Julian day
1ab70 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e   number.<tr><td>
1ab80 20 25 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e   %m <td><td> mon
1ab90 74 68 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74  th: 01-12.<tr><t
1aba0 64 3e 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d  d> %M <td><td> m
1abb0 69 6e 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72  inute: 00-59.<tr
1abc0 3e 3c 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64  ><td> %s <td><td
1abd0 3e 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  > seconds since 
1abe0 31 39 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c  1970-01-01.<tr><
1abf0 74 64 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20  td> %S <td><td> 
1ac00 73 65 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c  seconds: 00-59.<
1ac10 74 72 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c  tr><td> %w <td><
1ac20 74 64 3e 20 64 61 79 20 6f 66 20 77 65 65 6b 20  td> day of week 
1ac30 30 2d 36 20 77 69 74 68 20 53 75 6e 64 61 79 3d  0-6 with Sunday=
1ac40 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c  =0.<tr><td> %W <
1ac50 74 64 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20  td><td> week of 
1ac60 79 65 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e  year: 00-53.<tr>
1ac70 3c 74 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e  <td> %Y <td><td>
1ac80 20 79 65 61 72 3a 20 30 30 30 30 2d 39 39 39 39   year: 0000-9999
1ac90 0a 3c 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64  .<tr><td> %% <td
1aca0 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e  ><td> %.</table>
1acb0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1acc0 0a 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74  ..<p>.^(Notice t
1acd0 68 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61  hat all other da
1ace0 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1acf0 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70  tions can be exp
1ad00 72 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20  ressed.in terms 
1ad10 6f 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c  of strftime():.<
1ad20 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1ad30 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
1ad40 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "0" cellpadding=
1ad50 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  "0" cellspacing=
1ad60 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e  "0">.<tr><td><b>
1ad70 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20  Function</b><td 
1ad80 77 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c  width="30"><td><
1ad90 62 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72  b>Equivalent str
1ada0 66 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e  ftime()</b>.<tr>
1adb0 3c 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29  <td>   date(...)
1adc0 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20        <td><td>  
1add0 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d  strftime('%Y-%m-
1ade0 25 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74  %d', ...).<tr><t
1adf0 64 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20  d>   time(...)  
1ae00 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74      <td><td>  st
1ae10 72 66 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53  rftime('%H:%M:%S
1ae20 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e  ', ...).<tr><td>
1ae30 20 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29     datetime(...)
1ae40 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66    <td><td>  strf
1ae50 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25  time('%Y-%m-%d %
1ae60 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c  H:%M:%S', ...).<
1ae70 74 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e  tr><td>   julian
1ae80 64 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64  day(...) <td><td
1ae90 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 4a 27  >  strftime('%J'
1aea0 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a  , ...).</table>.
1aeb0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1aec0 0a 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65  .<p>.The only re
1aed0 61 73 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64  asons for provid
1aee0 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74  ing functions ot
1aef0 68 65 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d  her than strftim
1af00 65 28 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65  e() is.for conve
1af10 6e 69 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65  nience and for e
1af20 66 66 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a  fficiency..</p>.
1af30 0a 3c 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67  .<h3>Time String
1af40 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74  s</h3>..<p>^(A t
1af50 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62  ime string can b
1af60 65 20 69 6e 20 61 6e 79 20 6f 66 20 74 68 65 20  e in any of the 
1af70 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74  following format
1af80 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
1af90 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1afa0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1afb0 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e  -MM-DD HH:MM</i>
1afc0 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1afd0 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e  -DD HH:MM:SS</i>
1afe0 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1aff0 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53  -DD HH:MM:SS.SSS
1b000 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
1b010 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c  Y-MM-DD</i><b>T<
1b020 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a  /b><i>HH:MM</i>.
1b030 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1b040 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69  DD</i><b>T</b><i
1b050 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c  >HH:MM:SS</i>.<l
1b060 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1b070 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48  </i><b>T</b><i>H
1b080 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
1b090 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69  <li> <i>HH:MM</i
1b0a0 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a  >.<li> <i>HH:MM:
1b0b0 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48  SS</i>.<li> <i>H
1b0c0 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
1b0d0 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a  <li> <b>now</b>.
1b0e0 3c 6c 69 3e 20 3c 69 3e 44 44 44 44 44 44 44 44  <li> <i>DDDDDDDD
1b0f0 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a  DD</i>.</ol>)^..
1b100 3c 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20  <p>.^In formats 
1b110 35 20 74 68 72 6f 75 67 68 20 37 2c 20 74 68 65  5 through 7, the
1b120 20 22 54 22 20 69 73 20 61 20 6c 69 74 65 72 61   "T" is a litera
1b130 6c 20 63 68 61 72 61 63 74 65 72 20 73 65 70 61  l character sepa
1b140 72 61 74 69 6e 67 20 0a 74 68 65 20 64 61 74 65  rating .the date
1b150 20 61 6e 64 20 74 68 65 20 74 69 6d 65 2c 20 61   and the time, a
1b160 73 20 72 65 71 75 69 72 65 64 20 62 79 20 0a 5b  s required by .[
1b170 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f  http://www.w3c.o
1b180 72 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74  rg/TR/NOTE-datet
1b190 69 6d 65 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e  ime | ISO-8601].
1b1a0 20 0a 5e 46 6f 72 6d 61 74 73 20 38 20 74 68 72   .^Formats 8 thr
1b1b0 6f 75 67 68 20 31 30 20 74 68 61 74 20 73 70 65  ough 10 that spe
1b1c0 63 69 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65  cify only a time
1b1d0 20 61 73 73 75 6d 65 20 61 20 64 61 74 65 20 6f   assume a date o
1b1e0 66 20 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20 46  f .2000-01-01. F
1b1f0 6f 72 6d 61 74 20 31 31 2c 20 74 68 65 20 73 74  ormat 11, the st
1b200 72 69 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20 63  ring 'now', is c
1b210 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 74 68  onverted into th
1b220 65 20 0a 63 75 72 72 65 6e 74 20 64 61 74 65 20  e .current date 
1b230 61 6e 64 20 74 69 6d 65 20 61 73 20 6f 62 74 61  and time as obta
1b240 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 78 43  ined from the xC
1b250 75 72 72 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f  urrentTime metho
1b260 64 0a 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65  d.of the [sqlite
1b270 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e  3_vfs] object in
1b280 20 75 73 65 2e 0a 5e 54 68 65 20 27 6e 6f 77 27   use..^The 'now'
1b290 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 64 61 74   argument to dat
1b2a0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1b2b0 69 6f 6e 73 20 61 6c 77 61 79 73 20 72 65 74 75  ions always retu
1b2c0 72 6e 73 20 65 78 61 63 74 6c 79 20 74 68 65 0a  rns exactly the.
1b2d0 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 6d  same value for m
1b2e0 75 6c 74 69 70 6c 65 20 69 6e 76 6f 63 61 74 69  ultiple invocati
1b2f0 6f 6e 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  ons within the s
1b300 61 6d 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 65  ame [sqlite3_ste
1b310 70 28 29 5d 20 63 61 6c 6c 2e 0a 5e 5b 68 74 74  p()] call..^[htt
1b320 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1b330 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69  .org/wiki/Coordi
1b340 6e 61 74 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f  nated_Universal_
1b350 54 69 6d 65 20 7c 20 55 6e 69 76 65 72 73 61 6c  Time | Universal
1b360 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d   Coordinated Tim
1b370 65 20 28 55 54 43 29 5d 20 69 73 20 75 73 65 64  e (UTC)] is used
1b380 2e 20 0a 5e 46 6f 72 6d 61 74 20 31 32 20 69 73  . .^Format 12 is
1b390 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e   the .[http://en
1b3a0 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1b3b0 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c  iki/Julian_day |
1b3c0 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
1b3d0 65 72 5d 0a 65 78 70 72 65 73 73 65 64 20 61 73  er].expressed as
1b3e0 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
1b3f0 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c  t value..</p>..<
1b400 70 3e 0a 46 6f 72 6d 61 74 73 20 32 20 74 68 72  p>.Formats 2 thr
1b410 6f 75 67 68 20 31 30 20 6d 61 79 20 62 65 20 6f  ough 10 may be o
1b420 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77  ptionally follow
1b430 65 64 20 62 79 20 61 20 74 69 6d 65 7a 6f 6e 65  ed by a timezone
1b440 20 69 6e 64 69 63 61 74 6f 72 20 6f 66 20 74 68   indicator of th
1b450 65 20 66 6f 72 6d 0a 22 3c 69 3e 26 23 39 31 3b  e form."<i>&#91;
1b460 2b 2d 26 23 39 33 3b 48 48 3a 4d 4d 3c 2f 69 3e  +-&#93;HH:MM</i>
1b470 22 20 6f 72 20 6a 75 73 74 20 22 3c 69 3e 5a 3c  " or just "<i>Z<
1b480 2f 69 3e 22 2e 20 20 54 68 65 20 64 61 74 65 20  /i>".  The date 
1b490 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1b4a0 6e 73 20 75 73 65 20 55 54 43 20 6f 72 20 22 7a  ns use UTC or "z
1b4b0 75 6c 75 22 0a 74 69 6d 65 20 69 6e 74 65 72 6e  ulu".time intern
1b4c0 61 6c 6c 79 2c 20 61 6e 64 20 73 6f 20 74 68 65  ally, and so the
1b4d0 20 22 5a 22 20 73 75 66 66 69 78 20 69 73 20 61   "Z" suffix is a
1b4e0 20 6e 6f 2d 6f 70 2e 20 20 41 6e 79 20 6e 6f 6e   no-op.  Any non
1b4f0 2d 7a 65 72 6f 20 22 48 48 3a 4d 4d 22 20 73 75  -zero "HH:MM" su
1b500 66 66 69 78 20 69 73 0a 73 75 62 74 72 61 63 74  ffix is.subtract
1b510 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 69  ed from the indi
1b520 63 61 74 65 64 20 64 61 74 65 20 61 6e 64 20 74  cated date and t
1b530 69 6d 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ime in order to 
1b540 63 6f 6d 70 75 74 65 20 7a 75 6c 75 20 74 69 6d  compute zulu tim
1b550 65 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e..For example, 
1b560 61 6c 6c 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  all of the follo
1b570 77 69 6e 67 20 74 69 6d 65 20 73 74 72 69 6e 67  wing time string
1b580 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74  s are equivalent
1b590 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
1b5a0 6f 74 65 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20  ote>.2013-10-07 
1b5b0 30 38 3a 32 33 3a 31 39 2e 31 32 30 3c 62 72 3e  08:23:19.120<br>
1b5c0 0a 32 30 31 33 2d 31 30 2d 30 37 54 30 38 3a 32  .2013-10-07T08:2
1b5d0 33 3a 31 39 2e 31 32 30 5a 3c 62 72 3e 0a 32 30  3:19.120Z<br>.20
1b5e0 31 33 2d 31 30 2d 30 37 20 30 38 3a 32 33 3a 31  13-10-07 08:23:1
1b5f0 39 2e 31 32 30 2d 30 34 3a 30 30 3c 62 72 3e 0a  9.120-04:00<br>.
1b600 32 34 35 36 35 37 32 2e 38 34 39 35 32 36 38 35  2456572.84952685
1b610 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
1b620 3c 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61 74 73  <p>.^(In formats
1b630 20 34 2c 20 37 2c 20 61 6e 64 20 31 30 2c 20 74   4, 7, and 10, t
1b640 68 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65  he fractional se
1b650 63 6f 6e 64 73 20 76 61 6c 75 65 20 53 53 2e 53  conds value SS.S
1b660 53 53 20 63 61 6e 20 68 61 76 65 0a 6f 6e 65 20  SS can have.one 
1b670 6f 72 20 6d 6f 72 65 20 64 69 67 69 74 73 20 66  or more digits f
1b680 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 65 63  ollowing the dec
1b690 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 45 78 61  imal point.  Exa
1b6a0 63 74 6c 79 20 74 68 72 65 65 20 64 69 67 69 74  ctly three digit
1b6b0 73 20 61 72 65 0a 73 68 6f 77 6e 20 69 6e 20 74  s are.shown in t
1b6c0 68 65 20 65 78 61 6d 70 6c 65 73 20 62 65 63 61  he examples beca
1b6d0 75 73 65 20 6f 6e 6c 79 20 74 68 65 20 66 69 72  use only the fir
1b6e0 73 74 20 74 68 72 65 65 20 64 69 67 69 74 73 20  st three digits 
1b6f0 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 0a  are significant.
1b700 74 6f 20 74 68 65 20 72 65 73 75 6c 74 2c 20 62  to the result, b
1b710 75 74 20 74 68 65 20 69 6e 70 75 74 20 73 74 72  ut the input str
1b720 69 6e 67 20 63 61 6e 20 68 61 76 65 20 66 65 77  ing can have few
1b730 65 72 20 6f 72 20 6d 6f 72 65 20 74 68 61 6e 20  er or more than 
1b740 74 68 72 65 65 20 64 69 67 69 74 73 0a 61 6e 64  three digits.and
1b750 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65 20 66   the date/time f
1b760 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 74  unctions will st
1b770 69 6c 6c 20 6f 70 65 72 61 74 65 20 63 6f 72 72  ill operate corr
1b780 65 63 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61 72  ectly.)^.Similar
1b790 6c 79 2c 20 66 6f 72 6d 61 74 20 31 32 20 69 73  ly, format 12 is
1b7a0 20 73 68 6f 77 6e 20 77 69 74 68 20 31 30 20 73   shown with 10 s
1b7b0 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74  ignificant digit
1b7c0 73 2c 20 62 75 74 20 74 68 65 20 64 61 74 65 2f  s, but the date/
1b7d0 74 69 6d 65 0a 66 75 6e 63 74 69 6f 6e 73 20 77  time.functions w
1b7e0 69 6c 6c 20 72 65 61 6c 6c 79 20 61 63 63 65 70  ill really accep
1b7f0 74 20 61 73 20 6d 61 6e 79 20 6f 72 20 61 73 20  t as many or as 
1b800 66 65 77 20 64 69 67 69 74 73 20 61 73 20 61 72  few digits as ar
1b810 65 20 6e 65 63 65 73 73 61 72 79 20 74 6f 0a 72  e necessary to.r
1b820 65 70 72 65 73 65 6e 74 20 74 68 65 20 4a 75 6c  epresent the Jul
1b830 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 2e 0a  ian day number..
1b840 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69  </p>..<h3>Modifi
1b850 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ers</h3>..<p>^Th
1b860 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61  e time string ca
1b870 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  n be followed by
1b880 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f   zero or more mo
1b890 64 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c  difiers that .al
1b8a0 74 65 72 20 64 61 74 65 20 61 6e 64 2f 6f 72 20  ter date and/or 
1b8b0 74 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64 69  time. ^Each modi
1b8c0 66 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73 66  fier.is a transf
1b8d0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
1b8e0 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20   applied to the 
1b8f0 74 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69 74  time value to it
1b900 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65  s left..^Modifie
1b910 72 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 66  rs are applied f
1b920 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
1b930 74 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70 6f  t; order is impo
1b940 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61  rtant..^(The ava
1b950 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72 73  ilable modifiers
1b960 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e   are as follows.
1b970 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  </p>..<ol>.<li> 
1b980 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e  NNN days.<li> NN
1b990 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e  N hours.<li> NNN
1b9a0 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e   minutes.<li> NN
1b9b0 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c  N.NNNN seconds.<
1b9c0 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c  li> NNN months.<
1b9d0 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c  li> NNN years.<l
1b9e0 69 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74  i> start of mont
1b9f0 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20  h.<li> start of 
1ba00 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20  year.<li> start 
1ba10 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b  of day.<li> week
1ba20 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65  day N.<li> unixe
1ba30 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74  poch.<li> localt
1ba40 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f  ime.<li> utc .</
1ba50 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66  ol>)^..<p>^The f
1ba60 69 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69 65  irst six modifie
1ba70 72 73 20 28 31 20 74 68 72 6f 75 67 68 20 36 29  rs (1 through 6)
1ba80 20 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68 65   .simply add the
1ba90 20 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75 6e   specified amoun
1baa0 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68 65  t of time to the
1bab0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 0a   date and time .
1bac0 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
1bad0 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65 73   preceding times
1bae0 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69  tring and modifi
1baf0 65 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20  ers..^Note that 
1bb00 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e  "&plusmn;NNN mon
1bb10 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72 65  ths" works by re
1bb20 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69 67  ndering the orig
1bb30 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74  inal date into.t
1bb40 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f  he YYYY-MM-DD fo
1bb50 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68 65  rmat, adding the
1bb60 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20   &plusmn;NNN to 
1bb70 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c  the MM month val
1bb80 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69  ue, then.normali
1bb90 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2e  zing the result.
1bba0 20 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78 61    ^Thus, for exa
1bbb0 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20 32  mple, the data 2
1bbc0 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69  001-03-31 modifi
1bbd0 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27  ed.by '+1 month'
1bbe0 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c 64   initially yield
1bbf0 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62 75  s 2001-04-31, bu
1bc00 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73  t April only has
1bc10 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65 20   30 days.so the 
1bc20 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a  date is normaliz
1bc30 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30 31  ed to 2001-05-01
1bc40 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65 66  .  ^A similar ef
1bc50 66 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e  fect occurs when
1bc60 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61  .the original da
1bc70 74 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32  te is February 2
1bc80 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20  9 of a leapyear 
1bc90 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72  and the modifier
1bca0 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65   is.&plusmn;N ye
1bcb0 61 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e  ars where N is n
1bcc0 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66  ot a multiple of
1bcd0 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   four.</p>..<p>^
1bce0 54 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d  The "start of" m
1bcf0 6f 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f  odifiers (7 thro
1bd00 75 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65  ugh 9) shift the
1bd10 20 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20   date backwards 
1bd20 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  .to the beginnin
1bd30 67 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  g of the current
1bd40 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20   month, year or 
1bd50 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  day.</p>..<p>^Th
1bd60 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69  e "weekday" modi
1bd70 66 69 65 72 20 61 64 76 61 6e 63 65 73 20 74 68  fier advances th
1bd80 65 20 64 61 74 65 20 66 6f 72 77 61 72 64 20 74  e date forward t
1bd90 6f 20 74 68 65 20 6e 65 78 74 20 64 61 74 65 20  o the next date 
1bda0 0a 77 68 65 72 65 20 74 68 65 20 77 65 65 6b 64  .where the weekd
1bdb0 61 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20  ay number is N. 
1bdc0 53 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e  Sunday is 0, Mon
1bdd0 64 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f  day is 1, and so
1bde0 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e   forth.</p>..<p>
1bdf0 5e 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22  ^The "unixepoch"
1be00 20 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f   modifier (11) o
1be10 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20  nly works if it 
1be20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
1be30 6f 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e  ows .a timestrin
1be40 67 20 69 6e 20 74 68 65 20 44 44 44 44 44 44 44  g in the DDDDDDD
1be50 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68  DDD format. .^Th
1be60 69 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73  is modifier caus
1be70 65 73 20 74 68 65 20 44 44 44 44 44 44 44 44 44  es the DDDDDDDDD
1be80 44 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65  D to be interpre
1be90 74 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75  ted not .as a Ju
1bea0 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20  lian day number 
1beb0 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77  as it normally w
1bec0 6f 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a  ould be, but as.
1bed0 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1bee0 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e  edia.org/wiki/Un
1bef0 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20 54  ix_time | Unix T
1bf00 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62  ime] - the .numb
1bf10 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
1bf20 6e 63 65 20 31 39 37 30 2e 20 20 49 66 20 74 68  nce 1970.  If th
1bf30 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
1bf40 64 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a  difier does not.
1bf50 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72  follow a timestr
1bf60 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ing of the form 
1bf70 44 44 44 44 44 44 44 44 44 44 20 77 68 69 63 68  DDDDDDDDDD which
1bf80 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6e   expresses the n
1bf90 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73  umber.of seconds
1bfa0 20 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69   since 1970 or i
1bfb0 66 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72  f other modifier
1bfc0 73 0a 73 65 70 61 72 61 74 65 20 74 68 65 20 22  s.separate the "
1bfd0 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66  unixepoch" modif
1bfe0 69 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44  ier from prior D
1bff0 44 44 44 44 44 44 44 44 44 20 74 68 65 6e 20 74  DDDDDDDDD then t
1c000 68 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75  he.behavior is u
1c010 6e 64 65 66 69 6e 65 64 2e 0a 44 75 65 20 74 6f  ndefined..Due to
1c020 20 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d 69 74   precision limit
1c030 61 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64 20 62  ations imposed b
1c040 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
1c050 74 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36 34 2d  tions use.of 64-
1c060 62 69 74 20 69 6e 74 65 67 65 72 73 2c 20 74 68  bit integers, th
1c070 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
1c080 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b  difier only work
1c090 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77  s for.dates betw
1c0a0 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30  een 0000-01-01 0
1c0b0 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32  0:00:00 and 5352
1c0c0 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20  -11-01 10:52:47 
1c0d0 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d  (unix times.of -
1c0e0 36 32 31 36 37 32 31 39 32 30 30 20 74 68 72 6f  62167219200 thro
1c0f0 75 67 68 20 31 30 36 37 35 31 39 39 31 36 37 29  ugh 10675199167)
1c100 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  .</p>..<p>^The "
1c110 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66  localtime" modif
1c120 69 65 72 20 28 31 32 29 20 61 73 73 75 6d 65 73  ier (12) assumes
1c130 20 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67   the time string
1c140 20 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20   to its left is 
1c150 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f  in.Universal Coo
1c160 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55  rdinated Time (U
1c170 54 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20  TC) and adjusts 
1c180 74 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20  the time.string 
1c190 73 6f 20 74 68 61 74 20 69 74 20 64 69 73 70 6c  so that it displ
1c1a0 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20  ays localtime.  
1c1b0 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66  If "localtime".f
1c1c0 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68  ollows a time th
1c1d0 61 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74  at is not UTC, t
1c1e0 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
1c1f0 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e   is undefined..^
1c200 28 54 68 65 20 22 75 74 63 22 20 69 73 20 74 68  (The "utc" is th
1c210 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22 6c  e opposite of "l
1c220 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22 75 74 63  ocaltime".  "utc
1c230 22 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 74  " assumes that t
1c240 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74 73  he string.to its
1c250 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65 20   left is in the 
1c260 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61  local timezone a
1c270 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61 74 20  nd adjusts that 
1c280 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e 20  string to be in 
1c290 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70 72  UTC.)^.If the pr
1c2a0 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e 6f  ior string is no
1c2b0 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20  t in localtime, 
1c2c0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
1c2d0 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64 65  of "utc" is.unde
1c2e0 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  fined.</p>..<h3>
1c2f0 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e  Examples</h3>..^
1c300 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1c310 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e  current date.<p>
1c320 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
1c330 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29  LECT date('now')
1c340 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ;</blockquote>)^
1c350 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1c360 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74  he last day of t
1c370 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68  he current month
1c380 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1c390 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27  te>SELECT date('
1c3a0 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d  now','start of m
1c3b0 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27  onth','+1 month'
1c3c0 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c  ,'-1 day');.</bl
1c3d0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1c3e0 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  p>Compute the da
1c3f0 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65  te and time give
1c400 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61  n a unix timesta
1c410 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f  mp 1092941466.</
1c420 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1c430 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61 74 65  .    SELECT date
1c440 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c  time(1092941466,
1c450 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c   'unixepoch');.<
1c460 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1c470 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1c480 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67   date and time g
1c490 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65  iven a unix time
1c4a0 73 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36  stamp 1092941466
1c4b0 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74  , and .compensat
1c4c0 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c  e for your local
1c4d0 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a   timezone.</p>..
1c4e0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1c4f0 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31  ELECT datetime(1
1c500 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78  092941466, 'unix
1c510 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69  epoch', 'localti
1c520 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  me');.</blockquo
1c530 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
1c540 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ute the current 
1c550 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c  unix timestamp.<
1c560 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1c570 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74  >.  SELECT strft
1c580 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b  ime('%s','now');
1c590 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1c5a0 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1c5b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79  he number of day
1c5c0 73 20 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e  s since the sign
1c5d0 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44 65  ing of the US De
1c5e0 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64  claration.of Ind
1c5f0 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a  ependence.</p>..
1c600 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1c610 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28  ELECT julianday(
1c620 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64  'now') - juliand
1c630 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29  ay('1776-07-04')
1c640 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1c650 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1c660 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
1c670 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61  conds since a pa
1c680 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20  rticular moment 
1c690 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62  in 2004:</p>..<b
1c6a0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
1c6b0 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73  ECT strftime('%s
1c6c0 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74  ','now') - strft
1c6d0 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30  ime('%s','2004-0
1c6e0 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b  1-01 02:34:56');
1c6f0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1c700 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20  ..^(<p>.Compute 
1c710 74 68 65 20 64 61 74 65 20 6f 66 20 74 68 65 20  the date of the 
1c720 66 69 72 73 74 20 54 75 65 73 64 61 79 20 69 6e  first Tuesday in
1c730 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65   October.for the
1c740 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c   current year..<
1c750 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1c760 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 28  >.  SELECT date(
1c770 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20  'now','start of 
1c780 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73  year','+9 months
1c790 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a  ','weekday 2');.
1c7a0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1c7b0 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1c7c0 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65  e time since the
1c7d0 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73   unix epoch in s
1c7e0 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74  econds .(like st
1c7f0 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77  rftime('%s','now
1c800 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64  ') except includ
1c810 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61  es fractional pa
1c820 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  rt):</p>..<block
1c830 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
1c840 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27  (julianday('now'
1c850 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38  ) - 2440587.5)*8
1c860 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71  6400.0;.</blockq
1c870 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76  uote>)^..<h3>Cav
1c880 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f 68  eats And Bugs</h
1c890 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75  3>..<p>The compu
1c8a0 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20  tation of local 
1c8b0 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65 61  time depends hea
1c8c0 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69 6d  vily on the whim
1c8d0 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e 73   .of politicians
1c8e0 20 61 6e 64 20 69 73 20 74 68 75 73 20 64 69 66   and is thus dif
1c8f0 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63 6f  ficult to get co
1c900 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c  rrect for .all l
1c910 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73  ocales. ^In this
1c920 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
1c930 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
1c940 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f  library .functio
1c950 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20  n localtime_r() 
1c960 69 73 20 75 73 65 64 20 74 6f 20 61 73 73 69 73  is used to assis
1c970 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61  t in the calcula
1c980 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74  tion of .local t
1c990 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63  ime.  ^(The .loc
1c9a0 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e  altime_r() C fun
1c9b0 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f  ction normally o
1c9c0 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65  nly works for ye
1c9d0 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30  ars.between 1970
1c9e0 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64   and 2037. For d
1c9f0 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 69  ates outside thi
1ca00 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20  s range, SQLite 
1ca10 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70  .attempts to map
1ca20 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61   the year into a
1ca30 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61  n equivalent yea
1ca40 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72  r within .this r
1ca50 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c  ange, do the cal
1ca60 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  culation, then m
1ca70 61 70 20 74 68 65 20 79 65 61 72 20 62 61 63 6b  ap the year back
1ca80 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54  .)^</p>...<p>^(T
1ca90 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  hese functions o
1caa0 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61 74  nly work for dat
1cab0 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
1cac0 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a 61  01-01 00:00:00.a
1cad0 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32 33  nd 9999-12-31 23
1cae0 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20  :59:59 (julidan 
1caf0 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32 31  day numbers 1721
1cb00 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35 33  059.5 through 53
1cb10 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20  73484.5).)^.For 
1cb20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68  dates outside th
1cb30 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72 65  at range, the re
1cb40 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a 66  sults of these.f
1cb50 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e 64  unctions are und
1cb60 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  efined.</p>..<p>
1cb70 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77  Non-Vista Window
1cb80 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79  s platforms only
1cb90 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74   support one set
1cba0 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a   of DST rules. .
1cbb0 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f  Vista only suppo
1cbc0 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f  rts two. Therefo
1cbd0 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61  re, on these pla
1cbe0 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69  tforms, .histori
1cbf0 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74  cal DST calculat
1cc00 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63  ions will be inc
1cc10 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61  orrect. .For exa
1cc20 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c  mple, in the US,
1cc30 20 69 6e 20 32 30 30 37 20 74 68 65 20 44 53 54   in 2007 the DST
1cc40 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20   rules changed. 
1cc50 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f  .Non-Vista Windo
1cc60 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70  ws platforms app
1cc70 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30 37 20  ly the new 2007 
1cc80 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c  DST rules .to al
1cc90 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61 72 73  l previous years
1cca0 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20   as well. Vista 
1ccb0 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65  does somewhat be
1ccc0 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73  tter.getting res
1ccd0 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61 63  ults correct bac
1cce0 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20  k to 1986, when 
1ccf0 74 68 65 20 72 75 6c 65 73 20 77 65 72 65 20 61  the rules were a
1cd00 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e  lso changed.</p>
1cd10 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61  ..<p>All interna
1cd20 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61  l computations a
1cd30 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74 70  ssume the .[http
1cd40 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
1cd50 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69  org/wiki/Gregori
1cd60 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47 72  an_calendar | Gr
1cd70 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72  egorian calendar
1cd80 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73  ].system.  It is
1cd90 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68   also assumed th
1cda0 61 74 20 65 76 65 72 79 0a 64 61 79 20 69 73 20  at every.day is 
1cdb0 65 78 61 63 74 6c 79 20 38 36 34 30 30 20 73 65  exactly 86400 se
1cdc0 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f  conds in duratio
1cdd0 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  n.</p>..<tcl>.##
1cde0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cdf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce20 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1ce30 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20  tion {Aggregate 
1ce40 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75  Functions} aggfu
1ce50 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f  nc {*aggfunc}.</
1ce60 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67  tcl>..<p>.The ag
1ce70 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1ce80 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72  s shown below ar
1ce90 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64  e available by d
1cea0 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f  efault.  Additio
1ceb0 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66 75  nal.aggregate fu
1cec0 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20  nctions written 
1ced0 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64 65  in C may be adde
1cee0 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73 71  d using the .[sq
1cef0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
1cf00 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49  ction()]</a>.API
1cf10 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61  .</p>..<p>.^In a
1cf20 6e 79 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ny aggregate fun
1cf30 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73  ction that takes
1cf40 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a single argume
1cf50 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e  nt, that argumen
1cf60 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64 65  t.can be precede
1cf70 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64  d by the keyword
1cf80 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20   DISTINCT.  ^In 
1cf90 73 75 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c  such cases, dupl
1cfa0 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61  icate.elements a
1cfb0 72 65 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f  re filtered befo
1cfc0 72 65 20 62 65 69 6e 67 20 70 61 73 73 65 64 20  re being passed 
1cfd0 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  into the aggrega
1cfe0 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f  te function..^Fo
1cff0 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66  r example, the f
1d000 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64  unction "count(d
1d010 69 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c 6c  istinct X)" will
1d020 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
1d030 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20 76  er.of distinct v
1d040 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20  alues of column 
1d050 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  X instead of the
1d060 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
1d070 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73   non-null.values
1d080 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f   in column X..</
1d090 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
1d0a0 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
1d0b0 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65  10>.<tcl>.funcde
1d0c0 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76 67  f {avg(X)} {*avg
1d0d0 20 7b 61 76 67 28 29 20 61 67 67 72 65 67 61 74   {avg() aggregat
1d0e0 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
1d0f0 20 5e 54 68 65 20 61 76 67 28 29 20 66 75 6e 63   ^The avg() func
1d100 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74  tion.  returns t
1d110 68 65 20 61 76 65 72 61 67 65 20 76 61 6c 75 65  he average value
1d120 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c   of all non-NULL
1d130 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e   <i>X</i> within
1d140 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53 74   a.  group.  ^St
1d150 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76 61  ring and BLOB va
1d160 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  lues that do not
1d170 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65   look like numbe
1d180 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70 72  rs are.  interpr
1d190 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e 54 68  eted as 0..  ^Th
1d1a0 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28  e result of avg(
1d1b0 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c  ) is always a fl
1d1c0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
1d1d0 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20  ue as long as.  
1d1e0 61 74 20 74 68 65 72 65 20 69 73 20 61 74 20 6c  at there is at l
1d1f0 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c  east one non-NUL
1d200 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69 66 20  L input even if 
1d210 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72 65  all.  inputs are
1d220 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54 68 65   integers.  ^The
1d230 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29   result of avg()
1d240 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20   is NULL if and 
1d250 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65 20  only if.  there 
1d260 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
1d270 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e  inputs.  .}..fun
1d280 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20 63  cdef {count(X) c
1d290 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74  ount(*)} {*count
1d2a0 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67   {count() aggreg
1d2b0 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  ate function}} {
1d2c0 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 58 29  .  ^The count(X)
1d2d0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1d2e0 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20 74  s.  a count of t
1d2f0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d  he number of tim
1d300 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f  es.  that <i>X</
1d310 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69  i> is not NULL i
1d320 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54 68 65  n a group.  ^The
1d330 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74 69   count(*) functi
1d340 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61 72  on.  (with no ar
1d350 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e 73  guments) returns
1d360 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
1d370 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
1d380 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64   group..}..funcd
1d390 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74  ef {group_concat
1d3a0 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  (X) group_concat
1d3b0 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75  (X,Y)} {.  *grou
1d3c0 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f  p_concat {group_
1d3d0 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65 67 61  concat() aggrega
1d3e0 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b  te function}.} {
1d3f0 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f  .  ^The group_co
1d400 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f 6e 20  ncat() function 
1d410 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69  returns.  a stri
1d420 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ng which is the 
1d430 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66  concatenation of
1d440 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  .  all non-NULL 
1d450 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f  values of <i>X</
1d460 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d 65 74  i>.  ^If paramet
1d470 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70  er <i>Y</i> is p
1d480 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20 69 74  resent then.  it
1d490 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
1d4a0 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74 77  separator.  betw
1d4b0 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f 66  een instances of
1d4c0 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63   <i>X</i>.  ^A c
1d4d0 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75 73  omma (",") is us
1d4e0 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61  ed as the separa
1d4f0 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69  tor.  if <i>Y</i
1d500 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20 20 54  > is omitted.  T
1d510 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20  he order of the 
1d520 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65 6c 65  concatenated ele
1d530 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62 69 74  ments is.  arbit
1d540 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  rary..}..funcdef
1d550 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41   {max(X)} {*maxA
1d560 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20  ggFunc *agg_max 
1d570 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65  {max() aggregate
1d580 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1d590 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67 72 65  ^The max() aggre
1d5a0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20  gate function.  
1d5b0 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69  returns the maxi
1d5c0 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  mum value of all
1d5d0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
1d5e0 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78  roup..  ^The max
1d5f0 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68  imum value is th
1d600 65 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75  e value that wou
1d610 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 6c  ld be returned l
1d620 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45  ast in an.  ORDE
1d630 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61 6d 65  R BY on the same
1d640 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65   column.  ^Aggre
1d650 67 61 74 65 20 6d 61 78 28 29 20 72 65 74 75 72  gate max() retur
1d660 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e  ns NULL .  if an
1d670 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20  d only if there 
1d680 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
1d690 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
1d6a0 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  oup..}..funcdef 
1d6b0 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67  {min(X)} {*minAg
1d6c0 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b  gFunc *agg_min {
1d6d0 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20  min() aggregate 
1d6e0 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
1d6f0 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72 65 67  The min() aggreg
1d700 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  ate function.  r
1d710 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d  eturns the minim
1d720 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  um non-NULL valu
1d730 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20  e of all values 
1d740 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
1d750 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c  ^The minimum val
1d760 75 65 20 69 73 20 74 68 65 20 66 69 72 73 74 20  ue is the first 
1d770 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74  non-NULL value t
1d780 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61 72  hat would appear
1d790 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20 42  .  in an ORDER B
1d7a0 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  Y of the column.
1d7b0 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 69  .  ^Aggregate mi
1d7c0 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  n() returns NULL
1d7d0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
1d7e0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
1d7f0 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69  -NULL.  values i
1d800 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a  n the group..}..
1d810 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29 20  funcdef {sum(X) 
1d820 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73  total(X)} {.  *s
1d830 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74  umFunc *sum *tot
1d840 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67 72  al.  {sum() aggr
1d850 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a  egate function}.
1d860 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72 65    {total() aggre
1d870 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d  gate function}.}
1d880 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28 29 20   {.  ^The sum() 
1d890 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67 67 72  and total() aggr
1d8a0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a  egate functions.
1d8b0 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f 66 20    return sum of 
1d8c0 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
1d8d0 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
1d8e0 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20 61 72  ..  ^If there ar
1d8f0 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e  e no non-NULL in
1d900 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75  put rows then su
1d910 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55  m() returns.  NU
1d920 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20 72  LL but total() r
1d930 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55  eturns 0.0..  NU
1d940 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c  LL is not normal
1d950 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65 73  ly a helpful res
1d960 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d 20  ult for the sum 
1d970 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74  of no rows.  but
1d980 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72   the SQL standar
1d990 64 20 72 65 71 75 69 72 65 73 20 69 74 20 61 6e  d requires it an
1d9a0 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20 53  d most other.  S
1d9b0 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
1d9c0 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75  nes implement su
1d9d0 6d 28 29 20 74 68 61 74 20 77 61 79 20 73 6f 20  m() that way so 
1d9e0 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69  SQLite does it i
1d9f0 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77 61 79  n the.  same way
1da00 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20   in order to be 
1da10 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68  compatible.   Th
1da20 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74  e non-standard t
1da30 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a  otal() function.
1da40 20 20 69 73 20 70 72 6f 76 69 64 65 64 20 61 73    is provided as
1da50 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61   a convenient wa
1da60 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64  y to work around
1da70 20 74 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f   this design pro
1da80 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20 53 51  blem.  in the SQ
1da90 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a  L language.</p>.
1daa0 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c  .  <p>^The resul
1dab0 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73 20  t of total() is 
1dac0 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e  always a floatin
1dad0 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20  g point value.. 
1dae0 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
1daf0 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65  sum() is an inte
1db00 67 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c  ger value if all
1db10 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73   non-NULL inputs
1db20 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20   are integers.. 
1db30 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74   ^If any input t
1db40 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68  o sum() is neith
1db50 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  er an integer or
1db60 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73   a NULL.  then s
1db70 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66  um() returns a f
1db80 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
1db90 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68  lue.  which migh
1dba0 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d  t be an approxim
1dbb0 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75  ation to the tru
1dbc0 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  e sum.</p>..  <p
1dbd0 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72  >^Sum() will thr
1dbe0 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f  ow an "integer o
1dbf0 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69  verflow" excepti
1dc00 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73  on if all inputs
1dc10 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72 73 20  .  are integers 
1dc20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e  or NULL.  and an
1dc30 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f   integer overflo
1dc40 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20  w occurs at any 
1dc50 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65  point during the
1dc60 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20   computation..  
1dc70 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74  ^Total() never t
1dc80 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72  hrows an integer
1dc90 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74   overflow..}.</t
1dca0 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74  cl>.</table>..<t
1dcb0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
1dcc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dcd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dcf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd00 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52  ##.Section INSER
1dd10 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54  T insert {INSERT
1dd20 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 52 65 63 75   *INSERTs}..Recu
1dd30 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
1dd40 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 0a 3c  am insert-stmt.<
1dd50 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  /tcl>..<p>The IN
1dd60 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63  SERT statement c
1dd70 6f 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62 61  omes in three ba
1dd80 73 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c 75 6c  sic forms.  .<ul
1dd90 3e 0a 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 66 69  >.<li><p>^The fi
1dda0 72 73 74 20 66 6f 72 6d 20 28 77 69 74 68 20 74  rst form (with t
1ddb0 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77  he "VALUES" keyw
1ddc0 6f 72 64 29 20 63 72 65 61 74 65 73 20 6f 6e 65  ord) creates one
1ddd0 20 6f 72 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77   or more.new row
1dde0 73 20 69 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67  s in.an existing
1ddf0 20 74 61 62 6c 65 2e 20 5e 49 66 20 6e 6f 20 63   table. ^If no c
1de00 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70  olumn-list is sp
1de10 65 63 69 66 69 65 64 20 74 68 65 6e 20 74 68 65  ecified then the
1de20 20 6e 75 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65   number.of value
1de30 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
1de40 65 61 63 68 20 72 6f 77 0a 6d 75 73 74 20 62 65  each row.must be
1de50 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
1de60 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1de70 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
1de80 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 0a 74   ^In this case.t
1de90 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61  he result of eva
1dea0 6c 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74  luating the left
1deb0 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e  -most expression
1dec0 20 69 6e 20 65 61 63 68 20 74 65 72 6d 20 6f 66   in each term of
1ded0 0a 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74  .the VALUES list
1dee0 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74   is inserted int
1def0 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  o the left-most 
1df00 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 65 61  column of the ea
1df10 63 68 20 6e 65 77 20 72 6f 77 2c 0a 61 6e 64 20  ch new row,.and 
1df20 66 6f 72 74 68 20 66 6f 72 20 65 61 63 68 20 73  forth for each s
1df30 75 62 73 65 71 75 65 6e 74 20 65 78 70 72 65 73  ubsequent expres
1df40 73 69 6f 6e 2e 20 5e 49 66 20 61 0a 63 6f 6c 75  sion. ^If a.colu
1df50 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69  mn-list is speci
1df60 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e  fied, then the n
1df70 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
1df80 69 6e 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  in each term of 
1df90 74 68 65 0a 56 41 4c 55 45 20 6c 69 73 74 20 6d  the.VALUE list m
1dfa0 75 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75  ust match the nu
1dfb0 6d 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65  mber of.specifie
1dfc0 64 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68  d columns. ^Each
1dfd0 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 63 6f   of the named co
1dfe0 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65 77  lumns of the new
1dff0 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65   row is populate
1e000 64 0a 77 69 74 68 20 74 68 65 20 72 65 73 75 6c  d.with the resul
1e010 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  ts of evaluating
1e020 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
1e030 6e 67 20 56 41 4c 55 45 53 20 65 78 70 72 65 73  ng VALUES expres
1e040 73 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c  sion. ^Table.col
1e050 75 6d 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  umns that do not
1e060 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 63   appear in the c
1e070 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 70  olumn list are p
1e080 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 74 68  opulated with th
1e090 65 20 64 65 66 61 75 6c 74 0a 63 6f 6c 75 6d 6e  e default.column
1e0a0 20 76 61 6c 75 65 20 28 73 70 65 63 69 66 69 65   value (specifie
1e0b0 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
1e0c0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
1e0d0 61 74 65 6d 65 6e 74 29 2c 20 6f 72 20 77 69 74  atement), or wit
1e0e0 68 20 4e 55 4c 4c 20 69 66 0a 6e 6f 20 64 65 66  h NULL if.no def
1e0f0 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70  ault value is sp
1e100 65 63 69 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70  ecified...<li><p
1e110 3e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d  >The second form
1e120 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20 73   of the INSERT s
1e130 74 61 74 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e  tatement contain
1e140 73 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  s a SELECT state
1e150 6d 65 6e 74 0a 69 6e 73 74 65 61 64 20 6f 66 20  ment.instead of 
1e160 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 2e  a VALUES clause.
1e170 20 5e 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73   ^A new entry is
1e180 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
1e190 68 65 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63  he table for eac
1e1a0 68 0a 72 6f 77 20 6f 66 20 64 61 74 61 20 72 65  h.row of data re
1e1b0 74 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74  turned by execut
1e1c0 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 73  ing the SELECT s
1e1d0 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20  tatement. ^If a 
1e1e0 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73  column-list is.s
1e1f0 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75  pecified, the nu
1e200 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1e210 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  in the result of
1e220 20 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74   the SELECT must
1e230 20 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20   be the same.as 
1e240 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  the number of it
1e250 65 6d 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ems in the colum
1e260 6e 2d 6c 69 73 74 2e 20 5e 4f 74 68 65 72 77 69  n-list. ^Otherwi
1e270 73 65 2c 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e  se, if no column
1e280 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66 69  -list is.specifi
1e290 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ed, the number o
1e2a0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1e2b0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53   result of the S
1e2c0 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74 68  ELECT must be th
1e2d0 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75  e same.as the nu
1e2e0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1e2f0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 41  in the table. ^A
1e300 6e 79 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  ny SELECT statem
1e310 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 63  ent, including.c
1e320 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 20  ompound SELECTs 
1e330 61 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65  and SELECT state
1e340 6d 65 6e 74 73 20 77 69 74 68 20 4f 52 44 45 52  ments with ORDER
1e350 20 42 59 20 61 6e 64 2f 6f 72 20 4c 49 4d 49 54   BY and/or LIMIT
1e360 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20 62   clauses, .may b
1e370 65 20 75 73 65 64 20 69 6e 20 61 6e 20 49 4e 53  e used in an INS
1e380 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66  ERT statement of
1e390 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69   this form...<li
1e3a0 3e 3c 70 3e 54 68 65 20 74 68 69 72 64 20 66 6f  ><p>The third fo
1e3b0 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rm of an INSERT 
1e3c0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77 69 74  statement is wit
1e3d0 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  h DEFAULT VALUES
1e3e0 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54 20 2e  ..^(The INSERT .
1e3f0 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  .. DEFAULT VALUE
1e400 53 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 73 65  S statement inse
1e410 72 74 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77  rts a single new
1e420 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61   row into the.na
1e430 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61  med table.)^ ^Ea
1e440 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
1e450 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75   new row is popu
1e460 6c 61 74 65 64 20 77 69 74 68 20 69 74 73 20 64  lated with its d
1e470 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 0a 6f 72  efault value,.or
1e480 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 69 66 20   with a NULL if 
1e490 6e 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  no default value
1e4a0 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
1e4b0 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6c   part of the col
1e4c0 75 6d 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 20 69  umn.definition i
1e4d0 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  n the CREATE TAB
1e4e0 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  LE statement...<
1e4f0 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70  /ul>..<p>^The op
1e500 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d  tional conflict-
1e510 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68  clause allows th
1e520 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  e specification 
1e530 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  of an alternativ
1e540 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  e.constraint con
1e550 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
1e560 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
1e570 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e  e during this on
1e580 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64  e INSERT command
1e590 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f  ..See the sectio
1e5a0 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e  n titled.[ON CON
1e5b0 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
1e5c0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
1e5d0 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  n..For compatibi
1e5e0 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c  lity with MySQL,
1e5f0 20 5e 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c   ^the parser all
1e600 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66 20 74  ows the use of t
1e610 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72  he.single keywor
1e620 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f  d <a href="lang_
1e630 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45  replace.html">RE
1e640 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20  PLACE</a> as an 
1e650 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45  .alias for "INSE
1e660 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a  RT OR REPLACE"..
1e670 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e  .<p>^(The option
1e680 61 6c 20 22 3c 69 3e 64 61 74 61 62 61 73 65 2d  al "<i>database-
1e690 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e  name</i><b>.</b>
1e6a0 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  " prefix on the 
1e6b0 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  <i>table-name</i
1e6c0 3e 0a 69 73 20 73 75 70 70 6f 72 74 20 66 6f 72  >.is support for
1e6d0 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52   top-level INSER
1e6e0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c  T statements onl
1e6f0 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65  y.)^  ^The table
1e700 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e   name must be.un
1e710 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20 49 4e  qualified for IN
1e720 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20  SERT statements 
1e730 74 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69  that occur withi
1e740 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  n [CREATE TRIGGE
1e750 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e  R] statements..^
1e760 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 22  Similarly, the "
1e770 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20  DEFAULT VALUES" 
1e780 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45  form of the INSE
1e790 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  RT statement is 
1e7a0 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f  supported for.to
1e7b0 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
1e7c0 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61  tatements only a
1e7d0 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52  nd not for INSER
1e7e0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  T statements wit
1e7f0 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70  hin.triggers..<p
1e800 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1e810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e850 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1e860 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61  {ON CONFLICT cla
1e870 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b  use} conflict {{
1e880 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d  conflict clause}
1e890 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a   {ON CONFLICT}}.
1e8a0 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
1e8b0 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74  Diagram conflict
1e8c0 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a  -clause.</tcl>..
1e8d0 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  <p>The ON CONFLI
1e8e0 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74  CT clause is not
1e8f0 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c 20   a separate SQL 
1e900 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73 20  command.  It is 
1e910 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63  a.non-standard c
1e920 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20 61  lause that can a
1e930 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74  ppear in many ot
1e940 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73  her SQL commands
1e950 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69 74  ..It is given it
1e960 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e  s own section in
1e970 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 62   this document b
1e980 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74  ecause it is not
1e990 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72  .part of standar
1e9a0 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65 66  d SQL and theref
1e9b0 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62 65  ore might not be
1e9c0 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a   familiar.</p>..
1e9d0 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78 20 66  <p>^The syntax f
1e9e0 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  or the ON CONFLI
1e9f0 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73 20  CT clause is as 
1ea00 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a  shown above for.
1ea10 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
1ea20 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20   command.  ^For 
1ea30 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a 55  the INSERT and.U
1ea40 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20  PDATE commands, 
1ea50 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e  the keywords "ON
1ea60 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72   CONFLICT" are r
1ea70 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22 20  eplaced by "OR" 
1ea80 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79 6e 74  so that.the synt
1ea90 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20 6e 61  ax reads more na
1eaa0 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20 65 78  turally.  For ex
1eab0 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f  ample, instead o
1eac0 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e  f."INSERT ON CON
1ead0 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77 65  FLICT IGNORE" we
1eae0 20 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f 52   have "INSERT OR
1eaf0 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65   IGNORE"..The ke
1eb00 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62 75  ywords change bu
1eb10 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66  t the meaning of
1eb20 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20 74   the clause is t
1eb30 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20 77  he same.either w
1eb40 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ay.</p>..<p>The 
1eb50 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1eb60 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20 55 4e  se applies to UN
1eb70 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
1eb80 4c 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  L.constraints (a
1eb90 6e 64 20 74 6f 20 50 52 49 4d 41 52 59 20 4b 45  nd to PRIMARY KE
1eba0 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 68  Y constraints wh
1ebb0 69 63 68 20 66 6f 72 20 74 68 65 20 70 75 72 70  ich for the purp
1ebc0 6f 73 65 73 20 0a 6f 66 20 74 68 69 73 20 73 65  oses .of this se
1ebd0 63 74 69 6f 6e 20 61 72 65 20 74 68 65 20 73 61  ction are the sa
1ebe0 6d 65 20 74 68 69 6e 67 20 61 73 20 55 4e 49 51  me thing as UNIQ
1ebf0 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  UE constraints).
1ec00 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  .The ON CONFLICT
1ec10 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65 73 20   algorithm does 
1ec20 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f  not.apply to [FO
1ec30 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
1ec40 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20 61 72  aints]..There ar
1ec50 65 20 66 69 76 65 20 63 6f 6e 66 6c 69 63 74 20  e five conflict 
1ec60 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
1ec70 69 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f  ithm choices:.RO
1ec80 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46  LLBACK, ABORT, F
1ec90 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64  AIL, IGNORE, and
1eca0 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64   REPLACE..^The d
1ecb0 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20  efault conflict 
1ecc0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
1ecd0 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 20  ithm is ABORT.  
1ece0 54 68 69 73 0a 69 73 20 77 68 61 74 20 74 68 65  This.is what the
1ecf0 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c  y mean:</p>..<dl
1ed00 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43  >.<dt><b>ROLLBAC
1ed10 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  K</b></dt>.<dd><
1ed20 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
1ed30 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
1ed40 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
1ed50 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rs, the ROLLBACK
1ed60 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f  .resolution algo
1ed70 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65  rithm aborts the
1ed80 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61   current SQL sta
1ed90 74 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e 20 53  tement with.an S
1eda0 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
1edb0 20 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73   error and rolls
1edc0 20 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e   back the curren
1edd0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  t transaction..^
1ede0 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f  If no transactio
1edf0 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74 68  n is.active (oth
1ee00 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70 6c  er than the impl
1ee10 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ied transaction 
1ee20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
1ee30 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64  on every.command
1ee40 29 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  ) then the ROLLB
1ee50 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ACK resolution a
1ee60 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20 74  lgorithm works t
1ee70 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 0a 41  he same as the.A
1ee80 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c  BORT algorithm.<
1ee90 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
1eea0 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a  >ABORT</b></dt>.
1eeb0 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
1eec0 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
1eed0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1eee0 20 6f 63 63 75 72 73 2c 20 74 68 65 20 41 42 4f   occurs, the ABO
1eef0 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  RT.resolution al
1ef00 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74  gorithm aborts t
1ef10 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73  he current SQL s
1ef20 74 61 74 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e  tatement.with an
1ef30 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
1ef40 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 62 61 63  NT error and bac
1ef50 6b 73 20 6f 75 74 20 61 6e 79 20 63 68 61 6e 67  ks out any chang
1ef60 65 73 0a 6d 61 64 65 20 62 79 20 74 68 65 20 63  es.made by the c
1ef70 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
1ef80 6d 65 6e 74 3b 20 62 75 74 20 63 68 61 6e 67 65  ment; but change
1ef90 73 20 63 61 75 73 65 64 0a 62 79 20 70 72 69 6f  s caused.by prio
1efa0 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  r SQL statements
1efb0 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
1efc0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 72 65   transaction are
1efd0 20 70 72 65 73 65 72 76 65 64 20 61 6e 64 20 74   preserved and t
1efe0 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 72  he.transaction r
1eff0 65 6d 61 69 6e 73 20 61 63 74 69 76 65 2e 0a 54  emains active..T
1f000 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75  his is the defau
1f010 6c 74 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20  lt behavior and 
1f020 74 68 65 20 62 65 68 61 76 69 6f 72 20 73 70 65  the behavior spe
1f030 63 69 66 69 65 64 20 62 79 20 74 68 65 20 53 51  cified by the SQ
1f040 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c  L.standard.</p><
1f050 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49  /dd>..<dt><b>FAI
1f060 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  L</b></dt>.<dd><
1f070 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
1f080 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
1f090 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
1f0a0 72 73 2c 20 74 68 65 20 46 41 49 4c 0a 72 65 73  rs, the FAIL.res
1f0b0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1f0c0 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72  m aborts the cur
1f0d0 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65  rent SQL stateme
1f0e0 6e 74 20 77 69 74 68 20 61 6e 0a 53 51 4c 49 54  nt with an.SQLIT
1f0f0 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72  E_CONSTRAINT err
1f100 6f 72 2e 20 20 5e 42 75 74 20 74 68 65 20 46 41  or.  ^But the FA
1f110 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20 64 6f  IL resolution do
1f120 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75 74 20  es not.back out 
1f130 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 6f 66  prior changes of
1f140 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
1f150 6e 74 20 74 68 61 74 20 66 61 69 6c 65 64 20 6e  nt that failed n
1f160 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e 64 20 74  or does.it end t
1f170 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  he transaction..
1f180 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66  ^For example, if
1f190 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65   an UPDATE.state
1f1a0 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65 64  ment encountered
1f1b0 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
1f1c0 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31  olation on the 1
1f1d0 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a 69 74  00th row that.it
1f1e0 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 70 64   attempts to upd
1f1f0 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20 66 69  ate, then the fi
1f200 72 73 74 20 39 39 20 72 6f 77 20 63 68 61 6e 67  rst 99 row chang
1f210 65 73 20 61 72 65 20 70 72 65 73 65 72 76 65 64  es are preserved
1f220 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74 6f 20  .but changes to 
1f230 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62 65 79  rows 100 and bey
1f240 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e  ond never occur.
1f250 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
1f260 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74  b>IGNORE</b></dt
1f270 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
1f280 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
1f290 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1f2a0 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20  on occurs, .the 
1f2b0 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74 69 6f  IGNORE resolutio
1f2c0 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b 69 70  n algorithm skip
1f2d0 73 20 74 68 65 20 6f 6e 65 20 72 6f 77 20 74 68  s the one row th
1f2e0 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20  at contains.the 
1f2f0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1f300 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69 6e 75  tion and continu
1f310 65 73 20 70 72 6f 63 65 73 73 69 6e 67 20 73 75  es processing su
1f320 62 73 65 71 75 65 6e 74 20 72 6f 77 73 0a 6f 66  bsequent rows.of
1f330 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
1f340 6e 74 20 61 73 20 69 66 20 6e 6f 74 68 69 6e 67  nt as if nothing
1f350 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74 68   went wrong..Oth
1f360 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20 61  er rows before a
1f370 6e 64 20 61 66 74 65 72 20 74 68 65 20 72 6f 77  nd after the row
1f380 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20   that.contained 
1f390 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
1f3a0 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69 6e 73  iolation are ins
1f3b0 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
1f3c0 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65  .normally. ^No e
1f3d0 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
1f3e0 20 77 68 65 6e 20 74 68 65 20 49 47 4e 4f 52 45   when the IGNORE
1f3f0 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
1f400 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 69  tion.algorithm i
1f410 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e  s used.</p></dd>
1f420 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45  ..<dt><b>REPLACE
1f430 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
1f440 3e 20 5e 57 68 65 6e 20 61 20 55 4e 49 51 55 45  > ^When a UNIQUE
1f450 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1f460 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
1f470 65 20 52 45 50 4c 41 43 45 20 61 6c 67 6f 72 69  e REPLACE algori
1f480 74 68 6d 0a 64 65 6c 65 74 65 73 20 70 72 65 2d  thm.deletes pre-
1f490 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20 74 68  existing rows th
1f4a0 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20 74  at are causing t
1f4b0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
1f4c0 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20 74 6f  olation.prior to
1f4d0 20 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 75 70   inserting or up
1f4e0 64 61 74 69 6e 67 20 74 68 65 20 63 75 72 72 65  dating the curre
1f4f0 6e 74 20 72 6f 77 20 61 6e 64 20 74 68 65 20 63  nt row and the c
1f500 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73  ommand continues
1f510 20 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d   .executing norm
1f520 61 6c 6c 79 2e 0a 5e 49 66 20 61 20 4e 4f 54 20  ally..^If a NOT 
1f530 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
1f540 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
1f550 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f  , the REPLACE co
1f560 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69 6f  nflict.resolutio
1f570 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65 20 4e  n replaces the N
1f580 55 4c 4c 20 76 61 6c 75 65 20 77 69 74 68 0a 74  ULL value with.t
1f590 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
1f5a0 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e   for that column
1f5b0 2c 20 6f 72 20 69 66 20 74 68 65 20 63 6f 6c 75  , or if the colu
1f5c0 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61 75 6c  mn has no defaul
1f5d0 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68  t.value, then th
1f5e0 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68  e ABORT algorith
1f5f0 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49 66 20 61  m is used..^If a
1f600 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
1f610 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
1f620 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20  rs, the REPLACE 
1f630 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
1f640 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 61 6c  ion.algorithm al
1f650 77 61 79 73 20 77 6f 72 6b 73 20 6c 69 6b 65 20  ways works like 
1f660 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ABORT.</p>..<p>^
1f670 57 68 65 6e 20 74 68 65 20 52 45 50 4c 41 43 45  When the REPLACE
1f680 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
1f690 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64 65  tion strategy de
1f6a0 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f 72  letes rows in or
1f6b0 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20 61  der to.satisfy a
1f6c0 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43 52   constraint, [CR
1f6d0 45 41 54 45 20 54 52 49 47 47 45 52 20 7c 20 64  EATE TRIGGER | d
1f6e0 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 5d 20  elete triggers] 
1f6f0 66 69 72 65 20 69 66 20 61 6e 64 20 6f 6e 6c 79  fire if and only
1f700 20 69 66 0a 5b 72 65 63 75 72 73 69 76 65 5f 74   if.[recursive_t
1f710 72 69 67 67 65 72 73 20 70 72 61 67 6d 61 20 7c  riggers pragma |
1f720 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
1f730 65 72 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64  ers] are enabled
1f740 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b  .</p>..<p>^The [
1f750 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68  sqlite3_update_h
1f760 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20 68 6f 6f  ook | update hoo
1f770 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65  k] is not invoke
1f780 64 20 66 6f 72 20 72 6f 77 73 20 74 68 61 74 0a  d for rows that.
1f790 61 72 65 20 64 65 6c 65 74 65 64 20 62 79 20 74  are deleted by t
1f7a0 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
1f7b0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73  ict resolution s
1f7c0 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f 72 20 64  trategy.  ^Nor d
1f7d0 6f 65 73 0a 52 45 50 4c 41 43 45 20 69 6e 63 72  oes.REPLACE incr
1f7e0 65 6d 65 6e 74 20 74 68 65 20 5b 73 71 6c 69 74  ement the [sqlit
1f7f0 65 33 5f 63 68 61 6e 67 65 73 20 7c 20 63 68 61  e3_changes | cha
1f800 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e 0a 54 68  nge counter]..Th
1f810 65 20 65 78 63 65 70 74 69 6f 6e 61 6c 20 62 65  e exceptional be
1f820 68 61 76 69 6f 72 73 20 64 65 66 69 6e 65 64 20  haviors defined 
1f830 69 6e 20 74 68 69 73 20 70 61 72 61 67 72 61 70  in this paragrap
1f840 68 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 0a  h might change .
1f850 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c 65  in a future rele
1f860 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a  ase.</p>.</dl>..
1f870 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74 68  <p>^The algorith
1f880 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  m specified in t
1f890 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f 66 20  he OR clause of 
1f8a0 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  an INSERT or UPD
1f8b0 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61 6e  ATE.overrides an
1f8c0 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63  y algorithm spec
1f8d0 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41 54  ified in a CREAT
1f8e0 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20  E TABLE..^If no 
1f8f0 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
1f900 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65 2c  cified anywhere,
1f910 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
1f920 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70  ithm is used.</p
1f930 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1f940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f980 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1f990 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78 20  REINDEX reindex 
1f9a0 52 45 49 4e 44 45 58 0a 0a 52 65 63 75 72 73 69  REINDEX..Recursi
1f9b0 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
1f9c0 72 65 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74  reindex-stmt.</t
1f9d0 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 49  cl>..<p>^The REI
1f9e0 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20  NDEX command is 
1f9f0 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20 61  used to delete a
1fa00 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64 69  nd recreate indi
1fa10 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63 68  ces from scratch
1fa20 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66 75 6c  ..This is useful
1fa30 20 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e 69   when the defini
1fa40 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74  tion of a collat
1fa50 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61 73  ion sequence has
1fa60 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a   changed..</p>..
1fa70 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44  <p>^If the REIND
1fa80 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f  EX keyword is no
1fa90 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
1faa0 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e  collation-sequen
1fab0 63 65 20 6f 72 20 64 61 74 61 62 61 73 65 20 0a  ce or database .
1fac0 6f 62 6a 65 63 74 20 69 64 65 6e 74 69 66 69 65  object identifie
1fad0 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69  r, then all indi
1fae0 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63  ces in all attac
1faf0 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72  hed databases ar
1fb00 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e 5e  e rebuilt...<p>^
1fb10 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b  If the REINDEX k
1fb20 65 79 77 6f 72 64 20 69 73 20 66 6f 6c 6c 6f 77  eyword is follow
1fb30 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f  ed by a collatio
1fb40 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 2c  n-sequence name,
1fb50 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64 69 63 65   then.all indice
1fb60 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65  s in all attache
1fb70 64 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  d databases that
1fb80 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20 63   use the named c
1fb90 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
1fba0 65 73 0a 61 72 65 20 72 65 63 72 65 61 74 65 64  es.are recreated
1fbb0 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20 74  . ..<p>^Or, if t
1fbc0 68 65 20 61 72 67 75 6d 65 6e 74 20 61 74 74 61  he argument atta
1fbd0 63 68 65 64 20 74 6f 20 74 68 65 20 52 45 49 4e  ched to the REIN
1fbe0 44 45 58 20 69 64 65 6e 74 69 66 69 65 73 20 61  DEX identifies a
1fbf0 20 73 70 65 63 69 66 69 63 20 0a 64 61 74 61 62   specific .datab
1fc00 61 73 65 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  ase table, then 
1fc10 61 6c 6c 20 69 6e 64 69 63 65 73 20 61 74 74 61  all indices atta
1fc20 63 68 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  ched to the data
1fc30 62 61 73 65 20 74 61 62 6c 65 20 61 72 65 20 72  base table are r
1fc40 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20 69 74 20  ebuilt. .^If it 
1fc50 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70 65  identifies a spe
1fc60 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20 69  cific database i
1fc70 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75 73 74 20  ndex, then just 
1fc80 74 68 61 74 20 69 6e 64 65 78 20 69 73 20 72 65  that index is re
1fc90 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66  created...<p>^If
1fca0 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61 73 65 2d   no <i>database-
1fcb0 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73 70 65 63  name</i> is spec
1fcc0 69 66 69 65 64 20 61 6e 64 20 74 68 65 72 65 20  ified and there 
1fcd0 65 78 69 73 74 73 20 62 6f 74 68 20 61 20 74 61  exists both a ta
1fce0 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64  ble or.index and
1fcf0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
1fd00 75 65 6e 63 65 20 6f 66 20 74 68 65 20 73 70 65  uence of the spe
1fd10 63 69 66 69 65 64 20 6e 61 6d 65 2c 20 53 51 4c  cified name, SQL
1fd20 69 74 65 20 69 6e 74 65 72 70 72 65 74 73 0a 74  ite interprets.t
1fd30 68 69 73 20 61 73 20 61 20 72 65 71 75 65 73 74  his as a request
1fd40 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20   to rebuild the 
1fd50 69 6e 64 69 63 65 73 20 74 68 61 74 20 75 73 65  indices that use
1fd60 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61   the named colla
1fd70 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e 0a 54  tion sequence..T
1fd80 68 69 73 20 61 6d 62 69 67 75 69 74 79 20 69 6e  his ambiguity in
1fd90 20 74 68 65 20 73 79 6e 74 61 78 20 6d 61 79 20   the syntax may 
1fda0 62 65 20 61 76 6f 69 64 65 64 20 62 79 20 61 6c  be avoided by al
1fdb0 77 61 79 73 20 73 70 65 63 69 66 79 69 6e 67 20  ways specifying 
1fdc0 61 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61  a.<i>database-na
1fdd0 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65 69 6e  me</i> when rein
1fde0 64 65 78 69 6e 67 20 61 20 73 70 65 63 69 66 69  dexing a specifi
1fdf0 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  c table or index
1fe00 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
1fe10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe50 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1fe60 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65   REPLACE replace
1fe70 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e   REPLACE..</tcl>
1fe80 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41 43  ..<p>^The REPLAC
1fe90 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20  E command is an 
1fea0 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 22 5b  alias for the "[
1feb0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e  ON CONFLICT | IN
1fec0 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 5d  SERT OR REPLACE]
1fed0 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74 68 65  ".variant of the
1fee0 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e   [INSERT] comman
1fef0 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61 73 20  d.  .This alias 
1ff00 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  is provided for 
1ff10 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 6f 74  compatibility ot
1ff20 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
1ff30 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65 20 74   engines.  See t
1ff40 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d  he .[INSERT] com
1ff50 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74 69  mand documentati
1ff60 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  on for additiona
1ff70 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  l information.</
1ff80 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  p>  ..<tcl>.####
1ff90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffd0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
1ffe0 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c 65 63  ion SELECT selec
1fff0 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72 79 7d  t {SELECT query}
20000 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
20010 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d  eDiagram select-
20020 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70  stmt.</tcl>...<p
20030 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74 61 74  >The SELECT stat
20040 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  ement is used to
20050 20 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62   query the datab
20060 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74  ase.  The.result
20070 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69 73 20   of a SELECT is 
20080 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77  zero or more row
20090 73 20 6f 66 20 64 61 74 61 20 77 68 65 72 65 20  s of data where 
200a0 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66  each row.has a f
200b0 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63  ixed number of c
200c0 6f 6c 75 6d 6e 73 2e 20 20 0a 0a 3c 70 3e 54 68  olumns.  ..<p>Th
200d0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
200e0 6e 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 63  nt is the most c
200f0 6f 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61  omplicated comma
20100 6e 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61  nd in the SQL la
20110 6e 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20  nguage..To make 
20120 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  the description 
20130 65 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77  easier to follow
20140 2c 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70 61  , some of the pa
20150 73 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65 73  ssages below des
20160 63 72 69 62 65 0a 74 68 65 20 77 61 79 20 74 68  cribe.the way th
20170 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20  e data returned 
20180 62 79 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  by a SELECT stat
20190 65 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d 69  ement is determi
201a0 6e 65 64 20 61 73 20 61 20 73 65 72 69 65 73 20  ned as a series 
201b0 6f 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73 20  of.steps. It is 
201c0 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65  important to kee
201d0 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74  p in mind that t
201e0 68 69 73 20 69 73 20 70 75 72 65 6c 79 20 69 6c  his is purely il
201f0 6c 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e 20  lustrative -.in 
20200 70 72 61 63 74 69 63 65 20 6e 65 69 74 68 65 72  practice neither
20210 20 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20   SQLite nor any 
20220 6f 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65  other SQL engine
20230 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20   is required to 
20240 66 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20  follow .this or 
20250 61 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69 66  any other specif
20260 69 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 68 33  ic process...<h3
20270 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20 50  >Simple Select P
20280 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a 0a  rocessing</h3>..
20290 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66 6f  <p>The syntax fo
202a0 72 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  r a simple SELEC
202b0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64  T statement is d
202c0 65 70 69 63 74 65 64 20 69 6e 20 74 68 65 20 0a  epicted in the .
202d0 5b 73 69 6d 70 6c 65 2d 71 75 65 72 79 2d 73 74  [simple-query-st
202e0 6d 74 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  mt syntax diagra
202f0 6d 5d 2e 20 47 65 6e 65 72 61 74 69 6e 67 20 74  m]. Generating t
20300 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  he results of a 
20310 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73 74  simple SELECT.st
20320 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 73 65  atement is prese
20330 6e 74 65 64 20 61 73 20 61 20 66 6f 75 72 20 73  nted as a four s
20340 74 65 70 20 70 72 6f 63 65 73 73 20 69 6e 20 74  tep process in t
20350 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 62  he description b
20360 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c  elow:..<ol>.  <l
20370 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75  i> <p>[FROM clau
20380 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20  se] processing: 
20390 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66  The input data f
203a0 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45  or the simple SE
203b0 4c 45 43 54 20 69 73 0a 20 20 20 20 20 20 20 64  LECT is.       d
203c0 65 74 65 72 6d 69 6e 65 64 2e 20 54 68 65 20 69  etermined. The i
203d0 6e 70 75 74 20 64 61 74 61 20 69 73 20 65 69 74  nput data is eit
203e0 68 65 72 20 69 6d 70 6c 69 63 69 74 6c 79 20 61  her implicitly a
203f0 20 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68   single row with
20400 20 30 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e   0.       column
20410 73 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6e  s (if there is n
20420 6f 20 46 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f  o FROM clause) o
20430 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  r is determined 
20440 62 79 20 61 6e 61 6c 79 7a 69 6e 67 20 74 68 65  by analyzing the
20450 0a 20 20 20 20 20 20 20 5b 6a 6f 69 6e 2d 73 6f  .       [join-so
20460 75 72 63 65 20 73 79 6e 74 61 78 20 64 69 61 67  urce syntax diag
20470 72 61 6d 7c 6a 6f 69 6e 2d 73 6f 75 72 63 65 5d  ram|join-source]
20480 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 74   specification t
20490 68 61 74 20 66 6f 6c 6c 6f 77 73 20 0a 20 20 20  hat follows .   
204a0 20 20 20 20 61 6e 20 65 78 70 6c 69 63 69 74 20      an explicit 
204b0 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 20 20 3c  FROM clause..  <
204c0 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20 63 6c  li> <p>[WHERE cl
204d0 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67  ause] processing
204e0 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61  : The input data
204f0 20 69 73 20 66 69 6c 74 65 72 65 64 20 75 73 69   is filtered usi
20500 6e 67 20 74 68 65 20 57 48 45 52 45 0a 20 20 20  ng the WHERE.   
20510 20 20 20 20 63 6c 61 75 73 65 20 65 78 70 72 65      clause expre
20520 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20  ssion.  .  <li> 
20530 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47 52 4f  <p>[GROUP BY|GRO
20540 55 50 20 42 59 2c 20 48 41 56 49 4e 47 20 61 6e  UP BY, HAVING an
20550 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20  d result-column 
20560 65 78 70 72 65 73 73 69 6f 6e 5d 20 70 72 6f 63  expression] proc
20570 65 73 73 69 6e 67 3a 20 0a 20 20 20 20 20 20 20  essing: .       
20580 54 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  The set of resul
20590 74 20 72 6f 77 73 20 69 73 20 63 6f 6d 70 75 74  t rows is comput
205a0 65 64 20 62 79 20 61 67 67 72 65 67 61 74 69 6e  ed by aggregatin
205b0 67 20 74 68 65 20 64 61 74 61 20 61 63 63 6f 72  g the data accor
205c0 64 69 6e 67 20 74 6f 0a 20 20 20 20 20 20 20 61  ding to.       a
205d0 6e 79 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  ny GROUP BY clau
205e0 73 65 20 61 6e 64 20 63 61 6c 63 75 6c 61 74 69  se and calculati
205f0 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  ng the result-se
20600 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 66 6f  t expressions fo
20610 72 20 74 68 65 0a 20 20 20 20 20 20 20 72 6f 77  r the.       row
20620 73 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72 65  s of the filtere
20630 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 2e  d input dataset.
20640 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49    .  <li> <p>[DI
20650 53 54 49 4e 43 54 7c 44 49 53 54 49 4e 43 54 2f  STINCT|DISTINCT/
20660 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70 72 6f  ALL keyword] pro
20670 63 65 73 73 69 6e 67 3a 20 49 66 20 74 68 65 20  cessing: If the 
20680 71 75 65 72 79 20 69 73 20 61 20 22 53 45 4c 45  query is a "SELE
20690 43 54 0a 20 20 20 20 20 20 20 44 49 53 54 49 4e  CT.       DISTIN
206a0 43 54 22 20 71 75 65 72 79 2c 20 64 75 70 6c 69  CT" query, dupli
206b0 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
206c0 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 73  moved from the s
206d0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
206e0 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65  s..</ol>..<p>The
206f0 72 65 20 61 72 65 20 74 77 6f 20 74 79 70 65 73  re are two types
20700 20 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c 45 43   of simple SELEC
20710 54 20 73 74 61 74 65 6d 65 6e 74 20 2d 20 61 67  T statement - ag
20720 67 72 65 67 61 74 65 20 61 6e 64 20 0a 6e 6f 6e  gregate and .non
20730 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69  -aggregate queri
20740 65 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20 53 45  es. ^A simple SE
20750 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
20760 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  s an aggregate q
20770 75 65 72 79 20 69 66 0a 69 74 20 63 6f 6e 74 61  uery if.it conta
20780 69 6e 73 20 65 69 74 68 65 72 20 61 20 47 52 4f  ins either a GRO
20790 55 50 20 42 59 20 63 6c 61 75 73 65 20 6f 72 20  UP BY clause or 
207a0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
207b0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a  egate functions.
207c0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
207d0 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  t. ^Otherwise, i
207e0 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  f a simple SELEC
207f0 54 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 61 67  T contains no ag
20800 67 72 65 67 61 74 65 0a 66 75 6e 63 74 69 6f 6e  gregate.function
20810 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20  s or a GROUP BY 
20820 63 6c 61 75 73 65 2c 20 69 74 20 69 73 20 61 20  clause, it is a 
20830 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75  non-aggregate qu
20840 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44  ery...<p><b>1. D
20850 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20  etermination of 
20860 69 6e 70 75 74 20 64 61 74 61 20 28 46 52 4f 4d  input data (FROM
20870 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69   clause processi
20880 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ng).</b>.<tcl>hd
20890 5f 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d 63 6c  _fragment fromcl
208a0 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  ause</tcl>.<tcl>
208b0 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46 52 4f  hd_keywords {FRO
208c0 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a  M clause}</tcl>.
208d0 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 20 64 61  .<p>The input da
208e0 74 61 20 75 73 65 64 20 62 79 20 61 20 73 69 6d  ta used by a sim
208f0 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72 79  ple SELECT query
20900 20 69 73 20 61 20 73 65 74 20 6f 66 20 3c 69 3e   is a set of <i>
20910 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61 63 68  N</i> rows .each
20920 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e   <i>M</i> column
20930 73 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66  s wide...<p>^(If
20940 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
20950 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
20960 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
20970 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
20980 20 74 68 65 20 0a 69 6e 70 75 74 20 64 61 74 61   the .input data
20990 20 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 61   is implicitly a
209a0 20 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65 72 6f   single row zero
209b0 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29 5e 20   columns wide)^ 
209c0 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31  (i.e. <i>N</i>=1
209d0 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29   and.<i>M</i>=0)
209e0 2e 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f 4d 20  ...<p>If a FROM 
209f0 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
20a00 69 65 64 2c 20 74 68 65 20 64 61 74 61 20 6f 6e  ied, the data on
20a10 20 77 68 69 63 68 20 61 20 73 69 6d 70 6c 65 20   which a simple 
20a20 53 45 4c 45 43 54 20 71 75 65 72 79 0a 6f 70 65  SELECT query.ope
20a30 72 61 74 65 73 20 63 6f 6d 65 73 20 66 72 6f 6d  rates comes from
20a40 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   the one or more
20a50 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
20a60 65 72 69 65 73 20 28 53 45 4c 45 43 54 20 73 74  eries (SELECT st
20a70 61 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61 72 65  atements.in pare
20a80 6e 74 68 65 73 69 73 29 20 73 70 65 63 69 66 69  nthesis) specifi
20a90 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ed following the
20aa0 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 5e   FROM keyword. ^
20ab0 41 20 73 75 62 2d 73 65 6c 65 63 74 20 73 70 65  A sub-select spe
20ac0 63 69 66 69 65 64 0a 69 6e 20 74 68 65 20 6a 6f  cified.in the jo
20ad0 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f 77  in-source follow
20ae0 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  ing the FROM cla
20af0 75 73 65 20 69 6e 20 61 20 73 69 6d 70 6c 65 20  use in a simple 
20b00 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
20b10 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73 20 69   is.handled as i
20b20 66 20 69 74 20 77 61 73 20 61 20 74 61 62 6c 65  f it was a table
20b30 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
20b40 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
20b50 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 0a 73   executing the.s
20b60 75 62 2d 73 65 6c 65 63 74 20 73 74 61 74 65 6d  ub-select statem
20b70 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d  ent. ^Each colum
20b80 6e 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  n of the sub-sel
20b90 65 63 74 20 64 61 74 61 73 65 74 20 69 6e 68 65  ect dataset inhe
20ba0 72 69 74 73 20 74 68 65 0a 5b 63 6f 6c 6c 61 74  rits the.[collat
20bb0 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ion|collation se
20bc0 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66 66  quence] and [aff
20bd0 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f  inity] of the co
20be0 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70 72  rresponding expr
20bf0 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73 75  ession.in the su
20c00 62 2d 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  b-select stateme
20c10 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72  nt...<p>^If ther
20c20 65 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67  e is only a sing
20c30 6c 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  le table in the 
20c40 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c  join-source foll
20c50 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 0a 63  owing the FROM.c
20c60 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20  lause, then the 
20c70 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64 20  input data used 
20c80 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  by the SELECT st
20c90 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 63  atement is the c
20ca0 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a 6e  ontents of the.n
20cb0 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66 20  amed table. ^If 
20cc0 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74 68  there is more th
20cd0 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20 73 70 65  an one table spe
20ce0 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
20cf0 66 20 74 68 65 0a 6a 6f 69 6e 2d 73 6f 75 72 63  f the.join-sourc
20d00 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  e following the 
20d10 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2c 20 74 68  FROM keyword, th
20d20 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  en the contents 
20d30 6f 66 20 65 61 63 68 20 6e 61 6d 65 64 20 74 61  of each named ta
20d40 62 6c 65 0a 61 72 65 20 6a 6f 69 6e 65 64 20 69  ble.are joined i
20d50 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74  nto a single dat
20d60 61 73 65 74 20 66 6f 72 20 74 68 65 20 73 69 6d  aset for the sim
20d70 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
20d80 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61 74 65 20  ment to operate 
20d90 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68 6f 77 20  on..Exactly how 
20da0 74 68 65 20 64 61 74 61 20 69 73 20 63 6f 6d 62  the data is comb
20db0 69 6e 65 64 20 64 65 70 65 6e 64 73 20 6f 6e 20  ined depends on 
20dc0 74 68 65 20 73 70 65 63 69 66 69 63 20 5b 6a 6f  the specific [jo
20dd0 69 6e 2d 6f 70 5d 20 61 6e 64 0a 5b 6a 6f 69 6e  in-op] and.[join
20de0 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20 75 73 65  -constraint] use
20df0 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65  d to connect the
20e00 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
20e10 65 72 69 65 73 20 74 6f 67 65 74 68 65 72 2e 0a  eries together..
20e20 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e  .<p>All joins in
20e30 20 53 51 4c 69 74 65 20 61 72 65 20 62 61 73 65   SQLite are base
20e40 64 20 6f 6e 20 74 68 65 20 63 61 72 74 65 73 69  d on the cartesi
20e50 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68  an product of th
20e60 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74  e left and.right
20e70 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20  -hand datasets. 
20e80 5e 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ^The columns of 
20e90 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
20ea0 6f 64 75 63 74 20 64 61 74 61 73 65 74 20 61 72  oduct dataset ar
20eb0 65 2c 20 69 6e 20 0a 6f 72 64 65 72 2c 20 61 6c  e, in .order, al
20ec0 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  l the columns of
20ed0 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64   the left-hand d
20ee0 61 74 61 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20  ataset followed 
20ef0 62 79 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d  by all the colum
20f00 6e 73 0a 6f 66 20 74 68 65 20 72 69 67 68 74 2d  ns.of the right-
20f10 68 61 6e 64 20 64 61 74 61 73 65 74 2e 20 5e 54  hand dataset. ^T
20f20 68 65 72 65 20 69 73 20 61 20 72 6f 77 20 69 6e  here is a row in
20f30 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
20f40 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 0a 66  roduct dataset.f
20f50 6f 72 6d 65 64 20 62 79 20 63 6f 6d 62 69 6e 69  ormed by combini
20f60 6e 67 20 65 61 63 68 20 75 6e 69 71 75 65 20 63  ng each unique c
20f70 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20  ombination of a 
20f80 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6c 65 66  row from the lef
20f90 74 2d 68 61 6e 64 20 0a 61 6e 64 20 72 69 67 68  t-hand .and righ
20fa0 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e  t-hand datasets.
20fb0 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64   ^(In other word
20fc0 73 2c 20 69 66 20 74 68 65 20 6c 65 66 74 2d 68  s, if the left-h
20fd0 61 6e 64 20 64 61 74 61 73 65 74 20 63 6f 6e 73  and dataset cons
20fe0 69 73 74 73 20 6f 66 0a 3c 69 3e 4e 6c 68 73 3c  ists of.<i>Nlhs<
20ff0 2f 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e 4d  /i> rows of <i>M
21000 6c 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c  lhs</i> columns,
21010 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 68   and the right-h
21020 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a 3c  and dataset of.<
21030 69 3e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77 73 20  i>Nrhs</i> rows 
21040 6f 66 20 3c 69 3e 4d 72 68 73 3c 2f 69 3e 20 63  of <i>Mrhs</i> c
21050 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65  olumns, then the
21060 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
21070 63 74 20 69 73 20 61 0a 64 61 74 61 73 65 74 20  ct is a.dataset 
21080 6f 66 20 3c 69 3e 4e 6c 68 73 2e 4e 72 68 73 3c  of <i>Nlhs.Nrhs<
21090 2f 69 3e 20 72 6f 77 73 2c 20 65 61 63 68 20 63  /i> rows, each c
210a0 6f 6e 74 61 69 6e 69 6e 67 20 3c 69 3e 4d 6c 68  ontaining <i>Mlh
210b0 73 2b 4d 72 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d  s+Mrhs</i> colum
210c0 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ns.)^..<p>^If th
210d0 65 20 6a 6f 69 6e 2d 6f 70 20 69 73 20 22 43 52  e join-op is "CR
210e0 4f 53 53 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45  OSS JOIN", "INNE
210f0 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20  R JOIN", "JOIN" 
21100 6f 72 20 61 20 63 6f 6d 6d 61 0a 28 22 2c 22 29  or a comma.(",")
21110 20 61 6e 64 20 74 68 65 72 65 20 69 73 20 6e 6f   and there is no
21120 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
21130 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65  use, then the re
21140 73 75 6c 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e  sult of the join
21150 20 69 73 0a 73 69 6d 70 6c 79 20 74 68 65 20 63   is.simply the c
21160 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
21170 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
21180 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
21190 73 65 74 73 2e 20 0a 49 66 20 6a 6f 69 6e 2d 6f  sets. .If join-o
211a0 70 20 64 6f 65 73 20 68 61 76 65 20 4f 4e 20 6f  p does have ON o
211b0 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 73 2c  r USING clauses,
211c0 20 74 68 6f 73 65 20 61 72 65 20 68 61 6e 64 6c   those are handl
211d0 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a  ed according to.
211e0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 75  the following bu
211f0 6c 6c 65 74 20 70 6f 69 6e 74 73 3a 0a 0a 3c 75  llet points:..<u
21200 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49  l>.  <li> <p>^(I
21210 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 4f 4e  f there is an ON
21220 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
21230 64 2c 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 65  d, then the ON e
21240 78 70 72 65 73 73 69 6f 6e 20 69 73 0a 20 20 20  xpression is.   
21250 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 66 6f      evaluated fo
21260 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  r each row of th
21270 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
21280 75 63 74 20 61 73 20 61 20 0a 20 20 20 20 20 20  uct as a .      
21290 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
212a0 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20  sion]. All rows 
212b0 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 65 78  for which the ex
212c0 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
212d0 65 73 20 74 6f 20 0a 20 20 20 20 20 20 20 66 61  es to .       fa
212e0 6c 73 65 20 61 72 65 20 65 78 63 6c 75 64 65 64  lse are excluded
212f0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65   from the datase
21300 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  t.)^..  <li> <p>
21310 5e 49 66 20 74 68 65 72 65 20 69 73 20 61 20 55  ^If there is a U
21320 53 49 4e 47 20 63 6c 61 75 73 65 20 73 70 65 63  SING clause spec
21330 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
21340 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72   the join-constr
21350 61 69 6e 74 2c 0a 20 20 20 20 20 20 20 74 68 65  aint,.       the
21360 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f  n each of the co
21370 6c 75 6d 6e 20 6e 61 6d 65 73 20 73 70 65 63 69  lumn names speci
21380 66 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20  fied must exist 
21390 69 6e 20 74 68 65 20 64 61 74 61 73 65 74 73 20  in the datasets 
213a0 74 6f 20 0a 20 20 20 20 20 20 20 62 6f 74 68 20  to .       both 
213b0 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
213c0 68 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f  ht of the join-o
213d0 70 2e 20 5e 28 46 6f 72 20 65 61 63 68 20 70 61  p. ^(For each pa
213e0 69 72 20 6f 66 20 6e 61 6d 65 73 61 6b 65 0a 20  ir of namesake. 
213f0 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 2c 20 74        columns, t
21400 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c  he expression "l
21410 68 73 2e 58 20 3d 20 72 68 73 2e 58 22 20 69 73  hs.X = rhs.X" is
21420 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
21430 61 63 68 20 72 6f 77 20 6f 66 0a 20 20 20 20 20  ach row of.     
21440 20 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20    the cartesian 
21450 70 72 6f 64 75 63 74 20 61 73 20 61 20 5b 62 6f  product as a [bo
21460 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
21470 5d 2e 20 41 6c 6c 20 72 6f 77 73 20 66 6f 72 20  ]. All rows for 
21480 77 68 69 63 68 20 6f 6e 65 0a 20 20 20 20 20 20  which one.      
21490 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20   or more of the 
214a0 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
214b0 75 61 74 65 73 20 74 6f 20 66 61 6c 73 65 20 61  uates to false a
214c0 72 65 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d  re excluded from
214d0 20 74 68 65 0a 20 20 20 20 20 20 20 72 65 73 75   the.       resu
214e0 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20  lt set.)^ ^When 
214f0 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75 65 73  comparing values
21500 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
21510 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20  a USING clause, 
21520 74 68 65 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61  the.       norma
21530 6c 20 72 75 6c 65 73 20 66 6f 72 20 68 61 6e 64  l rules for hand
21540 6c 69 6e 67 20 61 66 66 69 6e 69 74 69 65 73 2c  ling affinities,
21550 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
21560 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20  nces and NULL.  
21570 20 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20 63       values in c
21580 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70 70 6c 79  omparisons apply
21590 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72  . ^The column fr
215a0 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 6f  om the dataset o
215b0 6e 20 74 68 65 0a 20 20 20 20 20 20 20 6c 65 66  n the.       lef
215c0 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74  t-hand side of t
215d0 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f 72  he join operator
215e0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
215f0 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  o be on the left
21600 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 73 69 64  -hand.       sid
21610 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  e of the compari
21620 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 29  son operator (=)
21630 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
21640 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a  s of collation .
21650 20 20 20 20 20 20 20 73 65 71 75 65 6e 63 65 20         sequence 
21660 61 6e 64 20 61 66 66 69 6e 69 74 79 20 70 72 65  and affinity pre
21670 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20  cedence...      
21680 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20 70 61   <p>^For each pa
21690 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64  ir of columns id
216a0 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 55 53  entified by a US
216b0 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20  ING clause, the 
216c0 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 66 72  column.       fr
216d0 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  om the right-han
216e0 64 20 64 61 74 61 73 65 74 20 69 73 20 6f 6d 69  d dataset is omi
216f0 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f  tted from the jo
21700 69 6e 65 64 20 64 61 74 61 73 65 74 2e 20 5e 54  ined dataset. ^T
21710 68 69 73 20 0a 20 20 20 20 20 20 20 69 73 20 74  his .       is t
21720 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e  he only differen
21730 63 65 20 62 65 74 77 65 65 6e 20 61 20 55 53 49  ce between a USI
21740 4e 47 20 63 6c 61 75 73 65 20 61 6e 64 20 69 74  NG clause and it
21750 73 20 65 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a  s equivalent ON.
21760 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e         constrain
21770 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28  t...  <li> <p>^(
21780 49 66 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  If the NATURAL k
21790 65 79 77 6f 72 64 20 69 73 20 61 64 64 65 64 20  eyword is added 
217a0 74 6f 20 61 6e 79 20 6f 66 20 74 68 65 20 6a 6f  to any of the jo
217b0 69 6e 2d 6f 70 73 2c 20 74 68 65 6e 20 61 6e 0a  in-ops, then an.
217c0 20 20 20 20 20 20 20 69 6d 70 6c 69 63 69 74 20         implicit 
217d0 55 53 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  USING clause is 
217e0 61 64 64 65 64 20 74 6f 20 74 68 65 20 6a 6f 69  added to the joi
217f0 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 54  n-constraints. T
21800 68 65 20 69 6d 70 6c 69 63 69 74 0a 20 20 20 20  he implicit.    
21810 20 20 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20     USING clause 
21820 63 6f 6e 74 61 69 6e 73 20 65 61 63 68 20 6f 66  contains each of
21830 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
21840 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
21850 20 62 6f 74 68 0a 20 20 20 20 20 20 20 74 68 65   both.       the
21860 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
21870 68 61 6e 64 20 69 6e 70 75 74 20 64 61 74 61 73  hand input datas
21880 65 74 73 2e 29 5e 20 5e 49 66 20 74 68 65 20 6c  ets.)^ ^If the l
21890 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61  eft and right-ha
218a0 6e 64 0a 20 20 20 20 20 20 20 69 6e 70 75 74 20  nd.       input 
218b0 64 61 74 61 73 65 74 73 20 66 65 61 74 75 72 65  datasets feature
218c0 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d   no common colum
218d0 6e 20 6e 61 6d 65 73 2c 20 74 68 65 6e 20 74 68  n names, then th
218e0 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72  e NATURAL keywor
218f0 64 0a 20 20 20 20 20 20 20 68 61 73 20 6e 6f 20  d.       has no 
21900 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65  effect on the re
21910 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6a 6f 69  sults of the joi
21920 6e 2e 20 5e 41 20 55 53 49 4e 47 20 6f 72 20 4f  n. ^A USING or O
21930 4e 20 63 6c 61 75 73 65 20 6d 61 79 0a 20 20 20  N clause may.   
21940 20 20 20 20 6e 6f 74 20 62 65 20 61 64 64 65 64      not be added
21950 20 74 6f 20 61 20 6a 6f 69 6e 20 74 68 61 74 20   to a join that 
21960 73 70 65 63 69 66 69 65 73 20 74 68 65 20 4e 41  specifies the NA
21970 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 2e 0a 0a  TURAL keyword...
21980 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74    <li> <p>^(If t
21990 68 65 20 6a 6f 69 6e 2d 6f 70 20 69 73 20 61 20  he join-op is a 
219a0 22 4c 45 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22  "LEFT JOIN" or "
219b0 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22  LEFT OUTER JOIN"
219c0 2c 20 74 68 65 6e 20 61 66 74 65 72 0a 20 20 20  , then after.   
219d0 20 20 20 20 74 68 65 20 4f 4e 20 6f 72 20 55 53      the ON or US
219e0 49 4e 47 20 66 69 6c 74 65 72 69 6e 67 20 63 6c  ING filtering cl
219f0 61 75 73 65 73 20 68 61 76 65 20 62 65 65 6e 20  auses have been 
21a00 61 70 70 6c 69 65 64 2c 20 61 6e 20 65 78 74 72  applied, an extr
21a10 61 20 72 6f 77 20 69 73 20 0a 20 20 20 20 20 20  a row is .      
21a20 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6f 75   added to the ou
21a30 74 70 75 74 20 66 6f 72 20 65 61 63 68 20 72 6f  tput for each ro
21a40 77 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  w in the origina
21a50 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e 70 75  l left-hand inpu
21a60 74 20 0a 20 20 20 20 20 20 20 64 61 74 61 73 65  t .       datase
21a70 74 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  t that correspon
21a80 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20 61 74  ds to no rows at
21a90 20 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f 6d 70   all in the comp
21aa0 6f 73 69 74 65 0a 20 20 20 20 20 20 20 64 61 74  osite.       dat
21ab0 61 73 65 74 20 28 69 66 20 61 6e 79 29 2e 29 5e  aset (if any).)^
21ac0 20 5e 54 68 65 20 61 64 64 65 64 20 72 6f 77 73   ^The added rows
21ad0 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20 76 61   contain NULL va
21ae0 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  lues in the colu
21af0 6d 6e 73 0a 20 20 20 20 20 20 20 74 68 61 74 20  mns.       that 
21b00 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 63  would normally c
21b10 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20 63 6f  ontain values co
21b20 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 72 69  pied from the ri
21b30 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 0a 20  ght-hand input. 
21b40 20 20 20 20 20 20 64 61 74 61 73 65 74 2e 20 20        dataset.  
21b50 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65  .</ul>..<p>^(Whe
21b60 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74 77 6f 20  n more than two 
21b70 74 61 62 6c 65 73 20 61 72 65 20 6a 6f 69 6e 65  tables are joine
21b80 64 20 74 6f 67 65 74 68 65 72 20 61 73 20 70 61  d together as pa
21b90 72 74 20 6f 66 20 61 20 46 52 4f 4d 20 63 6c 61  rt of a FROM cla
21ba0 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20 6f 70  use,.the join op
21bb0 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  erations are pro
21bc0 63 65 73 73 65 64 20 69 6e 20 6f 72 64 65 72 20  cessed in order 
21bd0 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
21be0 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a 77 6f  ht. In other .wo
21bf0 72 64 73 2c 20 74 68 65 20 46 52 4f 4d 20 63 6c  rds, the FROM cl
21c00 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f 70 2d  ause (A join-op-
21c10 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29  1 B join-op-2 C)
21c20 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 73 20   is computed as 
21c30 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42  .((A join-op-1 B
21c40 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 2e 29  ) join-op-2 C).)
21c50 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
21c60 65 6e 74 20 63 72 6f 73 73 6a 6f 69 6e 20 7b 74  ent crossjoin {t
21c70 72 65 61 74 73 20 74 68 65 20 43 52 4f 53 53 20  reats the CROSS 
21c80 4a 4f 49 4e 20 6f 70 65 72 61 74 6f 72 20 73 70  JOIN operator sp
21c90 65 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c 3e 0a 3c  ecially}</tcl>.<
21ca0 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65 3a 20  p><b>Side note: 
21cb0 53 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  Special handling
21cc0 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 2e 3c   of CROSS JOIN.<
21cd0 2f 62 3e 0a 5e 54 68 65 72 65 20 69 73 20 6e 6f  /b>.^There is no
21ce0 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
21cf0 65 65 6e 20 74 68 65 20 22 49 4e 4e 45 52 20 4a  een the "INNER J
21d00 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64  OIN", "JOIN" and
21d10 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72 61 74   "," join.operat
21d20 6f 72 73 2e 20 54 68 65 79 20 61 72 65 20 63 6f  ors. They are co
21d30 6d 70 6c 65 74 65 6c 79 20 69 6e 74 65 72 63 68  mpletely interch
21d40 61 6e 67 65 61 62 6c 65 20 69 6e 20 53 51 4c 69  angeable in SQLi
21d50 74 65 2e 0a 5e 28 54 68 65 20 22 43 52 4f 53 53  te..^(The "CROSS
21d60 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72   JOIN" join oper
21d70 61 74 6f 72 20 70 72 6f 64 75 63 65 73 20 74 68  ator produces th
21d80 65 20 73 61 6d 65 20 72 65 73 75 6c 74 20 61 73  e same result as
21d90 20 74 68 65 20 0a 22 49 4e 4e 45 52 20 4a 4f 49   the ."INNER JOI
21da0 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22  N", "JOIN" and "
21db0 2c 22 20 6f 70 65 72 61 74 6f 72 73 29 5e 2c 20  ," operators)^, 
21dc0 62 75 74 20 69 73 20 0a 3c 61 20 68 72 65 66 3d  but is .<a href=
21dd0 6f 70 74 6f 76 65 72 76 69 65 77 2e 68 74 6d 6c  optoverview.html
21de0 23 63 72 6f 73 73 6a 6f 69 6e 3e 68 61 6e 64 6c  #crossjoin>handl
21df0 65 64 20 64 69 66 66 65 72 65 6e 74 6c 79 20 62  ed differently b
21e00 79 20 74 68 65 20 71 75 65 72 79 0a 6f 70 74 69  y the query.opti
21e10 6d 69 7a 65 72 3c 2f 61 3e 20 69 6e 20 74 68 61  mizer</a> in tha
21e20 74 20 69 74 20 70 72 65 76 65 6e 74 73 20 74 68  t it prevents th
21e30 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
21e40 72 20 66 72 6f 6d 20 72 65 6f 72 64 65 72 69 6e  r from reorderin
21e50 67 0a 74 68 65 20 74 61 62 6c 65 73 20 69 6e 20  g.the tables in 
21e60 74 68 65 20 6a 6f 69 6e 2e 20 20 41 6e 20 61 70  the join.  An ap
21e70 70 6c 69 63 61 74 69 6f 6e 20 70 72 6f 67 72 61  plication progra
21e80 6d 6d 65 72 20 63 61 6e 20 75 73 65 20 74 68 65  mmer can use the
21e90 20 43 52 4f 53 53 20 4a 4f 49 4e 20 0a 6f 70 65   CROSS JOIN .ope
21ea0 72 61 74 6f 72 20 74 6f 20 64 69 72 65 63 74 6c  rator to directl
21eb0 79 20 69 6e 66 6c 75 65 6e 63 65 20 74 68 65 20  y influence the 
21ec0 61 6c 67 6f 72 69 74 68 6d 20 74 68 61 74 20 69  algorithm that i
21ed0 73 20 63 68 6f 73 65 6e 20 74 6f 20 69 6d 70 6c  s chosen to impl
21ee0 65 6d 65 6e 74 0a 74 68 65 20 53 45 4c 45 43 54  ement.the SELECT
21ef0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 76 6f   statement.  Avo
21f00 69 64 20 75 73 69 6e 67 20 43 52 4f 53 53 20 4a  id using CROSS J
21f10 4f 49 4e 20 65 78 63 65 70 74 20 69 6e 20 73 70  OIN except in sp
21f20 65 63 69 66 69 63 20 73 69 74 75 61 74 69 6f 6e  ecific situation
21f30 73 20 0a 77 68 65 72 65 20 6d 61 6e 75 61 6c 20  s .where manual 
21f40 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 65 20 71  control of the q
21f50 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69  uery optimizer i
21f60 73 20 64 65 73 69 72 65 64 2e 20 20 41 76 6f 69  s desired.  Avoi
21f70 64 20 75 73 69 6e 67 0a 43 52 4f 53 53 20 4a 4f  d using.CROSS JO
21f80 49 4e 20 65 61 72 6c 79 20 69 6e 20 74 68 65 20  IN early in the 
21f90 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f 66 20 61  development of a
21fa0 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 61 73  n application as
21fb0 20 64 6f 69 6e 67 20 73 6f 20 69 73 0a 61 20 3c   doing so is.a <
21fc0 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 63  a href="http://c
21fd0 32 2e 63 6f 6d 2f 63 67 69 2f 77 69 6b 69 3f 50  2.com/cgi/wiki?P
21fe0 72 65 6d 61 74 75 72 65 4f 70 74 69 6d 69 7a 61  rematureOptimiza
21ff0 74 69 6f 6e 22 3e 70 72 65 6d 61 74 75 72 65 0a  tion">premature.
22000 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 61 3e  optimization</a>
22010 2e 20 20 54 68 65 20 73 70 65 63 69 61 6c 20 68  .  The special h
22020 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53  andling of CROSS
22030 20 4a 4f 49 4e 20 69 73 20 61 6e 20 53 51 4c 69   JOIN is an SQLi
22040 74 65 2d 73 70 65 63 69 66 69 63 0a 66 65 61 74  te-specific.feat
22050 75 72 65 20 61 6e 64 20 69 73 20 6e 6f 74 20 61  ure and is not a
22060 20 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72   part of standar
22070 64 20 53 51 4c 2e 0a 20 20 20 20 20 20 20 0a 0a  d SQL..       ..
22080 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
22090 20 77 68 65 72 65 63 6c 61 75 73 65 3c 2f 74 63   whereclause</tc
220a0 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
220b0 72 64 73 20 7b 57 48 45 52 45 20 63 6c 61 75 73  rds {WHERE claus
220c0 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 32  e}</tcl>.<p><b>2
220d0 2e 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  . WHERE clause f
220e0 69 6c 74 65 72 69 6e 67 2e 3c 2f 62 3e 0a 0a 3c  iltering.</b>..<
220f0 70 3e 5e 28 49 66 20 61 20 57 48 45 52 45 20 63  p>^(If a WHERE c
22100 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
22110 65 64 2c 20 74 68 65 20 57 48 45 52 45 20 65 78  ed, the WHERE ex
22120 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
22130 75 61 74 65 64 20 66 6f 72 20 0a 65 61 63 68 20  uated for .each 
22140 72 6f 77 20 69 6e 20 74 68 65 20 69 6e 70 75 74  row in the input
22150 20 64 61 74 61 20 61 73 20 61 20 5b 62 6f 6f 6c   data as a [bool
22160 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  ean expression].
22170 20 41 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77 68   All rows for wh
22180 69 63 68 20 74 68 65 0a 57 48 45 52 45 20 63 6c  ich the.WHERE cl
22190 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  ause expression 
221a0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 66 61 6c  evaluates to fal
221b0 73 65 20 61 72 65 20 65 78 63 6c 75 64 65 64 20  se are excluded 
221c0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
221d0 20 62 65 66 6f 72 65 0a 63 6f 6e 74 69 6e 75 69   before.continui
221e0 6e 67 2e 29 5e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20  ng.)^..<p><b>3. 
221f0 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68  Generation of th
22200 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
22210 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68  rows.</b>.<tcl>h
22220 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 73 75 6c  d_fragment resul
22230 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  tset</tcl>.<tcl>
22240 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65 73  hd_keywords {res
22250 75 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73 69  ult-set expressi
22260 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c  ons} {GROUP BY}<
22270 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74  /tcl>..<p>Once t
22280 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 72  he input data fr
22290 6f 6d 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  om the FROM clau
222a0 73 65 20 68 61 73 20 62 65 65 6e 20 66 69 6c 74  se has been filt
222b0 65 72 65 64 20 62 79 20 74 68 65 0a 57 48 45 52  ered by the.WHER
222c0 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73  E clause express
222d0 69 6f 6e 20 28 69 66 20 61 6e 79 29 2c 20 74 68  ion (if any), th
222e0 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
222f0 72 6f 77 73 20 66 6f 72 20 74 68 65 20 73 69 6d  rows for the sim
22300 70 6c 65 20 0a 53 45 4c 45 43 54 20 61 72 65 20  ple .SELECT are 
22310 63 61 6c 63 75 6c 61 74 65 64 2e 20 45 78 61 63  calculated. Exac
22320 74 6c 79 20 68 6f 77 20 74 68 69 73 20 69 73 20  tly how this is 
22330 64 6f 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e 20  done depends on 
22340 77 68 65 74 68 65 72 20 74 68 65 20 73 69 6d 70  whether the simp
22350 6c 65 20 0a 53 45 4c 45 43 54 20 69 73 20 61 6e  le .SELECT is an
22360 20 61 67 67 72 65 67 61 74 65 20 6f 72 20 6e 6f   aggregate or no
22370 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n-aggregate quer
22380 79 2c 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  y, and whether o
22390 72 20 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42 59  r not a GROUP.BY
223a0 20 63 6c 61 75 73 65 20 77 61 73 20 73 70 65 63   clause was spec
223b0 69 66 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20  ified...<p> The 
223c0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
223d0 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  ons between the 
223e0 53 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20  SELECT and FROM 
223f0 6b 65 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77  keywords is know
22400 6e 20 61 73 0a 74 68 65 20 72 65 73 75 6c 74 20  n as.the result 
22410 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e  expression list.
22420 20 20 5e 49 66 20 61 20 72 65 73 75 6c 74 20 65    ^If a result e
22430 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65  xpression is the
22440 20 73 70 65 63 69 61 6c 20 65 78 70 72 65 73 73   special express
22450 69 6f 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c  ion."*" then all
22460 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
22470 69 6e 70 75 74 20 64 61 74 61 20 61 72 65 20 73  input data are s
22480 75 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74  ubstituted for t
22490 68 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69  hat one expressi
224a0 6f 6e 2e 0a 5e 28 49 66 20 74 68 65 20 65 78 70  on..^(If the exp
224b0 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 61  ression is the a
224c0 6c 69 61 73 20 6f 66 20 61 20 74 61 62 6c 65 20  lias of a table 
224d0 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
224e0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66  he FROM clause.f
224f0 6f 6c 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22 20  ollowed by ".*" 
22500 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73  then all columns
22510 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20   from the named 
22520 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
22530 79 20 61 72 65 0a 73 75 62 73 74 69 74 75 74 65  y are.substitute
22540 64 20 66 6f 72 20 74 68 65 20 73 69 6e 67 6c 65  d for the single
22550 20 65 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e   expression.)^ ^
22560 28 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20  (It is an error 
22570 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 0a  to use a "*" or.
22580 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73  "alias.*" expres
22590 73 69 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74  sion in any cont
225a0 65 78 74 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ext other than t
225b0 68 61 6e 20 61 20 72 65 73 75 6c 74 20 65 78 70  han a result exp
225c0 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a  ression list.)^.
225d0 5e 28 49 74 20 69 73 20 61 6c 73 6f 20 61 6e 20  ^(It is also an 
225e0 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22  error to use a "
225f0 2a 22 20 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20  *" or "alias.*" 
22600 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 20  expression in a 
22610 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 71 75  simple SELECT.qu
22620 65 72 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f  ery that does no
22630 74 20 68 61 76 65 20 61 20 46 52 4f 4d 20 63 6c  t have a FROM cl
22640 61 75 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54  ause.)^..<p> ^(T
22650 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
22660 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 6f 77 73  umns in the rows
22670 20 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 73   returned by a s
22680 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
22690 74 65 6d 65 6e 74 0a 69 73 20 65 71 75 61 6c 20  tement.is equal 
226a0 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
226b0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
226c0 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65  the result expre
226d0 73 73 69 6f 6e 20 6c 69 73 74 20 61 66 74 65 72  ssion list after
226e0 0a 73 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66  .substitution of
226f0 20 2a 20 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65   * and alias.* e
22700 78 70 72 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61  xpressions.)^ Ea
22710 63 68 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  ch result row is
22720 20 63 61 6c 63 75 6c 61 74 65 64 20 62 79 0a 65   calculated by.e
22730 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78  valuating the ex
22740 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65  pressions in the
22750 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
22760 6f 6e 20 6c 69 73 74 20 77 69 74 68 20 72 65 73  on list with res
22770 70 65 63 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65  pect to a.single
22780 20 72 6f 77 20 6f 66 20 69 6e 70 75 74 20 64 61   row of input da
22790 74 61 20 6f 72 2c 20 66 6f 72 20 61 67 67 72 65  ta or, for aggre
227a0 67 61 74 65 20 71 75 65 72 69 65 73 2c 20 77 69  gate queries, wi
227b0 74 68 20 72 65 73 70 65 63 74 20 74 6f 20 61 20  th respect to a 
227c0 67 72 6f 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a  group.of rows...
227d0 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49  <ul>.  <li><p>^I
227e0 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f the SELECT sta
227f0 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e  tement is <b>a n
22800 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65  on-aggregate que
22810 72 79 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20  ry</b>, then .  
22820 20 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f    each expressio
22830 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  n in the result 
22840 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
22850 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  is evaluated for
22860 20 65 61 63 68 20 72 6f 77 20 69 6e 0a 20 20 20   each row in.   
22870 20 74 68 65 20 64 61 74 61 73 65 74 20 66 69 6c   the dataset fil
22880 74 65 72 65 64 20 62 79 20 74 68 65 20 57 48 45  tered by the WHE
22890 52 45 20 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c  RE clause...  <l
228a0 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c  i><p>^If the SEL
228b0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
228c0 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65   <b>an aggregate
228d0 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61   query without a
228e0 20 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62   GROUP.    BY</b
228f0 3e 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65  > clause, then e
22900 61 63 68 20 61 67 67 72 65 67 61 74 65 20 65 78  ach aggregate ex
22910 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
22920 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 0a 20  result-set is . 
22930 20 20 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63     evaluated onc
22940 65 20 61 63 72 6f 73 73 20 74 68 65 20 65 6e 74  e across the ent
22950 69 72 65 20 64 61 74 61 73 65 74 2e 20 5e 45 61  ire dataset. ^Ea
22960 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65  ch non-aggregate
22970 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20   expression.    
22980 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
22990 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  t is evaluated o
229a0 6e 63 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74  nce for an arbit
229b0 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20  rarily selected 
229c0 72 6f 77 20 6f 66 0a 20 20 20 20 74 68 65 20 64  row of.    the d
229d0 61 74 61 73 65 74 2e 20 5e 54 68 65 20 73 61 6d  ataset. ^The sam
229e0 65 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65  e arbitrarily se
229f0 6c 65 63 74 65 64 20 72 6f 77 20 69 73 20 75 73  lected row is us
22a00 65 64 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20  ed for each.    
22a10 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
22a20 70 72 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69  pression. ^Or, i
22a30 66 20 74 68 65 20 64 61 74 61 73 65 74 20 63 6f  f the dataset co
22a40 6e 74 61 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73  ntains zero rows
22a50 2c 20 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68  , then .    each
22a60 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
22a70 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
22a80 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74 20 61  luated against a
22a90 20 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a   row consisting.
22aa0 20 20 20 20 65 6e 74 69 72 65 6c 79 20 6f 66 20      entirely of 
22ab0 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20  NULL values...  
22ac0 20 3c 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20   <p>^The single 
22ad0 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  row of result-se
22ae0 74 20 64 61 74 61 20 63 72 65 61 74 65 64 20 62  t data created b
22af0 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
22b00 20 61 67 67 72 65 67 61 74 65 0a 20 20 20 20 61   aggregate.    a
22b10 6e 64 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65  nd non-aggregate
22b20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
22b30 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66  the result-set f
22b40 6f 72 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20  orms the result 
22b50 6f 66 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67  of an.    aggreg
22b60 61 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75  ate query withou
22b70 74 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61  t a GROUP BY cla
22b80 75 73 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61  use. ^An aggrega
22b90 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74  te query without
22ba0 20 61 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20   a.    GROUP BY 
22bb0 63 6c 61 75 73 65 20 61 6c 77 61 79 73 20 72 65  clause always re
22bc0 74 75 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e  turns exactly on
22bd0 65 20 72 6f 77 20 6f 66 20 64 61 74 61 2c 20 65  e row of data, e
22be0 76 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65  ven if there are
22bf0 0a 20 20 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f  .    zero rows o
22c00 66 20 69 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20  f input data... 
22c10 20 3c 6c 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65   <li><p>^(If the
22c20 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
22c30 74 20 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65  t is <b>an aggre
22c40 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68 20  gate query with 
22c50 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f  a GROUP.    BY</
22c60 62 3e 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  b> clause, then 
22c70 65 61 63 68 20 6f 66 20 74 68 65 20 65 78 70 72  each of the expr
22c80 65 73 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65  essions specifie
22c90 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
22ca0 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c  .    GROUP BY cl
22cb0 61 75 73 65 20 69 73 20 65 76 61 6c 75 61 74 65  ause is evaluate
22cc0 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
22cd0 66 20 74 68 65 20 64 61 74 61 73 65 74 2e 20 45  f the dataset. E
22ce0 61 63 68 20 72 6f 77 0a 20 20 20 20 69 73 20 74  ach row.    is t
22cf0 68 65 6e 20 61 73 73 69 67 6e 65 64 20 74 6f 20  hen assigned to 
22d00 61 20 22 67 72 6f 75 70 22 20 62 61 73 65 64 20  a "group" based 
22d10 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 3b 20  on the results; 
22d20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20  rows for which. 
22d30 20 20 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f     the results o
22d40 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
22d50 20 47 52 4f 55 50 20 42 59 20 65 78 70 72 65 73   GROUP BY expres
22d60 73 69 6f 6e 73 20 61 72 65 20 74 68 65 20 73 61  sions are the sa
22d70 6d 65 20 61 72 65 0a 20 20 20 20 61 73 73 69 67  me are.    assig
22d80 6e 65 64 20 74 6f 20 74 68 65 20 73 61 6d 65 20  ned to the same 
22d90 67 72 6f 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68  group.)^ ^For th
22da0 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 67 72  e purposes of gr
22db0 6f 75 70 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c  ouping rows, NUL
22dc0 4c 20 0a 20 20 20 20 76 61 6c 75 65 73 20 61 72  L .    values ar
22dd0 65 20 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75  e considered equ
22de0 61 6c 2e 20 5e 54 68 65 20 75 73 75 61 6c 20 72  al. ^The usual r
22df0 75 6c 65 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74  ules for [collat
22e00 69 6f 6e 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a  ion|selecting a.
22e10 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65      collation se
22e20 71 75 65 6e 63 65 5d 20 77 69 74 68 20 77 68 69  quence] with whi
22e30 63 68 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ch to compare te
22e40 78 74 20 76 61 6c 75 65 73 20 61 70 70 6c 79 20  xt values apply 
22e50 77 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a  when evaluating.
22e60 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20      expressions 
22e70 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c  in a GROUP BY cl
22e80 61 75 73 65 2e 20 20 5e 54 68 65 20 65 78 70 72  ause.  ^The expr
22e90 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 47  essions in the G
22ea0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 0a 20  ROUP BY clause. 
22eb0 20 20 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65     do <em>not</e
22ec0 6d 3e 20 68 61 76 65 20 74 6f 20 62 65 20 65 78  m> have to be ex
22ed0 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61  pressions that a
22ee0 70 70 65 61 72 20 69 6e 20 74 68 65 20 72 65 73  ppear in the res
22ef0 75 6c 74 2e 20 5e 54 68 65 0a 20 20 20 20 65 78  ult. ^The.    ex
22f00 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47  pressions in a G
22f10 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 6d  ROUP BY clause m
22f20 61 79 20 6e 6f 74 20 62 65 20 61 67 67 72 65 67  ay not be aggreg
22f30 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2e  ate expressions.
22f40 0a 0a 20 20 20 20 3c 70 3e 5e 28 49 66 20 61 20  ..    <p>^(If a 
22f50 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73  HAVING clause is
22f60 20 73 70 65 63 69 66 69 65 64 2c 20 69 74 20 69   specified, it i
22f70 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65  s evaluated once
22f80 20 66 6f 72 20 65 61 63 68 20 67 72 6f 75 70 20   for each group 
22f90 0a 20 20 20 20 6f 66 20 72 6f 77 73 20 61 73 20  .    of rows as 
22fa0 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  a [boolean expre
22fb0 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72  ssion]. If the r
22fc0 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74  esult of evaluat
22fd0 69 6e 67 20 74 68 65 0a 20 20 20 20 48 41 56 49  ing the.    HAVI
22fe0 4e 47 20 63 6c 61 75 73 65 20 69 73 20 66 61 6c  NG clause is fal
22ff0 73 65 2c 20 74 68 65 20 67 72 6f 75 70 20 69 73  se, the group is
23000 20 64 69 73 63 61 72 64 65 64 2e 29 5e 20 5e 49   discarded.)^ ^I
23010 66 20 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61  f the HAVING cla
23020 75 73 65 20 69 73 0a 20 20 20 20 61 6e 20 61 67  use is.    an ag
23030 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
23040 6f 6e 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61  on, it is evalua
23050 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ted across all r
23060 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ows in the group
23070 2e 20 5e 49 66 0a 20 20 20 20 61 20 48 41 56 49  . ^If.    a HAVI
23080 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61 20 6e  NG clause is a n
23090 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
230a0 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65  ression, it is e
230b0 76 61 6c 75 61 74 65 64 20 77 69 74 68 20 72 65  valuated with re
230c0 73 70 65 63 74 0a 20 20 20 20 74 6f 20 61 6e 20  spect.    to an 
230d0 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65  arbitrarily sele
230e0 63 74 65 64 20 72 6f 77 20 66 72 6f 6d 20 74 68  cted row from th
230f0 65 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 48  e group.  ^The H
23100 41 56 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e  AVING expression
23110 20 6d 61 79 0a 20 20 20 20 72 65 66 65 72 20 74   may.    refer t
23120 6f 20 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61  o values, even a
23130 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
23140 6e 73 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ns, that are not
23150 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c   in the result.<
23160 2f 70 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63  /p>..    <p>^Eac
23170 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
23180 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69  the result-set i
23190 73 20 74 68 65 6e 20 65 76 61 6c 75 61 74 65 64  s then evaluated
231a0 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 20   once for each. 
231b0 20 20 20 67 72 6f 75 70 20 6f 66 20 72 6f 77 73     group of rows
231c0 2e 20 5e 49 66 20 74 68 65 20 65 78 70 72 65 73  . ^If the expres
231d0 73 69 6f 6e 20 69 73 20 61 6e 20 61 67 67 72 65  sion is an aggre
231e0 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  gate expression,
231f0 20 69 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c   it is .    eval
23200 75 61 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c  uated across all
23210 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f   rows in the gro
23220 75 70 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  up. ^Otherwise, 
23230 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  it is evaluated 
23240 61 67 61 69 6e 73 74 0a 20 20 20 20 61 20 73 69  against.    a si
23250 6e 67 6c 65 20 61 72 62 69 74 72 61 72 69 6c 79  ngle arbitrarily
23260 20 63 68 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d   chosen row from
23270 20 77 69 74 68 69 6e 20 74 68 65 20 67 72 6f 75   within the grou
23280 70 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20  p. ^If there is 
23290 6d 6f 72 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e  more.    than on
232a0 65 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  e non-aggregate 
232b0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
232c0 65 20 72 65 73 75 6c 74 2d 73 65 74 2c 20 74 68  e result-set, th
232d0 65 6e 20 61 6c 6c 20 73 75 63 68 0a 20 20 20 20  en all such.    
232e0 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
232f0 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 74 68  evaluated for th
23300 65 20 73 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20  e same row...   
23310 20 3c 70 3e 5e 45 61 63 68 20 67 72 6f 75 70 20   <p>^Each group 
23320 6f 66 20 69 6e 70 75 74 20 64 61 74 61 73 65 74  of input dataset
23330 20 72 6f 77 73 20 63 6f 6e 74 72 69 62 75 74 65   rows contribute
23340 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 74  s a single row t
23350 6f 20 74 68 65 20 0a 20 20 20 20 73 65 74 20 6f  o the .    set o
23360 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e  f result rows. ^
23370 53 75 62 6a 65 63 74 20 74 6f 20 66 69 6c 74 65  Subject to filte
23380 72 69 6e 67 20 61 73 73 6f 63 69 61 74 65 64 20  ring associated 
23390 77 69 74 68 20 74 68 65 20 44 49 53 54 49 4e 43  with the DISTINC
233a0 54 0a 20 20 20 20 6b 65 79 77 6f 72 64 2c 20 74  T.    keyword, t
233b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
233c0 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 61 6e  s returned by an
233d0 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
233e0 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20   with a GROUP.  
233f0 20 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 74    BY clause is t
23400 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e  he same as the n
23410 75 6d 62 65 72 20 6f 66 20 67 72 6f 75 70 73 20  umber of groups 
23420 6f 66 20 72 6f 77 73 20 70 72 6f 64 75 63 65 64  of rows produced
23430 20 62 79 20 61 70 70 6c 79 69 6e 67 0a 20 20 20   by applying.   
23440 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 61 6e   the GROUP BY an
23450 64 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 73  d HAVING clauses
23460 20 74 6f 20 74 68 65 20 66 69 6c 74 65 72 65 64   to the filtered
23470 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 2e 0a   input dataset..
23480 3c 2f 75 6c 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20  </ul>..<p><b>4. 
23490 52 65 6d 6f 76 61 6c 20 6f 66 20 64 75 70 6c 69  Removal of dupli
234a0 63 61 74 65 20 72 6f 77 73 20 28 44 49 53 54 49  cate rows (DISTI
234b0 4e 43 54 20 70 72 6f 63 65 73 73 69 6e 67 29 2e  NCT processing).
234c0 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  </b>.<tcl>hd_fra
234d0 67 6d 65 6e 74 20 64 69 73 74 69 6e 63 74 3c 2f  gment distinct</
234e0 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79  tcl>.<tcl>hd_key
234f0 77 6f 72 64 73 20 7b 44 49 53 54 49 4e 43 54 7d  words {DISTINCT}
23500 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20  </tcl>..<p>^One 
23510 6f 66 20 74 68 65 20 41 4c 4c 20 6f 72 20 44 49  of the ALL or DI
23520 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 73 20  STINCT keywords 
23530 6d 61 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 53  may follow the S
23540 45 4c 45 43 54 20 6b 65 79 77 6f 72 64 20 69 6e  ELECT keyword in
23550 20 61 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43   a .simple SELEC
23560 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66  T statement. ^If
23570 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45   the simple SELE
23580 43 54 20 69 73 20 61 20 53 45 4c 45 43 54 20 41  CT is a SELECT A
23590 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 65 6e 74  LL, then the.ent
235a0 69 72 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  ire set of resul
235b0 74 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  t rows are retur
235c0 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  ned by the SELEC
235d0 54 2e 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41  T. ^If neither A
235e0 4c 4c 20 6f 72 0a 44 49 53 54 49 4e 43 54 20 61  LL or.DISTINCT a
235f0 72 65 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e  re present, then
23600 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
23610 20 61 73 20 69 66 20 41 4c 4c 20 77 65 72 65 20   as if ALL were 
23620 73 70 65 63 69 66 69 65 64 2e 20 0a 5e 49 66 20  specified. .^If 
23630 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  the simple SELEC
23640 54 20 69 73 20 61 20 53 45 4c 45 43 54 20 44 49  T is a SELECT DI
23650 53 54 49 4e 43 54 2c 20 74 68 65 6e 20 64 75 70  STINCT, then dup
23660 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20  licate rows are 
23670 72 65 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68 65  removed.from the
23680 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
23690 6f 77 73 20 62 65 66 6f 72 65 20 69 74 20 69 73  ows before it is
236a0 20 72 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72 20   returned. ^For 
236b0 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 0a  the purposes of.
236c0 64 65 74 65 63 74 69 6e 67 20 64 75 70 6c 69 63  detecting duplic
236d0 61 74 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e 55  ate rows, two NU
236e0 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
236f0 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 65  nsidered to be e
23700 71 75 61 6c 2e 20 5e 54 68 65 0a 6e 6f 72 6d 61  qual. ^The.norma
23710 6c 20 72 75 6c 65 73 20 66 6f 72 20 73 65 6c 65  l rules for sele
23720 63 74 69 6e 67 20 61 20 63 6f 6c 6c 61 74 69 6f  cting a collatio
23730 6e 20 73 65 71 75 65 6e 63 65 20 74 6f 20 63 6f  n sequence to co
23740 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c 75 65  mpare text value
23750 73 20 77 69 74 68 0a 61 70 70 6c 79 2e 0a 0a 3c  s with.apply...<
23760 68 33 3e 43 6f 6d 70 6f 75 6e 64 20 53 65 6c 65  h3>Compound Sele
23770 63 74 20 53 74 61 74 65 6d 65 6e 74 73 0a 3c 74  ct Statements.<t
23780 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  cl>hd_fragment c
23790 6f 6d 70 6f 75 6e 64 3c 2f 74 63 6c 3e 0a 3c 74  ompound</tcl>.<t
237a0 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
237b0 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 7d  compound select}
237c0 20 7b 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79   {compound query
237d0 7d 3c 2f 74 63 6c 3e 0a 3c 2f 68 33 3e 0a 0a 3c  }</tcl>.</h3>..<
237e0 70 3e 54 77 6f 20 6f 72 20 6d 6f 72 65 20 73 69  p>Two or more si
237f0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
23800 65 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 63 6f  ements may be co
23810 6e 6e 65 63 74 65 64 20 74 6f 67 65 74 68 65 72  nnected together
23820 20 74 6f 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f   to form.a compo
23830 75 6e 64 20 53 45 4c 45 43 54 20 75 73 69 6e 67  und SELECT using
23840 20 74 68 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f   the UNION, UNIO
23850 4e 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54  N ALL, INTERSECT
23860 20 6f 72 20 45 58 43 45 50 54 20 6f 70 65 72 61   or EXCEPT opera
23870 74 6f 72 2e 0a 5e 49 6e 20 61 20 63 6f 6d 70 6f  tor..^In a compo
23880 75 6e 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20  und SELECT, all 
23890 74 68 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20  the constituent 
238a0 53 45 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74  SELECTs must ret
238b0 75 72 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75  urn the same .nu
238c0 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63  mber of result c
238d0 6f 6c 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20  olumns. ^As the 
238e0 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20  components of a 
238f0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20  compound SELECT 
23900 6d 75 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53  must.be simple S
23910 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
23920 2c 20 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63  , they may not c
23930 6f 6e 74 61 69 6e 20 4f 52 44 45 52 20 42 59 20  ontain ORDER BY 
23940 6f 72 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  or LIMIT clauses
23950 2e 0a 5e 4f 52 44 45 52 20 42 59 20 61 6e 64 20  ..^ORDER BY and 
23960 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20 6d 61  LIMIT clauses ma
23970 79 20 6f 6e 6c 79 20 6f 63 63 75 72 20 61 74 20  y only occur at 
23980 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 65  the end of the e
23990 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64 0a 53  ntire compound.S
239a0 45 4c 45 43 54 2e 20 20 0a 0a 3c 70 3e 5e 41 20  ELECT.  ..<p>^A 
239b0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20  compound SELECT 
239c0 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e  created using UN
239d0 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72  ION ALL operator
239e0 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65   returns all the
239f0 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53   rows.from the S
23a00 45 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66  ELECT to the lef
23a10 74 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41  t of the UNION A
23a20 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64  LL operator, and
23a30 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72   all the rows.fr
23a40 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f  om the SELECT to
23a50 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 69 74   the right of it
23a60 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65  . ^The UNION ope
23a70 72 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20  rator works the 
23a80 73 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f  same way as.UNIO
23a90 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68  N ALL, except th
23aa0 61 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  at duplicate row
23ab0 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72  s are removed fr
23ac0 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73  om the final res
23ad0 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e  ult set..^The IN
23ae0 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72  TERSECT operator
23af0 20 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74   returns the int
23b00 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65  ersection of the
23b10 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
23b20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53  left and.right S
23b30 45 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58  ELECTs.  ^The EX
23b40 43 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65  CEPT operator re
23b50 74 75 72 6e 73 20 74 68 65 20 73 75 62 73 65 74  turns the subset
23b60 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65   of rows returne
23b70 64 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45  d by the.left SE
23b80 4c 45 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f  LECT that are no
23b90 74 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20  t also returned 
23ba0 62 79 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  by the right-han
23bb0 64 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69  d SELECT. ^Dupli
23bc0 63 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65  cate.rows are re
23bd0 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72  moved from the r
23be0 65 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53  esults of INTERS
23bf0 45 43 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f  ECT and EXCEPT o
23c00 70 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20  perators before 
23c10 74 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69  the.result set i
23c20 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e  s returned...<p>
23c30 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
23c40 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67  s of determining
23c50 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
23c60 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73 20  for the results 
23c70 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45  of compound.SELE
23c80 43 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55  CT operators, NU
23c90 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
23ca0 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c 20 74  nsidered equal t
23cb0 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c  o other NULL val
23cc0 75 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74  ues and.distinct
23cd0 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55   from all non-NU
23ce0 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20  LL values. ^The 
23cf0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
23d00 63 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  ce used to compa
23d10 72 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c  re .two text val
23d20 75 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ues is determine
23d30 64 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75  d as if the colu
23d40 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20  mns of the left 
23d50 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53  and right-hand.S
23d60 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
23d70 20 77 65 72 65 20 74 68 65 20 6c 65 66 74 20 61   were the left a
23d80 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70  nd right-hand op
23d90 65 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71  erands of the eq
23da0 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f  uals (=).operato
23db0 72 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 67  r, except that g
23dc0 72 65 61 74 65 72 20 70 72 65 63 65 64 65 6e 63  reater precedenc
23dd0 65 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65  e is not assigne
23de0 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  d to a collation
23df0 20 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63 69   .sequence speci
23e00 66 69 65 64 20 77 69 74 68 20 74 68 65 20 70 6f  fied with the po
23e10 73 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70  stfix COLLATE op
23e20 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69  erator. ^No affi
23e30 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74  nity.transformat
23e40 69 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64  ions are applied
23e50 20 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77   to any values w
23e60 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f  hen comparing ro
23e70 77 73 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a  ws as part of a.
23e80 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e  compound SELECT.
23e90 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72   ..<p>^(When thr
23ea0 65 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c  ee or more simpl
23eb0 65 20 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f  e SELECTs are co
23ec0 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63  nnected into a c
23ed0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a  ompound SELECT,.
23ee0 74 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20  they group from 
23ef0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49  left to right. I
23f00 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
23f10 66 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22  f "A", "B" and "
23f20 43 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c  C" are all.simpl
23f30 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
23f40 6e 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20  nts, (A op B op 
23f50 43 29 20 69 73 20 70 72 6f 63 65 73 73 65 64 20  C) is processed 
23f60 61 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20  as ((A op B) op 
23f70 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63  C).)^..</p>..<tc
23f80 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72  l>hd_fragment or
23f90 64 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d  derby {order by}
23fa0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 52 44 45 52  </tcl>.<h3>ORDER
23fb0 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 2f 4f 46   BY and LIMIT/OF
23fc0 46 53 45 54 20 43 6c 61 75 73 65 73 3c 2f 68 33  FSET Clauses</h3
23fd0 3e 0a 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43  >..<p>If a SELEC
23fe0 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  T statement that
23ff0 20 72 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68   returns more th
24000 61 6e 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20  an one row does 
24010 6e 6f 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45  not have an.ORDE
24020 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
24030 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
24040 74 68 65 20 72 6f 77 73 20 61 72 65 20 72 65 74  the rows are ret
24050 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e  urned is undefin
24060 65 64 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c  ed..Or, if a SEL
24070 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ECT statement do
24080 65 73 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52  es have an ORDER
24090 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
240a0 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70   the list of.exp
240b0 72 65 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65  ressions attache
240c0 64 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42  d to the ORDER B
240d0 59 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  Y determine the 
240e0 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
240f0 6f 77 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64  ows.are returned
24100 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 5e 52   to the user. ^R
24110 6f 77 73 20 61 72 65 20 66 69 72 73 74 20 73 6f  ows are first so
24120 72 74 65 64 20 62 61 73 65 64 20 6f 6e 20 74 68  rted based on th
24130 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 65 76 61  e results of.eva
24140 6c 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74  luating the left
24150 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e  -most expression
24160 20 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59   in the ORDER BY
24170 20 6c 69 73 74 2c 20 74 68 65 6e 20 74 69 65 73   list, then ties
24180 20 61 72 65 20 62 72 6f 6b 65 6e 0a 62 79 20 65   are broken.by e
24190 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 73 65  valuating the se
241a0 63 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73 74 20 65  cond left-most e
241b0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 73 6f  xpression and so
241c0 20 6f 6e 2e 20 54 68 65 20 6f 72 64 65 72 20 69   on. The order i
241d0 6e 20 77 68 69 63 68 0a 74 77 6f 20 72 6f 77 73  n which.two rows
241e0 20 66 6f 72 20 77 68 69 63 68 20 61 6c 6c 20 4f   for which all O
241f0 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
24200 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20  ons evaluate to 
24210 65 71 75 61 6c 20 76 61 6c 75 65 73 20 61 72 65  equal values are
24220 0a 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64  .returned is und
24230 65 66 69 6e 65 64 2e 20 5e 45 61 63 68 20 4f 52  efined. ^Each OR
24240 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
24250 6e 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61  n may be optiona
24260 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20  lly followed.by 
24270 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 77 6f  one of the keywo
24280 72 64 73 20 41 53 43 20 28 73 6d 61 6c 6c 65 72  rds ASC (smaller
24290 20 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75   values are retu
242a0 72 6e 65 64 20 66 69 72 73 74 29 20 6f 72 20 44  rned first) or D
242b0 45 53 43 20 28 6c 61 72 67 65 72 0a 76 61 6c 75  ESC (larger.valu
242c0 65 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20  es are returned 
242d0 66 69 72 73 74 29 2e 20 5e 49 66 20 6e 65 69 74  first). ^If neit
242e0 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 20  her ASC or DESC 
242f0 61 72 65 20 73 70 65 63 69 66 69 65 64 2c 20 72  are specified, r
24300 6f 77 73 0a 61 72 65 20 73 6f 72 74 65 64 20 69  ows.are sorted i
24310 6e 20 61 73 63 65 6e 64 69 6e 67 20 28 73 6d 61  n ascending (sma
24320 6c 6c 65 72 20 76 61 6c 75 65 73 20 66 69 72 73  ller values firs
24330 74 29 20 6f 72 64 65 72 20 62 79 20 64 65 66 61  t) order by defa
24340 75 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68 20 4f 52  ult...<p>Each OR
24350 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
24360 6e 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61  n is processed a
24370 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
24380 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  <ol>.<li><p>^If 
24390 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
243a0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e  ression is a con
243b0 73 74 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20  stant integer K 
243c0 74 68 65 6e 20 74 68 65 0a 65 78 70 72 65 73 73  then the.express
243d0 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ion is considere
243e0 64 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  d an alias for t
243f0 68 65 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he K-th column o
24400 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
24410 0a 28 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 75  .(columns are nu
24420 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74  mbered from left
24430 20 74 6f 20 72 69 67 68 74 20 73 74 61 72 74 69   to right starti
24440 6e 67 20 77 69 74 68 20 31 29 2e 0a 0a 3c 6c 69  ng with 1)...<li
24450 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45  ><p>^If the ORDE
24460 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
24470 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  is an identifier
24480 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
24490 73 20 74 6f 0a 74 68 65 20 61 6c 69 61 73 20 6f  s to.the alias o
244a0 66 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 75 74  f one of the out
244b0 70 75 74 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65  put columns, the
244c0 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
244d0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 61   is considered.a
244e0 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 61 74  n alias for that
244f0 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e 3c 70   column...<li><p
24500 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  >^Otherwise, if 
24510 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
24520 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 79 20 6f  ression is any o
24530 74 68 65 72 20 65 78 70 72 65 73 73 69 6f 6e 2c  ther expression,
24540 20 69 74 20 0a 69 73 20 65 76 61 6c 75 61 74 65   it .is evaluate
24550 64 20 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e  d and the return
24560 65 64 20 76 61 6c 75 65 20 75 73 65 64 20 74 6f  ed value used to
24570 20 6f 72 64 65 72 20 74 68 65 20 6f 75 74 70 75   order the outpu
24580 74 20 72 6f 77 73 2e 20 5e 49 66 0a 74 68 65 20  t rows. ^If.the 
24590 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
245a0 20 69 73 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   is a simple SEL
245b0 45 43 54 2c 20 74 68 65 6e 20 61 6e 20 4f 52 44  ECT, then an ORD
245c0 45 52 20 42 59 20 6d 61 79 20 63 6f 6e 74 61 69  ER BY may contai
245d0 6e 20 61 6e 79 0a 61 72 62 69 74 72 61 72 79 20  n any.arbitrary 
245e0 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e 48 6f  expressions. ^Ho
245f0 77 65 76 65 72 2c 20 69 66 20 74 68 65 20 53 45  wever, if the SE
24600 4c 45 43 54 20 69 73 20 61 20 63 6f 6d 70 6f 75  LECT is a compou
24610 6e 64 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 0a  nd SELECT, then.
24620 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
24630 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f  ions that are no
24640 74 20 61 6c 69 61 73 65 73 20 74 6f 20 6f 75 74  t aliases to out
24650 70 75 74 20 63 6f 6c 75 6d 6e 73 20 6d 75 73 74  put columns must
24660 20 62 65 20 65 78 61 63 74 6c 79 0a 74 68 65 20   be exactly.the 
24670 73 61 6d 65 20 61 73 20 61 6e 20 65 78 70 72 65  same as an expre
24680 73 73 69 6f 6e 20 75 73 65 64 20 61 73 20 61 6e  ssion used as an
24690 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 2e 0a   output column..
246a0 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f 72 20 74  </ol>..<p>^For t
246b0 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 73  he purposes of s
246c0 6f 72 74 69 6e 67 20 72 6f 77 73 2c 20 76 61 6c  orting rows, val
246d0 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
246e0 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
246f0 0a 61 73 20 66 6f 72 20 5b 63 6f 6d 70 61 72 69  .as for [compari
24700 73 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 5d  son expressions]
24710 2e 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  . The collation 
24720 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 74 6f  sequence used to
24730 20 63 6f 6d 70 61 72 65 0a 74 77 6f 20 74 65 78   compare.two tex
24740 74 20 76 61 6c 75 65 73 20 69 73 20 64 65 74 65  t values is dete
24750 72 6d 69 6e 65 64 20 61 73 20 66 6f 6c 6c 6f 77  rmined as follow
24760 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c  s:..<ol>.  <li><
24770 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20  p>^If the ORDER 
24780 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
24790 20 61 73 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c   assigned a coll
247a0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75  ation sequence u
247b0 73 69 6e 67 0a 20 20 74 68 65 20 70 6f 73 74 66  sing.  the postf
247c0 69 78 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72  ix [COLLATE oper
247d0 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20  ator], then the 
247e0 73 70 65 63 69 66 69 65 64 20 63 6f 6c 6c 61 74  specified collat
247f0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 0a  ion sequence is.
24800 20 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70    used..  <li><p
24810 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  >^Otherwise, if 
24820 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
24830 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 6c  ression is an al
24840 69 61 73 20 74 6f 20 61 6e 20 65 78 70 72 65 73  ias to an expres
24850 73 69 6f 6e 0a 20 20 74 68 61 74 20 68 61 73 20  sion.  that has 
24860 62 65 65 6e 20 61 73 73 69 67 6e 65 64 20 61 20  been assigned a 
24870 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
24880 63 65 20 75 73 69 6e 67 20 74 68 65 20 70 6f 73  ce using the pos
24890 74 66 69 78 20 0a 20 20 5b 43 4f 4c 4c 41 54 45  tfix .  [COLLATE
248a0 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e   operator], then
248b0 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
248c0 65 71 75 65 6e 63 65 20 61 73 73 69 67 6e 65 64  equence assigned
248d0 20 74 6f 20 74 68 65 20 61 6c 69 61 73 65 64 0a   to the aliased.
248e0 20 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20    expression is 
248f0 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  used..  <li><p>^
24900 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68  Otherwise, if th
24910 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
24920 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6c 75 6d  ssion is a colum
24930 6e 20 6f 72 20 61 6e 20 61 6c 69 61 73 20 6f 66  n or an alias of
24940 0a 20 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  .  an expression
24950 20 74 68 61 74 20 69 73 20 61 20 63 6f 6c 75 6d   that is a colum
24960 6e 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66 61  n, then the defa
24970 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
24980 71 75 65 6e 63 65 20 66 6f 72 0a 20 20 74 68 65  quence for.  the
24990 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e   column is used.
249a0 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65   .  <li><p>^Othe
249b0 72 77 69 73 65 2c 20 74 68 65 20 5b 42 49 4e 41  rwise, the [BINA
249c0 52 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  RY] collation se
249d0 71 75 65 6e 63 65 20 69 73 20 75 73 65 64 2e 0a  quence is used..
249e0 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 20 63  </ol>..<p>In a c
249f0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 73  ompound SELECT s
24a00 74 61 74 65 6d 65 6e 74 2c 20 61 6c 6c 20 4f 52  tatement, all OR
24a10 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
24a20 6e 73 20 61 72 65 20 68 61 6e 64 6c 65 64 0a 61  ns are handled.a
24a30 73 20 61 6c 69 61 73 65 73 20 66 6f 72 20 6f 6e  s aliases for on
24a40 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  e of the result 
24a50 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63  columns of the c
24a60 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 0a  ompound SELECT..
24a70 5e 28 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59  ^(If an ORDER BY
24a80 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e   expression is n
24a90 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c  ot an integer al
24aa0 69 61 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65  ias, then SQLite
24ab0 20 73 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65   searches.the le
24ac0 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69  ft-most SELECT i
24ad0 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66  n the compound f
24ae0 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
24af0 6d 6e 20 74 68 61 74 20 6d 61 74 63 68 65 73 20  mn that matches 
24b00 65 69 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e  either.the secon
24b10 64 20 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73  d or third rules
24b20 20 61 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74   above. If a mat
24b30 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
24b40 20 73 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e   search stops an
24b50 64 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d.the expression
24b60 20 69 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61   is handled as a
24b70 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
24b80 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68  result column th
24b90 61 74 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d  at it has been.m
24ba0 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20  atched against. 
24bb0 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e  Otherwise, the n
24bc0 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68  ext SELECT to th
24bd0 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65 64  e right is tried
24be0 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e  , and so on.)^.^
24bf0 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65  If no matching e
24c00 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65  xpression can be
24c10 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65   found in the re
24c20 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  sult columns of 
24c30 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20  any.constituent 
24c40 53 45 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e  SELECT, it is an
24c50 20 65 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65   error. ^Each te
24c60 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20  rm of the ORDER 
24c70 42 59 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f  BY clause is.pro
24c80 63 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c  cessed separatel
24c90 79 20 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74  y and may be mat
24ca0 63 68 65 64 20 61 67 61 69 6e 73 74 20 72 65 73  ched against res
24cb0 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d  ult columns from
24cc0 20 64 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43   different.SELEC
24cd0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  T statements in 
24ce0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70  the compound.</p
24cf0 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d 49 54 20  >..<p>The LIMIT 
24d00 63 6c 61 75 73 65 20 69 73 20 75 73 65 64 20 74  clause is used t
24d10 6f 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72  o place an upper
24d20 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75   bound on the nu
24d30 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74  mber of rows.ret
24d40 75 72 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43  urned by a SELEC
24d50 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 41 6e  T statement. ^An
24d60 79 20 73 63 61 6c 61 72 20 65 78 70 72 65 73 73  y scalar express
24d70 69 6f 6e 20 6d 61 79 20 62 65 20 75 73 65 64 20  ion may be used 
24d80 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54 20 63 6c  in the .LIMIT cl
24d90 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67 20 61 73  ause, so long as
24da0 20 69 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f   it evaluates to
24db0 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61   an integer or a
24dc0 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20   value that can 
24dd0 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f  be.losslessly co
24de0 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
24df0 74 65 67 65 72 2e 20 5e 49 66 20 74 68 65 20 65  teger. ^If the e
24e00 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
24e10 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c 20 0a 76  tes to a NULL .v
24e20 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f 74 68 65  alue or any othe
24e30 72 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  r value that can
24e40 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  not be losslessl
24e50 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
24e60 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e 0a 65 72  n integer, an.er
24e70 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ror is returned.
24e80 20 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20 65   ^If the LIMIT e
24e90 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
24ea0 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76  tes to a negativ
24eb0 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e 20 74 68  e value,.then th
24ec0 65 72 65 20 69 73 20 6e 6f 20 75 70 70 65 72 20  ere is no upper 
24ed0 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d  bound on the num
24ee0 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75  ber of rows retu
24ef0 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77 69 73 65  rned. ^Otherwise
24f00 2c 20 74 68 65 0a 53 45 4c 45 43 54 20 72 65 74  , the.SELECT ret
24f10 75 72 6e 73 20 74 68 65 20 66 69 72 73 74 20 4e  urns the first N
24f20 20 72 6f 77 73 20 6f 66 20 69 74 73 20 72 65 73   rows of its res
24f30 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c 20 77 68  ult set only, wh
24f40 65 72 65 20 4e 20 69 73 20 74 68 65 20 76 61 6c  ere N is the val
24f50 75 65 0a 74 68 61 74 20 74 68 65 20 4c 49 4d 49  ue.that the LIMI
24f60 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  T expression eva
24f70 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f 72 2c 20  luates to. ^Or, 
24f80 69 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  if the SELECT st
24f90 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 0a 72 65  atement would.re
24fa0 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20 4e  turn less than N
24fb0 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20 61 20   rows without a 
24fc0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
24fd0 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 72 65  en the entire re
24fe0 73 75 6c 74 20 73 65 74 20 69 73 0a 72 65 74 75  sult set is.retu
24ff0 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20  rned. ..<p>^The 
25000 65 78 70 72 65 73 73 69 6f 6e 20 61 74 74 61 63  expression attac
25010 68 65 64 20 74 6f 20 74 68 65 20 6f 70 74 69 6f  hed to the optio
25020 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c 61 75 73  nal OFFSET claus
25030 65 20 74 68 61 74 20 6d 61 79 20 66 6f 6c 6c 6f  e that may follo
25040 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65  w a.LIMIT clause
25050 20 6d 75 73 74 20 61 6c 73 6f 20 65 76 61 6c 75   must also evalu
25060 61 74 65 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ate to an intege
25070 72 2c 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68  r, or a value th
25080 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65  at can be.lossle
25090 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
250a0 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49  o an integer. ^I
250b0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
250c0 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c  has an OFFSET cl
250d0 61 75 73 65 2c 0a 74 68 65 6e 20 74 68 65 20 66  ause,.then the f
250e0 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20  irst M rows are 
250f0 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
25100 20 72 65 73 75 6c 74 20 73 65 74 20 72 65 74 75   result set retu
25110 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  rned by the SELE
25120 43 54 0a 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  CT.statement and
25130 20 74 68 65 20 6e 65 78 74 20 4e 20 72 6f 77 73   the next N rows
25140 20 61 72 65 20 72 65 74 75 72 6e 65 64 2c 20 77   are returned, w
25150 68 65 72 65 20 4d 20 61 6e 64 20 4e 20 61 72 65  here M and N are
25160 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61 74   the values that
25170 0a 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20  .the OFFSET and 
25180 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20 65 76  LIMIT clauses ev
25190 61 6c 75 61 74 65 20 74 6f 2c 20 72 65 73 70 65  aluate to, respe
251a0 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c 20 69 66  ctively. ^Or, if
251b0 20 74 68 65 20 53 45 4c 45 43 54 0a 77 6f 75 6c   the SELECT.woul
251c0 64 20 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68  d return less th
251d0 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69 66 20 69  an M+N rows if i
251e0 74 20 64 69 64 20 6e 6f 74 20 68 61 76 65 20 61  t did not have a
251f0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
25200 68 65 6e 20 74 68 65 0a 66 69 72 73 74 20 4d 20  hen the.first M 
25210 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70 65 64  rows are skipped
25220 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 69   and the remaini
25230 6e 67 20 72 6f 77 73 20 28 69 66 20 61 6e 79 29  ng rows (if any)
25240 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 20 5e   are returned. ^
25250 49 66 20 74 68 65 0a 4f 46 46 53 45 54 20 63 6c  If the.OFFSET cl
25260 61 75 73 65 20 65 76 61 6c 75 61 74 65 73 20 74  ause evaluates t
25270 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c  o a negative val
25280 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20  ue, the results 
25290 61 72 65 20 74 68 65 20 73 61 6d 65 20 61 73 20  are the same as 
252a0 69 66 20 69 74 0a 68 61 64 20 65 76 61 6c 75 61  if it.had evalua
252b0 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70  ted to zero...<p
252c0 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20 61 20 73  >^Instead of a s
252d0 65 70 61 72 61 74 65 20 4f 46 46 53 45 54 20 63  eparate OFFSET c
252e0 6c 61 75 73 65 2c 20 74 68 65 20 4c 49 4d 49 54  lause, the LIMIT
252f0 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63   clause may spec
25300 69 66 79 20 74 77 6f 0a 73 63 61 6c 61 72 20 65  ify two.scalar e
25310 78 70 72 65 73 73 69 6f 6e 73 20 73 65 70 61 72  xpressions separ
25320 61 74 65 64 20 62 79 20 61 20 63 6f 6d 6d 61 2e  ated by a comma.
25330 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20   ^In this case, 
25340 74 68 65 20 66 69 72 73 74 20 65 78 70 72 65 73  the first expres
25350 73 69 6f 6e 0a 69 73 20 75 73 65 64 20 61 73 20  sion.is used as 
25360 74 68 65 20 4f 46 46 53 45 54 20 65 78 70 72 65  the OFFSET expre
25370 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 65  ssion and the se
25380 63 6f 6e 64 20 61 73 20 74 68 65 20 4c 49 4d 49  cond as the LIMI
25390 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 54 68  T expression..Th
253a0 69 73 20 69 73 20 63 6f 75 6e 74 65 72 2d 69 6e  is is counter-in
253b0 74 75 69 74 69 76 65 2c 20 61 73 20 77 68 65 6e  tuitive, as when
253c0 20 75 73 69 6e 67 20 74 68 65 20 4f 46 46 53 45   using the OFFSE
253d0 54 20 63 6c 61 75 73 65 20 74 68 65 20 73 65 63  T clause the sec
253e0 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77 6f 20 65  ond of.the two e
253f0 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68  xpressions is th
25400 65 20 4f 46 46 53 45 54 20 61 6e 64 20 74 68 65  e OFFSET and the
25410 20 66 69 72 73 74 20 74 68 65 20 4c 49 4d 49 54   first the LIMIT
25420 2e 20 54 68 69 73 20 69 73 20 69 6e 74 65 6e 74  . This is intent
25430 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61 78 69 6d  ional.- it maxim
25440 69 7a 65 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  izes compatibili
25450 74 79 20 77 69 74 68 20 6f 74 68 65 72 20 53 51  ty with other SQ
25460 4c 20 64 61 74 61 62 61 73 65 20 73 79 73 74 65  L database syste
25470 6d 73 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ms...<tcl>.#####
25480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
254a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
254b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
254c0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
254d0 6e 20 55 50 44 41 54 45 20 75 70 64 61 74 65 20  n UPDATE update 
254e0 7b 55 50 44 41 54 45 20 2a 55 50 44 41 54 45 73  {UPDATE *UPDATEs
254f0 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
25500 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65  leDiagram update
25510 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
25520 3e 5e 41 6e 20 55 50 44 41 54 45 20 73 74 61 74  >^An UPDATE stat
25530 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  ement is used to
25540 20 6d 6f 64 69 66 79 20 61 20 73 75 62 73 65 74   modify a subset
25550 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 73   of the values s
25560 74 6f 72 65 64 20 69 6e 20 0a 7a 65 72 6f 20 6f  tored in .zero o
25570 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74  r more rows of t
25580 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
25590 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
255a0 74 68 65 20 0a 3c 69 3e 71 75 61 6c 69 66 69 65  the .<i>qualifie
255b0 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e  d-table-name</i>
255c0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
255d0 72 74 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  rt of the UPDATE
255e0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e   statement...<p>
255f0 5e 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73  ^If the UPDATE s
25600 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f  tatement does no
25610 74 20 68 61 76 65 20 61 20 57 48 45 52 45 20 63  t have a WHERE c
25620 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73 20  lause, all rows 
25630 69 6e 20 74 68 65 0a 74 61 62 6c 65 20 61 72 65  in the.table are
25640 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68 65   modified by the
25650 20 55 50 44 41 54 45 2e 20 5e 4f 74 68 65 72 77   UPDATE. ^Otherw
25660 69 73 65 2c 20 74 68 65 20 55 50 44 41 54 45 20  ise, the UPDATE 
25670 61 66 66 65 63 74 73 20 6f 6e 6c 79 20 74 68 6f  affects only tho
25680 73 65 0a 72 6f 77 73 20 66 6f 72 20 77 68 69 63  se.rows for whic
25690 68 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  h the result of 
256a0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 57  evaluating the W
256b0 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72  HERE clause expr
256c0 65 73 73 69 6f 6e 20 61 73 20 61 20 0a 5b 62 6f  ession as a .[bo
256d0 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
256e0 7c 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  |boolean express
256f0 69 6f 6e 20 69 73 20 74 72 75 65 5d 2e 20 5e 49  ion is true]. ^I
25700 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f  t is not an erro
25710 72 20 69 66 20 74 68 65 0a 57 48 45 52 45 20 63  r if the.WHERE c
25720 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 65  lause does not e
25730 76 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65 20  valuate to true 
25740 66 6f 72 20 61 6e 79 20 72 6f 77 20 69 6e 20 74  for any row in t
25750 68 65 20 74 61 62 6c 65 20 2d 20 74 68 69 73 20  he table - this 
25760 6a 75 73 74 0a 6d 65 61 6e 73 20 74 68 61 74 20  just.means that 
25770 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
25780 6d 65 6e 74 20 61 66 66 65 63 74 73 20 7a 65 72  ment affects zer
25790 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65 20  o rows...<p>The 
257a0 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20 6d 61  modifications ma
257b0 64 65 20 74 6f 20 65 61 63 68 20 72 6f 77 20 61  de to each row a
257c0 66 66 65 63 74 65 64 20 62 79 20 61 6e 20 55 50  ffected by an UP
257d0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
257e0 72 65 0a 64 65 74 65 72 6d 69 6e 65 64 20 62 79  re.determined by
257f0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73   the list of ass
25800 69 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69  ignments followi
25810 6e 67 20 74 68 65 20 53 45 54 20 6b 65 79 77 6f  ng the SET keywo
25820 72 64 2e 20 45 61 63 68 0a 61 73 73 69 67 6e 6d  rd. Each.assignm
25830 65 6e 74 20 73 70 65 63 69 66 69 65 73 20 61 20  ent specifies a 
25840 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74  column name to t
25850 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65  he left of the e
25860 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61  quals sign and a
25870 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69  .scalar expressi
25880 6f 6e 20 74 6f 20 74 68 65 20 72 69 67 68 74 2e  on to the right.
25890 20 5e 46 6f 72 20 65 61 63 68 20 61 66 66 65 63   ^For each affec
258a0 74 65 64 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d  ted row, the nam
258b0 65 64 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73  ed columns.are s
258c0 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 73  et to the values
258d0 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61   found by evalua
258e0 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ting the corresp
258f0 6f 6e 64 69 6e 67 20 73 63 61 6c 61 72 20 0a 65  onding scalar .e
25900 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20  xpressions. ^If 
25910 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d  a single column-
25920 6e 61 6d 65 20 61 70 70 65 61 72 73 20 6d 6f 72  name appears mor
25930 65 20 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74  e than once in t
25940 68 65 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67  he list of.assig
25950 6e 6d 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  nment expression
25960 73 2c 20 61 6c 6c 20 62 75 74 20 74 68 65 20 72  s, all but the r
25970 69 67 68 74 6d 6f 73 74 20 6f 63 63 75 72 72 65  ightmost occurre
25980 6e 63 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 20  nce is ignored. 
25990 5e 43 6f 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f  ^Columns.that do
259a0 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74   not appear in t
259b0 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67  he list of assig
259c0 6e 6d 65 6e 74 73 20 61 72 65 20 6c 65 66 74 20  nments are left 
259d0 75 6e 6d 6f 64 69 66 69 65 64 2e 20 5e 54 68 65  unmodified. ^The
259e0 20 73 63 61 6c 61 72 0a 65 78 70 72 65 73 73 69   scalar.expressi
259f0 6f 6e 73 20 6d 61 79 20 72 65 66 65 72 20 74 6f  ons may refer to
25a00 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
25a10 72 6f 77 20 62 65 69 6e 67 20 75 70 64 61 74 65  row being update
25a20 64 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  d. ^In this case
25a30 20 61 6c 6c 0a 73 63 61 6c 61 72 20 65 78 70 72   all.scalar expr
25a40 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c  essions are eval
25a50 75 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79  uated before any
25a60 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65   assignments are
25a70 20 6d 61 64 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20   made...<p>^The 
25a80 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63  optional conflic
25a90 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20  t-clause allows 
25aa0 74 68 65 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69  the user to nomi
25ab0 6e 61 74 65 20 61 20 73 70 65 63 69 66 69 63 0a  nate a specific.
25ac0 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c  constraint confl
25ad0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
25ae0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
25af0 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20  during this one 
25b00 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a  UPDATE command..
25b10 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 65 63  Refer to the sec
25b20 74 69 6f 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f  tion entitled [O
25b30 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20  N CONFLICT] for 
25b40 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
25b50 6d 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73  mation...<h3>Res
25b60 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44  trictions on UPD
25b70 41 54 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57  ATE Statements W
25b80 69 74 68 69 6e 20 43 52 45 41 54 45 20 54 52 49  ithin CREATE TRI
25b90 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  GGER</h3>..<p>Th
25ba0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69  e following addi
25bb0 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72 65  tional syntax re
25bc0 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79  strictions apply
25bd0 20 74 6f 20 55 50 44 41 54 45 20 73 74 61 74 65   to UPDATE state
25be0 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63 63 75 72  ments that.occur
25bf0 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
25c00 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54 52   of a [CREATE TR
25c10 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74  IGGER] statement
25c20 2e 20 20 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  .  ..<ul>.  <li>
25c30 3c 70 3e 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65  <p>^The <i>table
25c40 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66  -name</i> specif
25c50 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  ied as part of a
25c60 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
25c70 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20  nt within.      
25c80 61 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d  a trigger body m
25c90 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69  ust be unqualifi
25ca0 65 64 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77  ed. ^(In other w
25cb0 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20 20 20  ords, the.      
25cc0 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  <i>database-name
25cd0 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65  </i><b>.</b> pre
25ce0 66 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65  fix on the table
25cf0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 55 50 44   name of the UPD
25d00 41 54 45 20 69 73 0a 20 20 20 20 20 20 6e 6f 74  ATE is.      not
25d10 20 61 6c 6c 6f 77 65 64 20 77 69 74 68 69 6e 20   allowed within 
25d20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 55 6e 6c  triggers.)^ ^Unl
25d30 65 73 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f  ess the table to
25d40 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
25d50 65 72 0a 20 20 20 20 20 20 69 73 20 61 74 74 61  er.      is atta
25d60 63 68 65 64 20 69 73 20 69 6e 20 74 68 65 20 54  ched is in the T
25d70 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74 68  EMP database, th
25d80 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75 70  e table being up
25d90 64 61 74 65 64 20 62 79 20 74 68 65 0a 20 20 20  dated by the.   
25da0 20 20 20 74 72 69 67 67 65 72 20 70 72 6f 67 72     trigger progr
25db0 61 6d 20 6d 75 73 74 20 72 65 73 69 64 65 20 69  am must reside i
25dc0 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
25dd0 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20 74  ase as it. ^If t
25de0 68 65 20 74 61 62 6c 65 0a 20 20 20 20 20 20 74  he table.      t
25df0 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
25e00 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20  ger is attached 
25e10 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64  is in the TEMP d
25e20 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
25e30 65 0a 20 20 20 20 20 20 75 6e 71 75 61 6c 69 66  e.      unqualif
25e40 69 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ied name of the 
25e50 74 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61  table being upda
25e60 74 65 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20  ted is resolved 
25e70 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a  in the same way.
25e80 20 20 20 20 20 20 61 73 20 69 74 20 69 73 20 66        as it is f
25e90 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73  or a top-level s
25ea0 74 61 74 65 6d 65 6e 74 20 28 62 79 20 73 65 61  tatement (by sea
25eb0 72 63 68 69 6e 67 20 66 69 72 73 74 20 74 68 65  rching first the
25ec0 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 0a   TEMP database,.
25ed0 20 20 20 20 20 20 74 68 65 6e 20 74 68 65 20 6d        then the m
25ee0 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68  ain database, th
25ef0 65 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61 74  en any other dat
25f00 61 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f 72  abases in the or
25f10 64 65 72 20 74 68 65 79 20 77 65 72 65 0a 20 20  der they were.  
25f20 20 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 0a      attached)...
25f30 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e    <li><p>^The IN
25f40 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54  DEXED BY and NOT
25f50 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73   INDEXED clauses
25f60 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64   are not allowed
25f70 20 6f 6e 20 55 50 44 41 54 45 0a 20 20 20 20 20   on UPDATE.     
25f80 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
25f90 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
25fa0 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20  ..  <li><p>^The 
25fb0 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20  LIMIT and ORDER 
25fc0 42 59 20 63 6c 61 75 73 65 73 20 66 6f 72 20 55  BY clauses for U
25fd0 50 44 41 54 45 20 61 72 65 20 75 6e 73 75 70 70  PDATE are unsupp
25fe0 6f 72 74 65 64 20 77 69 74 68 69 6e 0a 20 20 20  orted within.   
25ff0 20 20 20 74 72 69 67 67 65 72 73 2c 20 72 65 67     triggers, reg
26000 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63  ardless of the c
26010 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
26020 6e 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64  ns used to build
26030 20 53 51 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a   SQLite..</ul>..
26040 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d  <h3>Optional LIM
26050 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  IT and ORDER BY 
26060 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70  Clauses</h3>..<p
26070 3e 5e 28 49 66 20 53 51 4c 69 74 65 20 69 73 20  >^(If SQLite is 
26080 62 75 69 6c 74 20 77 69 74 68 20 74 68 65 20 5b  built with the [
26090 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
260a0 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
260b0 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  T].compile-time 
260c0 6f 70 74 69 6f 6e 20 74 68 65 6e 20 74 68 65 20  option then the 
260d0 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 55 50  syntax of the UP
260e0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
260f0 73 20 65 78 74 65 6e 64 65 64 0a 77 69 74 68 20  s extended.with 
26100 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42  optional ORDER B
26110 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75  Y and LIMIT clau
26120 73 65 73 29 5e 20 61 73 20 66 6f 6c 6c 6f 77 73  ses)^ as follows
26130 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62  :</p>..<tcl>Bubb
26140 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65  leDiagram update
26150 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74  -stmt-limited</t
26160 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55  cl>..<p>^If an U
26170 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
26180 68 61 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75  has a LIMIT clau
26190 73 65 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  se, the maximum 
261a0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74  number of rows t
261b0 68 61 74 0a 77 69 6c 6c 20 62 65 20 75 70 64 61  hat.will be upda
261c0 74 65 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20  ted is found by 
261d0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
261e0 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72  ccompanying expr
261f0 65 73 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69  ession and casti
26200 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  ng.it to an inte
26210 67 65 72 20 76 61 6c 75 65 2e 20 5e 41 20 6e 65  ger value. ^A ne
26220 67 61 74 69 76 65 20 76 61 6c 75 65 20 69 73 20  gative value is 
26230 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22  interpreted as "
26240 6e 6f 20 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e  no limit"...<p>^
26250 49 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70  If the LIMIT exp
26260 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
26270 73 20 74 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  s to non-negativ
26280 65 20 76 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e  e value <i>N</i>
26290 20 61 6e 64 20 74 68 65 0a 55 50 44 41 54 45 20   and the.UPDATE 
262a0 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e  statement has an
262b0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
262c0 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
262d0 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 75 70  that would be up
262e0 64 61 74 65 64 20 69 6e 0a 74 68 65 20 61 62 73  dated in.the abs
262f0 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49  ence of the LIMI
26300 54 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72  T clause are sor
26310 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ted according to
26320 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e   the ORDER BY an
26330 64 20 74 68 65 0a 66 69 72 73 74 20 3c 69 3e 4e  d the.first <i>N
26340 3c 2f 69 3e 20 75 70 64 61 74 65 64 2e 20 5e 28  </i> updated. ^(
26350 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  If the UPDATE st
26360 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 68 61 73  atement also has
26370 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73   an OFFSET claus
26380 65 2c 0a 74 68 65 6e 20 69 74 20 69 73 20 73 69  e,.then it is si
26390 6d 69 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65  milarly evaluate
263a0 64 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e  d and cast to an
263b0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
263c0 49 66 20 74 68 65 20 4f 46 46 53 45 54 0a 65 78  If the OFFSET.ex
263d0 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
263e0 65 73 20 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61  es to a non-nega
263f0 74 69 76 65 20 76 61 6c 75 65 20 3c 69 3e 4d 3c  tive value <i>M<
26400 2f 69 3e 2c 20 74 68 65 6e 20 74 68 65 20 66 69  /i>, then the fi
26410 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77  rst <i>M</i>.row
26420 73 20 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e  s are skipped an
26430 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  d the following 
26440 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 75 70  <i>N</i> rows up
26450 64 61 74 65 64 20 69 6e 73 74 65 61 64 2e 29 5e  dated instead.)^
26460 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44  ..<p>^If the UPD
26470 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ATE statement ha
26480 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c  s no ORDER BY cl
26490 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72  ause, then all r
264a0 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20 62  ows that.would b
264b0 65 20 75 70 64 61 74 65 64 20 69 6e 20 74 68 65  e updated in the
264c0 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20   absence of the 
264d0 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65  LIMIT clause are
264e0 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e   assembled in an
264f0 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64 65 72  .arbitrary order
26500 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e 67   before applying
26510 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f   the LIMIT and O
26520 46 46 53 45 54 20 63 6c 61 75 73 65 73 20 74 6f  FFSET clauses to
26530 20 64 65 74 65 72 6d 69 6e 65 20 0a 77 68 69 63   determine .whic
26540 68 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75  h are actually u
26550 70 64 61 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68  pdated...<p>^(Th
26560 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
26570 65 20 6f 6e 20 61 6e 20 55 50 44 41 54 45 20 73  e on an UPDATE s
26580 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
26590 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69   only to determi
265a0 6e 65 20 77 68 69 63 68 0a 72 6f 77 73 20 66 61  ne which.rows fa
265b0 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 4c 49  ll within the LI
265c0 4d 49 54 2e 20 54 68 65 20 6f 72 64 65 72 20 69  MIT. The order i
265d0 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65  n which rows are
265e0 20 6d 6f 64 69 66 69 65 64 20 69 73 20 61 72 62   modified is arb
265f0 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f  itrary.and is no
26600 74 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79 20  t influenced by 
26610 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
26620 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23  use.)^..<tcl>.##
26630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26670 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
26680 74 69 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75  tion VACUUM vacu
26690 75 6d 20 56 41 43 55 55 4d 0a 0a 52 65 63 75 72  um VACUUM..Recur
266a0 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
266b0 6d 20 76 61 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f  m vacuum-stmt.</
266c0 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20  tcl>..<p>.  The 
266d0 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 72  VACUUM command r
266e0 65 62 75 69 6c 64 73 20 74 68 65 20 65 6e 74 69  ebuilds the enti
266f0 72 65 20 64 61 74 61 62 61 73 65 2e 20 54 68 65  re database. The
26700 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 0a  re are several .
26710 20 20 72 65 61 73 6f 6e 73 20 61 6e 20 61 70 70    reasons an app
26720 6c 69 63 61 74 69 6f 6e 20 6d 69 67 68 74 20 64  lication might d
26730 6f 20 74 68 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20  o this:..<ul>.  
26740 3c 6c 69 3e 20 3c 70 3e 20 5e 55 6e 6c 65 73 73  <li> <p> ^Unless
26750 20 53 51 4c 69 74 65 20 69 73 20 72 75 6e 6e 69   SQLite is runni
26760 6e 67 20 69 6e 20 22 61 75 74 6f 5f 76 61 63 75  ng in "auto_vacu
26770 75 6d 3d 46 55 4c 4c 22 20 6d 6f 64 65 2c 20 77  um=FULL" mode, w
26780 68 65 6e 20 61 20 6c 61 72 67 65 0a 20 20 20 20  hen a large.    
26790 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20   amount of data 
267a0 69 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d 20  is deleted from 
267b0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
267c0 65 20 69 74 20 6c 65 61 76 65 73 20 62 65 68 69  e it leaves behi
267d0 6e 64 20 65 6d 70 74 79 0a 20 20 20 20 20 73 70  nd empty.     sp
267e0 61 63 65 2c 20 6f 72 20 22 66 72 65 65 22 20 64  ace, or "free" d
267f0 61 74 61 62 61 73 65 20 70 61 67 65 73 2e 20 54  atabase pages. T
26800 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20 64 61  his means the da
26810 74 61 62 61 73 65 20 66 69 6c 65 20 6d 69 67 68  tabase file migh
26820 74 0a 20 20 20 20 20 62 65 20 6c 61 72 67 65 72  t.     be larger
26830 20 74 68 61 6e 20 73 74 72 69 63 74 6c 79 20 6e   than strictly n
26840 65 63 65 73 73 61 72 79 2e 20 5e 52 75 6e 6e 69  ecessary. ^Runni
26850 6e 67 20 56 41 43 55 55 4d 20 74 6f 20 72 65 62  ng VACUUM to reb
26860 75 69 6c 64 20 74 68 65 20 0a 20 20 20 20 20 64  uild the .     d
26870 61 74 61 62 61 73 65 20 72 65 63 6c 61 69 6d 73  atabase reclaims
26880 20 74 68 69 73 20 73 70 61 63 65 20 61 6e 64 20   this space and 
26890 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
268a0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
268b0 20 66 69 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c   file...  <li> <
268c0 70 3e 20 5e 46 72 65 71 75 65 6e 74 20 69 6e 73  p> ^Frequent ins
268d0 65 72 74 73 2c 20 75 70 64 61 74 65 73 2c 20 61  erts, updates, a
268e0 6e 64 20 64 65 6c 65 74 65 73 20 63 61 6e 20 63  nd deletes can c
268f0 61 75 73 65 20 74 68 65 20 64 61 74 61 62 61 73  ause the databas
26900 65 20 66 69 6c 65 0a 20 20 20 20 20 74 6f 20 62  e file.     to b
26910 65 63 6f 6d 65 20 66 72 61 67 6d 65 6e 74 65 64  ecome fragmented
26920 20 2d 20 77 68 65 72 65 20 64 61 74 61 20 66 6f   - where data fo
26930 72 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  r a single table
26940 20 6f 72 20 69 6e 64 65 78 20 69 73 20 73 63 61   or index is sca
26950 74 74 65 72 65 64 20 0a 20 20 20 20 20 61 72 6f  ttered .     aro
26960 75 6e 64 20 74 68 65 20 64 61 74 61 62 61 73 65  und the database
26970 20 66 69 6c 65 2e 20 5e 52 75 6e 6e 69 6e 67 20   file. ^Running 
26980 56 41 43 55 55 4d 20 65 6e 73 75 72 65 73 20 74  VACUUM ensures t
26990 68 61 74 20 65 61 63 68 20 74 61 62 6c 65 20 61  hat each table a
269a0 6e 64 0a 20 20 20 20 20 69 6e 64 65 78 20 69 73  nd.     index is
269b0 20 6c 61 72 67 65 6c 79 20 73 74 6f 72 65 64 20   largely stored 
269c0 63 6f 6e 74 69 67 75 6f 75 73 6c 79 20 77 69 74  contiguously wit
269d0 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
269e0 20 66 69 6c 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a   file. ^In some.
269f0 20 20 20 20 20 63 61 73 65 73 2c 20 56 41 43 55       cases, VACU
26a00 55 4d 20 6d 61 79 20 61 6c 73 6f 20 72 65 64 75  UM may also redu
26a10 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ce the number of
26a20 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65   partially fille
26a30 64 20 70 61 67 65 73 20 69 6e 0a 20 20 20 20 20  d pages in.     
26a40 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 72 65  the database, re
26a50 64 75 63 69 6e 67 20 74 68 65 20 73 69 7a 65 20  ducing the size 
26a60 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
26a70 66 69 6c 65 20 66 75 72 74 68 65 72 2e 0a 0a 20  file further... 
26a80 20 3c 6c 69 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61   <li> <p> ^Norma
26a90 6c 6c 79 2c 20 74 68 65 20 64 61 74 61 62 61 73  lly, the databas
26aa0 65 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e  e [page_size] an
26ab0 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
26ac0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
26ad0 20 20 20 73 75 70 70 6f 72 74 73 20 5b 61 75 74     supports [aut
26ae0 6f 5f 76 61 63 75 75 6d 5d 20 6d 75 73 74 20 62  o_vacuum] must b
26af0 65 20 63 6f 6e 66 69 67 75 72 65 64 20 62 65 66  e configured bef
26b00 6f 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ore the database
26b10 20 66 69 6c 65 20 69 73 0a 20 20 20 20 20 61 63   file is.     ac
26b20 74 75 61 6c 6c 79 20 63 72 65 61 74 65 64 2e 20  tually created. 
26b30 5e 48 6f 77 65 76 65 72 2c 20 77 68 65 6e 20 6e  ^However, when n
26b40 6f 74 20 69 6e 20 5b 77 72 69 74 65 2d 61 68 65  ot in [write-ahe
26b50 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 74 68  ad log] mode, th
26b60 65 20 0a 20 20 20 20 20 5b 70 61 67 65 5f 73 69  e .     [page_si
26b70 7a 65 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f  ze] and/or [auto
26b80 5f 76 61 63 75 75 6d 5d 20 70 72 6f 70 65 72 74  _vacuum] propert
26b90 69 65 73 20 6f 66 20 61 6e 20 65 78 69 73 74 69  ies of an existi
26ba0 6e 67 20 64 61 74 61 62 61 73 65 20 6d 61 79 20  ng database may 
26bb0 62 65 0a 20 20 20 20 20 63 68 61 6e 67 65 64 20  be.     changed 
26bc0 62 79 20 75 73 69 6e 67 20 74 68 65 20 5b 70 61  by using the [pa
26bd0 67 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 7c 70  ge_size pragma|p
26be0 61 67 65 5f 73 69 7a 65 5d 20 20 61 6e 64 2f 6f  age_size]  and/o
26bf0 72 20 0a 20 20 20 20 20 5b 61 75 74 6f 5f 76 61  r .     [auto_va
26c00 63 75 75 6d 7c 70 72 61 67 6d 61 20 61 75 74 6f  cuum|pragma auto
26c10 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 73  _vacuum] pragmas
26c20 20 61 6e 64 20 74 68 65 6e 20 69 6d 6d 65 64 69   and then immedi
26c30 61 74 65 6c 79 20 56 41 43 55 55 4d 69 6e 67 0a  ately VACUUMing.
26c40 20 20 20 20 20 74 68 65 20 64 61 74 61 62 61 73       the databas
26c50 65 2e 20 5e 57 68 65 6e 20 69 6e 20 5b 77 72 69  e. ^When in [wri
26c60 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f  te-ahead log] mo
26c70 64 65 2c 20 6f 6e 6c 79 20 74 68 65 20 5b 61 75  de, only the [au
26c80 74 6f 5f 76 61 63 75 75 6d 5d 0a 20 20 20 20 20  to_vacuum].     
26c90 73 75 70 70 6f 72 74 20 70 72 6f 70 65 72 74 79  support property
26ca0 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64 20   can be changed 
26cb0 75 73 69 6e 67 20 56 41 43 55 55 4d 2e 0a 3c 2f  using VACUUM..</
26cc0 75 6c 3e 0a 0a 3c 70 3e 5e 28 56 41 43 55 55 4d  ul>..<p>^(VACUUM
26cd0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74   only works on t
26ce0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
26cf0 2e 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  . It is not poss
26d00 69 62 6c 65 20 74 6f 20 56 41 43 55 55 4d 20 61  ible to VACUUM a
26d10 6e 0a 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n.attached datab
26d20 61 73 65 20 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e  ase file.)^..<p>
26d30 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d  ^The VACUUM comm
26d40 61 6e 64 20 77 6f 72 6b 73 20 62 79 20 63 6f 70  and works by cop
26d50 79 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ying the content
26d60 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
26d70 65 20 69 6e 74 6f 0a 61 20 74 65 6d 70 6f 72 61  e into.a tempora
26d80 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
26d90 20 61 6e 64 20 74 68 65 6e 20 6f 76 65 72 77 72   and then overwr
26da0 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e  iting the origin
26db0 61 6c 20 77 69 74 68 20 74 68 65 20 0a 63 6f 6e  al with the .con
26dc0 74 65 6e 74 73 20 6f 66 20 74 68 65 20 74 65 6d  tents of the tem
26dd0 70 6f 72 61 72 79 20 66 69 6c 65 2e 20 5e 57 68  porary file. ^Wh
26de0 65 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74  en overwriting t
26df0 68 65 20 6f 72 69 67 69 6e 61 6c 2c 20 61 20 72  he original, a r
26e00 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20  ollback.journal 
26e10 6f 72 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20  or [write-ahead 
26e20 6c 6f 67 5d 20 57 41 4c 20 66 69 6c 65 20 69 73  log] WAL file is
26e30 20 75 73 65 64 20 6a 75 73 74 20 61 73 20 69 74   used just as it
26e40 20 77 6f 75 6c 64 20 62 65 20 66 6f 72 20 61 6e   would be for an
26e50 79 0a 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  y.other database
26e60 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 5e 54   transaction. ^T
26e70 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 20 77  his means that w
26e80 68 65 6e 20 56 41 43 55 55 4d 69 6e 67 20 61 20  hen VACUUMing a 
26e90 64 61 74 61 62 61 73 65 2c 20 0a 61 73 20 6d 75  database, .as mu
26ea0 63 68 20 61 73 20 74 77 69 63 65 20 74 68 65 20  ch as twice the 
26eb0 73 69 7a 65 20 6f 66 20 74 68 65 20 6f 72 69 67  size of the orig
26ec0 69 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 69  inal database fi
26ed0 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 20 69  le is required i
26ee0 6e 20 66 72 65 65 0a 64 69 73 6b 20 73 70 61 63  n free.disk spac
26ef0 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55  e...<p>^The VACU
26f00 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63  UM command may c
26f10 68 61 6e 67 65 20 74 68 65 20 5b 52 4f 57 49 44  hange the [ROWID
26f20 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e   | ROWIDs] of en
26f30 74 72 69 65 73 20 69 6e 20 61 6e 79 0a 74 61 62  tries in any.tab
26f40 6c 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  les that do not 
26f50 68 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74  have an explicit
26f60 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
26f70 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70  Y KEY]..</p>..<p
26f80 3e 5e 41 20 56 41 43 55 55 4d 20 77 69 6c 6c 20  >^A VACUUM will 
26f90 66 61 69 6c 20 69 66 20 74 68 65 72 65 20 69 73  fail if there is
26fa0 20 61 6e 20 6f 70 65 6e 20 74 72 61 6e 73 61 63   an open transac
26fb0 74 69 6f 6e 2c 20 6f 72 20 69 66 20 74 68 65 72  tion, or if ther
26fc0 65 20 61 72 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72  e are one or.mor
26fd0 65 20 61 63 74 69 76 65 20 53 51 4c 20 73 74 61  e active SQL sta
26fe0 74 65 6d 65 6e 74 73 20 77 68 65 6e 20 69 74 20  tements when it 
26ff0 69 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73  is run...<p>^(As
27000 20 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73 69   of SQLite versi
27010 6f 6e 20 33 2e 31 2c 20 61 6e 20 61 6c 74 65 72  on 3.1, an alter
27020 6e 61 74 69 76 65 20 74 6f 20 75 73 69 6e 67 20  native to using 
27030 74 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  the VACUUM comma
27040 6e 64 20 74 6f 0a 72 65 63 6c 61 69 6d 20 73 70  nd to.reclaim sp
27050 61 63 65 20 61 66 74 65 72 20 64 61 74 61 20 68  ace after data h
27060 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 20  as been deleted 
27070 69 73 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d  is auto-vacuum m
27080 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20 75 73 69  ode, enabled usi
27090 6e 67 0a 74 68 65 20 5b 61 75 74 6f 5f 76 61 63  ng.the [auto_vac
270a0 75 75 6d 5d 20 70 72 61 67 6d 61 2e 29 5e 20 5e  uum] pragma.)^ ^
270b0 57 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75 75  When [auto_vacuu
270c0 6d 5d 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f  m] is enabled fo
270d0 72 20 61 20 64 61 74 61 62 61 73 65 0a 66 72 65  r a database.fre
270e0 65 20 70 61 67 65 73 20 6d 61 79 20 62 65 20 72  e pages may be r
270f0 65 63 6c 61 69 6d 65 64 20 61 66 74 65 72 20 64  eclaimed after d
27100 65 6c 65 74 69 6e 67 20 64 61 74 61 2c 20 63 61  eleting data, ca
27110 75 73 69 6e 67 20 74 68 65 20 66 69 6c 65 20 74  using the file t
27120 6f 20 73 68 72 69 6e 6b 2c 0a 77 69 74 68 6f 75  o shrink,.withou
27130 74 20 72 65 62 75 69 6c 64 69 6e 67 20 74 68 65  t rebuilding the
27140 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
27150 20 75 73 69 6e 67 20 56 41 43 55 55 4d 2e 20 20   using VACUUM.  
27160 48 6f 77 65 76 65 72 2c 20 75 73 69 6e 67 0a 5b  However, using.[
27170 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 63 61 6e  auto_vacuum] can
27180 20 6c 65 61 64 20 74 6f 20 65 78 74 72 61 20 64   lead to extra d
27190 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 72 61  atabase file fra
271a0 67 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 41 6e 64  gmentation.  And
271b0 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64   [auto_vacuum].d
271c0 6f 65 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20  oes not compact 
271d0 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64  partially filled
271e0 20 70 61 67 65 73 20 6f 66 20 74 68 65 20 64 61   pages of the da
271f0 74 61 62 61 73 65 20 61 73 20 56 41 43 55 55 4d  tabase as VACUUM
27200 20 64 6f 65 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c   does...</p>...<
27210 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
27220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27260 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 49 4e 44  ###.Section {IND
27270 45 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64  EXED BY} indexed
27280 62 79 20 7b 7b 49 4e 44 45 58 45 44 20 42 59 7d  by {{INDEXED BY}
27290 20 7b 4e 4f 54 20 49 4e 44 45 58 45 44 7d 7d 0a   {NOT INDEXED}}.
272a0 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  .</tcl>.<p>^The 
272b0 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
272c0 65 20 66 6f 72 63 65 73 20 74 68 65 20 5b 53 51  e forces the [SQ
272d0 4c 69 74 65 20 71 75 65 72 79 20 70 6c 61 6e 6e  Lite query plann
272e0 65 72 5d 20 74 6f 20 75 73 65 20 61 0a 70 61 72  er] to use a.par
272f0 74 69 63 75 6c 61 72 20 6e 61 6d 65 64 20 69 6e  ticular named in
27300 64 65 78 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45  dex on a [DELETE
27310 5d 2c 20 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20  ], [SELECT], or 
27320 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65  [UPDATE] stateme
27330 6e 74 2e 0a 54 68 65 20 49 4e 44 45 58 45 44 20  nt..The INDEXED 
27340 42 59 20 70 68 72 61 73 65 20 69 73 20 61 6e 20  BY phrase is an 
27350 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 20 69  extension that i
27360 73 20 70 61 72 74 69 63 75 6c 61 72 20 74 6f 20  s particular to 
27370 53 51 4c 69 74 65 20 61 6e 64 0a 69 73 20 6e 6f  SQLite and.is no
27380 74 20 70 6f 72 74 61 62 6c 65 20 74 6f 20 6f 74  t portable to ot
27390 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
273a0 20 65 6e 67 69 6e 65 73 2e 0a 54 68 65 20 49 4e   engines..The IN
273b0 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
273c0 63 61 6e 20 62 65 20 73 65 65 6e 20 69 6e 20 74  can be seen in t
273d0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e  he following syn
273e0 74 61 78 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70  tax.diagrams:</p
273f0 3e 0a 0a 3c 74 63 6c 3e 0a 42 75 62 62 6c 65 44  >..<tcl>.BubbleD
27400 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64  iagram qualified
27410 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 42 75 62 62  -table-name.Bubb
27420 6c 65 44 69 61 67 72 61 6d 20 73 69 6d 70 6c 65  leDiagram simple
27430 2d 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a 3c 2f 74  -join-source.</t
27440 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49 4e  cl>..<p>^The "IN
27450 44 45 58 45 44 20 42 59 20 69 6e 64 65 78 2d 6e  DEXED BY index-n
27460 61 6d 65 22 20 70 68 72 61 73 65 20 73 70 65 63  ame" phrase spec
27470 69 66 69 65 73 20 74 68 61 74 20 74 68 65 20 6e  ifies that the n
27480 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73 74 20  amed index.must 
27490 62 65 20 75 73 65 64 20 69 6e 20 6f 72 64 65 72  be used in order
274a0 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75   to look up valu
274b0 65 73 20 6f 6e 20 74 68 65 20 70 72 65 63 65 64  es on the preced
274c0 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20 69  ing table..^If i
274d0 6e 64 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20 6e  ndex-name does n
274e0 6f 74 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e  ot exist or cann
274f0 6f 74 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ot be used for t
27500 68 65 20 71 75 65 72 79 2c 20 74 68 65 6e 0a 74  he query, then.t
27510 68 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f  he preparation o
27520 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  f the SQL statem
27530 65 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65  ent fails..^(The
27540 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 63   "NOT INDEXED" c
27550 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20  lause specifies 
27560 74 68 61 74 20 6e 6f 20 69 6e 64 65 78 20 73 68  that no index sh
27570 61 6c 6c 20 62 65 20 75 73 65 64 20 77 68 65 6e  all be used when
27580 0a 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 70  .accessing the p
27590 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2c 20  receding table, 
275a0 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65  including implie
275b0 64 20 69 6e 64 69 63 65 73 20 63 72 65 61 74 65  d indices create
275c0 20 62 79 0a 55 4e 49 51 55 45 20 61 6e 64 20 50   by.UNIQUE and P
275d0 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
275e0 72 61 69 6e 74 73 2e 20 20 48 6f 77 65 76 65 72  raints.  However
275f0 2c 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52  , the INTEGER PR
27600 49 4d 41 52 59 20 4b 45 59 0a 63 61 6e 20 73 74  IMARY KEY.can st
27610 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c  ill be used to l
27620 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65  ook up entries e
27630 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e  ven when "NOT IN
27640 44 45 58 45 44 22 20 69 73 20 73 70 65 63 69 66  DEXED" is specif
27650 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53  ied.)^</p>..<p>S
27660 6f 6d 65 20 53 51 4c 20 64 61 74 61 62 61 73 65  ome SQL database
27670 20 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65   engines provide
27680 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68   non-standard "h
27690 69 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20  int" mechanisms 
276a0 77 68 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65  which.can be use
276b0 64 20 74 6f 20 67 69 76 65 20 74 68 65 20 71 75  d to give the qu
276c0 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c  ery optimizer cl
276d0 75 65 73 20 61 62 6f 75 74 20 77 68 61 74 20 69  ues about what i
276e0 6e 64 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64  ndices it should
276f0 0a 75 73 65 20 66 6f 72 20 61 20 70 61 72 74 69  .use for a parti
27700 63 75 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e  cular statement.
27710 20 20 54 68 65 20 49 4e 44 45 58 20 42 59 20 63    The INDEX BY c
27720 6c 61 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20  lause of SQLite 
27730 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e  is .<em>not</em>
27740 20 61 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61   a hinting mecha
27750 6e 69 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75  nism and it shou
27760 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61  ld not be used a
27770 73 20 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44  s such..^The IND
27780 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 64  EXED BY clause d
27790 6f 65 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65  oes not give the
277a0 20 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73   optimizer hints
277b0 20 61 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64   about which ind
277c0 65 78 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69  ex.to use; it gi
277d0 76 65 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  ves the optimize
277e0 72 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20  r a requirement 
277f0 6f 66 20 77 68 69 63 68 20 69 6e 64 65 78 20 74  of which index t
27800 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68 65 20 71  o use..^If the q
27810 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69  uery optimizer i
27820 73 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20  s unable to use 
27830 74 68 65 20 69 6e 64 65 78 20 73 70 65 63 69 66  the index specif
27840 69 65 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58  ied by the.INDEX
27850 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
27860 20 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20   the query will 
27870 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72  fail with an err
27880 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  or.</p>..<p>The 
27890 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
278a0 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d  e is <em>not</em
278b0 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  > intended for u
278c0 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65  se in tuning.the
278d0 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20   performance of 
278e0 61 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e  a query.  The in
278f0 74 65 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45  tent of the INDE
27900 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73  XED BY clause is
27910 0a 74 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d  .to raise a run-
27920 74 69 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20  time error if a 
27930 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73  schema change, s
27940 75 63 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20  uch as dropping 
27950 6f 72 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69  or.creating an i
27960 6e 64 65 78 2c 20 63 61 75 73 65 73 20 74 68 65  ndex, causes the
27970 20 71 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20   query plan for 
27980 61 20 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65  a time-sensitive
27990 20 71 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65   query.to change
279a0 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20 42  .  The INDEXED B
279b0 59 20 63 6c 61 75 73 65 20 69 73 20 64 65 73 69  Y clause is desi
279c0 67 6e 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74  gned to help det
279d0 65 63 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20  ect.undesirable 
279e0 71 75 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67  query plan chang
279f0 65 73 20 64 75 72 69 6e 67 20 72 65 67 72 65 73  es during regres
27a00 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 44 65  sion testing..De
27a10 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d  velopers are adm
27a20 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20  onished to omit 
27a30 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58  all use of INDEX
27a40 45 44 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70  ED BY during.app
27a50 6c 69 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c  lication design,
27a60 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
27a70 20 74 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75   testing, and tu
27a80 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45  ning.  If.INDEXE
27a90 44 20 42 59 20 69 73 20 74 6f 20 62 65 20 75 73  D BY is to be us
27aa0 65 64 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68  ed at all, it sh
27ab0 6f 75 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64  ould be inserted
27ac0 20 61 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64   at the very.end
27ad0 20 6f 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d   of the developm
27ae0 65 6e 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e  ent process when
27af0 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20   "locking down" 
27b00 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c  a design.</p>..<
27b10 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33  h3>See Also:</h3
27b20 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54  >..<ol>.<li><p>T
27b30 68 65 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65  he [query planne
27b40 72 20 63 68 65 63 6b 6c 69 73 74 5d 20 64 65 73  r checklist] des
27b50 63 72 69 62 65 73 20 73 74 65 70 73 20 74 68 61  cribes steps tha
27b60 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 64 65  t application.de
27b70 76 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20  velopers should 
27b80 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 68 65 6c  following to hel
27b90 70 20 72 65 73 6f 6c 76 65 20 71 75 65 72 79 20  p resolve query 
27ba0 70 6c 61 6e 6e 65 72 20 70 72 6f 62 6c 65 6d 73  planner problems
27bb0 2e 0a 4e 6f 74 69 63 65 20 74 68 65 20 74 68 61  ..Notice the tha
27bc0 74 20 74 68 65 20 75 73 65 20 6f 66 20 49 4e 44  t the use of IND
27bd0 45 58 45 44 20 42 59 20 69 73 20 61 20 6c 61 73  EXED BY is a las
27be0 74 20 72 65 73 6f 72 74 2c 20 74 6f 20 62 65 20  t resort, to be 
27bf0 75 73 65 64 20 6f 6e 6c 79 0a 77 68 65 6e 20 61  used only.when a
27c00 6c 6c 20 6f 74 68 65 72 20 6d 65 61 73 75 72 65  ll other measure
27c10 73 20 66 61 69 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69  s fail.</p>..<li
27c20 3e 3c 70 3e 5b 75 70 6c 75 73 63 6f 6e 74 72 6f  ><p>[upluscontro
27c30 6c 7c 54 68 65 20 75 6e 61 72 79 20 22 2b 22 20  l|The unary "+" 
27c40 6f 70 65 72 61 74 6f 72 5d 0a 63 61 6e 20 62 65  operator].can be
27c50 20 75 73 65 64 20 74 6f 20 64 69 73 71 75 61 6c   used to disqual
27c60 69 66 79 20 74 65 72 6d 73 20 69 6e 20 74 68 65  ify terms in the
27c70 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 72   WHERE clause fr
27c80 6f 6d 20 75 73 65 20 62 79 20 69 6e 64 69 63 65  om use by indice
27c90 73 2e 0a 43 61 72 65 66 75 6c 20 75 73 65 20 6f  s..Careful use o
27ca0 66 20 75 6e 61 72 79 20 2b 20 63 61 6e 20 73 6f  f unary + can so
27cb0 6d 65 74 69 6d 65 73 20 68 65 6c 70 20 70 72 65  metimes help pre
27cc0 76 65 6e 74 20 74 68 65 20 71 75 65 72 79 20 70  vent the query p
27cd0 6c 61 6e 6e 65 72 20 66 72 6f 6d 0a 63 68 6f 6f  lanner from.choo
27ce0 73 69 6e 67 20 61 20 70 6f 6f 72 20 69 6e 64 65  sing a poor inde
27cf0 78 20 77 69 74 68 6f 75 74 20 72 65 73 74 72 69  x without restri
27d00 63 74 69 6e 67 20 69 74 20 74 6f 20 75 73 69 6e  cting it to usin
27d10 67 20 6f 6e 65 20 73 70 65 63 69 66 69 63 20 69  g one specific i
27d20 6e 64 65 78 2e 0a 43 61 72 65 66 75 6c 20 70 6c  ndex..Careful pl
27d30 61 63 65 6d 65 6e 74 20 6f 66 20 75 6e 61 72 79  acement of unary
27d40 20 2b 20 6f 70 65 72 61 74 6f 72 73 20 69 73 20   + operators is 
27d50 61 20 62 65 74 74 65 72 20 6d 65 74 68 6f 64 20  a better method 
27d60 66 6f 72 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20  for controlling 
27d70 0a 77 68 69 63 68 20 69 6e 64 69 63 65 73 20 61  .which indices a
27d80 72 65 20 75 73 65 64 20 62 79 20 61 20 71 75 65  re used by a que
27d90 72 79 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e  ry.</p>..<li><p>
27da0 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d  The [sqlite3_stm
27db0 74 5f 73 74 61 74 75 73 28 29 5d 20 43 2f 43 2b  t_status()] C/C+
27dc0 2b 20 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65  + interface toge
27dd0 74 68 65 72 20 77 69 74 68 20 74 68 65 0a 5b 53  ther with the.[S
27de0 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
27df0 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d 20  _FULLSCAN_STEP] 
27e00 61 6e 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54  and [SQLITE_STMT
27e10 53 54 41 54 55 53 5f 53 4f 52 54 5d 20 76 65 72  STATUS_SORT] ver
27e20 62 73 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74  bs.can be used t
27e30 6f 20 64 65 74 65 63 74 20 61 74 20 72 75 6e 2d  o detect at run-
27e40 74 69 6d 65 20 77 68 65 6e 20 61 6e 20 53 51 4c  time when an SQL
27e50 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f   statement is no
27e60 74 0a 6d 61 6b 69 6e 67 20 65 66 66 65 63 74 69  t.making effecti
27e70 76 65 20 75 73 65 20 6f 66 20 69 6e 64 69 63 65  ve use of indice
27e80 73 2e 20 20 4d 61 6e 79 20 61 70 70 6c 69 63 61  s.  Many applica
27e90 74 69 6f 6e 73 20 6d 61 79 20 70 72 65 66 65 72  tions may prefer
27ea0 20 74 6f 0a 75 73 65 20 74 68 65 20 5b 73 71 6c   to.use the [sql
27eb0 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73  ite3_stmt_status
27ec0 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f  ()] interface to
27ed0 20 64 65 74 65 63 74 20 69 6e 64 65 78 20 6d 69   detect index mi
27ee0 73 75 73 65 0a 72 61 74 68 65 72 20 74 68 61 6e  suse.rather than
27ef0 20 74 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   the INDEXED BY 
27f00 70 68 72 61 73 65 20 64 65 73 63 72 69 62 65 64  phrase described
27f10 20 68 65 72 65 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e   here.</p>.</ol>
27f20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
27f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f70 23 23 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f  #####.# A list o
27f80 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61  f keywords.  A a
27f90 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61  sterisk occurs a
27fa0 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64  fter the keyword
27fb0 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74   if it is on.# t
27fc0 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74  he fallback list
27fd0 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f  ..#.set keyword_
27fe0 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20  list [lsort {.  
27ff0 20 41 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e   ABORT.   ACTION
28000 0a 20 20 20 41 44 44 0a 20 20 20 41 46 54 45 52  .   ADD.   AFTER
28010 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52  .   ALL.   ALTER
28020 0a 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41  .   ANALYZE.   A
28030 4e 44 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a  ND.   AS.   ASC.
28040 20 20 20 41 54 54 41 43 48 0a 20 20 20 41 55 54     ATTACH.   AUT
28050 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45  OINCREMENT.   BE
28060 46 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20  FORE.   BEGIN.  
28070 20 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20   BETWEEN.   BY. 
28080 20 20 43 41 53 43 41 44 45 0a 20 20 20 43 41 53    CASCADE.   CAS
28090 45 0a 20 20 20 43 41 53 54 0a 20 20 20 43 48 45  E.   CAST.   CHE
280a0 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20  CK.   COLLATE.  
280b0 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49   COLUMN.   COMMI
280c0 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20  T.   CONFLICT.  
280d0 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43   CONSTRAINT.   C
280e0 4f 56 45 52 49 4e 47 0a 20 20 20 43 52 45 41 54  OVERING.   CREAT
280f0 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43 55  E.   CROSS.   CU
28100 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20 43 55  RRENT_DATE.   CU
28110 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55  RRENT_TIME.   CU
28120 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a  RRENT_TIMESTAMP.
28130 20 20 20 44 41 54 41 42 41 53 45 0a 20 20 20 44     DATABASE.   D
28140 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52 52  EFAULT.   DEFERR
28150 45 44 0a 20 20 20 44 45 46 45 52 52 41 42 4c 45  ED.   DEFERRABLE
28160 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20 44 45  .   DELETE.   DE
28170 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20 20 20  SC.   DETACH.   
28180 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52 4f 50  DISTINCT.   DROP
28190 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43 48 0a  .   END.   EACH.
281a0 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41 50     ELSE.   ESCAP
281b0 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20 45  E.   EXCEPT.   E
281c0 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58 49 53  XCLUSIVE.   EXIS
281d0 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a 20 20  TS.   EXPLAIN.  
281e0 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20 20 20   FAIL.   FOR.   
281f0 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a  FOREIGN.   FROM.
28200 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a     FULL.   GLOB.
28210 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41 56 49     GROUP.   HAVI
28220 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47 4e 4f  NG.   IF.   IGNO
28230 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 0a  RE.   IMMEDIATE.
28240 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20     IN.   INDEX. 
28250 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49 4e 49    INDEXED.   INI
28260 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a  TIALLY.   INNER.
28270 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e 53     INSERT.   INS
28280 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53 45 43  TEAD.   INTERSEC
28290 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a  T.   INTO.   IS.
282a0 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49     ISNULL.   JOI
282b0 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45 46 54  N.   KEY.   LEFT
282c0 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49  .   LIKE.   LIMI
282d0 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20 4e 41  T.   MATCH.   NA
282e0 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e  TURAL.   NO.   N
282f0 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20  OT.   NOTNULL.  
28300 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20 20 4f   NULL.   OF.   O
28310 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20 20 4f  FFSET.   ON.   O
28320 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20 4f 55  R.   ORDER.   OU
28330 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20 20 50  TER.   PLAN.   P
28340 52 41 47 4d 41 0a 20 20 20 50 52 49 4d 41 52 59  RAGMA.   PRIMARY
28350 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52 41 49  .   QUERY.   RAI
28360 53 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45 53  SE.   REFERENCES
28370 0a 20 20 20 52 45 47 45 58 50 0a 20 20 20 52 45  .   REGEXP.   RE
28380 49 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53 45  INDEX.   RELEASE
28390 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52 45  .   RENAME.   RE
283a0 50 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49 43  PLACE.   RESTRIC
283b0 54 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52 4f  T.   RIGHT.   RO
283c0 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20  LLBACK.   ROW.  
283d0 20 53 41 56 45 50 4f 49 4e 54 0a 20 20 20 53 45   SAVEPOINT.   SE
283e0 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20 54  LECT.   SET.   T
283f0 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20 20 20  ABLE.   TEMP.   
28400 54 45 4d 50 4f 52 41 52 59 0a 20 20 20 54 48 45  TEMPORARY.   THE
28410 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e 53  N.   TO.   TRANS
28420 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47 45  ACTION.   TRIGGE
28430 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e  R.   UNION.   UN
28440 49 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a 20  IQUE.   UPDATE. 
28450 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55 55    USING.   VACUU
28460 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56  M.   VALUES.   V
28470 49 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a 20  IEW.   VIRTUAL. 
28480 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45 0a    WHEN.   WHERE.
28490 20 20 20 57 49 54 48 0a 20 20 20 57 49 54 48 4f     WITH.   WITHO
284a0 55 54 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b  UT.}]..hd_puts {
284b0 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f  <DIV class="pdf_
284c0 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69  section">}.Secti
284d0 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f  on {SQLite Keywo
284e0 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b  rds} keywords {{
284f0 2a 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53  *SQL keyword} {S
28500 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64  QL keywords}}.hd
28510 5f 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c  _puts {</DIV>}.<
28520 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51  /tcl>..<p>The SQ
28530 4c 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69  L standard speci
28540 66 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62  fies a huge numb
28550 65 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77  er of keywords w
28560 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20  hich may not.be 
28570 75 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65  used as the name
28580 73 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64  s of tables, ind
28590 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64  ices, columns, d
285a0 61 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64  atabases, user-d
285b0 65 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73  efined.functions
285c0 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69  , collations, vi
285d0 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
285e0 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65  les, or any othe
285f0 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a  r named object..
28600 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77  The list of keyw
28610 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20  ords is so long 
28620 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20  that few people 
28630 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65  can remember the
28640 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20  m all..For most 
28650 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73  SQL code, your s
28660 61 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20  afest bet is to 
28670 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e  never use any En
28680 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77  glish language.w
28690 6f 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20  ord as the name 
286a0 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  of a user-define
286b0 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c  d object.</p>..<
286c0 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f  p>If you want to
286d0 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61   use a keyword a
286e0 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65  s a name, you ne
286f0 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20  ed to quote it. 
28700 20 54 68 65 72 65 0a 61 72 65 20 66 6f 75 72 20   There.are four 
28710 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20  ways of quoting 
28720 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69  keywords in SQLi
28730 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c  te:</p>..<p>.<bl
28740 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
28750 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
28760 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77  n="top"><b>'keyw
28770 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord'</b></td><td
28780 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
28790 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
287a0 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74  d in single quot
287b0 65 73 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c  es is a string l
287c0 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72  iteral.</td></tr
287d0 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
287e0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79  gn="top"><b>"key
287f0 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  word"</b></td><t
28800 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  d></td>..<td>^A 
28810 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c  keyword in doubl
28820 65 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69  e-quotes is an i
28830 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c  dentifier.</td><
28840 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76  /tr>..<tr>.<td v
28850 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26  align="top"><b>&
28860 23 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b  #91;keyword&#93;
28870 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74  </b></td><td></t
28880 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
28890 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73  rd enclosed in s
288a0 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 20 69  quare brackets i
288b0 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64  s .        an id
288c0 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20  entifier.  This 
288d0 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  is not standard 
288e0 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69  SQL.  This quoti
288f0 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20  ng mechanism.   
28900 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by 
28910 4d 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51  MS Access and SQ
28920 4c 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20  L Server and is 
28930 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69  included in SQLi
28940 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63  te for.        c
28950 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74  ompatibility.</t
28960 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74  d></tr>..<tr>.<t
28970 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
28980 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23  b>&#96;keyword&#
28990 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  96;</b></td><td>
289a0 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
289b0 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69  yword enclosed i
289c0 6e 20 67 72 61 76 65 20 61 63 63 65 6e 74 73 20  n grave accents 
289d0 28 41 53 43 49 49 20 63 6f 64 65 20 39 36 29 20  (ASCII code 96) 
289e0 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69  is .        an i
289f0 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73  dentifier.  This
28a00 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64   is not standard
28a10 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74   SQL.  This quot
28a20 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20  ing mechanism.  
28a30 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79        is used by
28a40 20 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e   MySQL and is in
28a50 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65  cluded in SQLite
28a60 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d   for.        com
28a70 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e  patibility.</td>
28a80 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
28a90 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70  /blockquote>.</p
28aa0 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69  >..<p>For resili
28ab0 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f  ence when confro
28ac0 6e 74 65 64 20 77 69 74 68 20 68 69 73 74 6f 72  nted with histor
28ad0 69 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65  ical SQL stateme
28ae0 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c  nts, SQLite.will
28af0 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20   sometimes bend 
28b00 74 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65  the quoting rule
28b10 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75  s above:</p>..<u
28b20 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20  l>.<li><p>^If a 
28b30 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c  keyword in singl
28b40 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62  e.quotes (ex: <b
28b50 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62  >'key'</b> or <b
28b60 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20  >'glob'</b>) is 
28b70 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78  used in a contex
28b80 74 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74  t where.an ident
28b90 69 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64  ifier is allowed
28ba0 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72   but where a str
28bb0 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e  ing literal is n
28bc0 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e  ot allowed, then
28bd0 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e  .the token is un
28be0 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61  derstood to be a
28bf0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73  n identifier ins
28c00 74 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67  tead of a string
28c10 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f   literal..</p></
28c20 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  li>..<li><p>^If 
28c30 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75  a keyword in dou
28c40 62 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20  ble.quotes (ex: 
28c50 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20  <b>"key"</b> or 
28c60 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69  <b>"glob"</b>) i
28c70 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74  s used in a cont
28c80 65 78 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e  ext where.it can
28c90 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20  not be resolved 
28ca0 74 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  to an identifier
28cb0 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72   but where a str
28cc0 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61  ing literal.is a
28cd0 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65  llowed, then the
28ce0 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73   token is unders
28cf0 74 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72  tood to be a str
28d00 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74  ing literal inst
28d10 65 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69  ead.of an identi
28d20 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  fier.</p></li>.<
28d30 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d  /ul>..<p>Program
28d40 6d 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e  mers are caution
28d50 65 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68  ed not to use th
28d60 65 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73  e two exceptions
28d70 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68   described in.th
28d80 65 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65  e previous bulle
28d90 74 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a  ts.  We emphasiz
28da0 65 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73  e that they exis
28db0 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f  t only so that o
28dc0 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65  ld.and ill-forme
28dd0 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  d SQL statements
28de0 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63   will run correc
28df0 74 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72  tly.  Future ver
28e00 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
28e10 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 6f 20  might change to 
28e20 72 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73  raise errors ins
28e30 74 65 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e  tead of acceptin
28e40 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a  g the malformed.
28e50 73 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72  statements cover
28e60 65 64 20 62 79 20 74 68 65 20 65 78 63 65 70 74  ed by the except
28e70 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a  ions above.</p>.
28e80 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73  .<p>.SQLite adds
28e90 20 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72   new keywords fr
28ea0 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20  om time to time 
28eb0 77 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e  when it takes on
28ec0 20 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53   new features..S
28ed0 6f 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75  o to prevent you
28ee0 72 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e  r code from bein
28ef0 67 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75  g broken by futu
28f00 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c  re enhancements,
28f10 20 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d   you should.norm
28f20 61 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69  ally quote any i
28f30 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69  dentifier that i
28f40 73 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e  s an English lan
28f50 67 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e  guage word, even
28f60 20 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68   if.you do not h
28f70 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ave to..</p>..<p
28f80 3e 0a 54 68 65 20 6c 69 73 74 20 62 65 6c 6f 77  >.The list below
28f90 20 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69   shows all possi
28fa0 62 6c 65 20 6b 65 79 77 6f 72 64 73 20 75 73 65  ble keywords use
28fb0 64 20 62 79 20 61 6e 79 20 62 75 69 6c 64 20 6f  d by any build o
28fc0 66 0a 53 51 4c 69 74 65 20 72 65 67 61 72 64 6c  f.SQLite regardl
28fd0 65 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d  ess of [compile-
28fe0 74 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20  time options].  
28ff0 0a 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c 65  .Most reasonable
29000 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20   configurations 
29010 75 73 65 20 6d 6f 73 74 20 6f 72 20 61 6c 6c 20  use most or all 
29020 6f 66 20 74 68 65 73 65 20 6b 65 79 77 6f 72 64  of these keyword
29030 73 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79 77  s,.but some keyw
29040 6f 72 64 73 20 6d 61 79 20 62 65 20 6f 6d 69 74  ords may be omit
29050 74 65 64 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e  ted when SQL lan
29060 67 75 61 67 65 20 66 65 61 74 75 72 65 73 20 61  guage features a
29070 72 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52  re.disabled..^(R
29080 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
29090 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f   compile-time co
290a0 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79  nfiguration, any
290b0 20 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74   identifier that
290c0 20 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66   is not on.the f
290d0 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64  ollowing <tcl>hd
290e0 5f 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24  _puts [llength $
290f0 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74  keyword_list]</t
29100 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74  cl> element.list
29110 20 69 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72   is not a keywor
29120 64 20 74 6f 20 74 68 65 20 53 51 4c 20 70 61 72  d to the SQL par
29130 73 65 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c  ser in SQLite:.<
29140 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
29150 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
29160 31 30 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20 61  100%"><tr>.<td a
29170 6c 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69  lign="left" vali
29180 67 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22  gn="top" width="
29190 32 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20  20%">.<tcl>.set 
291a0 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77  n [llength $keyw
291b0 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43  ord_list].set nC
291c0 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65  ol 5.set nRow [e
291d0 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31  xpr {($n+$nCol-1
291e0 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20  )/$nCol}].set i 
291f0 30 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24  0.foreach word $
29200 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20  keyword_list {. 
29210 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20   if {$i==$nRow} 
29220 7b 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c  {.    hd_puts "<
29230 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c  /td><td valign=\
29240 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c  "top\" align=\"l
29250 65 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30  eft\" width=\"20
29260 25 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20  %\">".    set i 
29270 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  1.  } else {.   
29280 20 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64   incr i.  }.  hd
29290 5f 70 75 74 73 20 22 24 77 6f 72 64 3c 62 72 3e  _puts "$word<br>
292a0 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  \n".}.</tcl>.</t
292b0 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c  d></tr></table><
292c0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a     /blockquote>)^.