Documentation Source Text

Hex Artifact Content
Login

Artifact 89bb1ccb7c524c549c0eca097ba974dfdbbe0e5e:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f  .    {comment co
03d0: 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c  mment}.    {EXPL
03e0: 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20  AIN explain}.   
03f0: 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70   {expression exp
0400: 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54  r}.    {{BEGIN T
0410: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0420: 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43  saction}.    {{C
0430: 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f  OMMIT TRANSACTIO
0440: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43  N} transaction C
0450: 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44  OMMIT}.    {{END
0460: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
0470: 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54  ansaction COMMIT
0480: 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b  }.    {{ROLLBACK
0490: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
04a0: 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41  ansaction ROLLBA
04b0: 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49  CK}.    {SAVEPOI
04c0: 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20  NT savepoint}.  
04d0: 20 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45    {{RELEASE SAVE
04e0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
04f0: 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20   SAVEPOINT}.    
0500: 7b 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68  {PRAGMA pragma.h
0510: 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f  tml}.    {{ON CO
0520: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
0530: 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43  onflict}.    {{C
0540: 52 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61  REATE VIEW} crea
0550: 74 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52  teview}.    {{DR
0560: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
0570: 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20  w}.    {{CREATE 
0580: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
0590: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52  rigger}.    {{DR
05a0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
05b0: 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41  trigger}.    {{A
05c0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  TTACH DATABASE} 
05d0: 61 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45  attach}.    {{DE
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
05f0: 65 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45  etach}.      {RE
0600: 49 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20  INDEX reindex}. 
0610: 20 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45     {{ALTER TABLE
0620: 7d 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20  } altertable}.  
0630: 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61    {{ANALYZE} ana
0640: 6c 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45  lyze}.    {{INDE
0650: 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62  XED BY} indexedb
0660: 79 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61  y}.    {{aggrega
0670: 74 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67  te functions} ag
0680: 67 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20  gfunc aggfunc}. 
0690: 20 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69     {{core functi
06a0: 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f  ons} corefunc co
06b0: 72 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61  refunc}.    {{da
06c0: 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
06d0: 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20  tions} datefunc 
06e0: 64 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b  datefunc}.    {k
06f0: 65 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73  eywords keywords
0700: 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d   {SQL keywords}}
0710: 0a 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f  .  }.  set lang_
0720: 73 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65  section_break [e
0730: 78 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24  xpr {([llength $
0740: 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73  lang_section_lis
0750: 74 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65  t]+2)/3}].  fore
0760: 61 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c  ach {section} [l
0770: 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64  sort -index 0 -d
0780: 69 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f  ictionary $lang_
0790: 73 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a  section_list] {.
07a0: 20 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74    foreach {s_tit
07b0: 6c 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24  le s_tag s_kw} $
07c0: 73 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20  section {}.  if 
07d0: 7b 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a  {$s_kw == ""} {.
07e0: 20 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f      set s_kw $s_
07f0: 74 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b  title.  }.  if {
0800: 24 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e  $s_tag=="pragma.
0810: 68 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74  html"} {.    set
0820: 20 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20   url $s_tag.  } 
0830: 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75  else {.    set u
0840: 72 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68  rl lang_$s_tag.h
0850: 74 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73  tml.  }.  hd_res
0860: 6f 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b  olve "<li>\[$s_k
0870: 77 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69  w|$s_title\]</li
0880: 3e 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66  >".  incr i.  if
0890: 20 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74   {$i==$lang_sect
08a0: 69 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d  ion_break || $i=
08b0: 3d 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e  =2*$lang_section
08c0: 5f 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64  _break} {.    hd
08d0: 5f 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64  _puts "</ul></td
08e0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  ><td valign=\"to
08f0: 70 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a  p\"><ul>".  }.}.
0900: 3c 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64  </tcl>.</ul></td
0910: 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a  ></tr></table>..
0920: 3c 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73  <p>^The routines
0930: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0940: 65 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65  e_v2()], [sqlite
0950: 33 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73  3_prepare()],.[s
0960: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
0970: 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72  ()], [sqlite3_pr
0980: 65 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a  epare16_v2()], .
0990: 5b 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d  [sqlite3_exec()]
09a0: 2c 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67  , and [sqlite3_g
09b0: 65 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65  et_table()] acce
09c0: 70 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  pt.an SQL statem
09d0: 65 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74  ent list (sql-st
09e0: 6d 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69  mt-list) which i
09f0: 73 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65  s a semicolon-se
0a00: 70 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20  parated.list of 
0a10: 73 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a  statements.</p>.
0a20: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
0a30: 72 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73  ram sql-stmt-lis
0a40: 74 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68  t</tcl>..<p>Each
0a50: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69   SQL statement i
0a60: 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
0a70: 6c 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61  list is an insta
0a80: 6e 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f  nce of the.follo
0a90: 77 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  wing:</p>..<tcl>
0aa0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71  BubbleDiagram sq
0ab0: 6c 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74  l-stmt</tcl>..<t
0ac0: 63 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f  cl>.proc Operato
0ad0: 72 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74  r {name} {.  ret
0ae0: 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72  urn "<font color
0af0: 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69  =\"#2c2cf0\"><bi
0b00: 67 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66  g>$name</big></f
0b10: 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e  ont>".}.proc Non
0b20: 74 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20  terminal {name} 
0b30: 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c  {.  return "<i><
0b40: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66  font color=\"#ff
0b50: 33 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f  3434\">$name</fo
0b60: 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20  nt></i>".}.proc 
0b70: 4b 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b  Keyword {name} {
0b80: 0a 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74  .  return "<font
0b90: 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30   color=\"#2c2cf0
0ba0: 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22  \">$name</font>"
0bb0: 0a 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20  .}.proc Example 
0bc0: 7b 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75  {text} {.  hd_pu
0bd0: 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  ts "<blockquote>
0be0: 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e  <pre>$text</pre>
0bf0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d  </blockquote>".}
0c00: 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b  ..proc Section {
0c10: 6e 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f  name label keywo
0c20: 72 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  rds} {.  global 
0c30: 44 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d  DOC.  hd_close_m
0c40: 61 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61  ain.  hd_open_ma
0c50: 69 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68  in lang_$label.h
0c60: 74 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20  tml.  hd_header 
0c70: 22 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61  "SQLite Query La
0c80: 6e 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24  nguage: $name" $
0c90: 44 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69  DOC/pages/lang.i
0ca0: 6e 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77  n.  eval hd_keyw
0cb0: 6f 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20  ords $keywords. 
0cc0: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b   if {[lsearch $k
0cd0: 65 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d  eywords $name] =
0ce0: 3d 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68  = -1 && [lsearch
0cf0: 20 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d   $keywords *$nam
0d00: 65 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20  e] == -1} {.    
0d10: 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73  eval hd_keywords
0d20: 20 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20   { $name }.  }. 
0d30: 20 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c   hd_puts {<h1 al
0d40: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c  ign="center">SQL
0d50: 20 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42   As Understood B
0d60: 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20  y SQLite</h1>}. 
0d70: 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20   hd_puts {<p><a 
0d80: 68 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22  href="lang.html"
0d90: 3e 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a  >[Top]</a></p>}.
0da0: 20 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24    hd_puts "<h2>$
0db0: 6e 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23  name</h2>".}..##
0dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
0e10: 63 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42  ction {ALTER TAB
0e20: 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b  LE} altertable {
0e30: 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a  {ALTER TABLE} {*
0e40: 41 4c 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44  ALTER}}..BubbleD
0e50: 69 61 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62  iagram alter-tab
0e60: 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  le-stmt 1.</tcl>
0e70: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70  ..<p>SQLite supp
0e80: 6f 72 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73  orts a limited s
0e90: 75 62 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54  ubset of ALTER T
0ea0: 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20  ABLE..The ALTER 
0eb0: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  TABLE command in
0ec0: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74   SQLite allows t
0ed0: 68 65 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d  he user to renam
0ee0: 65 20 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20  e a table.or to 
0ef0: 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
0f00: 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20   to an existing 
0f10: 74 61 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74  table. It is not
0f20: 20 70 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e   possible.to ren
0f30: 61 6d 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 72 65  ame a column, re
0f40: 6d 6f 76 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f  move a column, o
0f50: 72 20 61 64 64 20 6f 72 20 72 65 6d 6f 76 65 20  r add or remove 
0f60: 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 72 6f 6d  constraints from
0f70: 20 61 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a   a table..</p>..
0f80: 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e 41 4d 45  <p> ^(The RENAME
0f90: 20 54 4f 20 73 79 6e 74 61 78 20 69 73 20 75 73   TO syntax is us
0fa0: 65 64 20 74 6f 20 72 65 6e 61 6d 65 20 74 68 65  ed to rename the
0fb0: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
0fc0: 64 20 62 79 20 0a 3c 69 3e 26 23 39 31 3b 64 61  d by .<i>&#91;da
0fd0: 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33  tabase-name.&#93
0fe0: 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  ;table-name</i> 
0ff0: 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62 6c 65 2d  to <i>new-table-
1000: 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54 68 69 73  name</i>.)^.This
1010: 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74   command .cannot
1020: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65   be used to move
1030: 20 61 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e   a table between
1040: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1050: 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e  ses, only to ren
1060: 61 6d 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74  ame .a table wit
1070: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
1080: 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  abase.</p>..<p> 
1090: 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20 62 65  ^If the table be
10a0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20  ing renamed has 
10b0: 74 72 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69  triggers or indi
10c0: 63 65 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20  ces, then these 
10d0: 72 65 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20  remain.attached 
10e0: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 66 74  to the table aft
10f0: 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20 72  er it has been r
1100: 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77 65 76 65  enamed.  ^Howeve
1110: 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  r, if there are.
1120: 61 6e 79 20 76 69 65 77 20 64 65 66 69 6e 69 74  any view definit
1130: 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65  ions, or stateme
1140: 6e 74 73 20 65 78 65 63 75 74 65 64 20 62 79 20  nts executed by 
1150: 74 72 69 67 67 65 72 73 20 74 68 61 74 20 72 65  triggers that re
1160: 66 65 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65  fer to.the table
1170: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20   being renamed, 
1180: 74 68 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75  these are not au
1190: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69  tomatically modi
11a0: 66 69 65 64 20 74 6f 20 75 73 65 20 74 68 65 20  fied to use the 
11b0: 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20  new.table name. 
11c0: 49 66 20 74 68 69 73 20 69 73 20 72 65 71 75 69  If this is requi
11d0: 72 65 64 2c 20 74 68 65 20 74 72 69 67 67 65 72  red, the trigger
11e0: 73 20 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69  s or view defini
11f0: 74 69 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72  tions must be.dr
1200: 6f 70 70 65 64 20 61 6e 64 20 72 65 63 72 65 61  opped and recrea
1210: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ted to use the n
1220: 65 77 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79  ew table name by
1230: 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   hand..</p>..<p>
1240: 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
1250: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
1260: 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  e .[foreign_keys
1270: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
1280: 64 5d 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20  d] when a table 
1290: 69 73 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e  is renamed, then
12a0: 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65   any.[foreign-ke
12b0: 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52  y-clause | REFER
12c0: 45 4e 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69  ENCES clauses] i
12d0: 6e 20 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74  n any table (eit
12e0: 68 65 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65  her the.table be
12f0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73  ing renamed or s
1300: 6f 6d 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29  ome other table)
1310: 0a 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74  .that refer to t
1320: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1330: 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66  enamed are modif
1340: 69 65 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f  ied to refer .to
1350: 20 74 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62   the renamed tab
1360: 6c 65 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61  le by its new na
1370: 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44  me...<p> ^The AD
1380: 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a  D COLUMN syntax.
1390: 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 61  is used to add a
13a0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   new column to a
13b0: 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
13c0: 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  ..^The new colum
13d0: 6e 20 69 73 20 61 6c 77 61 79 73 20 61 70 70 65  n is always appe
13e0: 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  nded to the end 
13f0: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  of the list of e
1400: 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  xisting columns.
1410: 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66  .The [column-def
1420: 5d 20 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74  ] rule defines t
1430: 68 65 20 63 68 61 72 61 63 74 65 72 69 73 74 69  he characteristi
1440: 63 73 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f  cs of the new co
1450: 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20  lumn..^(The new 
1460: 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20  column may take 
1470: 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73  any of the forms
1480: 20 70 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20   permissible in 
1490: 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  a [CREATE TABLE]
14a0: 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68  .statement, with
14b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
14c0: 65 73 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c  estrictions:)^.<
14d0: 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c  ul>.<li>^The col
14e0: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
14f0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f   a PRIMARY KEY o
1500: 72 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  r UNIQUE constra
1510: 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54  int.</li>.<li>^T
1520: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1530: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
1540: 20 76 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e   value of CURREN
1550: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
1560: 44 41 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45  DATE, .    CURRE
1570: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72  NT_TIMESTAMP, or
1580: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
1590: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f  n parentheses.</
15a0: 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f  li>.<li>^If a NO
15b0: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
15c0: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
15d0: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
15e0: 6d 75 73 74 20 68 61 76 65 20 61 0a 20 20 20 20  must have a.    
15f0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74  default value ot
1600: 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c  her than NULL..<
1610: 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  li>^If [foreign 
1620: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1630: 20 61 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65   are [foreign_ke
1640: 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62  ys pragma | enab
1650: 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63  led] and.    a c
1660: 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f  olumn with a [fo
1670: 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65  reign-key-clause
1680: 20 7c 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c   | REFERENCES cl
1690: 61 75 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64  ause].    is add
16a0: 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  ed, the column m
16b0: 75 73 74 20 68 61 76 65 20 61 20 64 65 66 61 75  ust have a defau
16c0: 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c  lt value of NULL
16d0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74  ..</ul>..<p>^Not
16e0: 65 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e  e also that when
16f0: 20 61 64 64 69 6e 67 20 61 20 5b 43 48 45 43 4b   adding a [CHECK
1700: 20 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68   constraint], th
1710: 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  e CHECK constrai
1720: 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64  nt.is not tested
1730: 20 61 67 61 69 6e 73 74 20 70 72 65 65 78 69 73   against preexis
1740: 74 69 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65  ting rows of the
1750: 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73 20 63 61   table..^This ca
1760: 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 74 61  n result in a ta
1770: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
1780: 73 20 64 61 74 61 20 74 68 61 74 0a 69 73 20 69  s data that.is i
1790: 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74  n violation of t
17a0: 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  he CHECK constra
17b0: 69 6e 74 2e 20 20 46 75 74 75 72 65 20 76 65 72  int.  Future ver
17c0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
17d0: 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 74 6f 20  might.change to 
17e0: 76 61 6c 69 64 61 74 65 20 43 48 45 43 4b 20 63  validate CHECK c
17f0: 6f 6e 73 74 72 61 69 6e 74 73 20 61 73 20 74 68  onstraints as th
1800: 65 79 20 61 72 65 20 61 64 64 65 64 2e 3c 2f 70  ey are added.</p
1810: 3e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 65 63 75  >..<p> The execu
1820: 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65  tion time of the
1830: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
1840: 6d 61 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64  mand is independ
1850: 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e  ent of.the amoun
1860: 74 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65  t of data in the
1870: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54   table.  The ALT
1880: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
1890: 20 72 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79   runs as quickly
18a0: 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68  .on a table with
18b0: 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73   10 million rows
18c0: 20 61 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61   as it does on a
18d0: 20 74 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f   table with 1 ro
18e0: 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65  w..</p>..<p>Afte
18f0: 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73  r ADD COLUMN has
1900: 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64   been run on a d
1910: 61 74 61 62 61 73 65 2c 20 74 68 61 74 20 64 61  atabase, that da
1920: 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a  tabase will not.
1930: 62 65 20 72 65 61 64 61 62 6c 65 20 62 79 20 53  be readable by S
1940: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1950: 31 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2e  1.3 and earlier.
1960: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
19c0: 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61  on {ANALYZE} ana
19d0: 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a 42 75  lyze ANALYZE..Bu
19e0: 62 62 6c 65 44 69 61 67 72 61 6d 20 61 6e 61 6c  bbleDiagram anal
19f0: 79 7a 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  yze-stmt 1.</tcl
1a00: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c  >..<p> ^The ANAL
1a10: 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68  YZE command gath
1a20: 65 72 73 20 73 74 61 74 69 73 74 69 63 73 20 61  ers statistics a
1a30: 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64 0a  bout tables and.
1a40: 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72  indices and stor
1a50: 65 73 20 74 68 65 20 63 6f 6c 6c 65 63 74 65 64  es the collected
1a60: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20   information.in 
1a70: 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73  [internal tables
1a80: 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
1a90: 65 20 77 68 65 72 65 20 74 68 65 20 71 75 65 72  e where the quer
1aa0: 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e 0a  y optimizer can.
1ab0: 61 63 63 65 73 73 20 74 68 65 20 69 6e 66 6f 72  access the infor
1ac0: 6d 61 74 69 6f 6e 20 61 6e 64 20 75 73 65 20 69  mation and use i
1ad0: 74 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20 62  t to help make b
1ae0: 65 74 74 65 72 20 71 75 65 72 79 20 70 6c 61 6e  etter query plan
1af0: 6e 69 6e 67 20 63 68 6f 69 63 65 73 2e 0a 5e 49  ning choices..^I
1b00: 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61  f no arguments a
1b10: 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 61 74  re given, all at
1b20: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1b30: 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20   are.analyzed.  
1b40: 5e 49 66 20 61 20 64 61 74 61 62 61 73 65 20 6e  ^If a database n
1b50: 61 6d 65 20 69 73 20 67 69 76 65 6e 20 61 73 20  ame is given as 
1b60: 74 68 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68  the argument, th
1b70: 65 6e 20 61 6c 6c 20 74 61 62 6c 65 73 0a 61 6e  en all tables.an
1b80: 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68 61  d indices in tha
1b90: 74 20 6f 6e 65 20 64 61 74 61 62 61 73 65 20 61  t one database a
1ba0: 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 0a 5e  re analyzed.  .^
1bb0: 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  If the argument 
1bc0: 69 73 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c  is a table name,
1bd0: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20   then only that 
1be0: 74 61 62 6c 65 20 61 6e 64 20 74 68 65 0a 69 6e  table and the.in
1bf0: 64 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64  dices associated
1c00: 20 77 69 74 68 20 74 68 61 74 20 74 61 62 6c 65   with that table
1c10: 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20   are analyzed.  
1c20: 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ^If the argument
1c30: 0a 69 73 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d  .is an index nam
1c40: 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61  e, then only tha
1c50: 74 20 6f 6e 65 20 69 6e 64 65 78 20 69 73 20 61  t one index is a
1c60: 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  nalyzed.</p>..<p
1c70: 3e 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 69  > ^The default i
1c80: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74  mplementation st
1c90: 6f 72 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74  ores all statist
1ca0: 69 63 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a  ics in a single.
1cb0: 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 5b 73 71  table named "[sq
1cc0: 6c 69 74 65 5f 73 74 61 74 31 5d 22 2e 20 20 5e  lite_stat1]".  ^
1cd0: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
1ce0: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a 5b  piled with the.[
1cf0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
1d00: 41 54 33 5d 20 6f 70 74 69 6f 6e 2c 20 74 68 65  AT3] option, the
1d10: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
1d20: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
1d30: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
1d40: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
1d50: 74 61 74 33 5d 2e 0a 4f 6c 64 65 72 20 76 65 72  tat3]..Older ver
1d60: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1d70: 77 6f 75 6c 64 20 6d 61 6b 65 20 75 73 65 20 6f  would make use o
1d80: 66 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 73 74  f the [sqlite_st
1d90: 61 74 32 5d 20 74 61 62 6c 65 0a 77 68 65 6e 20  at2] table.when 
1da0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 5b 53  compiled with [S
1db0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
1dc0: 54 32 5d 20 62 75 74 20 61 6c 6c 20 72 65 63 65  T2] but all rece
1dd0: 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53  nt versions of.S
1de0: 51 4c 69 74 65 20 69 67 6e 6f 72 65 20 74 68 65  QLite ignore the
1df0: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
1e00: 62 6c 65 2e 0a 46 75 74 75 72 65 20 65 6e 68 61  ble..Future enha
1e10: 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65  ncements may cre
1e20: 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 5b  ate.additional [
1e30: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 5d  internal tables]
1e40: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
1e50: 61 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63 65  ame pattern exce
1e60: 70 74 20 77 69 74 68 0a 66 69 6e 61 6c 20 64 69  pt with.final di
1e70: 67 69 74 20 6c 61 72 67 65 72 20 74 68 61 6e 20  git larger than 
1e80: 22 33 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54  "3".</p>..<p> ^T
1e90: 68 65 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d  he [ALTER TABLE]
1ea0: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 0a 6e 6f   command does.no
1eb0: 74 20 77 6f 72 6b 20 6f 6e 20 74 68 65 20 73 71  t work on the sq
1ec0: 6c 69 74 65 5f 73 74 61 74 31 20 6f 72 20 73 71  lite_stat1 or sq
1ed0: 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
1ee0: 73 2c 0a 62 75 74 20 61 6c 6c 20 74 68 65 20 63  s,.but all the c
1ef0: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 6f 73 65 20  ontent of those 
1f00: 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75  tables can be qu
1f10: 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c  eried using [SEL
1f20: 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20  ECT].and can be 
1f30: 64 65 6c 65 74 65 64 2c 20 61 75 67 6d 65 6e 74  deleted, augment
1f40: 65 64 2c 20 6f 72 20 6d 6f 64 69 66 69 65 64 20  ed, or modified 
1f50: 75 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54  using the [DELET
1f60: 45 5d 2c 0a 5b 49 4e 53 45 52 54 5d 2c 20 61 6e  E],.[INSERT], an
1f70: 64 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d 61  d [UPDATE] comma
1f80: 6e 64 73 2e 0a 5e 28 54 68 65 20 5b 44 52 4f 50  nds..^(The [DROP
1f90: 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20   TABLE] command 
1fa0: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 5f  works on sqlite_
1fb0: 73 74 61 74 31 20 61 6e 64 0a 73 71 6c 69 74 65  stat1 and.sqlite
1fc0: 5f 73 74 61 74 33 20 61 73 20 6f 66 20 53 51 4c  _stat3 as of SQL
1fd0: 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e  ite version 3.7.
1fe0: 39 2e 29 5e 0a 41 70 70 72 6f 70 72 69 61 74 65  9.)^.Appropriate
1ff0: 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20   care should be 
2000: 75 73 65 64 20 77 68 65 6e 20 63 68 61 6e 67 69  used when changi
2010: 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
2020: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
2030: 0a 74 61 62 6c 65 73 20 61 73 20 69 6e 76 61 6c  .tables as inval
2040: 69 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20 63  id content can c
2050: 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 73  ause SQLite to s
2060: 65 6c 65 63 74 20 69 6e 65 66 66 69 63 69 65 6e  elect inefficien
2070: 74 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e 20 20  t.query plans.  
2080: 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69  Generally speaki
2090: 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 20 6e  ng, one should n
20a0: 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f  ot modify the co
20b0: 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20 73 74 61  ntent of.the sta
20c0: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62  tistics tables b
20d0: 79 20 61 6e 79 20 6d 65 63 68 61 6e 69 73 6d 20  y any mechanism 
20e0: 6f 74 68 65 72 20 74 68 61 6e 20 69 6e 76 6f 6b  other than invok
20f0: 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a 45 20  ing the.ANALYZE 
2100: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  command.</p>..<p
2110: 3e 20 5e 53 74 61 74 69 73 74 69 63 73 20 67 61  > ^Statistics ga
2120: 74 68 65 72 65 64 20 62 79 20 41 4e 41 4c 59 5a  thered by ANALYZ
2130: 45 20 61 72 65 20 3c 75 3e 6e 6f 74 3c 2f 75 3e  E are <u>not</u>
2140: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75   automatically u
2150: 70 64 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f  pdated as.the co
2160: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74  ntent of the dat
2170: 61 62 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20  abase changes.  
2180: 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  If the content o
2190: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 63  f the database.c
21a0: 68 61 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61  hanges significa
21b0: 6e 74 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20  ntly, or if the 
21c0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
21d0: 63 68 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e  changes, then on
21e0: 65 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65  e should.conside
21f0: 72 20 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20  r rerunning the 
2200: 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20  ANALYZE command 
2210: 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61  in order to upda
2220: 74 65 20 74 68 65 20 73 74 61 74 69 73 74 69 63  te the statistic
2230: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20  s.</p>..<p> The 
2240: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69  query planner mi
2250: 67 68 74 20 6e 6f 74 20 6e 6f 74 69 63 65 20 6d  ght not notice m
2260: 61 6e 75 61 6c 20 63 68 61 6e 67 65 73 20 74 6f  anual changes to
2270: 20 74 68 65 0a 73 71 6c 69 74 65 5f 73 74 61 74   the.sqlite_stat
2280: 31 20 61 6e 64 2f 6f 72 20 73 71 6c 69 74 65 5f  1 and/or sqlite_
2290: 73 74 61 74 33 20 74 61 62 6c 65 73 2e 20 20 5e  stat3 tables.  ^
22a0: 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63  An application.c
22b0: 61 6e 20 66 6f 72 63 65 20 74 68 65 20 71 75 65  an force the que
22c0: 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20 72 65  ry planner to re
22d0: 72 65 61 64 20 74 68 65 20 73 74 61 74 69 73 74  read the statist
22e0: 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 72 75  ics tables by ru
22f0: 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59 5a 45  nning.<b>ANALYZE
2300: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f   sqlite_master</
2310: 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  b>. </p>..<tcl>.
2320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
2370: 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44  ection {ATTACH D
2380: 41 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20  ATABASE} attach 
2390: 2a 41 54 54 41 43 48 0a 0a 42 75 62 62 6c 65 44  *ATTACH..BubbleD
23a0: 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73 74  iagram attach-st
23b0: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
23c0: 20 5e 54 68 65 20 41 54 54 41 43 48 20 44 41 54   ^The ATTACH DAT
23d0: 41 42 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20  ABASE statement 
23e0: 61 64 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74  adds another dat
23f0: 61 62 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74  abase .file to t
2400: 68 65 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61  he current [data
2410: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
2420: 2e 20 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  . .^The filename
2430: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
2440: 65 20 74 6f 20 62 65 20 61 74 74 61 63 68 65 64  e to be attached
2450: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
2460: 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  .the expression 
2470: 74 68 61 74 20 6f 63 63 75 72 73 20 62 65 66 6f  that occurs befo
2480: 72 65 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72  re the AS keywor
2490: 64 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  d..^The filename
24a0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
24b0: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d   follows the sam
24c0: 65 20 73 65 6d 61 6e 74 69 63 73 20 61 73 20 74  e semantics as t
24d0: 68 65 0a 66 69 6c 65 6e 61 6d 65 20 61 72 67 75  he.filename argu
24e0: 6d 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74 65 33  ment to [sqlite3
24f0: 5f 6f 70 65 6e 28 29 5d 20 61 6e 64 20 5b 73 71  _open()] and [sq
2500: 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d  lite3_open_v2()]
2510: 3b 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61  ; the.special na
2520: 6d 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20  me "[:memory:]" 
2530: 72 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 5b 69  results in an [i
2540: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
2550: 65 5d 20 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20  e] and an.empty 
2560: 73 74 72 69 6e 67 20 72 65 73 75 6c 74 73 20 69  string results i
2570: 6e 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72  n a new temporar
2580: 79 20 64 61 74 61 62 61 73 65 2e 0a 5e 54 68 65  y database..^The
2590: 20 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65   filename argume
25a0: 6e 74 20 63 61 6e 20 62 65 20 61 20 5b 55 52 49  nt can be a [URI
25b0: 20 66 69 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52   filename] if UR
25c0: 49 20 66 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65  I filename proce
25d0: 73 73 69 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20  ssing.is enable 
25e0: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
25f0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
2600: 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f   default behavio
2610: 72 20 69 73 20 66 6f 72 0a 55 52 49 20 66 69 6c  r is for.URI fil
2620: 65 6e 61 6d 65 73 20 74 6f 20 62 65 20 64 69 73  enames to be dis
2630: 61 62 6c 65 64 2c 20 68 6f 77 65 76 65 72 20 74  abled, however t
2640: 68 61 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65  hat might change
2650: 20 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c   in a future rel
2660: 65 61 73 65 0a 6f 66 20 53 51 4c 69 74 65 2c 20  ease.of SQLite, 
2670: 73 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  so application d
2680: 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64  evelopers are ad
2690: 76 69 73 65 64 20 74 6f 20 70 6c 61 6e 20 61 63  vised to plan ac
26a0: 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 54  cordingly...<p>T
26b0: 68 65 20 6e 61 6d 65 20 74 68 61 74 20 6f 63 63  he name that occ
26c0: 75 72 73 20 61 66 74 65 72 20 74 68 65 20 41 53  urs after the AS
26d0: 20 6b 65 79 77 6f 72 64 20 69 73 20 74 68 65 20   keyword is the 
26e0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
26f0: 62 61 73 65 0a 75 73 65 64 20 69 6e 74 65 72 6e  base.used intern
2700: 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 0a  ally by SQLite..
2710: 5e 54 68 65 20 64 61 74 61 62 61 73 65 2d 6e 61  ^The database-na
2720: 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a  mes 'main' and .
2730: 27 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20  'temp' refer to 
2740: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2750: 65 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61  e and the databa
2760: 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d  se used for .tem
2770: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
2780: 5e 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65  ^The main and te
2790: 6d 70 20 64 61 74 61 62 61 73 65 73 20 63 61 6e  mp databases can
27a0: 6e 6f 74 20 62 65 20 61 74 74 61 63 68 65 64 20  not be attached 
27b0: 6f 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e  or.detached.</p>
27c0: 0a 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20 69  ..<p> ^(Tables i
27d0: 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
27e0: 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 72 65  tabase can be re
27f0: 66 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20  ferred to using 
2800: 74 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64  the syntax .<i>d
2810: 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62  atabase-name.tab
2820: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20  le-name</i>.)^  
2830: 5e 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ^If the name of 
2840: 74 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69  the table is uni
2850: 71 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61  que.across all a
2860: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2870: 73 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61  s and the main a
2880: 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  nd temp database
2890: 73 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64  s, then the.<i>d
28a0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
28b0: 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 72   prefix is not r
28c0: 65 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74 77  equired.  ^If tw
28d0: 6f 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  o or more tables
28e0: 20 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64 61   in.different da
28f0: 74 61 62 61 73 65 73 20 68 61 76 65 20 74 68 65  tabases have the
2900: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74   same name and t
2910: 68 65 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  he .<i>database-
2920: 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20  name</i> prefix 
2930: 69 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61  is not used on a
2940: 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65   table reference
2950: 2c 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65  , then the.table
2960: 20 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f   chosen is the o
2970: 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
2980: 73 65 20 74 68 61 74 20 77 61 73 20 6c 65 61 73  se that was leas
2990: 74 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63  t recently attac
29a0: 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54  hed.</p>..<p>.^T
29b0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f  ransactions invo
29c0: 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61  lving multiple a
29d0: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
29e0: 73 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73  s are atomic,.as
29f0: 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20  suming that the 
2a00: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
2a10: 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d   not "[:memory:]
2a20: 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72  " and the .[jour
2a30: 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74  nal_mode] is not
2a40: 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68   [WAL].  ^(If th
2a50: 65 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20  e main.database 
2a60: 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72  is ":memory:" or
2a70: 20 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f   if the journal_
2a80: 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65  mode is WAL, the
2a90: 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  n .transactions 
2aa0: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61  continue to be a
2ab0: 74 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63  tomic within eac
2ac0: 68 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74  h individual.dat
2ad0: 61 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20  abase file. But 
2ae0: 69 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70  if the host comp
2af0: 75 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20  uter crashes in 
2b00: 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20  the middle.of a 
2b10: 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74  [COMMIT] where t
2b20: 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62  wo or more datab
2b30: 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 75 70  ase files are up
2b40: 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74  dated,.some of t
2b50: 68 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74  hose files might
2b60: 20 67 65 74 20 74 68 65 20 63 68 61 6e 67 65 73   get the changes
2b70: 20 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69   where others.mi
2b80: 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a  ght not.)^.</p>.
2b90: 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61  .<p> ^There is a
2ba0: 20 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e   limit, set usin
2bb0: 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  g [sqlite3_limit
2bc0: 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45  ()] and .[SQLITE
2bd0: 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d  _LIMIT_ATTACHED]
2be0: 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  , to the number 
2bf0: 6f 66 20 64 61 74 61 62 61 73 65 73 20 74 68 61  of databases tha
2c00: 74 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61  t can be.simulta
2c10: 6e 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64  neously attached
2c20: 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74   to a single dat
2c30: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2c40: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
2c50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c90: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
2ca0: 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e  tion {BEGIN TRAN
2cb0: 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63  SACTION} transac
2cc0: 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d  tion {*BEGIN COM
2cd0: 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 42  MIT ROLLBACK}..B
2ce0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 62 65 67  ubbleDiagram beg
2cf0: 69 6e 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69  in-stmt.BubbleDi
2d00: 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d  agram commit-stm
2d10: 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  t.BubbleDiagram 
2d20: 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f  rollback-stmt.</
2d30: 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68  tcl>..<p>.^No ch
2d40: 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64  anges can be mad
2d50: 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
2d60: 65 20 65 78 63 65 70 74 20 77 69 74 68 69 6e 20  e except within 
2d70: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  a transaction..^
2d80: 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74  Any command that
2d90: 20 63 68 61 6e 67 65 73 20 74 68 65 20 64 61 74   changes the dat
2da0: 61 62 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79  abase (basically
2db0: 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e  , any SQL comman
2dc0: 64 0a 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 45  d.other than [SE
2dd0: 4c 45 43 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f  LECT]) will auto
2de0: 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20  matically start 
2df0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66  a transaction if
2e00: 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65  .one is not alre
2e10: 61 64 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20  ady in effect.  
2e20: 5e 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73  ^Automatically s
2e30: 74 61 72 74 65 64 20 74 72 61 6e 73 61 63 74 69  tarted transacti
2e40: 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65  ons.are committe
2e50: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
2e60: 71 75 65 72 79 20 66 69 6e 69 73 68 65 73 2e 0a  query finishes..
2e70: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73  </p>..<p>.^Trans
2e80: 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73  actions can be s
2e90: 74 61 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20  tarted manually 
2ea0: 75 73 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a  using the BEGIN.
2eb0: 63 6f 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68  command.  ^(Such
2ec0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73   transactions us
2ed0: 75 61 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e  ually persist un
2ee0: 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d  til the next.COM
2ef0: 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20  MIT or ROLLBACK 
2f00: 63 6f 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20  command.  But a 
2f10: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c  transaction will
2f20: 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20   also .ROLLBACK 
2f30: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2f40: 69 73 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20  is closed or if 
2f50: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a  an error occurs.
2f60: 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  and the ROLLBACK
2f70: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
2f80: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69  tion algorithm i
2f90: 73 20 73 70 65 63 69 66 69 65 64 2e 29 5e 0a 53  s specified.)^.S
2fa0: 65 65 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61  ee the documenta
2fb0: 74 69 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20  tion on the [ON 
2fc0: 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65  CONFLICT].clause
2fd0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
2fe0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
2ff0: 74 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63  t the ROLLBACK.c
3000: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
3010: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f  on algorithm..</
3020: 70 3e 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41  p>..<p>.^END TRA
3030: 4e 53 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61  NSACTION is an a
3040: 6c 69 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e  lias for COMMIT.
3050: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61  .</p>..<p> ^(Tra
3060: 6e 73 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65  nsactions create
3070: 64 20 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e  d using BEGIN...
3080: 43 4f 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65  COMMIT do not ne
3090: 73 74 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65  st.)^.^For neste
30a0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20  d transactions, 
30b0: 75 73 65 20 74 68 65 20 5b 53 41 56 45 50 4f 49  use the [SAVEPOI
30c0: 4e 54 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53 45  NT] and [RELEASE
30d0: 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20  ] commands..The 
30e0: 22 54 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c 69  "TO SAVEPOINT <i
30f0: 3e 6e 61 6d 65 3c 2f 69 3e 22 20 63 6c 61 75 73  >name</i>" claus
3100: 65 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43  e of the ROLLBAC
3110: 4b 20 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a  K command shown.
3120: 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64 69  in the syntax di
3130: 61 67 72 61 6d 20 61 62 6f 76 65 20 69 73 20 6f  agram above is o
3140: 6e 6c 79 20 61 70 70 6c 69 63 61 62 6c 65 20 74  nly applicable t
3150: 6f 20 5b 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72  o [SAVEPOINT].tr
3160: 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e  ansactions.  ^An
3170: 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f   attempt to invo
3180: 6b 65 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d  ke the BEGIN com
3190: 6d 61 6e 64 20 77 69 74 68 69 6e 0a 61 20 74 72  mand within.a tr
31a0: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66  ansaction will f
31b0: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
31c0: 72 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  r, regardless of
31d0: 20 77 68 65 74 68 65 72 0a 74 68 65 20 74 72 61   whether.the tra
31e0: 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 73 74 61  nsaction was sta
31f0: 72 74 65 64 20 62 79 20 5b 53 41 56 45 50 4f 49  rted by [SAVEPOI
3200: 4e 54 5d 20 6f 72 20 61 20 70 72 69 6f 72 20 42  NT] or a prior B
3210: 45 47 49 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49  EGIN..^The COMMI
3220: 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68  T command and th
3230: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
3240: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 54  nd without the T
3250: 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68  O clause.work th
3260: 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50  e same on [SAVEP
3270: 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63 74 69 6f  OINT] transactio
3280: 6e 73 20 61 73 20 74 68 65 79 20 64 6f 20 77 69  ns as they do wi
3290: 74 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a  th transactions.
32a0: 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49 4e  started by BEGIN
32b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e  .</p>..<p>.^Tran
32c0: 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  sactions can be 
32d0: 64 65 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69  deferred, immedi
32e0: 61 74 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76  ate, or exclusiv
32f0: 65 2e 20 20 0a 5e 54 68 65 20 64 65 66 61 75 6c  e.  .^The defaul
3300: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65  t transaction be
3310: 68 61 76 69 6f 72 20 69 73 20 64 65 66 65 72 72  havior is deferr
3320: 65 64 2e 0a 5e 44 65 66 65 72 72 65 64 20 6d 65  ed..^Deferred me
3330: 61 6e 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b  ans that no lock
3340: 73 20 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f  s are acquired.o
3350: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  n the database u
3360: 6e 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73  ntil the databas
3370: 65 20 69 73 20 66 69 72 73 74 20 61 63 63 65 73  e is first acces
3380: 73 65 64 2e 20 20 5e 54 68 75 73 20 77 69 74 68  sed.  ^Thus with
3390: 20 61 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e   a.deferred tran
33a0: 73 61 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47  saction, the BEG
33b0: 49 4e 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73  IN statement its
33c0: 65 6c 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67  elf does nothing
33d0: 20 74 6f 20 74 68 65 0a 66 69 6c 65 73 79 73 74   to the.filesyst
33e0: 65 6d 2e 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20  em.  ^Locks.are 
33f0: 6e 6f 74 20 61 63 71 75 69 72 65 64 20 75 6e 74  not acquired unt
3400: 69 6c 20 74 68 65 20 66 69 72 73 74 20 72 65 61  il the first rea
3410: 64 20 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61  d or write opera
3420: 74 69 6f 6e 2e 20 20 5e 54 68 65 20 66 69 72 73  tion.  ^The firs
3430: 74 20 72 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e  t read.operation
3440: 20 61 67 61 69 6e 73 74 20 61 20 64 61 74 61 62   against a datab
3450: 61 73 65 20 63 72 65 61 74 65 73 20 61 20 5b 53  ase creates a [S
3460: 48 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20  HARED] lock and 
3470: 74 68 65 20 66 69 72 73 74 0a 77 72 69 74 65 20  the first.write 
3480: 6f 70 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65  operation create
3490: 73 20 61 20 5b 52 45 53 45 52 56 45 44 5d 20 6c  s a [RESERVED] l
34a0: 6f 63 6b 2e 20 20 20 5e 42 65 63 61 75 73 65 20  ock.   ^Because 
34b0: 74 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e 20  the acquisition 
34c0: 6f 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66 65  of.locks is defe
34d0: 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79 20  rred until they 
34e0: 61 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20 69  are needed, it i
34f0: 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
3500: 61 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20 6f  another.thread o
3510: 72 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64 20  r process could 
3520: 63 72 65 61 74 65 20 61 20 73 65 70 61 72 61 74  create a separat
3530: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  e transaction an
3540: 64 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20 64  d write to.the d
3550: 61 74 61 62 61 73 65 20 61 66 74 65 72 20 74 68  atabase after th
3560: 65 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20 63  e BEGIN on the c
3570: 75 72 72 65 6e 74 20 74 68 72 65 61 64 20 68 61  urrent thread ha
3580: 73 20 65 78 65 63 75 74 65 64 2e 0a 5e 49 66 20  s executed..^If 
3590: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
35a0: 69 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68  is immediate, th
35b0: 65 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f  en [RESERVED] lo
35c0: 63 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64  cks.are acquired
35d0: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
35e0: 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  s as soon as the
35f0: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69   BEGIN command i
3600: 73 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68  s.executed, with
3610: 6f 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20  out waiting for 
3620: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
3630: 62 65 20 75 73 65 64 2e 20 20 5e 41 66 74 65 72  be used.  ^After
3640: 20 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41   a BEGIN IMMEDIA
3650: 54 45 2c 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64  TE, .no other [d
3660: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
3670: 6f 6e 5d 20 77 69 6c 6c 20 62 65 20 61 62 6c 65  on] will be able
3680: 20 74 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65   to write to the
3690: 20 64 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20   database or.do 
36a0: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
36b0: 45 20 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55  E or BEGIN EXCLU
36c0: 53 49 56 45 2e 20 20 5e 4f 74 68 65 72 20 70 72  SIVE.  ^Other pr
36d0: 6f 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74  ocesses can cont
36e0: 69 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f  inue.to read fro
36f0: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20  m the database, 
3700: 68 6f 77 65 76 65 72 2e 20 20 5e 41 6e 20 65 78  however.  ^An ex
3710: 63 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74  clusive transact
3720: 69 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c  ion causes.[EXCL
3730: 55 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20  USIVE] locks to 
3740: 62 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  be acquired on a
3750: 6c 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 5e  ll databases.  ^
3760: 41 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58  After a BEGIN.EX
3770: 43 4c 55 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65  CLUSIVE, no othe
3780: 72 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  r [database conn
3790: 65 63 74 69 6f 6e 5d 20 65 78 63 65 70 74 20 66  ection] except f
37a0: 6f 72 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69  or [read_uncommi
37b0: 74 74 65 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e  tted].connection
37c0: 73 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74  s will be able t
37d0: 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
37e0: 61 73 65 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72  ase and no other
37f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68   connection with
3800: 6f 75 74 0a 65 78 63 65 70 74 69 6f 6e 20 77 69  out.exception wi
3810: 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72  ll be able to wr
3820: 69 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ite the database
3830: 20 75 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73   until the trans
3840: 61 63 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65  action is.comple
3850: 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28  te..</p>..<p>.^(
3860: 41 6e 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e  An implicit tran
3870: 73 61 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73  saction (a trans
3880: 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73  action that is s
3890: 74 61 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63  tarted automatic
38a0: 61 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e  ally,.not a tran
38b0: 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20  saction started 
38c0: 62 79 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d  by BEGIN) is com
38d0: 6d 69 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63  mitted automatic
38e0: 61 6c 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61  ally when.the la
38f0: 73 74 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  st active statem
3900: 65 6e 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41  ent finishes.  A
3910: 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73   statement finis
3920: 68 65 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65  hes when its.pre
3930: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
3940: 69 73 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65  is [sqlite3_rese
3950: 74 28 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a  t() | reset] or.
3960: 5b 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  [sqlite3_finaliz
3970: 65 28 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d  e() | finalized]
3980: 2e 20 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69  .  An open [sqli
3990: 74 65 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66  te3_blob] used f
39a0: 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42  or.incremental B
39b0: 4c 4f 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61  LOB I/O counts a
39c0: 73 20 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20  s an unfinished 
39d0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
39e0: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66  [sqlite3_blob].f
39f0: 69 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 20  inishes when it 
3a00: 69 73 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  is [sqlite3_blob
3a10: 5f 63 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65  _close() | close
3a20: 64 5d 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  d].)^.</p>..<p>.
3a30: 5e 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f  ^The explicit CO
3a40: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  MMIT command run
3a50: 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65  s immediately, e
3a60: 76 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65  ven if there are
3a70: 0a 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54  .pending [SELECT
3a80: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e  ] statements.  ^
3a90: 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72  However, if ther
3aa0: 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72  e are pending.wr
3ab0: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20  ite operations, 
3ac0: 74 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61  the COMMIT comma
3ad0: 6e 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  nd.will fail wit
3ae0: 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
3af0: 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c  [SQLITE_BUSY]..<
3b00: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74  /p>..<p>.^An att
3b10: 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20  empt to execute 
3b20: 43 4f 4d 4d 49 54 20 6d 69 67 68 74 20 61 6c 73  COMMIT might als
3b30: 6f 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b  o result in an [
3b40: 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 72 65 74  SQLITE_BUSY] ret
3b50: 75 72 6e 20 63 6f 64 65 0a 69 66 20 61 6e 20 61  urn code.if an a
3b60: 6e 6f 74 68 65 72 20 74 68 72 65 61 64 20 6f 72  nother thread or
3b70: 20 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 5b   process has a [
3b80: 73 68 61 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20  shared lock] on 
3b90: 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 68 61  the database.tha
3ba0: 74 20 70 72 65 76 65 6e 74 65 64 20 74 68 65 20  t prevented the 
3bb0: 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65  database from be
3bc0: 69 6e 67 20 75 70 64 61 74 65 64 2e 20 20 5e 57  ing updated.  ^W
3bd0: 68 65 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73  hen COMMIT fails
3be0: 20 69 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68   in this.way, th
3bf0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65  e transaction re
3c00: 6d 61 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64  mains active and
3c10: 20 74 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20   the COMMIT can 
3c20: 62 65 20 72 65 74 72 69 65 64 20 6c 61 74 65 72  be retried later
3c30: 0a 61 66 74 65 72 20 74 68 65 20 72 65 61 64 65  .after the reade
3c40: 72 20 68 61 73 20 68 61 64 20 61 20 63 68 61 6e  r has had a chan
3c50: 63 65 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70  ce to clear..</p
3c60: 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 52 4f 4c 4c  >..<p>.^The ROLL
3c70: 42 41 43 4b 20 77 69 6c 6c 20 66 61 69 6c 20 77  BACK will fail w
3c80: 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  ith an error cod
3c90: 65 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 20  e [SQLITE_BUSY] 
3ca0: 69 66 20 74 68 65 72 65 0a 61 72 65 20 61 6e 79  if there.are any
3cb0: 20 70 65 6e 64 69 6e 67 20 71 75 65 72 69 65 73   pending queries
3cc0: 2e 20 20 5e 42 6f 74 68 20 72 65 61 64 2d 6f 6e  .  ^Both read-on
3cd0: 6c 79 20 61 6e 64 20 72 65 61 64 2f 77 72 69 74  ly and read/writ
3ce0: 65 20 71 75 65 72 69 65 73 20 77 69 6c 6c 0a 63  e queries will.c
3cf0: 61 75 73 65 20 61 20 52 4f 4c 4c 42 41 43 4b 20  ause a ROLLBACK 
3d00: 74 6f 20 66 61 69 6c 2e 20 20 41 20 52 4f 4c 4c  to fail.  A ROLL
3d10: 42 41 43 4b 20 6d 75 73 74 20 66 61 69 6c 20 69  BACK must fail i
3d20: 66 20 74 68 65 72 65 20 61 72 65 20 70 65 6e 64  f there are pend
3d30: 69 6e 67 0a 72 65 61 64 20 6f 70 65 72 61 74 69  ing.read operati
3d40: 6f 6e 73 20 28 75 6e 6c 69 6b 65 20 43 4f 4d 4d  ons (unlike COMM
3d50: 49 54 20 77 68 69 63 68 20 63 61 6e 20 73 75 63  IT which can suc
3d60: 63 65 65 64 29 20 62 65 63 61 75 73 65 20 62 61  ceed) because ba
3d70: 64 20 74 68 69 6e 67 73 0a 77 69 6c 6c 20 68 61  d things.will ha
3d80: 70 70 65 6e 20 69 66 20 74 68 65 20 69 6e 2d 6d  ppen if the in-m
3d90: 65 6d 6f 72 79 20 69 6d 61 67 65 20 6f 66 20 74  emory image of t
3da0: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63  he database is c
3db0: 68 61 6e 67 65 64 20 6f 75 74 20 66 72 6f 6d 20  hanged out from 
3dc0: 75 6e 64 65 72 0a 61 6e 20 61 63 74 69 76 65 20  under.an active 
3dd0: 71 75 65 72 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  query..</p>..<p>
3de0: 0a 49 66 20 5b 50 52 41 47 4d 41 20 6a 6f 75 72  .If [PRAGMA jour
3df0: 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 73 65 74  nal_mode] is set
3e00: 20 74 6f 20 4f 46 46 20 28 74 68 75 73 20 64 69   to OFF (thus di
3e10: 73 61 62 6c 69 6e 67 20 74 68 65 20 72 6f 6c 6c  sabling the roll
3e20: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c  back journal.fil
3e30: 65 29 20 74 68 65 6e 20 74 68 65 20 62 65 68 61  e) then the beha
3e40: 76 69 6f 72 20 6f 66 20 74 68 65 20 52 4f 4c 4c  vior of the ROLL
3e50: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 69 73 20  BACK command is 
3e60: 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a  undefined..</p>.
3e70: 0a 3c 68 33 3e 52 65 73 70 6f 6e 73 65 20 54 6f  .<h3>Response To
3e80: 20 45 72 72 6f 72 73 20 57 69 74 68 69 6e 20 41   Errors Within A
3e90: 20 54 72 61 6e 73 61 63 74 69 6f 6e 3c 2f 68 33   Transaction</h3
3ea0: 3e 0a 0a 3c 70 3e 20 5e 28 49 66 20 63 65 72 74  >..<p> ^(If cert
3eb0: 61 69 6e 20 6b 69 6e 64 73 20 6f 66 20 65 72 72  ain kinds of err
3ec0: 6f 72 73 20 6f 63 63 75 72 20 77 69 74 68 69 6e  ors occur within
3ed0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20   a transaction, 
3ee0: 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  the.transaction 
3ef0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
3f00: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75  e rolled back au
3f10: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 20 54 68  tomatically.  Th
3f20: 65 0a 65 72 72 6f 72 73 20 74 68 61 74 20 63 61  e.errors that ca
3f30: 75 73 65 20 74 68 65 20 62 65 68 61 76 69 6f 72  use the behavior
3f40: 20 69 6e 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c   include:</p>..<
3f50: 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ul>.<li> [SQLITE
3f60: 5f 46 55 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65  _FULL]: database
3f70: 20 6f 72 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c   or disk full.<l
3f80: 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52  i> [SQLITE_IOERR
3f90: 5d 3a 20 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f  ]: disk I/O erro
3fa0: 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42  r.<li> [SQLITE_B
3fb0: 55 53 59 5d 3a 20 64 61 74 61 62 61 73 65 20 69  USY]: database i
3fc0: 6e 20 75 73 65 20 62 79 20 61 6e 6f 74 68 65 72  n use by another
3fd0: 20 70 72 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53   process.<li> [S
3fe0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75  QLITE_NOMEM]: ou
3ff0: 74 20 6f 72 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e  t or memory.<li>
4000: 20 5b 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55   [SQLITE_INTERRU
4010: 50 54 5d 3a 20 70 72 6f 63 65 73 73 69 6e 67 20  PT]: processing 
4020: 5b 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75  [sqlite3_interru
4030: 70 74 7c 69 6e 74 65 72 72 75 70 74 65 64 5d 0a  pt|interrupted].
4040: 20 20 20 20 20 62 79 20 61 70 70 6c 69 63 61 74       by applicat
4050: 69 6f 6e 20 72 65 71 75 65 73 74 0a 3c 2f 75 6c  ion request.</ul
4060: 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c  >)^..<p>.^For al
4070: 6c 20 6f 66 20 74 68 65 73 65 20 65 72 72 6f 72  l of these error
4080: 73 2c 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70  s, SQLite attemp
4090: 74 73 20 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20  ts to undo just 
40a0: 74 68 65 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e  the one statemen
40b0: 74 0a 69 74 20 77 61 73 20 77 6f 72 6b 69 6e 67  t.it was working
40c0: 20 6f 6e 20 61 6e 64 20 6c 65 61 76 65 20 63 68   on and leave ch
40d0: 61 6e 67 65 73 20 66 72 6f 6d 20 70 72 69 6f 72  anges from prior
40e0: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
40f0: 69 6e 20 74 68 65 0a 73 61 6d 65 20 74 72 61 6e  in the.same tran
4100: 73 61 63 74 69 6f 6e 20 69 6e 74 61 63 74 20 61  saction intact a
4110: 6e 64 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68  nd continue with
4120: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4130: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65  .  ^However, .de
4140: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 73  pending on the s
4150: 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65  tatement being e
4160: 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
4170: 20 70 6f 69 6e 74 20 61 74 20 77 68 69 63 68 20   point at which 
4180: 74 68 65 0a 65 72 72 6f 72 20 6f 63 63 75 72 73  the.error occurs
4190: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 6e 65  , it might be ne
41a0: 63 65 73 73 61 72 79 20 66 6f 72 20 53 51 4c 69  cessary for SQLi
41b0: 74 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  te to rollback a
41c0: 6e 64 0a 63 61 6e 63 65 6c 20 74 68 65 20 65 6e  nd.cancel the en
41d0: 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tire transaction
41e0: 2e 20 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69  .  ^An applicati
41f0: 6f 6e 20 63 61 6e 20 74 65 6c 6c 20 77 68 69 63  on can tell whic
4200: 68 0a 63 6f 75 72 73 65 20 6f 66 20 61 63 74 69  h.course of acti
4210: 6f 6e 20 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62  on SQLite took b
4220: 79 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c  y using the.[sql
4230: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
4240: 6d 69 74 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  mit()] C-languag
4250: 65 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  e interface.</p>
4260: 0a 0a 3c 70 3e 49 74 20 69 73 20 72 65 63 6f 6d  ..<p>It is recom
4270: 6d 65 6e 64 65 64 20 74 68 61 74 20 61 70 70 6c  mended that appl
4280: 69 63 61 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64  ications respond
4290: 20 74 6f 20 74 68 65 20 65 72 72 6f 72 73 0a 6c   to the errors.l
42a0: 69 73 74 65 64 20 61 62 6f 76 65 20 62 79 20 65  isted above by e
42b0: 78 70 6c 69 63 69 74 6c 79 20 69 73 73 75 69 6e  xplicitly issuin
42c0: 67 20 61 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  g a ROLLBACK com
42d0: 6d 61 6e 64 2e 20 20 5e 49 66 20 74 68 65 20 0a  mand.  ^If the .
42e0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20  transaction has 
42f0: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 72 6f 6c  already been rol
4300: 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74  led back automat
4310: 69 63 61 6c 6c 79 0a 62 79 20 74 68 65 20 65 72  ically.by the er
4320: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c 20 74 68  ror response, th
4330: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
4340: 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69  command will fai
4350: 6c 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c  l with an.error,
4360: 20 62 75 74 20 6e 6f 20 68 61 72 6d 20 69 73 20   but no harm is 
4370: 63 61 75 73 65 64 20 62 79 20 74 68 69 73 2e 3c  caused by this.<
4380: 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76  /p>..<p>Future v
4390: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
43a0: 65 20 6d 61 79 20 65 78 74 65 6e 64 20 74 68 65  e may extend the
43b0: 20 6c 69 73 74 20 6f 66 20 65 72 72 6f 72 73 20   list of errors 
43c0: 77 68 69 63 68 0a 6d 69 67 68 74 20 63 61 75 73  which.might caus
43d0: 65 20 61 75 74 6f 6d 61 74 69 63 20 74 72 61 6e  e automatic tran
43e0: 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b  saction rollback
43f0: 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
4400: 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67  ns of.SQLite mig
4410: 68 74 20 63 68 61 6e 67 65 20 74 68 65 20 65 72  ht change the er
4420: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e 20 20 49  ror response.  I
4430: 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 77 65  n particular, we
4440: 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73   may.choose to s
4450: 69 6d 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65  implify the inte
4460: 72 66 61 63 65 20 69 6e 20 66 75 74 75 72 65 20  rface in future 
4470: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
4480: 74 65 20 62 79 0a 63 61 75 73 69 6e 67 20 74 68  te by.causing th
4490: 65 20 65 72 72 6f 72 73 20 61 62 6f 76 65 20 74  e errors above t
44a0: 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e  o force an uncon
44b0: 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63  ditional rollbac
44c0: 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  k.</p>..<tcl>.##
44d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
44e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
44f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4510: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
4520: 63 74 69 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54  ction {SAVEPOINT
4530: 7d 20 73 61 76 65 70 6f 69 6e 74 20 7b 53 41 56  } savepoint {SAV
4540: 45 50 4f 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a  EPOINT RELEASE}.
4550: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  .BubbleDiagram s
4560: 61 76 65 70 6f 69 6e 74 2d 73 74 6d 74 0a 42 75  avepoint-stmt.Bu
4570: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 6c 65  bbleDiagram rele
4580: 61 73 65 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44  ase-stmt.BubbleD
4590: 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d  iagram rollback-
45a0: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
45b0: 20 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65   ^SAVEPOINTs are
45c0: 20 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65   a method of cre
45d0: 61 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f  ating transactio
45e0: 6e 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b  ns, similar to.[
45f0: 42 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d  BEGIN] and [COMM
4600: 49 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74  IT], except that
4610: 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61   the SAVEPOINT a
4620: 6e 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  nd RELEASE comma
4630: 6e 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e  nds.are named an
4640: 64 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e  d may be nested.
4650: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53  </p>..<p> ^The S
4660: 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64  AVEPOINT command
4670: 20 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72   starts a new tr
4680: 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61  ansaction with a
4690: 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e   name..^The tran
46a0: 73 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65  saction names ne
46b0: 65 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65  ed not be unique
46c0: 2e 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20  ..^(A SAVEPOINT 
46d0: 63 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65  can be started e
46e0: 69 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20  ither within or 
46f0: 6f 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45  outside of.a [BE
4700: 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e  GIN]...[COMMIT].
4710: 29 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56  )^  ^(When a SAV
4720: 45 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75  EPOINT is the ou
4730: 74 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69  ter-most savepoi
4740: 6e 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74  nt.and it is not
4750: 20 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e   within a [BEGIN
4760: 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65  ]...[COMMIT] the
4770: 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
4780: 73 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45  s the.same as BE
4790: 47 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41  GIN DEFERRED TRA
47a0: 4e 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a  NSACTION.)^</p>.
47b0: 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43  .<p>^The ROLLBAC
47c0: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76  K TO command rev
47d0: 65 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f  erts the state o
47e0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  f the database b
47f0: 61 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77  ack to what.it w
4800: 61 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68  as just after th
4810: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
4820: 53 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74  SAVEPOINT.  ^Not
4830: 65 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68  e that unlike th
4840: 61 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41  at.plain [ROLLBA
4850: 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74  CK] command (wit
4860: 68 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77  hout the TO keyw
4870: 6f 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43  ord) the ROLLBAC
4880: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65  K TO command.doe
4890: 73 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65  s not cancel the
48a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
48b0: 49 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65  Instead of cance
48c0: 6c 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61  lling the transa
48d0: 63 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42  ction,.the ROLLB
48e0: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72  ACK TO command r
48f0: 65 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e  estarts the tran
4900: 73 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74  saction again at
4910: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
4920: 5e 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67  ^All intervening
4930: 20 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20   SAVEPOINTs are 
4940: 63 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65  canceled, howeve
4950: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
4960: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4970: 69 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49  is like a [COMMI
4980: 54 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49  T] for a SAVEPOI
4990: 4e 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45  NT..^The RELEASE
49a0: 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20   command causes 
49b0: 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62  all savepoints b
49c0: 61 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75  ack to and inclu
49d0: 64 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72  ding the .most r
49e0: 65 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  ecent savepoint 
49f0: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
4a00: 6e 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76  name to be remov
4a10: 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61  ed from the .tra
4a20: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20  nsaction stack. 
4a30: 20 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66   ^The RELEASE of
4a40: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
4a50: 63 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63  ction.does not c
4a60: 61 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73  ause any changes
4a70: 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74   to be written t
4a80: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
4a90: 69 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72  ile; it merely.r
4aa0: 65 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74  emoves savepoint
4ab0: 73 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73  s from the trans
4ac0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63  action stack suc
4ad0: 68 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20  h that it is.no 
4ae0: 6c 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20  longer possible 
4af0: 74 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74  to ROLLBACK TO t
4b00: 68 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e  hose savepoints.
4b10: 0a 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63  .^If a RELEASE c
4b20: 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ommand releases 
4b30: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
4b40: 76 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74  vepoint, so.that
4b50: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4b60: 20 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65   stack becomes e
4b70: 6d 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41  mpty, then RELEA
4b80: 53 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61  SE is the same.a
4b90: 73 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65  s [COMMIT]..^The
4ba0: 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e   [COMMIT] comman
4bb0: 64 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f  d may be used to
4bc0: 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76   release all sav
4bd0: 65 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d  epoints and.comm
4be0: 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  it the transacti
4bf0: 6f 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74  on even if the t
4c00: 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f  ransaction was o
4c10: 72 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65  riginally starte
4c20: 64 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54  d.by a SAVEPOINT
4c30: 20 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64   command instead
4c40: 20 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f   of a [BEGIN] co
4c50: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  mmand.</p>..<p>^
4c60: 49 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  If the savepoint
4c70: 2d 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41  -name in a RELEA
4c80: 53 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20  SE command does 
4c90: 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61  not match any.sa
4ca0: 76 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c  vepoint currentl
4cb0: 79 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63  y in the transac
4cc0: 74 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e  tion stack, then
4cd0: 20 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61   no savepoints a
4ce0: 72 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65  re.released, the
4cf0: 20 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63   database is unc
4d00: 68 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20  hanged, and the 
4d10: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4d20: 72 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72  returns.an error
4d30: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  .</p>..<p>^Note 
4d40: 74 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72  that an inner tr
4d50: 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20  ansaction might 
4d60: 63 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68  commit (using th
4d70: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4d80: 64 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65  d).but then late
4d90: 72 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20  r have its work 
4da0: 75 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c  undone by a ROLL
4db0: 42 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72  BACK in an outer
4dc0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41   transaction..^A
4dd0: 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f   power failure o
4de0: 72 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20  r program crash 
4df0: 6f 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c  or OS crash will
4e00: 20 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72   cause the outer
4e10: 2d 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f  -most.transactio
4e20: 6e 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75  n to rollback, u
4e30: 6e 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67  ndoing all chang
4e40: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
4e50: 75 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61  urred within.tha
4e60: 74 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  t outer transact
4e70: 69 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65  ion, even change
4e80: 73 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70  s that have supp
4e90: 6f 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d  osedly been "com
4ea0: 6d 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52  mitted".by the R
4eb0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20  ELEASE command. 
4ec0: 20 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74   ^Content is not
4ed0: 20 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74   actually commit
4ee0: 74 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20  ted on the disk 
4ef0: 0a 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72  .until the outer
4f00: 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  most transaction
4f10: 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c   commits.</p>..<
4f20: 70 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65  p>There are seve
4f30: 72 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e  ral ways of thin
4f40: 6b 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52  king about the R
4f50: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c  ELEASE command:<
4f60: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
4f70: 3e 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69  >.Some people vi
4f80: 65 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68  ew RELEASE as th
4f90: 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  e equivalent of 
4fa0: 43 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56  COMMIT for a SAV
4fb0: 45 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20  EPOINT..This is 
4fc0: 61 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f  an acceptable po
4fd0: 69 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c  int of view as l
4fe0: 6f 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d  ong as one remem
4ff0: 62 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68  bers that the.ch
5000: 61 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20  anges committed 
5010: 62 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e  by an inner tran
5020: 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61  saction might la
5030: 74 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79  ter be undone by
5040: 20 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61   a.rollback in a
5050: 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  n outer transact
5060: 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ion.</p></li>..<
5070: 6c 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76  li><p>.Another v
5080: 69 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69  iew of RELEASE i
5090: 73 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73  s that it merges
50a0: 20 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63   a named transac
50b0: 74 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61  tion into its.pa
50c0: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
50d0: 2c 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61  , so that the na
50e0: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
50f0: 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62  and its parent b
5100: 65 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74  ecome.the same t
5110: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74  ransaction.  Aft
5120: 65 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20  er RELEASE, the 
5130: 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f  named transactio
5140: 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74  n and its parent
5150: 0a 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20  .will commit or 
5160: 72 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65  rollback togethe
5170: 72 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69  r, whatever thei
5180: 72 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c  r fate may be..<
5190: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
51a0: 3e 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74  >.One can also t
51b0: 68 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e  hink of savepoin
51c0: 74 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e  ts as."marks" in
51d0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
51e0: 20 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74   timeline.  In t
51f0: 68 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41  his view, the SA
5200: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a  VEPOINT command.
5210: 63 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61  creates a new ma
5220: 72 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rk, the ROLLBACK
5230: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69   TO command rewi
5240: 6e 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65  nds the timeline
5250: 20 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74   back.to a point
5260: 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20   just after the 
5270: 6e 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20  named mark, and 
5280: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
5290: 61 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73  and.erases marks
52a0: 20 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69   from the timeli
52b0: 6e 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61  ne without actua
52c0: 6c 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63  lly making any.c
52d0: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
52e0: 74 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69  tabase..</p></li
52f0: 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54  >.</ul>....<h3>T
5300: 72 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69  ransaction Nesti
5310: 6e 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  ng Rules</h3>..<
5320: 70 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e  p>^The last tran
5330: 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20  saction started 
5340: 77 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73  will be the firs
5350: 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  t.transaction co
5360: 6d 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65  mmitted or rolle
5370: 64 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e  d back.</p>..<p>
5380: 5e 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  ^The [BEGIN] com
5390: 6d 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  mand only works 
53a0: 69 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  if the transacti
53b0: 6f 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74  on stack is empt
53c0: 79 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77  y, or.in other w
53d0: 6f 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72  ords if there ar
53e0: 65 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61  e no pending tra
53f0: 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20  nsactions.  ^If 
5400: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  the transaction.
5410: 73 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70  stack is not emp
5420: 74 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47  ty when the [BEG
5430: 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69  IN] command is i
5440: 6e 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65  nvoked, then the
5450: 20 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77   command.fails w
5460: 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70  ith an error.</p
5470: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d  >..<p>^The [COMM
5480: 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  IT] command comm
5490: 69 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64  its all outstand
54a0: 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ing transactions
54b0: 20 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20   and leaves.the 
54c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
54d0: 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70  k empty.</p>..<p
54e0: 3e 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f  >^The RELEASE co
54f0: 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74  mmand starts wit
5500: 68 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  h the most recen
5510: 74 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68  t addition to th
5520: 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e.transaction st
5530: 61 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73  ack and releases
5540: 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b   savepoints back
5550: 77 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75  wards .in time u
5560: 6e 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73  ntil it releases
5570: 20 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74   a savepoint wit
5580: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76  h a matching sav
5590: 65 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72  epoint-name..^Pr
55a0: 69 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20  ior savepoints, 
55b0: 65 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  even savepoints 
55c0: 77 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61  with matching sa
55d0: 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61  vepoint-names, a
55e0: 72 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49  re.unchanged..^I
55f0: 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  f the RELEASE co
5600: 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65  mmand causes the
5610: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
5620: 63 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70  ck to become emp
5630: 74 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41  ty (if the RELEA
5640: 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61  SE command relea
5650: 73 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73  ses the.outermos
5660: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72  t transaction fr
5670: 6f 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68  om the stack) th
5680: 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  en the transacti
5690: 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a  on commits.</p>.
56a0: 0a 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41  .<p>^The [ROLLBA
56b0: 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68  CK] command with
56c0: 6f 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20  out a TO clause 
56d0: 72 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20  rolls backs all 
56e0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64  transactions.and
56f0: 20 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e   leaves the tran
5700: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d  saction stack em
5710: 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  pty.</p>..<p>^Th
5720: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
5730: 6e 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61  nd with a TO cla
5740: 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74  use rolls back t
5750: 72 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e  ransactions goin
5760: 67 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74  g.backwards in t
5770: 69 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20  ime back to the 
5780: 6d 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45  most recent SAVE
5790: 50 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74  POINT with a mat
57a0: 63 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65  ching name..^The
57b0: 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20   SAVEPOINT with 
57c0: 74 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  the matching nam
57d0: 65 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65  e remains on the
57e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
57f0: 63 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61  ck,.but all data
5800: 62 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61  base changes tha
5810: 74 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72  t occurred after
5820: 20 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20   that SAVEPOINT 
5830: 77 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20  was created.are 
5840: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49  rolled back.  ^I
5850: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
5860: 6e 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41  name in a ROLLBA
5870: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f  CK TO command do
5880: 65 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79  es not.match any
5890: 20 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68   SAVEPOINT on th
58a0: 65 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68  e stack, then th
58b0: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
58c0: 6e 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  nd fails with an
58d0: 0a 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65  .error and leave
58e0: 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  s the state of t
58f0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68  he database unch
5900: 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  anged.</p>..<tcl
5910: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
5920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5960: 23 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e  #.Section commen
5970: 74 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65  t comment {comme
5980: 6e 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 42  nt *comments}..B
5990: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d  ubbleDiagram com
59a0: 6d 65 6e 74 2d 73 79 6e 74 61 78 0a 3c 2f 74 63  ment-syntax.</tc
59b0: 6c 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73  l>..<p>^Comments
59c0: 20 61 72 65 20 6e 6f 74 20 53 51 4c 20 63 6f 6d   are not SQL com
59d0: 6d 61 6e 64 73 2c 20 62 75 74 20 63 61 6e 20 6f  mands, but can o
59e0: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20  ccur within the 
59f0: 74 65 78 74 20 6f 66 0a 53 51 4c 20 71 75 65 72  text of.SQL quer
5a00: 69 65 73 20 70 61 73 73 65 64 20 74 6f 20 5b 73  ies passed to [s
5a10: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
5a20: 32 28 29 5d 20 61 6e 64 20 72 65 6c 61 74 65 64  2()] and related
5a30: 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 5e 43 6f   interfaces..^Co
5a40: 6d 6d 65 6e 74 73 20 61 72 65 20 74 72 65 61 74  mments are treat
5a50: 65 64 20 61 73 20 77 68 69 74 65 73 70 61 63 65  ed as whitespace
5a60: 20 62 79 20 74 68 65 20 70 61 72 73 65 72 2e 0a   by the parser..
5a70: 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65  ^Comments can be
5a80: 67 69 6e 20 61 6e 79 77 68 65 72 65 20 77 68 69  gin anywhere whi
5a90: 74 65 73 70 61 63 65 20 0a 63 61 6e 20 62 65 20  tespace .can be 
5aa0: 66 6f 75 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67  found, including
5ab0: 20 69 6e 73 69 64 65 20 65 78 70 72 65 73 73 69   inside expressi
5ac0: 6f 6e 73 20 74 68 61 74 20 73 70 61 6e 20 6d 75  ons that span mu
5ad0: 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f  ltiple lines..</
5ae0: 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d  p>..<p>^SQL comm
5af0: 65 6e 74 73 20 62 65 67 69 6e 20 77 69 74 68 20  ents begin with 
5b00: 74 77 6f 20 63 6f 6e 73 65 63 75 74 69 76 65 20  two consecutive 
5b10: 22 2d 22 20 63 68 61 72 61 63 74 65 72 73 20 28  "-" characters (
5b20: 41 53 43 49 49 20 30 78 32 64 29 0a 61 6e 64 20  ASCII 0x2d).and 
5b30: 65 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64  extend up to and
5b40: 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e   including the n
5b50: 65 78 74 20 6e 65 77 6c 69 6e 65 20 63 68 61 72  ext newline char
5b60: 61 63 74 65 72 20 28 41 53 43 49 49 20 30 78 30  acter (ASCII 0x0
5b70: 61 29 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  a).or until the 
5b80: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
5b90: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
5ba0: 72 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d  rst.</p>..<p>^C-
5bb0: 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 20 62  style comments b
5bc0: 65 67 69 6e 0a 77 69 74 68 20 22 2f 2a 22 20 61  egin.with "/*" a
5bd0: 6e 64 20 65 78 74 65 6e 64 20 75 70 20 74 6f 20  nd extend up to 
5be0: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
5bf0: 65 20 6e 65 78 74 20 22 2a 2f 22 20 63 68 61 72  e next "*/" char
5c00: 61 63 74 65 72 20 70 61 69 72 0a 6f 72 20 75 6e  acter pair.or un
5c10: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
5c20: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
5c30: 63 6f 6d 65 73 20 66 69 72 73 74 2e 20 20 5e 43  comes first.  ^C
5c40: 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a  -style comments.
5c50: 63 61 6e 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c  can span multipl
5c60: 65 20 6c 69 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c  e lines. </p>..<
5c70: 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20  p>^Comments can 
5c80: 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20  appear anywhere 
5c90: 77 68 69 74 65 73 70 61 63 65 20 63 61 6e 20 6f  whitespace can o
5ca0: 63 63 75 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20  ccur,.including 
5cb0: 69 6e 73 69 64 65 20 65 78 70 72 65 73 73 69 6f  inside expressio
5cc0: 6e 73 20 61 6e 64 20 69 6e 20 74 68 65 20 6d 69  ns and in the mi
5cd0: 64 64 6c 65 20 6f 66 20 6f 74 68 65 72 20 53 51  ddle of other SQ
5ce0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 43  L statements..^C
5cf0: 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e 6f 74 20 6e  omments do not n
5d00: 65 73 74 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  est..</p>...<tcl
5d10: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
5d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d60: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
5d70: 20 49 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e   INDEX} createin
5d80: 64 65 78 20 7b 7b 43 52 45 41 54 45 20 49 4e 44  dex {{CREATE IND
5d90: 45 58 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  EX}}..BubbleDiag
5da0: 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65 78  ram create-index
5db0: 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
5dc0: 61 67 72 61 6d 20 69 6e 64 65 78 65 64 2d 63 6f  agram indexed-co
5dd0: 6c 75 6d 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  lumn.</tcl>..<p>
5de0: 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e 44 45  ^The CREATE INDE
5df0: 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73  X command consis
5e00: 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72  ts of the keywor
5e10: 64 73 20 22 43 52 45 41 54 45 20 49 4e 44 45 58  ds "CREATE INDEX
5e20: 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68  " followed.by th
5e30: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  e name of the ne
5e40: 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b 65 79  w index, the key
5e50: 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e  word "ON", the n
5e60: 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69 6f 75  ame of a previou
5e70: 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61 62 6c  sly.created tabl
5e80: 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20  e that is to be 
5e90: 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61 20 70  indexed, and a p
5ea0: 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73  arenthesized lis
5eb0: 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66 0a 63 6f  t of names of.co
5ec0: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
5ed0: 6c 65 20 74 68 61 74 20 61 72 65 20 75 73 65 64  le that are used
5ee0: 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78 20 6b   for the index k
5ef0: 65 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ey.</p>..<tcl>hd
5f00: 5f 66 72 61 67 6d 65 6e 74 20 7b 64 65 73 63 69  _fragment {desci
5f10: 64 78 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67 20  dx} {descending 
5f20: 69 6e 64 69 63 65 73 7d 20 7b 64 65 73 63 65 6e  indices} {descen
5f30: 64 69 6e 67 20 69 6e 64 65 78 7d 3c 2f 74 63 6c  ding index}</tcl
5f40: 3e 0a 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d  >.<p>^Each colum
5f50: 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66 6f  n name can be fo
5f60: 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f 66  llowed by one of
5f70: 20 74 68 65 20 22 41 53 43 22 20 6f 72 20 22 44   the "ASC" or "D
5f80: 45 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74 6f  ESC" keywords.to
5f90: 20 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20 6f   indicate sort o
5fa0: 72 64 65 72 2e 20 20 5e 54 68 65 20 73 6f 72 74  rder.  ^The sort
5fb0: 20 6f 72 64 65 72 20 6d 61 79 20 6f 72 20 6d 61   order may or ma
5fc0: 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64  y not be ignored
5fd0: 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e 20 74 68   depending.on th
5fe0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
5ff0: 66 6f 72 6d 61 74 2c 20 61 6e 64 20 69 6e 20 70  format, and in p
6000: 61 72 74 69 63 75 6c 61 72 20 74 68 65 20 5b 73  articular the [s
6010: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d  chema format num
6020: 62 65 72 5d 2e 0a 5e 54 68 65 20 22 6c 65 67 61  ber]..^The "lega
6030: 63 79 22 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  cy" schema forma
6040: 74 20 28 31 29 20 69 67 6e 6f 72 65 73 20 69 6e  t (1) ignores in
6050: 64 65 78 0a 73 6f 72 74 20 6f 72 64 65 72 2e 20  dex.sort order. 
6060: 20 5e 54 68 65 20 64 65 73 63 65 6e 64 69 6e 67   ^The descending
6070: 20 69 6e 64 65 78 20 73 63 68 65 6d 61 20 66 6f   index schema fo
6080: 72 6d 61 74 20 28 34 29 20 74 61 6b 65 73 20 69  rmat (4) takes i
6090: 6e 64 65 78 20 73 6f 72 74 20 6f 72 64 65 72 0a  ndex sort order.
60a0: 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2e 20 20 5e  into account.  ^
60b0: 28 4f 6e 6c 79 20 63 6f 70 69 65 73 20 6f 66 20  (Only copies of 
60c0: 53 51 4c 69 74 65 20 6e 65 77 65 72 20 74 68 61  SQLite newer tha
60d0: 6e 20 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30  n [version 3.3.0
60e0: 5d 20 0a 28 72 65 6c 65 61 73 65 64 20 6f 6e 20  ] .(released on 
60f0: 32 30 30 36 2d 30 31 2d 31 30 29 20 61 72 65 20  2006-01-10) are 
6100: 61 62 6c 65 20 74 6f 20 75 6e 64 65 72 73 74 61  able to understa
6110: 6e 64 20 74 68 65 20 6e 65 77 65 72 20 64 65 73  nd the newer des
6120: 63 65 6e 64 69 6e 67 0a 69 6e 64 65 78 20 66 69  cending.index fi
6130: 6c 65 20 66 6f 72 6d 61 74 2e 29 5e 20 20 46 6f  le format.)^  Fo
6140: 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c  r compatibility,
6150: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69   version of SQLi
6160: 74 65 20 62 65 74 77 65 65 6e 20 33 2e 33 2e 30  te between 3.3.0
6170: 0a 61 6e 64 20 33 2e 37 2e 39 20 75 73 65 20 74  .and 3.7.9 use t
6180: 68 65 20 6c 65 67 61 63 79 20 73 63 68 65 6d 61  he legacy schema
6190: 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66 61 75   format by defau
61a0: 6c 74 2e 20 20 54 68 65 20 6e 65 77 65 72 20 73  lt.  The newer s
61b0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 0a  chema format is.
61c0: 75 73 65 64 20 62 79 20 64 65 66 61 75 6c 74 20  used by default 
61d0: 69 6e 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 31  in version 3.7.1
61e0: 30 20 61 6e 64 20 6c 61 74 65 72 2e 0a 5e 54 68  0 and later..^Th
61f0: 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66  e [legacy_file_f
6200: 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20 63 61  ormat pragma] ca
6210: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 68 61  n be used to cha
6220: 6e 67 65 20 73 65 74 20 74 68 65 20 73 70 65 63  nge set the spec
6230: 69 66 69 63 0a 62 65 68 61 76 69 6f 72 20 66 6f  ific.behavior fo
6240: 72 20 61 6e 79 20 76 65 72 73 69 6f 6e 20 6f 66  r any version of
6250: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70   SQLite.</p>..<p
6260: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
6270: 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  ause optionally 
6280: 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20 63  following each c
6290: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e  olumn name defin
62a0: 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73  es a.collating s
62b0: 65 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72  equence used for
62c0: 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e   text entries in
62d0: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54   that column..^T
62e0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
62f0: 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73  ting.sequence is
6300: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
6310: 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20  equence defined 
6320: 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20  for that column 
6330: 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54  in the.[CREATE T
6340: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
6350: 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c    ^Or if no coll
6360: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
6370: 73 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 69  s otherwise defi
6380: 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69  ned,.the built-i
6390: 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  n BINARY collati
63a0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
63b0: 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  sed.</p>..<p>The
63c0: 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72  re are no arbitr
63d0: 61 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68  ary limits on th
63e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 69  e number of indi
63f0: 63 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a  ces that can be.
6400: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 73 69  attached to a si
6410: 6e 67 6c 65 20 74 61 62 6c 65 2e 20 20 5e 28 54  ngle table.  ^(T
6420: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
6430: 75 6d 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  umns in an index
6440: 20 69 73 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20   is .limited to 
6450: 74 68 65 20 76 61 6c 75 65 20 73 65 74 20 62 79  the value set by
6460: 0a 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d  .[sqlite3_limit]
6470: 28 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43  ([SQLITE_LIMIT_C
6480: 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f  OLUMN],...).)^</
6490: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
64a0: 6d 65 6e 74 20 75 6e 69 71 75 65 69 64 78 20 7b  ment uniqueidx {
64b0: 75 6e 69 71 75 65 20 69 6e 64 65 78 7d 3c 2f 74  unique index}</t
64c0: 63 6c 3e 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55  cl>.<p>^If the U
64d0: 4e 49 51 55 45 20 6b 65 79 77 6f 72 64 20 61 70  NIQUE keyword ap
64e0: 70 65 61 72 73 20 62 65 74 77 65 65 6e 20 43 52  pears between CR
64f0: 45 41 54 45 20 61 6e 64 20 49 4e 44 45 58 20 74  EATE and INDEX t
6500: 68 65 6e 20 64 75 70 6c 69 63 61 74 65 0a 69 6e  hen duplicate.in
6510: 64 65 78 20 65 6e 74 72 69 65 73 20 61 72 65 20  dex entries are 
6520: 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e 20 20 5e 41  not allowed.  ^A
6530: 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e  ny attempt to in
6540: 73 65 72 74 20 61 20 64 75 70 6c 69 63 61 74 65  sert a duplicate
6550: 20 65 6e 74 72 79 0a 77 69 6c 6c 20 72 65 73 75   entry.will resu
6560: 6c 74 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 20  lt in an error. 
6570: 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
6580: 65 73 20 6f 66 20 75 6e 69 71 75 65 20 69 6e 64  es of unique ind
6590: 69 63 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76  ices, all NULL v
65a0: 61 6c 75 65 73 0a 61 72 65 20 63 6f 6e 73 69 64  alues.are consid
65b0: 65 72 65 64 20 74 6f 20 64 69 66 66 65 72 65 6e  ered to differen
65c0: 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72  t from all other
65d0: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64   NULL values and
65e0: 20 61 72 65 20 74 68 75 73 20 75 6e 69 71 75 65   are thus unique
65f0: 2e 0a 54 68 69 73 20 69 73 20 6f 6e 65 20 6f 66  ..This is one of
6600: 20 74 68 65 20 74 77 6f 20 70 6f 73 73 69 62 6c   the two possibl
6610: 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
6620: 73 20 6f 66 20 74 68 65 20 53 51 4c 2d 39 32 20  s of the SQL-92 
6630: 73 74 61 6e 64 61 72 64 0a 28 74 68 65 20 6c 61  standard.(the la
6640: 6e 67 75 61 67 65 20 69 6e 20 74 68 65 20 73 74  nguage in the st
6650: 61 6e 64 61 72 64 20 69 73 20 61 6d 62 69 67 75  andard is ambigu
6660: 6f 75 73 29 20 61 6e 64 20 69 73 20 74 68 65 20  ous) and is the 
6670: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 0a 66  interpretation.f
6680: 6f 6c 6c 6f 77 65 64 20 62 79 20 50 6f 73 74 67  ollowed by Postg
6690: 72 65 53 51 4c 2c 20 4d 79 53 51 4c 2c 20 46 69  reSQL, MySQL, Fi
66a0: 72 65 62 69 72 64 2c 20 61 6e 64 20 4f 72 61 63  rebird, and Orac
66b0: 6c 65 2e 20 20 49 6e 66 6f 72 6d 69 78 20 61 6e  le.  Informix an
66c0: 64 0a 4d 69 63 72 6f 73 6f 66 74 20 53 51 4c 20  d.Microsoft SQL 
66d0: 53 65 72 76 65 72 20 66 6f 6c 6c 6f 77 20 74 68  Server follow th
66e0: 65 20 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65  e other interpre
66f0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74  tation of the st
6700: 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  andard.</p>..<p>
6710: 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  ^If the optional
6720: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63   IF NOT EXISTS c
6730: 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
6740: 20 61 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e 64   and another ind
6750: 65 78 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65  ex.with the same
6760: 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78   name already ex
6770: 69 73 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20  ists, then this 
6780: 63 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20  command becomes 
6790: 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70  a no-op.</p>..<p
67a0: 3e 5e 49 6e 64 65 78 65 73 20 61 72 65 20 72 65  >^Indexes are re
67b0: 6d 6f 76 65 64 20 77 69 74 68 20 74 68 65 20 5b  moved with the [
67c0: 44 52 4f 50 20 49 4e 44 45 58 5d 20 63 6f 6d 6d  DROP INDEX] comm
67d0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  and.</p>...<tcl>
67e0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
67f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
6830: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
6840: 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61  TABLE} {createta
6850: 62 6c 65 7d 20 7b 7b 43 52 45 41 54 45 20 54 41  ble} {{CREATE TA
6860: 42 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  BLE}}..BubbleDia
6870: 67 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c  gram create-tabl
6880: 65 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44  e-stmt 1.BubbleD
6890: 69 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65  iagram column-de
68a0: 66 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  f.BubbleDiagram 
68b0: 74 79 70 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65  type-name.Bubble
68c0: 44 69 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63  Diagram column-c
68d0: 6f 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65  onstraint.Bubble
68e0: 44 69 61 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f  Diagram table-co
68f0: 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44  nstraint.BubbleD
6900: 69 61 67 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b  iagram foreign-k
6910: 65 79 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  ey-clause.</tcl>
6920: 0a 0a 3c 70 3e 54 68 65 20 22 43 52 45 41 54 45  ..<p>The "CREATE
6930: 20 54 41 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20   TABLE" command 
6940: 69 73 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  is used to creat
6950: 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
6960: 20 61 6e 20 53 51 4c 69 74 65 20 0a 64 61 74 61   an SQLite .data
6970: 62 61 73 65 2e 20 41 20 43 52 45 41 54 45 20 54  base. A CREATE T
6980: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65  ABLE command spe
6990: 63 69 66 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f  cifies the follo
69a0: 77 69 6e 67 20 61 74 74 72 69 62 75 74 65 73 20  wing attributes 
69b0: 6f 66 20 74 68 65 0a 6e 65 77 20 74 61 62 6c 65  of the.new table
69c0: 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ul>.  <li><p
69d0: 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  >The name of the
69e0: 20 6e 65 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   new table...  <
69f0: 6c 69 3e 3c 70 3e 20 54 68 65 20 64 61 74 61 62  li><p> The datab
6a00: 61 73 65 20 69 6e 20 77 68 69 63 68 20 74 68 65  ase in which the
6a10: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63 72   new table is cr
6a20: 65 61 74 65 64 2e 20 54 61 62 6c 65 73 20 6d 61  eated. Tables ma
6a30: 79 20 62 65 20 0a 20 20 20 20 20 20 63 72 65 61  y be .      crea
6a40: 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ted in the main 
6a50: 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 65  database, the te
6a60: 6d 70 20 64 61 74 61 62 61 73 65 2c 20 6f 72 20  mp database, or 
6a70: 69 6e 20 61 6e 79 20 61 74 74 61 63 68 65 64 0a  in any attached.
6a80: 20 20 20 20 20 20 64 61 74 61 62 61 73 65 2e 0a        database..
6a90: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e  .  <li><p> The n
6aa0: 61 6d 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ame of each colu
6ab0: 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  mn in the table.
6ac0: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20  ..  <li><p> The 
6ad0: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66  declared type of
6ae0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
6af0: 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c  the table...  <l
6b00: 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74 20  i><p> A default 
6b10: 76 61 6c 75 65 20 6f 72 20 65 78 70 72 65 73 73  value or express
6b20: 69 6f 6e 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  ion for each col
6b30: 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65  umn in the table
6b40: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64  ...  <li><p> A d
6b50: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
6b60: 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65   sequence to use
6b70: 20 77 69 74 68 20 65 61 63 68 20 63 6f 6c 75 6d   with each colum
6b80: 6e 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70  n...  <li><p> Op
6b90: 74 69 6f 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d  tionally, a PRIM
6ba0: 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20  ARY KEY for the 
6bb0: 74 61 62 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67  table. Both sing
6bc0: 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20  le column and.  
6bd0: 20 20 20 20 20 63 6f 6d 70 6f 73 69 74 65 20 28       composite (
6be0: 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29  multiple column)
6bf0: 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 61 72   primary keys ar
6c00: 65 20 73 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20  e supported...  
6c10: 3c 6c 69 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66  <li><p> A set of
6c20: 20 53 51 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73   SQL constraints
6c30: 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 2e   for each table.
6c40: 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
6c50: 20 55 4e 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20   UNIQUE, NOT.   
6c60: 20 20 20 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20      NULL, CHECK 
6c70: 61 6e 64 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  and FOREIGN KEY 
6c80: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 3c 2f 75  constraints..</u
6c90: 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 43 52 45  l>..<p>Every CRE
6ca0: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
6cb0: 65 6e 74 20 6d 75 73 74 20 73 70 65 63 69 66 79  ent must specify
6cc0: 20 61 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20   a name for the 
6cd0: 6e 65 77 20 74 61 62 6c 65 2e 0a 20 20 5e 28 54  new table..  ^(T
6ce0: 61 62 6c 65 20 6e 61 6d 65 73 20 74 68 61 74 20  able names that 
6cf0: 62 65 67 69 6e 20 77 69 74 68 20 22 73 71 6c 69  begin with "sqli
6d00: 74 65 5f 22 20 61 72 65 20 72 65 73 65 72 76 65  te_" are reserve
6d10: 64 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75  d for internal u
6d20: 73 65 2e 20 49 74 0a 20 20 69 73 20 61 6e 20 65  se. It.  is an e
6d30: 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20  rror to attempt 
6d40: 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c  to create a tabl
6d50: 65 20 77 69 74 68 20 61 20 6e 61 6d 65 20 74 68  e with a name th
6d60: 61 74 20 73 74 61 72 74 73 20 77 69 74 68 0a 20  at starts with. 
6d70: 20 22 73 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a 3c   "sqlite_".)^..<
6d80: 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74  p> ^If a &lt;dat
6d90: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
6da0: 73 20 73 70 65 63 69 66 69 65 64 2c 20 69 74 20  s specified, it 
6db0: 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 22  must be either "
6dc0: 6d 61 69 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22  main", .  "temp"
6dd0: 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66  , or the name of
6de0: 20 61 6e 20 5b 41 54 54 41 43 48 20 44 41 54 41   an [ATTACH DATA
6df0: 42 41 53 45 7c 61 74 74 61 63 68 65 64 20 64 61  BASE|attached da
6e00: 74 61 62 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69  tabase]. ^In thi
6e10: 73 20 63 61 73 65 0a 20 20 74 68 65 20 6e 65 77  s case.  the new
6e20: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
6e30: 64 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 64  d in the named d
6e40: 61 74 61 62 61 73 65 2e 20 5e 49 66 20 74 68 65  atabase. ^If the
6e50: 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50   "TEMP" or "TEMP
6e60: 4f 52 41 52 59 22 0a 20 20 6b 65 79 77 6f 72 64  ORARY".  keyword
6e70: 20 6f 63 63 75 72 73 20 62 65 74 77 65 65 6e 20   occurs between 
6e80: 74 68 65 20 22 43 52 45 41 54 45 22 20 61 6e 64  the "CREATE" and
6e90: 20 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74 68   "TABLE" then th
6ea0: 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 0a 20  e new table is. 
6eb0: 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20   created in the 
6ec0: 74 65 6d 70 20 64 61 74 61 62 61 73 65 2e 20 5e  temp database. ^
6ed0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
6ee0: 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61  o specify both a
6ef0: 20 0a 20 20 26 6c 74 3b 64 61 74 61 62 61 73 65   .  &lt;database
6f00: 2d 6e 61 6d 65 26 67 74 3b 20 61 6e 64 20 74 68  -name&gt; and th
6f10: 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52  e TEMP or TEMPOR
6f20: 41 52 59 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c  ARY keyword, unl
6f30: 65 73 73 20 74 68 65 0a 20 20 26 6c 74 3b 64 61  ess the.  &lt;da
6f40: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
6f50: 69 73 20 22 74 65 6d 70 22 2e 20 5e 49 66 20 6e  is "temp". ^If n
6f60: 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  o database name 
6f70: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 64  is specified and
6f80: 20 74 68 65 0a 20 20 54 45 4d 50 20 6b 65 79 77   the.  TEMP keyw
6f90: 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65  ord is not prese
6fa0: 6e 74 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  nt then the tabl
6fb0: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  e is created in 
6fc0: 74 68 65 20 6d 61 69 6e 0a 20 20 64 61 74 61 62  the main.  datab
6fd0: 61 73 65 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20  ase...<p>.  ^It 
6fe0: 69 73 20 75 73 75 61 6c 6c 79 20 61 6e 20 65 72  is usually an er
6ff0: 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74  ror to attempt t
7000: 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74  o create a new t
7010: 61 62 6c 65 20 69 6e 20 61 20 64 61 74 61 62 61  able in a databa
7020: 73 65 20 74 68 61 74 0a 20 20 61 6c 72 65 61 64  se that.  alread
7030: 79 20 63 6f 6e 74 61 69 6e 73 20 61 20 74 61 62  y contains a tab
7040: 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20 76 69 65  le, index or vie
7050: 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61  w of the same na
7060: 6d 65 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  me. ^However, if
7070: 20 74 68 65 0a 20 20 22 49 46 20 4e 4f 54 20 45   the.  "IF NOT E
7080: 58 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73  XISTS" clause is
7090: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
70a0: 72 74 20 6f 66 20 74 68 65 20 43 52 45 41 54 45  rt of the CREATE
70b0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
70c0: 20 61 6e 64 0a 20 20 61 20 74 61 62 6c 65 20 6f   and.  a table o
70d0: 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61  r view of the sa
70e0: 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20  me name already 
70f0: 65 78 69 73 74 73 2c 20 74 68 65 20 43 52 45 41  exists, the CREA
7100: 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  TE TABLE command
7110: 0a 20 20 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f  .  simply has no
7120: 20 65 66 66 65 63 74 20 28 61 6e 64 20 6e 6f 20   effect (and no 
7130: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73  error message is
7140: 20 72 65 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20   returned). ^An 
7150: 65 72 72 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20  error is still. 
7160: 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
7170: 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65   table cannot be
7180: 20 63 72 65 61 74 65 64 20 62 65 63 61 75 73 65   created because
7190: 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   of an existing 
71a0: 69 6e 64 65 78 2c 20 65 76 65 6e 20 0a 20 20 69  index, even .  i
71b0: 66 20 74 68 65 20 22 49 46 20 4e 4f 54 20 45 58  f the "IF NOT EX
71c0: 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73 20  ISTS" clause is 
71d0: 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e  specified...<p>^
71e0: 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72  It is not an err
71f0: 6f 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 74  or to create a t
7200: 61 62 6c 65 20 74 68 61 74 20 68 61 73 20 74 68  able that has th
7210: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
7220: 6e 20 0a 20 20 65 78 69 73 74 69 6e 67 20 5b 43  n .  existing [C
7230: 52 45 41 54 45 20 54 52 49 47 47 45 52 7c 74 72  REATE TRIGGER|tr
7240: 69 67 67 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62  igger]...<p>^Tab
7250: 6c 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  les are removed 
7260: 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20  using the [DROP 
7270: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
7280: 2e 20 20 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 52 45  .  </p>..<h3>CRE
7290: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
72a0: 20 53 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e   SELECT Statemen
72b0: 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  ts</h3>..<p>^(A 
72c0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  "CREATE TABLE ..
72d0: 2e 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61  . AS SELECT" sta
72e0: 74 65 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61  tement creates a
72f0: 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64  nd populates a d
7300: 61 74 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61  atabase.table ba
7310: 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  sed on the resul
7320: 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  ts of a SELECT s
7330: 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68  tatement.)^ ^(Th
7340: 65 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20  e table has the 
7350: 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63  same.number of c
7360: 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f  olumns as the ro
7370: 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ws returned by t
7380: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
7390: 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66  ent. The name of
73a0: 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20  .each column is 
73b0: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
73c0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72  name of the corr
73d0: 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e  esponding column
73e0: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73   in the result.s
73f0: 65 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et of the SELECT
7400: 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28   statement.)^ ^(
7410: 54 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  The declared typ
7420: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
7430: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62   is determined.b
7440: 79 20 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f  y the [expressio
7450: 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74  n affinity] of t
7460: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
7470: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
7480: 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66  he result set.of
7490: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
74a0: 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77  ement, as follow
74b0: 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  s:.</p>..<center
74c0: 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  ><table border=1
74d0: 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72  >.  <tr><th>Expr
74e0: 65 73 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20  ession Affinity 
74f0: 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63    <th>Column Dec
7500: 6c 61 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72  lared Type.  <tr
7510: 3e 3c 74 64 3e 54 45 58 54 20 20 20 20 20 20 20  ><td>TEXT       
7520: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
7530: 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e  TEXT".  <tr><td>
7540: 4e 55 4d 45 52 49 43 20 20 20 20 20 20 20 20 20  NUMERIC         
7550: 20 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a        <td>"NUM".
7560: 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45    <tr><td>INTEGE
7570: 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  R               
7580: 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e  <td>"INT".  <tr>
7590: 3c 74 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20  <td>REAL        
75a0: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52            <td>"R
75b0: 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e  EAL".  <tr><td>N
75c0: 4f 4e 45 20 20 20 20 20 20 20 20 20 20 20 20 20  ONE             
75d0: 20 20 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70       <td>"" (emp
75e0: 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62  ty string).</tab
75f0: 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  le></center>)^..
7600: 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65  <p>^(A table cre
7610: 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
7620: 45 20 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e  E TABLE AS has n
7630: 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  o PRIMARY KEY an
7640: 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73  d no.constraints
7650: 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68   of any kind. Th
7660: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
7670: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
7680: 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61  s NULL. The defa
7690: 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult.collation se
76a0: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
76b0: 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65  column of the ne
76c0: 77 20 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52  w table is BINAR
76d0: 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  Y.)^..<p>^Tables
76e0: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   created using C
76f0: 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 61  REATE TABLE AS a
7700: 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70  re initially pop
7710: 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 0a  ulated with the.
7720: 72 6f 77 73 20 6f 66 20 64 61 74 61 20 72 65 74  rows of data ret
7730: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
7740: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
7750: 52 6f 77 73 20 61 72 65 20 61 73 73 69 67 6e 65  Rows are assigne
7760: 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61  d contiguously.a
7770: 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d  scending [rowid]
7780: 20 76 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e   values, startin
7790: 67 20 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65  g with 1, in the
77a0: 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72   [order by|order
77b0: 5d 20 74 68 61 74 20 74 68 65 79 0a 61 72 65 20  ] that they.are 
77c0: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
77d0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
77e0: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
77f0: 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66  ent {tablecoldef
7800: 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  } {column defini
7810: 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65  tion} {column de
7820: 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e  finitions}</tcl>
7830: 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69  .<h3>Column Defi
7840: 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  nitions</h3>..<p
7850: 3e 55 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20  >Unless it is a 
7860: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
7870: 20 41 53 20 53 45 4c 45 43 54 20 73 74 61 74 65   AS SELECT state
7880: 6d 65 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54  ment, a CREATE T
7890: 41 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e  ABLE includes.on
78a0: 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d  e or more [colum
78b0: 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66  n-def|column def
78c0: 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f  initions], optio
78d0: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
78e0: 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62  y a list of.[tab
78f0: 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61  le-constraint|ta
7900: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  ble constraints]
7910: 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64  .  Each column d
7920: 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73  efinition consis
7930: 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f  ts of the.name o
7940: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70  f the column, op
7950: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
7960: 64 20 62 79 20 74 68 65 20 64 65 63 6c 61 72 65  d by the declare
7970: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  d type of the co
7980: 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f  lumn,.then one o
7990: 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20  r more optional 
79a0: 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69  [column-constrai
79b0: 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72  nt|column constr
79c0: 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64  aints]. Included
79d0: 20 69 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69   in.the definiti
79e0: 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f  on of "column co
79f0: 6e 73 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74  nstraints" for t
7a00: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
7a10: 68 65 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74  he previous.stat
7a20: 65 6d 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f  ement are the CO
7a30: 4c 4c 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c  LLATE and DEFAUL
7a40: 54 20 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20  T clauses, even 
7a50: 74 68 6f 75 67 68 20 74 68 65 73 65 20 61 72 65  though these are
7a60: 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73   not really.cons
7a70: 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73  traints in the s
7a80: 65 6e 73 65 20 74 68 61 74 20 74 68 65 79 20 64  ense that they d
7a90: 6f 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74  o not restrict t
7aa0: 68 65 20 64 61 74 61 20 74 68 61 74 20 74 68 65  he data that the
7ab0: 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61   table may.conta
7ac0: 69 6e 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f  in. The other co
7ad0: 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20  nstraints - NOT 
7ae0: 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49  NULL, CHECK, UNI
7af0: 51 55 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  QUE, PRIMARY KEY
7b00: 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59   and.FOREIGN KEY
7b10: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69   constraints - i
7b20: 6d 70 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f  mpose restrictio
7b30: 6e 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73  ns on the tables
7b40: 20 64 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61   data, and are a
7b50: 72 65 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64  re.described und
7b60: 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c  er [constraints|
7b70: 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61  SQL Data Constra
7b80: 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70  ints] below...<p
7b90: 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51  >^Unlike most SQ
7ba0: 4c 20 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c  L databases, SQL
7bb0: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ite does not res
7bc0: 74 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f  trict the type o
7bd0: 66 20 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20  f data that.may 
7be0: 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  be inserted into
7bf0: 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20   a column based 
7c00: 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64  on the columns d
7c10: 65 63 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e  eclared type. In
7c20: 73 74 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73  stead,.SQLite us
7c30: 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69  es [dynamic typi
7c40: 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72  ng]. ^The declar
7c50: 65 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c  ed type of a col
7c60: 75 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64  umn is used to.d
7c70: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66  etermine the [af
7c80: 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
7c90: 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 70 3e  olumn only...<p>
7ca0: 54 68 65 20 44 45 46 41 55 4c 54 20 63 6c 61 75  The DEFAULT clau
7cb0: 73 65 20 73 70 65 63 69 66 69 65 73 20 61 20 64  se specifies a d
7cc0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 74 6f 20  efault value to 
7cd0: 75 73 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  use for the colu
7ce0: 6d 6e 20 69 66 20 6e 6f 0a 76 61 6c 75 65 20 69  mn if no.value i
7cf0: 73 20 65 78 70 6c 69 63 69 74 6c 79 20 70 72 6f  s explicitly pro
7d00: 76 69 64 65 64 20 62 79 20 74 68 65 20 75 73 65  vided by the use
7d10: 72 20 77 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20  r when doing an 
7d20: 5b 49 4e 53 45 52 54 5d 2e 20 5e 49 66 20 74 68  [INSERT]. ^If th
7d30: 65 72 65 0a 69 73 20 6e 6f 20 65 78 70 6c 69 63  ere.is no explic
7d40: 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73  it DEFAULT claus
7d50: 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  e attached to a 
7d60: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
7d70: 6e 2c 20 74 68 65 6e 20 74 68 65 20 0a 64 65 66  n, then the .def
7d80: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
7d90: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c  e column is NULL
7da0: 2e 20 5e 28 41 6e 20 65 78 70 6c 69 63 69 74 20  . ^(An explicit 
7db0: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 6d  DEFAULT clause m
7dc0: 61 79 20 73 70 65 63 69 66 79 0a 74 68 61 74 20  ay specify.that 
7dd0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
7de0: 65 20 69 73 20 4e 55 4c 4c 2c 20 61 20 73 74 72  e is NULL, a str
7df0: 69 6e 67 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20  ing constant, a 
7e00: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2c 20 61  blob constant, a
7e10: 0a 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 2c 20  .signed-number, 
7e20: 6f 72 20 61 6e 79 20 63 6f 6e 73 74 61 6e 74 20  or any constant 
7e30: 65 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6c 6f  expression enclo
7e40: 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73  sed in parenthes
7e50: 65 73 2e 20 41 6e 20 65 78 70 6c 69 63 69 74 0a  es. An explicit.
7e60: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6d 61  default value ma
7e70: 79 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66  y also be one of
7e80: 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73   the special cas
7e90: 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65  e-independent ke
7ea0: 79 77 6f 72 64 73 0a 43 55 52 52 45 4e 54 5f 54  ywords.CURRENT_T
7eb0: 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54  IME, CURRENT_DAT
7ec0: 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d  E or CURRENT_TIM
7ed0: 45 53 54 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74  ESTAMP.)^ ^For t
7ee0: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
7ef0: 68 65 0a 44 45 46 41 55 4c 54 20 63 6c 61 75 73  he.DEFAULT claus
7f00: 65 2c 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  e, an expression
7f10: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 63   is considered c
7f20: 6f 6e 73 74 61 6e 74 20 70 72 6f 76 69 64 65 64  onstant provided
7f30: 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 6e 6f   that it does.no
7f40: 74 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20 73 75  t contain any su
7f50: 62 2d 71 75 65 72 69 65 73 20 6f 72 20 73 74 72  b-queries or str
7f60: 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 20 65 6e  ing constants en
7f70: 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62 6c 65  closed in double
7f80: 20 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45   quotes...<p>^(E
7f90: 61 63 68 20 74 69 6d 65 20 61 20 72 6f 77 20 69  ach time a row i
7fa0: 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
7fb0: 74 68 65 20 74 61 62 6c 65 20 62 79 20 61 6e 20  the table by an 
7fc0: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
7fd0: 20 74 68 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20   that .does not 
7fe0: 70 72 6f 76 69 64 65 20 65 78 70 6c 69 63 69 74  provide explicit
7ff0: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
8000: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68  table columns th
8010: 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20  e values stored 
8020: 69 6e 0a 74 68 65 20 6e 65 77 20 72 6f 77 20 61  in.the new row a
8030: 72 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  re determined by
8040: 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76   their default v
8050: 61 6c 75 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c  alues)^, as foll
8060: 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  ows:..<ul>.  <li
8070: 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61  ><p>^If the defa
8080: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ult value of the
8090: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e   column is a con
80a0: 73 74 61 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74  stant NULL, text
80b0: 2c 20 62 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69  , blob or.    si
80c0: 67 6e 65 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75  gned-number valu
80d0: 65 2c 20 74 68 65 6e 20 74 68 61 74 20 76 61 6c  e, then that val
80e0: 75 65 20 69 73 20 75 73 65 64 20 64 69 72 65 63  ue is used direc
80f0: 74 6c 79 20 69 6e 20 74 68 65 20 6e 65 77 20 72  tly in the new r
8100: 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49  ow...  <li><p>^I
8110: 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  f the default va
8120: 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  lue of a column 
8130: 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
8140: 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2c   in parentheses,
8150: 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20 65 78   then.    the ex
8160: 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
8170: 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65  uated once for e
8180: 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64  ach row inserted
8190: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 73   and the results
81a0: 0a 20 20 20 20 75 73 65 64 20 69 6e 20 74 68 65  .    used in the
81b0: 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69   new row...  <li
81c0: 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61  ><p>^If the defa
81d0: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63  ult value of a c
81e0: 6f 6c 75 6d 6e 20 69 73 20 43 55 52 52 45 4e 54  olumn is CURRENT
81f0: 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44  _TIME, CURRENT_D
8200: 41 54 45 20 6f 72 0a 20 20 20 20 43 55 52 52 45  ATE or.    CURRE
8210: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68  NT_TIMESTAMP, th
8220: 65 6e 20 74 68 65 20 76 61 6c 75 65 20 75 73 65  en the value use
8230: 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  d in the new row
8240: 20 69 73 20 61 20 74 65 78 74 0a 20 20 20 20 72   is a text.    r
8250: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
8260: 20 74 68 65 20 63 75 72 72 65 6e 74 20 55 54 43   the current UTC
8270: 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d   date and/or tim
8280: 65 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f  e. ^For CURRENT_
8290: 54 49 4d 45 2c 20 74 68 65 0a 20 20 20 20 66 6f  TIME, the.    fo
82a0: 72 6d 61 74 20 6f 66 20 74 68 65 20 76 61 6c 75  rmat of the valu
82b0: 65 20 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e  e is "HH:MM:SS".
82c0: 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 44 41   ^For CURRENT_DA
82d0: 54 45 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22  TE, "YYYY-MM-DD"
82e0: 2e 20 5e 54 68 65 0a 20 20 20 20 66 6f 72 6d 61  . ^The.    forma
82f0: 74 20 66 6f 72 20 43 55 52 52 45 4e 54 5f 54 49  t for CURRENT_TI
8300: 4d 45 53 54 41 4d 50 20 69 73 20 22 59 59 59 59  MESTAMP is "YYYY
8310: 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22  -MM-DD HH:MM:SS"
8320: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  ..</ul>..<p>^The
8330: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
8340: 73 70 65 63 69 66 69 65 73 20 74 68 65 20 6e 61  specifies the na
8350: 6d 65 20 6f 66 20 61 20 5b 63 6f 6c 6c 61 74 69  me of a [collati
8360: 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f 20  ng sequence] to 
8370: 75 73 65 20 61 73 0a 74 68 65 20 64 65 66 61 75  use as.the defau
8380: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
8390: 75 65 6e 63 65 20 66 6f 72 20 74 68 65 20 63 6f  uence for the co
83a0: 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c  lumn. ^If no COL
83b0: 4c 41 54 45 20 63 6c 61 75 73 65 20 69 73 0a 73  LATE clause is.s
83c0: 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 65  pecified, the de
83d0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
83e0: 73 65 71 75 65 6e 63 65 20 69 73 20 5b 42 49 4e  sequence is [BIN
83f0: 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e  ARY]...<p>^The n
8400: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
8410: 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c   in a table is l
8420: 69 6d 69 74 65 64 20 62 79 20 74 68 65 20 5b 53  imited by the [S
8430: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
8440: 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70  ].compile-time p
8450: 61 72 61 6d 65 74 65 72 2e 20 5e 41 20 73 69 6e  arameter. ^A sin
8460: 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62  gle row of a tab
8470: 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20  le cannot store 
8480: 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54  more than.[SQLIT
8490: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79  E_MAX_LENGTH] by
84a0: 74 65 73 20 6f 66 20 64 61 74 61 2e 20 5e 42 6f  tes of data. ^Bo
84b0: 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69  th of these limi
84c0: 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65  ts can be lowere
84d0: 64 20 61 74 0a 72 75 6e 74 69 6d 65 20 75 73 69  d at.runtime usi
84e0: 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
84f0: 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69  limit()] C/C++ i
8500: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
8510: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
8520: 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 20 7b 63  {constraints} {c
8530: 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c  onstraints}</tcl
8540: 3e 0a 3c 68 33 3e 53 51 4c 20 44 61 74 61 20 43  >.<h3>SQL Data C
8550: 6f 6e 73 74 72 61 69 6e 74 73 3c 2f 68 33 3e 0a  onstraints</h3>.
8560: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
8570: 74 20 70 72 69 6d 6b 65 79 63 6f 6e 73 74 20 7b  t primkeyconst {
8580: 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 7b 50 52  PRIMARY KEY} {PR
8590: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72  IMARY KEY constr
85a0: 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  aint}</tcl>.<p>^
85b0: 45 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53 51  Each table in SQ
85c0: 4c 69 74 65 20 6d 61 79 20 68 61 76 65 20 61 74  Lite may have at
85d0: 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52 49   most one <b>PRI
85e0: 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e 49  MARY KEY</b>. ^I
85f0: 66 20 74 68 65 0a 20 20 6b 65 79 77 6f 72 64 73  f the.  keywords
8600: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72 65   PRIMARY KEY are
8610: 20 61 64 64 65 64 20 74 6f 20 61 20 63 6f 6c 75   added to a colu
8620: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74  mn definition, t
8630: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
8640: 6b 65 79 0a 20 20 66 6f 72 20 74 68 65 20 74 61  key.  for the ta
8650: 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ble consists of 
8660: 74 68 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c 75  that single colu
8670: 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50 52  mn. ^Or, if a PR
8680: 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65  IMARY KEY clause
8690: 20 0a 20 20 69 73 20 73 70 65 63 69 66 69 65 64   .  is specified
86a0: 20 61 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f 6e   as a [table-con
86b0: 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20 74  straint], then t
86c0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  he primary key o
86d0: 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 63 6f  f the table.  co
86e0: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c 69  nsists of the li
86f0: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 70  st of columns sp
8700: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
8710: 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  of the PRIMARY K
8720: 45 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e 49 66  EY clause..  ^If
8730: 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74   there is more t
8740: 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20  han one PRIMARY 
8750: 4b 45 59 20 63 6c 61 75 73 65 20 69 6e 20 61 20  KEY clause in a 
8760: 73 69 6e 67 6c 65 20 43 52 45 41 54 45 20 54 41  single CREATE TA
8770: 42 4c 45 0a 20 20 73 74 61 74 65 6d 65 6e 74 2c  BLE.  statement,
8780: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e   it is an error.
8790: 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20  ..<p>If a table 
87a0: 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  has a single col
87b0: 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 2c  umn primary key,
87c0: 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65   and the declare
87d0: 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20  d type of that. 
87e0: 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45   column is "INTE
87f0: 47 45 52 22 2c 20 74 68 65 6e 20 74 68 65 20 63  GER", then the c
8800: 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61  olumn is known a
8810: 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52  s an [INTEGER PR
8820: 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65  IMARY KEY]..  Se
8830: 65 20 62 65 6c 6f 77 20 66 6f 72 20 61 20 64 65  e below for a de
8840: 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65  scription of the
8850: 20 73 70 65 63 69 61 6c 20 70 72 6f 70 65 72 74   special propert
8860: 69 65 73 20 61 6e 64 20 62 65 68 61 76 69 6f 72  ies and behavior
8870: 73 0a 20 20 61 73 73 6f 63 69 61 74 65 64 20 77  s.  associated w
8880: 69 74 68 20 61 6e 20 5b 49 4e 54 45 47 45 52 20  ith an [INTEGER 
8890: 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c  PRIMARY KEY]...<
88a0: 70 3e 5e 45 61 63 68 20 72 6f 77 20 69 6e 20 61  p>^Each row in a
88b0: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 70 72   table with a pr
88c0: 69 6d 61 72 79 20 6b 65 79 20 6d 75 73 74 20 66  imary key must f
88d0: 65 61 74 75 72 65 20 61 20 75 6e 69 71 75 65 20  eature a unique 
88e0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66  combination.  of
88f0: 20 76 61 6c 75 65 73 20 69 6e 20 69 74 73 20 70   values in its p
8900: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
8910: 6e 73 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72  ns. ^For the pur
8920: 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69  poses of determi
8930: 6e 69 6e 67 0a 20 20 74 68 65 20 75 6e 69 71 75  ning.  the uniqu
8940: 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61 72 79  eness of primary
8950: 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e 55 4c   key values, NUL
8960: 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
8970: 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63 74  sidered distinct
8980: 20 66 72 6f 6d 0a 20 20 61 6c 6c 20 6f 74 68 65   from.  all othe
8990: 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64  r values, includ
89a0: 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e  ing other NULLs.
89b0: 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d   ^If an [INSERT]
89c0: 20 6f 72 20 5b 55 50 44 41 54 45 5d 0a 20 20 73   or [UPDATE].  s
89d0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
89e0: 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20  s to modify the 
89f0: 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20 73 6f  table content so
8a00: 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72   that two or mor
8a10: 65 20 72 6f 77 73 0a 20 20 66 65 61 74 75 72 65  e rows.  feature
8a20: 20 69 64 65 6e 74 69 63 61 6c 20 70 72 69 6d 61   identical prima
8a30: 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 69  ry key values, i
8a40: 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61 69 6e  t is a constrain
8a50: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 41  t violation..  A
8a60: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
8a70: 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20 50 52  SQL standard, PR
8a80: 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75 6c 64  IMARY KEY should
8a90: 20 61 6c 77 61 79 73 20 69 6d 70 6c 79 20 4e 4f   always imply NO
8aa0: 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74  T NULL..  Unfort
8ab0: 75 6e 61 74 65 6c 79 2c 20 64 75 65 20 74 6f 20  unately, due to 
8ac0: 61 20 6c 6f 6e 67 2d 73 74 61 6e 64 69 6e 67 20  a long-standing 
8ad0: 63 6f 64 69 6e 67 20 6f 76 65 72 73 69 67 68 74  coding oversight
8ae0: 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 74 68  , this is not th
8af0: 65 0a 20 20 63 61 73 65 20 69 6e 20 53 51 4c 69  e.  case in SQLi
8b00: 74 65 2e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20  te. ^Unless the 
8b10: 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 5b 49 4e  column is an [IN
8b20: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
8b30: 59 5d 20 53 51 4c 69 74 65 0a 20 20 61 6c 6c 6f  Y] SQLite.  allo
8b40: 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  ws NULL values i
8b50: 6e 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  n a PRIMARY KEY 
8b60: 63 6f 6c 75 6d 6e 2e 20 20 57 65 20 63 6f 75 6c  column.  We coul
8b70: 64 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20  d change SQLite 
8b80: 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74 6f 20  to.  conform to 
8b90: 74 68 65 20 73 74 61 6e 64 61 72 64 20 28 61 6e  the standard (an
8ba0: 64 20 77 65 20 6d 69 67 68 74 20 64 6f 20 73 6f  d we might do so
8bb0: 20 69 6e 20 74 68 65 20 66 75 74 75 72 65 29 2c   in the future),
8bc0: 20 62 75 74 20 62 79 20 74 68 65 20 74 69 6d 65   but by the time
8bd0: 0a 20 20 74 68 65 20 6f 76 65 72 73 69 67 68 74  .  the oversight
8be0: 20 77 61 73 20 64 69 73 63 6f 76 65 72 65 64 2c   was discovered,
8bf0: 20 53 51 4c 69 74 65 20 77 61 73 20 69 6e 20 73   SQLite was in s
8c00: 75 63 68 20 77 69 64 65 20 75 73 65 20 74 68 61  uch wide use tha
8c10: 74 20 77 65 20 66 65 61 72 65 64 0a 20 20 62 72  t we feared.  br
8c20: 65 61 6b 69 6e 67 20 6c 65 67 61 63 79 20 63 6f  eaking legacy co
8c30: 64 65 20 69 66 20 77 65 20 66 69 78 65 64 20 74  de if we fixed t
8c40: 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20 53 6f 20  he problem.  So 
8c50: 66 6f 72 20 6e 6f 77 20 77 65 20 68 61 76 65 20  for now we have 
8c60: 63 68 6f 73 65 6e 20 74 6f 0a 20 20 63 6f 6e 74  chosen to.  cont
8c70: 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20 4e 55  inue allowing NU
8c80: 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52 59 20 4b  LLs in PRIMARY K
8c90: 45 59 20 63 6f 6c 75 6d 6e 73 2e 20 20 44 65 76  EY columns.  Dev
8ca0: 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 62  elopers should b
8cb0: 65 0a 20 20 61 77 61 72 65 2c 20 68 6f 77 65 76  e.  aware, howev
8cc0: 65 72 2c 20 74 68 61 74 20 77 65 20 6d 61 79 20  er, that we may 
8cd0: 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f  change SQLite to
8ce0: 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20   conform to the 
8cf0: 53 51 4c 20 73 74 61 6e 64 61 72 64 20 69 6e 0a  SQL standard in.
8d00: 20 20 66 75 74 75 72 65 20 61 6e 64 20 73 68 6f    future and sho
8d10: 75 6c 64 20 64 65 73 69 67 6e 20 6e 65 77 20 70  uld design new p
8d20: 72 6f 67 72 61 6d 73 20 61 63 63 6f 72 64 69 6e  rograms accordin
8d30: 67 6c 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  gly...<tcl>hd_fr
8d40: 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e  agment uniquecon
8d50: 73 74 20 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69  st {UNIQUE} {uni
8d60: 71 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c  que constraint}<
8d70: 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55  /tcl>.<p>^A <b>U
8d80: 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72  NIQUE</b> constr
8d90: 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72 20  aint is similar 
8da0: 74 6f 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  to a PRIMARY KEY
8db0: 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78 63   constraint, exc
8dc0: 65 70 74 0a 20 20 74 68 61 74 20 61 20 73 69 6e  ept.  that a sin
8dd0: 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61  gle table may ha
8de0: 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66  ve any number of
8df0: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
8e00: 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20  nts. ^For each. 
8e10: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
8e20: 6e 74 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c  nt on the table,
8e30: 20 65 61 63 68 20 72 6f 77 20 6d 75 73 74 20 66   each row must f
8e40: 65 61 74 75 72 65 20 61 20 75 6e 69 71 75 65 20  eature a unique 
8e50: 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66  combination.  of
8e60: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63   values in the c
8e70: 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65  olumns identifie
8e80: 64 20 62 79 20 74 68 65 20 55 4e 49 51 55 45 20  d by the UNIQUE 
8e90: 63 6f 6e 73 74 72 61 69 6e 74 2e 20 5e 41 73 20  constraint. ^As 
8ea0: 77 69 74 68 0a 20 20 50 52 49 4d 41 52 59 20 4b  with.  PRIMARY K
8eb0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  EY constraints, 
8ec0: 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
8ed0: 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74   of UNIQUE const
8ee0: 72 61 69 6e 74 73 20 4e 55 4c 4c 20 76 61 6c 75  raints NULL valu
8ef0: 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69 64 65  es.  are conside
8f00: 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f  red distinct fro
8f10: 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  m all other valu
8f20: 65 73 20 28 69 6e 63 6c 75 64 69 6e 67 20 6f 74  es (including ot
8f30: 68 65 72 20 4e 55 4c 4c 73 29 2e 0a 20 20 5e 49  her NULLs)..  ^I
8f40: 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72  f an [INSERT] or
8f50: 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d   [UPDATE] statem
8f60: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
8f70: 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65  modify the table
8f80: 20 63 6f 6e 74 65 6e 74 20 73 6f 0a 20 20 74 68   content so.  th
8f90: 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72  at two or more r
8fa0: 6f 77 73 20 66 65 61 74 75 72 65 20 69 64 65 6e  ows feature iden
8fb0: 74 69 63 61 6c 20 76 61 6c 75 65 73 20 69 6e 20  tical values in 
8fc0: 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d 6e 73  a set of columns
8fd0: 20 74 68 61 74 0a 20 20 61 72 65 20 73 75 62 6a   that.  are subj
8fe0: 65 63 74 20 74 6f 20 61 20 55 4e 49 51 55 45 20  ect to a UNIQUE 
8ff0: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74 20 69  constraint, it i
9000: 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  s a constraint v
9010: 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 5b  iolation...<p>^[
9020: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9030: 4b 45 59 5d 20 63 6f 6c 75 6d 6e 73 20 61 73 69  KEY] columns asi
9040: 64 65 2c 20 62 6f 74 68 20 55 4e 49 51 55 45 20  de, both UNIQUE 
9050: 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 0a  and PRIMARY KEY.
9060: 20 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72    constraints ar
9070: 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  e implemented by
9080: 20 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64   creating an ind
9090: 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ex in the databa
90a0: 73 65 20 28 69 6e 20 74 68 65 20 73 61 6d 65 0a  se (in the same.
90b0: 20 20 77 61 79 20 61 73 20 61 20 5b 43 52 45 41    way as a [CREA
90c0: 54 45 20 49 4e 44 45 58 7c 22 43 52 45 41 54 45  TE INDEX|"CREATE
90d0: 20 55 4e 49 51 55 45 20 49 4e 44 45 58 22 5d 20   UNIQUE INDEX"] 
90e0: 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 29  statement would)
90f0: 2e 20 5e 53 75 63 68 20 61 6e 20 0a 20 20 69 6e  . ^Such an .  in
9100: 64 65 78 20 69 73 20 75 73 65 64 20 6c 69 6b 65  dex is used like
9110: 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 64 65 78   any other index
9120: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
9130: 20 74 6f 20 5b 6f 70 74 69 6d 69 7a 65 72 7c 6f   to [optimizer|o
9140: 70 74 69 6d 69 7a 65 0a 20 20 71 75 65 72 69 65  ptimize.  querie
9150: 73 5d 2e 20 20 41 73 20 61 20 72 65 73 75 6c 74  s].  As a result
9160: 2c 20 74 68 65 72 65 20 6f 66 74 65 6e 20 6e 6f  , there often no
9170: 20 61 64 76 61 6e 74 61 67 65 20 28 62 75 74 20   advantage (but 
9180: 73 69 67 6e 69 66 69 63 61 6e 74 20 6f 76 65 72  significant over
9190: 68 65 61 64 29 0a 20 20 69 6e 20 63 72 65 61 74  head).  in creat
91a0: 69 6e 67 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20  ing an index on 
91b0: 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d 6e 73  a set of columns
91c0: 20 74 68 61 74 20 61 72 65 20 61 6c 72 65 61 64   that are alread
91d0: 79 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 0a 20  y collectively. 
91e0: 20 73 75 62 6a 65 63 74 20 74 6f 20 61 20 55 4e   subject to a UN
91f0: 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52 59 20  IQUE or PRIMARY 
9200: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a  KEY constraint..
9210: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9220: 74 20 7b 63 6b 63 6f 6e 73 74 7d 20 7b 43 48 45  t {ckconst} {CHE
9230: 43 4b 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74  CK} {CHECK const
9240: 72 61 69 6e 74 7d 20 7b 43 48 45 43 4b 20 63 6f  raint} {CHECK co
9250: 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e  nstraints}</tcl>
9260: 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48 45 43 4b  .<p>^(A <b>CHECK
9270: 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20  </b> constraint 
9280: 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64 20  may be attached 
9290: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
92a0: 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73 70 65 63  nition or.  spec
92b0: 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c 65  ified as a table
92c0: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 49 6e 20   constraint. In 
92d0: 70 72 61 63 74 69 63 65 20 69 74 20 6d 61 6b 65  practice it make
92e0: 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 2e  s no difference.
92f0: 29 5e 20 5e 28 45 61 63 68 0a 20 20 74 69 6d 65  )^ ^(Each.  time
9300: 20 61 20 6e 65 77 20 72 6f 77 20 69 73 20 69 6e   a new row is in
9310: 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
9320: 74 61 62 6c 65 20 6f 72 20 61 6e 20 65 78 69 73  table or an exis
9330: 74 69 6e 67 20 72 6f 77 20 69 73 20 75 70 64 61  ting row is upda
9340: 74 65 64 2c 0a 20 20 74 68 65 20 65 78 70 72 65  ted,.  the expre
9350: 73 73 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ssion associated
9360: 20 77 69 74 68 20 65 61 63 68 20 43 48 45 43 4b   with each CHECK
9370: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 65   constraint is e
9380: 76 61 6c 75 61 74 65 64 20 61 6e 64 0a 20 20 63  valuated and.  c
9390: 61 73 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43  ast to a NUMERIC
93a0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61   value in the sa
93b0: 6d 65 20 77 61 79 20 61 73 20 61 20 5b 43 41 53  me way as a [CAS
93c0: 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49  T expression]. I
93d0: 66 20 74 68 65 20 0a 20 20 72 65 73 75 6c 74 20  f the .  result 
93e0: 69 73 20 7a 65 72 6f 20 28 69 6e 74 65 67 65 72  is zero (integer
93f0: 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c   value 0 or real
9400: 20 76 61 6c 75 65 20 30 2e 30 29 2c 20 74 68 65   value 0.0), the
9410: 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20  n a constraint. 
9420: 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61 73 20 6f   violation has o
9430: 63 63 75 72 72 65 64 2e 29 5e 20 5e 49 66 20 74  ccurred.)^ ^If t
9440: 68 65 20 43 48 45 43 4b 20 65 78 70 72 65 73 73  he CHECK express
9450: 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
9460: 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61 6e 79 20   NULL, or.  any 
9470: 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76  other non-zero v
9480: 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f 74 20  alue, it is not 
9490: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
94a0: 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 65  lation..  ^The e
94b0: 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 61 20 43  xpression of a C
94c0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
94d0: 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  may not contain 
94e0: 61 20 73 75 62 71 75 65 72 79 2e 0a 0a 3c 70 3e  a subquery...<p>
94f0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
9500: 73 20 68 61 76 65 20 62 65 65 6e 20 73 75 70 70  s have been supp
9510: 6f 72 74 65 64 20 73 69 6e 63 65 20 5b 76 65 72  orted since [ver
9520: 73 69 6f 6e 20 33 2e 33 2e 30 5d 2e 20 50 72 69  sion 3.3.0]. Pri
9530: 6f 72 20 74 6f 0a 20 20 76 65 72 73 69 6f 6e 20  or to.  version 
9540: 33 2e 33 2e 30 2c 20 43 48 45 43 4b 20 63 6f 6e  3.3.0, CHECK con
9550: 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 70 61  straints were pa
9560: 72 73 65 64 20 62 75 74 20 6e 6f 74 20 65 6e 66  rsed but not enf
9570: 6f 72 63 65 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  orced...<tcl>hd_
9580: 66 72 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75 6c  fragment {notnul
9590: 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55 4c  lconst} {NOT NUL
95a0: 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  L} {NOT NULL con
95b0: 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c  straint}</tcl>.<
95c0: 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c  p>^A <b>NOT NULL
95d0: 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20  </b> constraint 
95e0: 6d 61 79 20 6f 6e 6c 79 20 62 65 20 61 74 74 61  may only be atta
95f0: 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  ched to a column
9600: 20 64 65 66 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e   definition,.  n
9610: 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ot specified as 
9620: 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  a table constrai
9630: 6e 74 2e 20 20 4e 6f 74 20 73 75 72 70 72 69 73  nt.  Not surpris
9640: 69 6e 67 6c 79 2c 20 5e 28 61 20 4e 4f 54 20 4e  ingly, ^(a NOT N
9650: 55 4c 4c 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74  ULL.  constraint
9660: 20 64 69 63 74 61 74 65 73 20 74 68 61 74 20 74   dictates that t
9670: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f  he associated co
9680: 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  lumn may not con
9690: 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75  tain a NULL valu
96a0: 65 2e 0a 20 20 41 74 74 65 6d 70 74 69 6e 67 20  e..  Attempting 
96b0: 74 6f 20 73 65 74 20 74 68 65 20 63 6f 6c 75 6d  to set the colum
96c0: 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20  n value to NULL 
96d0: 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67 20 61  when inserting a
96e0: 20 6e 65 77 20 72 6f 77 20 6f 72 0a 20 20 75 70   new row or.  up
96f0: 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69  dating an existi
9700: 6e 67 20 6f 6e 65 20 63 61 75 73 65 73 20 61 20  ng one causes a 
9710: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
9720: 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63  tion.)^..<p>Exac
9730: 74 6c 79 20 68 6f 77 20 61 20 63 6f 6e 73 74 72  tly how a constr
9740: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69  aint violation i
9750: 73 20 64 65 61 6c 74 20 77 69 74 68 20 69 73 20  s dealt with is 
9760: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
9770: 65 0a 20 20 5b 63 6f 6e 66 6c 69 63 74 20 63 6c  e.  [conflict cl
9780: 61 75 73 65 7c 63 6f 6e 73 74 72 61 69 6e 74 20  ause|constraint 
9790: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
97a0: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 2e 20  ion algorithm]. 
97b0: 45 61 63 68 20 0a 20 20 50 52 49 4d 41 52 59 20  Each .  PRIMARY 
97c0: 4b 45 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f 54  KEY, UNIQUE, NOT
97d0: 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20   NULL and CHECK 
97e0: 63 6f 6e 73 74 72 61 69 6e 74 20 68 61 73 20 61  constraint has a
97f0: 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
9800: 74 0a 20 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  t.  resolution a
9810: 6c 67 6f 72 69 74 68 6d 2e 20 5e 50 52 49 4d 41  lgorithm. ^PRIMA
9820: 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 20 61  RY KEY, UNIQUE a
9830: 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  nd NOT NULL cons
9840: 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65 0a 20  traints may be. 
9850: 20 65 78 70 6c 69 63 69 74 6c 79 20 61 73 73 69   explicitly assi
9860: 67 6e 65 64 20 61 20 64 65 66 61 75 6c 74 20 63  gned a default c
9870: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
9880: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 62 79 20  on algorithm by 
9890: 69 6e 63 6c 75 64 69 6e 67 0a 20 20 61 20 5b 63  including.  a [c
98a0: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20  onflict-clause] 
98b0: 69 6e 20 74 68 65 69 72 20 64 65 66 69 6e 69 74  in their definit
98c0: 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69 66 20 61 20  ions. ^Or, if a 
98d0: 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66 69 6e  constraint defin
98e0: 69 74 69 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f 74  ition.  does not
98f0: 20 69 6e 63 6c 75 64 65 20 61 20 5b 63 6f 6e 66   include a [conf
9900: 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 6f 72 20  lict-clause] or 
9910: 69 74 20 69 73 20 61 20 43 48 45 43 4b 20 63 6f  it is a CHECK co
9920: 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 64 65  nstraint, the de
9930: 66 61 75 6c 74 0a 20 20 63 6f 6e 66 6c 69 63 74  fault.  conflict
9940: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
9950: 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20  rithm is ABORT. 
9960: 5e 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74  ^Different const
9970: 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68  raints within th
9980: 65 0a 20 20 73 61 6d 65 20 74 61 62 6c 65 20 6d  e.  same table m
9990: 61 79 20 68 61 76 65 20 64 69 66 66 65 72 65 6e  ay have differen
99a0: 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  t default confli
99b0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
99c0: 67 6f 72 69 74 68 6d 73 2e 20 53 65 65 0a 20 20  gorithms. See.  
99d0: 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
99e0: 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
99f0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
9a00: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74  information...<t
9a10: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
9a20: 6f 77 69 64 20 7b 49 4e 54 45 47 45 52 20 50 52  owid {INTEGER PR
9a30: 49 4d 41 52 59 20 4b 45 59 7d 20 52 4f 57 49 44  IMARY KEY} ROWID
9a40: 20 72 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33   rowid</tcl>.<h3
9a50: 3e 52 4f 57 49 44 73 20 61 6e 64 20 74 68 65 20  >ROWIDs and the 
9a60: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9a70: 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 76  KEY</h3>..<p>^Ev
9a80: 65 72 79 20 72 6f 77 20 6f 66 20 65 76 65 72 79  ery row of every
9a90: 20 53 51 4c 69 74 65 20 74 61 62 6c 65 20 68 61   SQLite table ha
9aa0: 73 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  s a 64-bit signe
9ab0: 64 20 69 6e 74 65 67 65 72 20 6b 65 79 20 0a 74  d integer key .t
9ac0: 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64 65  hat uniquely ide
9ad0: 6e 74 69 66 69 65 73 20 74 68 65 20 72 6f 77 20  ntifies the row 
9ae0: 77 69 74 68 69 6e 20 69 74 73 20 74 61 62 6c 65  within its table
9af0: 2e 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 69  . This integer i
9b00: 73 20 75 73 75 61 6c 6c 79 0a 63 61 6c 6c 65 64  s usually.called
9b10: 20 74 68 65 20 22 72 6f 77 69 64 22 2e 20 5e 54   the "rowid". ^T
9b20: 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 63  he rowid value c
9b30: 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 75  an be accessed u
9b40: 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20  sing one of the 
9b50: 73 70 65 63 69 61 6c 0a 63 61 73 65 2d 69 6e 64  special.case-ind
9b60: 65 70 65 6e 64 65 6e 74 20 6e 61 6d 65 73 20 22  ependent names "
9b70: 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 2c 20 6f  rowid", "oid", o
9b80: 72 20 22 5f 72 6f 77 69 64 5f 22 20 69 6e 20 70  r "_rowid_" in p
9b90: 6c 61 63 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  lace of a column
9ba0: 20 6e 61 6d 65 2e 0a 5e 49 66 20 61 20 74 61 62   name..^If a tab
9bb0: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 75 73  le contains a us
9bc0: 65 72 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  er defined colum
9bd0: 6e 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22 2c  n named "rowid",
9be0: 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69   "oid" or "_rowi
9bf0: 64 5f 22 2c 0a 74 68 65 6e 20 74 68 61 74 20 6e  d_",.then that n
9c00: 61 6d 65 20 61 6c 77 61 79 73 20 72 65 66 65 72  ame always refer
9c10: 73 20 74 68 65 20 65 78 70 6c 69 63 69 74 6c 79  s the explicitly
9c20: 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e   declared column
9c30: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 75   and cannot be u
9c40: 73 65 64 0a 74 6f 20 72 65 74 72 69 65 76 65 20  sed.to retrieve 
9c50: 74 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77 69  the integer rowi
9c60: 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54 68 65  d value...<p>The
9c70: 20 64 61 74 61 20 66 6f 72 20 65 61 63 68 20 74   data for each t
9c80: 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 69  able in SQLite i
9c90: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 42 2d  s stored as a B-
9ca0: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 63  Tree structure c
9cb0: 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 20 65 6e 74  ontaining.an ent
9cc0: 72 79 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c  ry for each tabl
9cd0: 65 20 72 6f 77 2c 20 75 73 69 6e 67 20 74 68 65  e row, using the
9ce0: 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 73 20   rowid value as 
9cf0: 74 68 65 20 6b 65 79 2e 20 54 68 69 73 20 6d 65  the key. This me
9d00: 61 6e 73 20 74 68 61 74 0a 72 65 74 72 69 65 76  ans that.retriev
9d10: 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e 67 20 72  ing or sorting r
9d20: 65 63 6f 72 64 73 20 62 79 20 72 6f 77 69 64 20  ecords by rowid 
9d30: 69 73 20 66 61 73 74 2e 20 53 65 61 72 63 68 69  is fast. Searchi
9d40: 6e 67 20 66 6f 72 20 61 20 72 65 63 6f 72 64 20  ng for a record 
9d50: 77 69 74 68 20 61 0a 73 70 65 63 69 66 69 63 20  with a.specific 
9d60: 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72 20 61 6c  rowid, or for al
9d70: 6c 20 72 65 63 6f 72 64 73 20 77 69 74 68 20 72  l records with r
9d80: 6f 77 69 64 73 20 77 69 74 68 69 6e 20 61 20 73  owids within a s
9d90: 70 65 63 69 66 69 65 64 20 72 61 6e 67 65 20 69  pecified range i
9da0: 73 0a 61 72 6f 75 6e 64 20 74 77 69 63 65 20 61  s.around twice a
9db0: 73 20 66 61 73 74 20 61 73 20 61 20 73 69 6d 69  s fast as a simi
9dc0: 6c 61 72 20 73 65 61 72 63 68 20 6d 61 64 65 20  lar search made 
9dd0: 62 79 20 73 70 65 63 69 66 79 69 6e 67 20 61 6e  by specifying an
9de0: 79 20 6f 74 68 65 72 20 50 52 49 4d 41 52 59 0a  y other PRIMARY.
9df0: 4b 45 59 20 6f 72 20 69 6e 64 65 78 65 64 20 76  KEY or indexed v
9e00: 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68  alue...<p> ^With
9e10: 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 2c 20   one exception, 
9e20: 69 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 61  if a table has a
9e30: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61   primary key tha
9e40: 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
9e50: 73 69 6e 67 6c 65 0a 63 6f 6c 75 6d 6e 2c 20 61  single.column, a
9e60: 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  nd the declared 
9e70: 74 79 70 65 20 6f 66 20 74 68 61 74 20 63 6f 6c  type of that col
9e80: 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22  umn is "INTEGER"
9e90: 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20   in any mixture 
9ea0: 6f 66 0a 75 70 70 65 72 20 61 6e 64 20 6c 6f 77  of.upper and low
9eb0: 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20 74 68  er case, then th
9ec0: 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73  e column becomes
9ed0: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
9ee0: 65 20 72 6f 77 69 64 2e 20 53 75 63 68 20 61 0a  e rowid. Such a.
9ef0: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 75 61 6c 6c  column is usuall
9f00: 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61 73  y referred to as
9f10: 20 61 6e 20 22 69 6e 74 65 67 65 72 20 70 72 69   an "integer pri
9f20: 6d 61 72 79 20 6b 65 79 22 2e 20 41 20 50 52 49  mary key". A PRI
9f30: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a  MARY KEY column.
9f40: 6f 6e 6c 79 20 62 65 63 6f 6d 65 73 20 61 6e 20  only becomes an 
9f50: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
9f60: 6b 65 79 20 69 66 20 74 68 65 20 64 65 63 6c 61  key if the decla
9f70: 72 65 64 20 74 79 70 65 20 6e 61 6d 65 20 69 73  red type name is
9f80: 20 65 78 61 63 74 6c 79 0a 22 49 4e 54 45 47 45   exactly."INTEGE
9f90: 52 22 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74 65  R".  ^Other inte
9fa0: 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c  ger type names l
9fb0: 69 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49  ike "INT" or "BI
9fc0: 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20  GINT" or "SHORT 
9fd0: 49 4e 54 45 47 45 52 22 0a 6f 72 20 22 55 4e 53  INTEGER".or "UNS
9fe0: 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20 63  IGNED INTEGER" c
9ff0: 61 75 73 65 73 20 74 68 65 20 70 72 69 6d 61 72  auses the primar
a000: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20  y key column to 
a010: 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64  behave as an ord
a020: 69 6e 61 72 79 0a 74 61 62 6c 65 20 63 6f 6c 75  inary.table colu
a030: 6d 6e 20 77 69 74 68 20 69 6e 74 65 67 65 72 20  mn with integer 
a040: 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61  [affinity] and a
a050: 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e   unique index, n
a060: 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ot as an alias f
a070: 6f 72 0a 74 68 65 20 72 6f 77 69 64 2e 0a 0a 3c  or.the rowid...<
a080: 70 3e 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e  p> The exception
a090: 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65   mentioned above
a0a0: 20 69 73 20 74 68 61 74 20 5e 69 66 20 74 68 65   is that ^if the
a0b0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20   declaration of 
a0c0: 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 64 65  a column with.de
a0d0: 63 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e 54  clared type "INT
a0e0: 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20 61  EGER" includes a
a0f0: 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20 44  n "PRIMARY KEY D
a100: 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74 20  ESC" clause, it 
a110: 64 6f 65 73 20 6e 6f 74 0a 62 65 63 6f 6d 65 20  does not.become 
a120: 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
a130: 20 72 6f 77 69 64 20 61 6e 64 20 69 73 20 6e 6f   rowid and is no
a140: 74 20 63 6c 61 73 73 69 66 69 65 64 20 61 73 20  t classified as 
a150: 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
a160: 72 79 20 6b 65 79 2e 0a 54 68 69 73 20 71 75 69  ry key..This qui
a170: 72 6b 20 69 73 20 6e 6f 74 20 62 79 20 64 65 73  rk is not by des
a180: 69 67 6e 2e 20 49 74 20 69 73 20 64 75 65 20 74  ign. It is due t
a190: 6f 20 61 20 62 75 67 20 69 6e 20 65 61 72 6c 79  o a bug in early
a1a0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
a1b0: 69 74 65 2e 0a 42 75 74 20 66 69 78 69 6e 67 20  ite..But fixing 
a1c0: 74 68 65 20 62 75 67 20 63 6f 75 6c 64 20 72 65  the bug could re
a1d0: 73 75 6c 74 20 69 6e 20 76 65 72 79 20 73 65 72  sult in very ser
a1e0: 69 6f 75 73 20 62 61 63 6b 77 61 72 64 73 20 69  ious backwards i
a1f0: 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73  ncompatibilities
a200: 2e 0a 54 68 65 20 53 51 4c 69 74 65 20 64 65 76  ..The SQLite dev
a210: 65 6c 6f 70 65 72 73 20 66 65 65 6c 20 74 68 61  elopers feel tha
a220: 74 20 67 6f 6f 66 79 20 62 65 68 61 76 69 6f 72  t goofy behavior
a230: 20 69 6e 20 61 20 63 6f 72 6e 65 72 20 63 61 73   in a corner cas
a240: 65 20 69 73 20 66 61 72 20 62 65 74 74 65 72 0a  e is far better.
a250: 74 68 61 6e 20 61 20 63 6f 6d 70 61 74 69 62 69  than a compatibi
a260: 6c 69 74 79 20 62 72 65 61 6b 2c 20 73 6f 20 74  lity break, so t
a270: 68 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68 61  he original beha
a280: 76 69 6f 72 20 69 73 20 72 65 74 61 69 6e 65 64  vior is retained
a290: 2e 20 54 68 69 73 20 6d 65 61 6e 73 0a 74 68 61  . This means.tha
a2a0: 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  t ^(the followin
a2b0: 67 20 74 68 72 65 65 20 74 61 62 6c 65 20 64 65  g three table de
a2c0: 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63  clarations all c
a2d0: 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ause the column 
a2e0: 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61 6c 69  "x" to be an.ali
a2f0: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
a300: 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69   (an integer pri
a310: 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e  mary key):..<ul>
a320: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
a330: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
a340: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53  R PRIMARY KEY AS
a350: 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c  C, y, z);</tt>.<
a360: 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41  li><tt>CREATE TA
a370: 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c  BLE t(x INTEGER,
a380: 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b   y, z, PRIMARY K
a390: 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e  EY(x ASC));</tt>
a3a0: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
a3b0: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
a3c0: 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59  R, y, z, PRIMARY
a3d0: 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b 3c 2f   KEY(x DESC));</
a3e0: 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  tt>.</ul>)^..<p>
a3f0: 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77  But ^(the follow
a400: 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  ing declaration 
a410: 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c 74 20  does not result 
a420: 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61 6e 20  in "x" being an 
a430: 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f  alias for.the ro
a440: 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74  wid:.<ul>.<li><t
a450: 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  t>CREATE TABLE t
a460: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
a470: 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20  RY KEY DESC, y, 
a480: 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e  z);</tt>.</ul>)^
a490: 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61 6c 75  ..<p>^Rowid valu
a4a0: 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66 69  es may be modifi
a4b0: 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50 44 41  ed using an UPDA
a4c0: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  TE statement in 
a4d0: 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61 73 20  the same.way as 
a4e0: 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e  any other column
a4f0: 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69 74 68   value can, eith
a500: 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20  er using one of 
a510: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61 6c 69  the built-in ali
a520: 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c 20 22  ases.("rowid", "
a530: 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f  oid" or "_rowid_
a540: 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67 20 61  ") or by using a
a550: 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65 64 20  n alias created 
a560: 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a 70 72  by an integer.pr
a570: 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69 6d 69  imary key. ^Simi
a580: 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45 52 54  larly, an INSERT
a590: 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 70   statement may p
a5a0: 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65 20 74  rovide a value t
a5b0: 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77  o use as the.row
a5c0: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
a5d0: 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e 6c 69  inserted. ^(Unli
a5e0: 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65  ke normal SQLite
a5f0: 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e 74   columns, an int
a600: 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79  eger primary.key
a610: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
a620: 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e   must contain in
a630: 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20 49 6e  teger values. In
a640: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
a650: 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c 75 6d  y or rowid.colum
a660: 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c 65 20  ns are not able 
a670: 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67  to hold floating
a680: 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c 20 73   point values, s
a690: 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f  trings, BLOBs, o
a6a0: 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e  r NULLs.)^..<p>^
a6b0: 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  If an UPDATE sta
a6c0: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
a6d0: 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65 67 65  to set an intege
a6e0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72  r primary key or
a6f0: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f   rowid column.to
a700: 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62 20   a NULL or blob 
a710: 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61 20 73  value, or to a s
a720: 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20 76 61  tring or real va
a730: 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  lue that cannot 
a740: 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f  be losslessly.co
a750: 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
a760: 74 65 67 65 72 2c 20 61 20 22 64 61 74 61 74 79  teger, a "dataty
a770: 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72  pe mismatch" err
a780: 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68  or occurs and th
a790: 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 61  e statement.is a
a7a0: 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e 20 49  borted. ^If an I
a7b0: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
a7c0: 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65  attempts to inse
a7d0: 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 2c  rt a blob value,
a7e0: 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f 72 20   or a string.or 
a7f0: 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20  real value that 
a800: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
a810: 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
a820: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e 74  o an integer int
a830: 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70 72 69  o an.integer pri
a840: 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69  mary key or rowi
a850: 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64 61 74  d column, a "dat
a860: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20  atype mismatch" 
a870: 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64  error occurs and
a880: 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74 20 69   the.statement i
a890: 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e  s aborted...<p>^
a8a0: 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  If an INSERT sta
a8b0: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
a8c0: 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c  to insert a NULL
a8d0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f   value into a ro
a8e0: 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72 20 70  wid or.integer p
a8f0: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
a900: 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20 63 68  n, the system ch
a910: 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67 65 72  ooses an integer
a920: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73   value to use as
a930: 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74 6f 6d   the.rowid autom
a940: 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65 74 61  atically. A deta
a950: 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e  iled description
a960: 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69 73 20   of how this is 
a970: 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64 65 64  done is provided
a980: 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f 69 6e  .<a href="autoin
a990: 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61 74 65  c.html">separate
a9a0: 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ly</a>.</p>..<p>
a9b0: 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20 6b 65  ^(The [parent ke
a9c0: 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69 67 6e  y] of a [foreign
a9d0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d   key constraint]
a9e0: 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
a9f0: 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77 69 64  to.use the rowid
aa00: 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20 6b 65  .  The parent ke
aa10: 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61 6d 65  y must used name
aa20: 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29  d columns only.)
aa30: 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ^</p>..<tcl>.###
aa40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa80: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
aa90: 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47  ion {CREATE TRIG
aaa0: 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67 67  GER} createtrigg
aab0: 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47  er {{CREATE TRIG
aac0: 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  GER}}..BubbleDia
aad0: 67 72 61 6d 20 63 72 65 61 74 65 2d 74 72 69 67  gram create-trig
aae0: 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ger-stmt 1.</tcl
aaf0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54  >..<p>^The CREAT
ab00: 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d  E TRIGGER statem
ab10: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 61  ent is used to a
ab20: 64 64 20 74 72 69 67 67 65 72 73 20 74 6f 20 74  dd triggers to t
ab30: 68 65 20 0a 64 61 74 61 62 61 73 65 20 73 63 68  he .database sch
ab40: 65 6d 61 2e 20 5e 54 72 69 67 67 65 72 73 20 61  ema. ^Triggers a
ab50: 72 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 72  re database oper
ab60: 61 74 69 6f 6e 73 20 0a 74 68 61 74 20 61 72 65  ations .that are
ab70: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70   automatically p
ab80: 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20 61 20  erformed when a 
ab90: 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61  specified databa
aba0: 73 65 20 65 76 65 6e 74 0a 6f 63 63 75 72 73 2e  se event.occurs.
abb0: 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74 72    </p>..<p>^A tr
abc0: 69 67 67 65 72 20 6d 61 79 20 62 65 20 73 70 65  igger may be spe
abd0: 63 69 66 69 65 64 20 74 6f 20 66 69 72 65 20 77  cified to fire w
abe0: 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c 45 54  henever a [DELET
abf0: 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f 72  E], [INSERT],.or
ac00: 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61 0a 70   [UPDATE] of a.p
ac10: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
ac20: 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72 73 2c  se table occurs,
ac30: 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61 6e 20   or whenever an 
ac40: 5b 55 50 44 41 54 45 5d 20 6f 63 63 75 72 73 20  [UPDATE] occurs 
ac50: 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72  on.on one or mor
ac60: 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75  e specified colu
ac70: 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 3c  mns of a table.<
ac80: 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68 69 73  /p>..<p>^At this
ac90: 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73 75 70   time SQLite sup
aca0: 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52 20 45  ports only FOR E
acb0: 41 43 48 20 52 4f 57 20 74 72 69 67 67 65 72 73  ACH ROW triggers
acc0: 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48 0a 53  , not FOR EACH.S
acd0: 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67 65 72  TATEMENT trigger
ace0: 73 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c 69 63  s. ^Hence explic
acf0: 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e 67 20  itly specifying 
ad00: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 73 20  FOR EACH ROW is 
ad10: 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20 45  optional..^FOR E
ad20: 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65 73 20  ACH ROW implies 
ad30: 74 68 61 74 20 74 68 65 20 53 51 4c 20 73 74 61  that the SQL sta
ad40: 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
ad50: 64 20 69 6e 20 74 68 65 20 74 72 69 67 67 65 72  d in the trigger
ad60: 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64  .may be executed
ad70: 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   (depending on t
ad80: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29 20  he WHEN clause) 
ad90: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
ada0: 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65  e row being.inse
adb0: 72 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f 72  rted, updated or
adc0: 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
add0: 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e  statement causin
ade0: 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f  g the trigger to
adf0: 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   fire.</p>..<p>^
ae00: 28 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63  (Both the WHEN c
ae10: 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 74 72  lause and the tr
ae20: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 6d 61  igger actions ma
ae30: 79 20 61 63 63 65 73 73 20 65 6c 65 6d 65 6e 74  y access element
ae40: 73 20 6f 66 20 0a 74 68 65 20 72 6f 77 20 62 65  s of .the row be
ae50: 69 6e 67 20 69 6e 73 65 72 74 65 64 2c 20 64 65  ing inserted, de
ae60: 6c 65 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  leted or updated
ae70: 20 75 73 69 6e 67 20 72 65 66 65 72 65 6e 63 65   using reference
ae80: 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a 22  s of the form ."
ae90: 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  NEW.<i>column-na
aea0: 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44  me</i>" and "OLD
aeb0: 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
aec0: 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63  /i>", where.<i>c
aed0: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69  olumn-name</i> i
aee0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
aef0: 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20  column from the 
af00: 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 74  table that the t
af10: 72 69 67 67 65 72 0a 69 73 20 61 73 73 6f 63 69  rigger.is associ
af20: 61 74 65 64 20 77 69 74 68 2e 29 5e 20 5e 28 4f  ated with.)^ ^(O
af30: 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72  LD and NEW refer
af40: 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62  ences may only b
af50: 65 20 75 73 65 64 20 69 6e 20 74 72 69 67 67 65  e used in trigge
af60: 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66 6f 72  rs on.events for
af70: 20 77 68 69 63 68 20 74 68 65 79 20 61 72 65 20   which they are 
af80: 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c  relevant, as fol
af90: 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c  lows:</p>..<tabl
afa0: 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
afb0: 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a  adding=10>.<tr>.
afc0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
afd0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77   align="right" w
afe0: 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45  idth=120><i>INSE
aff0: 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20  RT</i></td>.<td 
b000: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57  valign="top">NEW
b010: 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20   references are 
b020: 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  valid</td>.</tr>
b030: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
b040: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
b050: 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c  ght" width=120><
b060: 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64  i>UPDATE</i></td
b070: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
b080: 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72  p">NEW and OLD r
b090: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61  eferences are va
b0a0: 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  lid</td>.</tr>.<
b0b0: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
b0c0: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
b0d0: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e  t" width=120><i>
b0e0: 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a  DELETE</i></td>.
b0f0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
b100: 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20  >OLD references 
b110: 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c  are valid</td>.<
b120: 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
b130: 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57  p>)^..<p>^If a W
b140: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
b150: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
b160: 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
b170: 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78  fied.are only ex
b180: 65 63 75 74 65 64 20 66 6f 72 20 72 6f 77 73 20  ecuted for rows 
b190: 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 57 48  for which the WH
b1a0: 45 4e 0a 63 6c 61 75 73 65 20 69 73 20 74 72 75  EN.clause is tru
b1b0: 65 2e 20 5e 49 66 20 6e 6f 20 57 48 45 4e 20 63  e. ^If no WHEN c
b1c0: 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65  lause is supplie
b1d0: 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  d, the SQL state
b1e0: 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63 75 74  ments.are execut
b1f0: 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77 73 2e  ed for all rows.
b200: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42 45  </p>..<p>^The BE
b210: 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20 6b 65  FORE or AFTER ke
b220: 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e 65 73  yword determines
b230: 20 77 68 65 6e 20 74 68 65 20 74 72 69 67 67 65   when the trigge
b240: 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62  r actions.will b
b250: 65 20 65 78 65 63 75 74 65 64 20 72 65 6c 61 74  e executed relat
b260: 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72  ive to the inser
b270: 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69  tion, modificati
b280: 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66  on or removal of
b290: 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20   the.associated 
b2a0: 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e  row.</p>..<p>^An
b2b0: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63   [ON CONFLICT] c
b2c0: 6c 61 75 73 65 20 6d 61 79 20 62 65 20 73 70 65  lause may be spe
b2d0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
b2e0: 66 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72  f an [UPDATE] or
b2f0: 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e   [INSERT].action
b300: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
b310: 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2e   of the trigger.
b320: 0a 5e 48 6f 77 65 76 65 72 20 69 66 20 61 6e 20  .^However if an 
b330: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c  [ON CONFLICT] cl
b340: 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
b350: 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74 68  d as part of .th
b360: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
b370: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
b380: 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 63 6f  to fire, then co
b390: 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a  nflict handling.
b3a0: 70 6f 6c 69 63 79 20 6f 66 20 74 68 65 20 6f 75  policy of the ou
b3b0: 74 65 72 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ter statement is
b3c0: 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f   used instead.</
b3d0: 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73  p>..<p>^Triggers
b3e0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
b3f0: 6c 79 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52  ly [DROP TRIGGER
b400: 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68 65 6e   | dropped].when
b410: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
b420: 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63 69  they are .associ
b430: 61 74 65 64 20 77 69 74 68 20 28 74 68 65 20 3c  ated with (the <
b440: 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e  i>table-name</i>
b450: 20 74 61 62 6c 65 29 20 69 73 20 0a 5b 44 52 4f   table) is .[DRO
b460: 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65  P TABLE | droppe
b470: 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20 69 66  d].  ^However if
b480: 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74   the trigger act
b490: 69 6f 6e 73 20 72 65 66 65 72 65 6e 63 65 0a 6f  ions reference.o
b4a0: 74 68 65 72 20 74 61 62 6c 65 73 2c 20 74 68 65  ther tables, the
b4b0: 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20   trigger is not 
b4c0: 64 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64 69 66  dropped or modif
b4d0: 69 65 64 20 69 66 20 74 68 6f 73 65 20 6f 74 68  ied if those oth
b4e0: 65 72 0a 74 61 62 6c 65 73 20 61 72 65 20 5b 44  er.tables are [D
b4f0: 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70  ROP TABLE | drop
b500: 70 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54  ped] or [ALTER T
b510: 41 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d  ABLE | modified]
b520: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67  .</p>..<p>^Trigg
b530: 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ers are removed 
b540: 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20  using the [DROP 
b550: 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
b560: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79 6e  nt.</p>..<h3>Syn
b570: 74 61 78 20 52 65 73 74 72 69 63 74 69 6f 6e 73  tax Restrictions
b580: 20 4f 6e 20 55 50 44 41 54 45 2c 20 44 45 4c 45   On UPDATE, DELE
b590: 54 45 2c 20 61 6e 64 20 49 4e 53 45 52 54 20 53  TE, and INSERT S
b5a0: 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
b5b0: 0a 20 20 20 20 54 72 69 67 67 65 72 73 3c 2f 68  .    Triggers</h
b5c0: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55 50 44  3>..<p>^The [UPD
b5d0: 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20  ATE], [DELETE], 
b5e0: 61 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73 74 61  and [INSERT].sta
b5f0: 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
b600: 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 20 73  riggers do not s
b610: 75 70 70 6f 72 74 0a 74 68 65 20 66 75 6c 6c 20  upport.the full 
b620: 73 79 6e 74 61 78 20 66 6f 72 20 5b 55 50 44 41  syntax for [UPDA
b630: 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61  TE], [DELETE], a
b640: 6e 64 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74  nd [INSERT] stat
b650: 65 6d 65 6e 74 73 2e 20 20 54 68 65 20 66 6f 6c  ements.  The fol
b660: 6c 6f 77 69 6e 67 0a 72 65 73 74 72 69 63 74 69  lowing.restricti
b670: 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a 0a  ons apply:</p>..
b680: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  <ul>.<li><p>.  ^
b690: 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  (The name of the
b6a0: 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64   table to be mod
b6b0: 69 66 69 65 64 20 69 6e 20 61 6e 20 5b 55 50 44  ified in an [UPD
b6c0: 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20  ATE], [DELETE], 
b6d0: 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20 73 74  or [INSERT].  st
b6e0: 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65 20  atement must be 
b6f0: 61 6e 20 75 6e 71 75 61 6c 69 66 69 65 64 20 74  an unqualified t
b700: 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e 20 6f  able name.  In o
b710: 74 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e 65 20  ther words, one 
b720: 6d 75 73 74 0a 20 20 75 73 65 20 6a 75 73 74 20  must.  use just 
b730: 22 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69  "<i>tablename</i
b740: 3e 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74 61 62  >" not "<i>datab
b750: 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c  ase</i><b>.</b><
b760: 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22  i>tablename</i>"
b770: 0a 20 20 77 68 65 6e 20 73 70 65 63 69 66 79 69  .  when specifyi
b780: 6e 67 20 74 68 65 20 74 61 62 6c 65 2e 29 5e 20  ng the table.)^ 
b790: 20 5e 54 68 65 20 74 61 62 6c 65 20 74 6f 20 62   ^The table to b
b7a0: 65 20 6d 6f 64 69 66 69 65 64 20 6d 75 73 74 20  e modified must 
b7b0: 65 78 69 73 74 20 69 6e 20 74 68 65 0a 20 20 73  exist in the.  s
b7c0: 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20  ame database as 
b7d0: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
b7e0: 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  w to which the t
b7f0: 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68  rigger is attach
b800: 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ed..  </p></li>.
b810: 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20  .<li><p>.  ^The 
b820: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 69 3e  "INSERT INTO <i>
b830: 74 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41 55 4c  table</i> DEFAUL
b840: 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f  T VALUES" form o
b850: 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 73  f the [INSERT] s
b860: 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 6e 6f  tatement.  is no
b870: 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 3c  t supported..  <
b880: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
b890: 3e 0a 20 20 5e 54 68 65 20 49 4e 44 45 58 45 44  >.  ^The INDEXED
b8a0: 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45   BY and NOT INDE
b8b0: 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20  XED clauses are 
b8c0: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f  not supported fo
b8d0: 72 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 0a 20  r [UPDATE] and. 
b8e0: 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d   [DELETE] statem
b8f0: 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  ents..  </p></li
b900: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54  >..<li><p>.  ^(T
b910: 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  he ORDER BY and 
b920: 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20 6f 6e  LIMIT clauses on
b930: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
b940: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
b950: 73 20 61 72 65 20 6e 6f 74 0a 20 20 73 75 70 70  s are not.  supp
b960: 6f 72 74 65 64 2e 20 20 4f 52 44 45 52 20 42 59  orted.  ORDER BY
b970: 20 61 6e 64 20 4c 49 4d 49 54 20 61 72 65 20 6e   and LIMIT are n
b980: 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75 70 70  ot normally supp
b990: 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54  orted for [UPDAT
b9a0: 45 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54 45 5d  E] or.  [DELETE]
b9b0: 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74 20   in any context 
b9c0: 62 75 74 20 63 61 6e 20 62 65 20 65 6e 61 62 6c  but can be enabl
b9d0: 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c  ed for top-level
b9e0: 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 75 73   statements.  us
b9f0: 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ing the [SQLITE_
ba00: 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
ba10: 4c 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70  LETE_LIMIT] comp
ba20: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e  ile-time option.
ba30: 20 20 48 6f 77 65 76 65 72 2c 0a 20 20 74 68 61    However,.  tha
ba40: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  t compile-time o
ba50: 70 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70 6c 69  ption only appli
ba60: 65 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65 6c 20  es to top-level 
ba70: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
ba80: 4c 45 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e  LETE].  statemen
ba90: 74 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54 45 5d  ts, not [UPDATE]
baa0: 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74   and [DELETE] st
bab0: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
bac0: 74 72 69 67 67 65 72 73 2e 29 5e 0a 20 20 3c 2f  triggers.)^.  </
bad0: 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  p></li>.</ul>..<
bae0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
baf0: 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69 67 67  instead_of_trigg
bb00: 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46 7d 20  er {INSTEAD OF} 
bb10: 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67  {INSTEAD OF trig
bb20: 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49  ger}</tcl>.<h3>I
bb30: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
bb40: 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67  r</h3>..<p>^Trig
bb50: 67 65 72 73 20 6d 61 79 20 62 65 20 63 72 65 61  gers may be crea
bb60: 74 65 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20  ted on [views], 
bb70: 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e  as well as ordin
bb80: 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79 0a 73  ary tables, by.s
bb90: 70 65 63 69 66 79 69 6e 67 20 49 4e 53 54 45 41  pecifying INSTEA
bba0: 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41  D OF in the CREA
bbb0: 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65  TE TRIGGER state
bbc0: 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f  ment. .^If one o
bbd0: 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54  r more ON INSERT
bbe0: 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f  , ON DELETE.or O
bbf0: 4e 20 55 50 44 41 54 45 20 74 72 69 67 67 65 72  N UPDATE trigger
bc00: 73 20 61 72 65 20 64 65 66 69 6e 65 64 20 6f 6e  s are defined on
bc10: 20 61 20 76 69 65 77 2c 20 74 68 65 6e 20 69 74   a view, then it
bc20: 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72   is not an.error
bc30: 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 20 49   to execute an I
bc40: 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72  NSERT, DELETE or
bc50: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
bc60: 74 20 6f 6e 20 74 68 65 20 76 69 65 77 2c 20 0a  t on the view, .
bc70: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 5e  respectively.  ^
bc80: 49 6e 73 74 65 61 64 2c 0a 65 78 65 63 75 74 69  Instead,.executi
bc90: 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  ng an INSERT, DE
bca0: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
bcb0: 6e 20 74 68 65 20 76 69 65 77 20 63 61 75 73 65  n the view cause
bcc0: 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  s the associated
bcd0: 0a 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72  .triggers to fir
bce0: 65 2e 20 5e 54 68 65 20 72 65 61 6c 20 74 61 62  e. ^The real tab
bcf0: 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67 20 74  les underlying t
bd00: 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f 74 20  he view are not 
bd10: 6d 6f 64 69 66 69 65 64 0a 28 65 78 63 65 70 74  modified.(except
bd20: 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c 69 63   possibly explic
bd30: 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69 67 67  itly, by a trigg
bd40: 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e  er program).</p>
bd50: 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
bd60: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
bd70: 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 73 71 6c  nges()] and [sql
bd80: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
bd90: 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73  es()] interfaces
bda0: 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e 74 20 49 4e  .do not count IN
bdb0: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
bdc0: 20 66 69 72 69 6e 67 73 2c 20 62 75 74 20 74 68   firings, but th
bdd0: 65 0a 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  e.[count_changes
bde0: 20 70 72 61 67 6d 61 5d 20 64 6f 65 73 20 63 6f   pragma] does co
bdf0: 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74  unt INSTEAD OF t
be00: 72 69 67 67 65 72 20 66 69 72 69 6e 67 2e 3c 2f  rigger firing.</
be10: 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73  p>..<h3>Examples
be20: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75  </h3>..<p>^(Assu
be30: 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d  ming that custom
be40: 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73  er records are s
be50: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 63 75  tored in the "cu
be60: 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20  stomers" table, 
be70: 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72  and.that order r
be80: 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65  ecords are store
be90: 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73  d in the "orders
bea0: 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c  " table, the fol
beb0: 6c 6f 77 69 6e 67 20 74 72 69 67 67 65 72 0a 65  lowing trigger.e
bec0: 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20  nsures that all 
bed0: 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72  associated order
bee0: 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65 64  s are redirected
bef0: 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72   when a customer
bf00: 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20   changes.his or 
bf10: 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e  her address:</p>
bf20: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
bf30: 0a 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20  .CREATE TRIGGER 
bf40: 75 70 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f  update_customer_
bf50: 61 64 64 72 65 73 73 20 55 50 44 41 54 45 20 4f  address UPDATE O
bf60: 46 20 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73  F address ON cus
bf70: 74 6f 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a  tomers .  BEGIN.
bf80: 20 20 20 20 55 50 44 41 54 45 20 6f 72 64 65 72      UPDATE order
bf90: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
bfa0: 6e 65 77 2e 61 64 64 72 65 73 73 20 57 48 45 52  new.address WHER
bfb0: 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20  E customer_name 
bfc0: 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e  = old.name;.  EN
bfd0: 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57  D;.}</tcl>..<p>W
bfe0: 69 74 68 20 74 68 69 73 20 74 72 69 67 67 65 72  ith this trigger
bff0: 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63   installed, exec
c000: 75 74 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d  uting the statem
c010: 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ent:</p>..<tcl>E
c020: 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20  xample {.UPDATE 
c030: 63 75 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64  customers SET ad
c040: 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20  dress = '1 Main 
c050: 53 74 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20  St.' WHERE name 
c060: 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a  = 'Jack Jones';.
c070: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73  }</tcl>..<p>caus
c080: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
c090: 20 74 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63   to be automatic
c0a0: 61 6c 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f  ally executed:</
c0b0: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
c0c0: 20 7b 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73   {.UPDATE orders
c0d0: 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 27   SET address = '
c0e0: 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52  1 Main St.' WHER
c0f0: 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20  E customer_name 
c100: 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a  = 'Jack Jones';.
c110: 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e  }</tcl>)^..<tcl>
c120: 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 64 65  hd_fragment unde
c130: 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64 65 66 69  f_before {undefi
c140: 6e 65 64 20 42 45 46 4f 52 45 20 74 72 69 67 67  ned BEFORE trigg
c150: 65 72 20 62 65 68 61 76 69 6f 72 7d 3c 2f 74 63  er behavior}</tc
c160: 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f 6e 73 20  l>.<h3>Cautions 
c170: 4f 6e 20 54 68 65 20 55 73 65 20 4f 66 20 42 45  On The Use Of BE
c180: 46 4f 52 45 20 74 72 69 67 67 65 72 73 3c 2f 68  FORE triggers</h
c190: 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42 45 46 4f  3>..<p>If a BEFO
c1a0: 52 45 20 55 50 44 41 54 45 20 6f 72 20 42 45 46  RE UPDATE or BEF
c1b0: 4f 52 45 20 44 45 4c 45 54 45 20 74 72 69 67 67  ORE DELETE trigg
c1c0: 65 72 20 6d 6f 64 69 66 69 65 73 20 6f 72 20 64  er modifies or d
c1d0: 65 6c 65 74 65 73 20 61 20 72 6f 77 0a 74 68 61  eletes a row.tha
c1e0: 74 20 77 61 73 20 74 6f 20 68 61 76 65 20 62 65  t was to have be
c1f0: 65 6e 20 75 70 64 61 74 65 64 20 6f 72 20 64 65  en updated or de
c200: 6c 65 74 65 64 2c 20 74 68 65 6e 20 74 68 65 20  leted, then the 
c210: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
c220: 62 73 65 71 75 65 6e 74 0a 75 70 64 61 74 65 20  bsequent.update 
c230: 6f 72 20 64 65 6c 65 74 65 20 6f 70 65 72 61 74  or delete operat
c240: 69 6f 6e 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ion is undefined
c250: 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20  .  Furthermore, 
c260: 69 66 20 61 20 42 45 46 4f 52 45 20 74 72 69 67  if a BEFORE trig
c270: 67 65 72 0a 6d 6f 64 69 66 69 65 73 20 6f 72 20  ger.modifies or 
c280: 64 65 6c 65 74 65 73 20 61 20 72 6f 77 2c 20 74  deletes a row, t
c290: 68 65 6e 20 69 74 20 69 73 20 75 6e 64 65 66 69  hen it is undefi
c2a0: 6e 65 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ned whether or n
c2b0: 6f 74 20 41 46 54 45 52 20 74 72 69 67 67 65 72  ot AFTER trigger
c2c0: 73 0a 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76  s.that would hav
c2d0: 65 20 6f 74 68 65 72 77 69 73 65 20 72 75 6e 20  e otherwise run 
c2e0: 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73 20 77 69  on those rows wi
c2f0: 6c 6c 20 69 6e 20 66 61 63 74 20 72 75 6e 2e 0a  ll in fact run..
c300: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c  </p>..<p>The val
c310: 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77 69 64 20  ue of NEW.rowid 
c320: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 20  is undefined in 
c330: 61 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20  a BEFORE INSERT 
c340: 74 72 69 67 67 65 72 20 69 6e 20 77 68 69 63 68  trigger in which
c350: 0a 74 68 65 20 72 6f 77 69 64 20 69 73 20 6e 6f  .the rowid is no
c360: 74 20 65 78 70 6c 69 63 69 74 6c 79 20 73 65 74  t explicitly set
c370: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 3c   to an integer.<
c380: 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20  /p>..<p>Because 
c390: 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f 72 73  of the behaviors
c3a0: 20 64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65   described above
c3b0: 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72  , programmers ar
c3c0: 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 0a  e encouraged to.
c3d0: 70 72 65 66 65 72 20 41 46 54 45 52 20 74 72 69  prefer AFTER tri
c3e0: 67 67 65 72 73 20 6f 76 65 72 20 42 45 46 4f 52  ggers over BEFOR
c3f0: 45 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  E triggers.</p>.
c400: 0a 3c 68 33 3e 54 68 65 20 52 41 49 53 45 28 29  .<h3>The RAISE()
c410: 20 66 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a   function</h3>..
c420: 3c 70 3e 5e 28 41 20 73 70 65 63 69 61 6c 20 53  <p>^(A special S
c430: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 52 41 49 53  QL function RAIS
c440: 45 28 29 20 6d 61 79 20 62 65 20 75 73 65 64 20  E() may be used 
c450: 77 69 74 68 69 6e 20 61 20 74 72 69 67 67 65 72  within a trigger
c460: 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a 77 69 74 68  -program,)^.with
c470: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
c480: 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63 6c  yntax</p> ..<tcl
c490: 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  >BubbleDiagram r
c4a0: 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f 74  aise-function</t
c4b0: 63 6c 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 6f 6e  cl>..<p>^When on
c4c0: 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 74  e of the first t
c4d0: 68 72 65 65 20 66 6f 72 6d 73 20 69 73 20 63 61  hree forms is ca
c4e0: 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72 69 67  lled during trig
c4f0: 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63  ger-program.exec
c500: 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65 63 69  ution, the speci
c510: 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  fied [ON CONFLIC
c520: 54 5d 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  T] processing is
c530: 20 70 65 72 66 6f 72 6d 65 64 0a 28 65 69 74 68   performed.(eith
c540: 65 72 20 41 42 4f 52 54 2c 20 46 41 49 4c 20 6f  er ABORT, FAIL o
c550: 72 20 52 4f 4c 4c 42 41 43 4b 29 20 61 6e 64 20  r ROLLBACK) and 
c560: 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65 72  the current quer
c570: 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 0a 41 6e  y terminates..An
c580: 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 5b   error code of [
c590: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
c5a0: 54 5d 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  T] is returned t
c5b0: 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  o the applicatio
c5c0: 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20 74 68  n,.along with th
c5d0: 65 20 73 70 65 63 69 66 69 65 64 20 65 72 72 6f  e specified erro
c5e0: 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a  r message.</p>..
c5f0: 3c 70 3e 5e 57 68 65 6e 20 52 41 49 53 45 28 49  <p>^When RAISE(I
c600: 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c 65 64  GNORE) is called
c610: 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  , the remainder 
c620: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  of the current t
c630: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 0a  rigger program,.
c640: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68  the statement th
c650: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72  at caused the tr
c660: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 74 6f  igger program to
c670: 20 65 78 65 63 75 74 65 20 61 6e 64 20 61 6e 79   execute and any
c680: 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72 69 67   subsequent.trig
c690: 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 68 61  ger programs tha
c6a0: 74 20 77 6f 75 6c 64 20 6f 66 20 62 65 65 6e 20  t would of been 
c6b0: 65 78 65 63 75 74 65 64 20 61 72 65 20 61 62 61  executed are aba
c6c0: 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61 74 61  ndoned. ^No data
c6d0: 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61 72 65  base.changes are
c6e0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e   rolled back.  ^
c6f0: 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
c700: 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
c710: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
c720: 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73 20 69  .to execute is i
c730: 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20  tself part of a 
c740: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c  trigger program,
c750: 20 74 68 65 6e 20 74 68 61 74 20 74 72 69 67 67   then that trigg
c760: 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d  er program.resum
c770: 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61 74 20  es execution at 
c780: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
c790: 20 74 68 65 20 6e 65 78 74 20 73 74 65 70 2e 0a   the next step..
c7a0: 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
c7b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7f0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
c800: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45  tion {CREATE VIE
c810: 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d 20  W} {createview} 
c820: 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 76  {{CREATE VIEW} v
c830: 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a 42 75 62  iew *views}..Bub
c840: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
c850: 65 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c 2f  e-view-stmt 1.</
c860: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52  tcl>..<p>^The CR
c870: 45 41 54 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e  EATE VIEW comman
c880: 64 20 61 73 73 69 67 6e 73 20 61 20 6e 61 6d 65  d assigns a name
c890: 20 74 6f 20 61 20 70 72 65 2d 70 61 63 6b 61 67   to a pre-packag
c8a0: 65 64 20 0a 5b 53 45 4c 45 43 54 5d 20 73 74 61  ed .[SELECT] sta
c8b0: 74 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20 74  tement. .^Once t
c8c0: 68 65 20 76 69 65 77 20 69 73 20 63 72 65 61 74  he view is creat
c8d0: 65 64 2c 20 69 74 20 63 61 6e 20 62 65 20 75 73  ed, it can be us
c8e0: 65 64 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ed in the FROM c
c8f0: 6c 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72  lause.of another
c900: 20 5b 53 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61   [SELECT] in pla
c910: 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
c920: 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  me..</p>..<p>^If
c930: 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22   the "TEMP" or "
c940: 54 45 4d 50 4f 52 41 52 59 22 20 6b 65 79 77 6f  TEMPORARY" keywo
c950: 72 64 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74  rd occurs in bet
c960: 77 65 65 6e 20 22 43 52 45 41 54 45 22 0a 61 6e  ween "CREATE".an
c970: 64 20 22 56 49 45 57 22 20 74 68 65 6e 20 74 68  d "VIEW" then th
c980: 65 20 76 69 65 77 20 74 68 61 74 20 69 73 20 63  e view that is c
c990: 72 65 61 74 65 64 20 69 73 20 6f 6e 6c 79 20 76  reated is only v
c9a0: 69 73 69 62 6c 65 20 74 6f 20 74 68 65 0a 70 72  isible to the.pr
c9b0: 6f 63 65 73 73 20 74 68 61 74 20 6f 70 65 6e 65  ocess that opene
c9c0: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  d the database a
c9d0: 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  nd is automatica
c9e0: 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e  lly deleted when
c9f0: 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73  .the database is
ca00: 20 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70   closed.</p>..<p
ca10: 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74 61  > ^If a &lt;data
ca20: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73  base-name&gt; is
ca30: 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
ca40: 20 74 68 65 20 76 69 65 77 20 69 73 20 63 72 65   the view is cre
ca50: 61 74 65 64 20 69 6e 20 0a 74 68 65 20 6e 61 6d  ated in .the nam
ca60: 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74  ed database. ^It
ca70: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
ca80: 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 26  specify both a &
ca90: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
caa0: 26 67 74 3b 0a 61 6e 64 20 74 68 65 20 54 45 4d  &gt;.and the TEM
cab0: 50 20 6b 65 79 77 6f 72 64 20 6f 6e 20 61 20 56  P keyword on a V
cac0: 49 45 57 2c 20 75 6e 6c 65 73 73 20 74 68 65 20  IEW, unless the 
cad0: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
cae0: 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e  e&gt; is "temp".
caf0: 0a 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65  .^If no database
cb00: 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69   name is specifi
cb10: 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50  ed, and the TEMP
cb20: 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20   keyword is not 
cb30: 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 56 49 45  present,.the VIE
cb40: 57 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  W is created in 
cb50: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
cb60: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75 20  e.</p>..<p>^You 
cb70: 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c  cannot [DELETE],
cb80: 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55   [INSERT], or [U
cb90: 50 44 41 54 45 5d 20 61 20 76 69 65 77 2e 20 20  PDATE] a view.  
cba0: 5e 56 69 65 77 73 20 61 72 65 20 72 65 61 64 2d  ^Views are read-
cbb0: 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e  only .in SQLite.
cbc0: 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d    ^However, in m
cbd0: 61 6e 79 20 63 61 73 65 73 20 79 6f 75 20 63 61  any cases you ca
cbe0: 6e 20 75 73 65 20 61 6e 0a 5b 49 4e 53 54 45 41  n use an.[INSTEA
cbf0: 44 20 4f 46 20 74 72 69 67 67 65 72 5d 20 6f 6e  D OF trigger] on
cc00: 20 74 68 65 20 76 69 65 77 20 74 6f 20 61 63 63   the view to acc
cc10: 6f 6d 70 6c 69 73 68 20 0a 74 68 65 20 73 61 6d  omplish .the sam
cc20: 65 20 74 68 69 6e 67 2e 20 20 5e 56 69 65 77 73  e thing.  ^Views
cc30: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 0a 77 69   are removed .wi
cc40: 74 68 20 74 68 65 20 5b 44 52 4f 50 20 56 49 45  th the [DROP VIE
cc50: 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  W] command.</p>.
cc60: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
cc70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cc80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cc90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ccb0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
ccc0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
ccd0: 42 4c 45 7d 20 7b 63 72 65 61 74 65 76 74 61 62  BLE} {createvtab
cce0: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 52 54 55  } {{CREATE VIRTU
ccf0: 41 4c 20 54 41 42 4c 45 7d 7d 0a 0a 42 75 62 62  AL TABLE}}..Bubb
cd00: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
cd10: 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73  -virtual-table-s
cd20: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
cd30: 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  >A [virtual tabl
cd40: 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61  e] is an interfa
cd50: 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61  ce to an externa
cd60: 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d  l storage or com
cd70: 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20  putation.engine 
cd80: 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20  that appears to 
cd90: 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20 64  be a table but d
cda0: 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  oes not actually
cdb0: 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69   store informati
cdc0: 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  on.in the databa
cdd0: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
cde0: 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75  >In general, you
cdf0: 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67   can do anything
ce00: 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61 6c   with a [virtual
ce10: 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61 6e   table] that can
ce20: 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e   be done.with an
ce30: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c   ordinary table,
ce40: 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79 6f   except that ^yo
ce50: 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20  u cannot create 
ce60: 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67 67  indices or trigg
ce70: 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c  ers on a.virtual
ce80: 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76   table.  ^Some v
ce90: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
cea0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67  lementations mig
ceb0: 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69  ht impose additi
cec0: 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e  onal.restriction
ced0: 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  s.  For example,
cee0: 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61   many virtual ta
cef0: 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e  bles are read-on
cf00: 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ly.</p>..<p>The 
cf10: 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26  &lt;module-name&
cf20: 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20  gt; is the name 
cf30: 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  of an object tha
cf40: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65  t implements.the
cf50: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
cf60: 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65   ^The &lt;module
cf70: 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62  -name&gt; must b
cf80: 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69 74  e registered wit
cf90: 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61 74  h.the SQLite dat
cfa0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
cfb0: 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f   using.[sqlite3_
cfc0: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d  create_module()]
cfd0: 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65   or [sqlite3_cre
cfe0: 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d  ate_module_v2()]
cff0: 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e  .prior to issuin
d000: 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  g the CREATE VIR
d010: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
d020: 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c  ment..^The modul
d030: 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20  e takes zero or 
d040: 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72  more comma-separ
d050: 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a  ated arguments..
d060: 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 63  ^The arguments c
d070: 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75 74  an be just about
d080: 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f 6e   any text as lon
d090: 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c 61  g as it has bala
d0a0: 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65 73  nced.parentheses
d0b0: 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  .  The argument 
d0c0: 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69 63  syntax is suffic
d0d0: 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20 74  iently general t
d0e0: 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e 74  hat the.argument
d0f0: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
d100: 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c 75   appear as [colu
d110: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20  mn definitions] 
d120: 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c  in a traditional
d130: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
d140: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51  statement.  .^SQ
d150: 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20  Lite passes the 
d160: 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73  module arguments
d170: 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65   directly.to the
d180: 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b   [xCreate] and [
d190: 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64  xConnect] method
d1a0: 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20  s of the module 
d1b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77  implementation.w
d1c0: 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
d1d0: 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69  pretation.  It i
d1e0: 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69  s the responsibi
d1f0: 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75  lity.of the modu
d200: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
d210: 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69  n to parse and i
d220: 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e  nterpret its own
d230: 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a   arguments.</p>.
d240: 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74  .<p>^A virtual t
d250: 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65  able is destroye
d260: 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69  d using the ordi
d270: 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45  nary.[DROP TABLE
d280: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
d290: 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56  ere is no.DROP V
d2a0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d2b0: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63  tement.</p>..<tc
d2c0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
d2d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d2e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d310: 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45  #.Section DELETE
d320: 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20   delete {DELETE 
d330: 2a 44 45 4c 45 54 45 73 7d 0a 0a 42 75 62 62 6c  *DELETEs}..Bubbl
d340: 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
d350: 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61  stmt 1.BubbleDia
d360: 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74  gram qualified-t
d370: 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e  able-name.</tcl>
d380: 0a 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20  ..<p>The DELETE 
d390: 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20  command removes 
d3a0: 72 65 63 6f 72 64 73 20 66 72 6f 6d 20 74 68 65  records from the
d3b0: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
d3c0: 64 20 62 79 20 74 68 65 0a 20 20 20 3c 69 3e 71  d by the.   <i>q
d3d0: 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
d3e0: 61 6d 65 3c 2f 69 3e 2e 20 0a 0a 3c 70 3e 5e 49  ame</i>. ..<p>^I
d3f0: 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  f the WHERE clau
d400: 73 65 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  se is not presen
d410: 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 69  t, all records i
d420: 6e 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20  n the table are 
d430: 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e 49 66 20  deleted..   ^If 
d440: 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
d450: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e  s supplied, then
d460: 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77 73   only those rows
d470: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 20   for which the. 
d480: 20 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c    result of eval
d490: 75 61 74 69 6e 67 20 74 68 65 20 57 48 45 52 45  uating the WHERE
d4a0: 20 63 6c 61 75 73 65 20 61 73 20 61 20 5b 62 6f   clause as a [bo
d4b0: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
d4c0: 7c 0a 20 20 20 62 6f 6f 6c 65 61 6e 20 65 78 70  |.   boolean exp
d4d0: 72 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d  ression is true]
d4e0: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
d4f0: 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20  h3>Restrictions 
d500: 6f 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d  on DELETE Statem
d510: 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41  ents Within CREA
d520: 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a  TE TRIGGER</h3>.
d530: 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
d540: 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61  g restrictions a
d550: 70 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73  pply to DELETE s
d560: 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f  tatements that o
d570: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a  ccur within the.
d580: 20 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52     body of a [CR
d590: 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
d5a0: 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20  atement:..<ul>. 
d5b0: 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e   <li><p>^The <i>
d5c0: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73  table-name</i> s
d5d0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
d5e0: 20 6f 66 20 61 20 44 45 4c 45 54 45 20 73 74 61   of a DELETE sta
d5f0: 74 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20  tement within.  
d600: 20 20 61 20 74 72 69 67 67 65 72 20 62 6f 64 79    a trigger body
d610: 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69   must be unquali
d620: 66 69 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65  fied.  ^(In othe
d630: 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20  r words, the.   
d640: 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
d650: 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72  e</i><b>.</b> pr
d660: 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c  efix on the tabl
d670: 65 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c  e name is not al
d680: 6c 6f 77 65 64 20 0a 20 20 20 20 77 69 74 68 69  lowed .    withi
d690: 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 49  n triggers.)^ ^I
d6a0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  f the table to w
d6b0: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
d6c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 0a   is attached is.
d6d0: 20 20 20 20 6e 6f 74 20 69 6e 20 74 68 65 20 74      not in the t
d6e0: 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20 74 68  emp database, th
d6f0: 65 6e 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  en DELETE statem
d700: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20  ents within the 
d710: 74 72 69 67 67 65 72 0a 20 20 20 20 62 6f 64 79  trigger.    body
d720: 20 6d 75 73 74 20 6f 70 65 72 61 74 65 20 6f 6e   must operate on
d730: 20 74 61 62 6c 65 73 20 77 69 74 68 69 6e 20 74   tables within t
d740: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
d750: 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20   as it. ^If the 
d760: 74 61 62 6c 65 0a 20 20 20 20 74 6f 20 77 68 69  table.    to whi
d770: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
d780: 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e  s attached is in
d790: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
d7a0: 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20  se, then the.   
d7b0: 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d   unqualified nam
d7c0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
d7d0: 65 69 6e 67 20 64 65 6c 65 74 65 64 20 69 73 20  eing deleted is 
d7e0: 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20  resolved in the 
d7f0: 73 61 6d 65 20 77 61 79 20 61 73 0a 20 20 20 20  same way as.    
d800: 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d  it is for a top-
d810: 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20  level statement 
d820: 28 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69  (by searching fi
d830: 72 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74  rst the TEMP dat
d840: 61 62 61 73 65 2c 20 74 68 65 6e 0a 20 20 20 20  abase, then.    
d850: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
d860: 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65  e, then any othe
d870: 72 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  r databases in t
d880: 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 77 65  he order they we
d890: 72 65 0a 20 20 20 20 61 74 74 61 63 68 65 64 29  re.    attached)
d8a0: 2e 0a 20 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e  ..    .  <li><p>
d8b0: 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
d8c0: 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
d8d0: 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
d8e0: 61 6c 6c 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54  allowed on DELET
d8f0: 45 0a 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73  E.    statements
d900: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
d910: 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  .</p>..  <li><p>
d920: 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f  ^The LIMIT and O
d930: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 20  RDER BY clauses 
d940: 28 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77  (described below
d950: 29 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  ) are unsupporte
d960: 64 20 66 6f 72 0a 20 20 20 20 44 45 4c 45 54 45  d for.    DELETE
d970: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
d980: 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
d990: 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69  .</ul>..<h3>Opti
d9a0: 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f  onal LIMIT and O
d9b0: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 3c  RDER BY clauses<
d9c0: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51  /h3>..<p>^(If SQ
d9d0: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
d9e0: 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54   with the [SQLIT
d9f0: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
da00: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f  DELETE_LIMIT].co
da10: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
da20: 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  n, then the synt
da30: 61 78 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  ax of the DELETE
da40: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 65 78   statement is.ex
da50: 74 65 6e 64 65 64 20 62 79 20 74 68 65 20 61 64  tended by the ad
da60: 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e  dition of option
da70: 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
da80: 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 3a 29 5e  LIMIT clauses:)^
da90: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
daa0: 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
dab0: 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63  stmt-limited</tc
dac0: 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c  l>..<p>^If a DEL
dad0: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ETE statement ha
dae0: 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
daf0: 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  , the maximum nu
db00: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
db10: 74 0a 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65  t.will be delete
db20: 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76  d is found by ev
db30: 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63  aluating the acc
db40: 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73  ompanying expres
db50: 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67  sion and casting
db60: 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  .it to an intege
db70: 72 20 76 61 6c 75 65 2e 20 5e 49 66 20 74 68 65  r value. ^If the
db80: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 65   result of the e
db90: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4c 49  valuating the LI
dba0: 4d 49 54 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f  MIT clause.canno
dbb0: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
dbc0: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
dbd0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69  integer value, i
dbe0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e  t is an error. ^
dbf0: 41 20 0a 6e 65 67 61 74 69 76 65 20 4c 49 4d 49  A .negative LIMI
dc00: 54 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72  T value is inter
dc10: 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69  preted as "no li
dc20: 6d 69 74 22 2e 20 5e 28 49 66 20 74 68 65 20 44  mit". ^(If the D
dc30: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
dc40: 0a 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46  .also has an OFF
dc50: 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  SET clause, then
dc60: 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79   it is similarly
dc70: 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63   evaluated and c
dc80: 61 73 74 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65  ast to an.intege
dc90: 72 20 76 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20  r value. Again, 
dca0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 69  it is an error i
dcb0: 66 20 74 68 65 20 76 61 6c 75 65 20 63 61 6e 6e  f the value cann
dcc0: 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ot be losslessly
dcd0: 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e  .converted to an
dce0: 20 69 6e 74 65 67 65 72 2e 29 5e 20 5e 49 66 20   integer.)^ ^If 
dcf0: 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53  there is no OFFS
dd00: 45 54 20 63 6c 61 75 73 65 2c 20 6f 72 20 74 68  ET clause, or th
dd10: 65 20 63 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74  e calculated.int
dd20: 65 67 65 72 20 76 61 6c 75 65 20 69 73 20 6e 65  eger value is ne
dd30: 67 61 74 69 76 65 2c 20 74 68 65 20 65 66 66 65  gative, the effe
dd40: 63 74 69 76 65 20 4f 46 46 53 45 54 20 76 61 6c  ctive OFFSET val
dd50: 75 65 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e  ue is zero...<p>
dd60: 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54 45 20  ^(If the DELETE 
dd70: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e  statement has an
dd80: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
dd90: 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
dda0: 74 68 61 74 20 77 6f 75 6c 64 20 0a 62 65 20 64  that would .be d
ddb0: 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
ddc0: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
ddd0: 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f  IT clause are so
dde0: 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  rted according t
ddf0: 6f 20 74 68 65 20 0a 4f 52 44 45 52 20 42 59 2e  o the .ORDER BY.
de00: 20 54 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c   The first <i>M<
de10: 2f 69 3e 20 72 6f 77 73 2c 20 77 68 65 72 65 20  /i> rows, where 
de20: 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20  <i>M</i> is the 
de30: 76 61 6c 75 65 20 66 6f 75 6e 64 20 62 79 0a 65  value found by.e
de40: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4f 46  valuating the OF
de50: 46 53 45 54 20 63 6c 61 75 73 65 20 65 78 70 72  FSET clause expr
de60: 65 73 73 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70  ession, are skip
de70: 70 65 64 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c  ped, and the fol
de80: 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e  lowing .<i>N</i>
de90: 2c 20 77 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e  , where <i>N</i>
dea0: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
deb0: 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65   the LIMIT expre
dec0: 73 73 69 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74  ssion, are delet
ded0: 65 64 2e 29 5e 0a 5e 49 66 20 74 68 65 72 65 20  ed.)^.^If there 
dee0: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 3c 69  are less than <i
def0: 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61  >N</i> rows rema
df00: 69 6e 69 6e 67 20 61 66 74 65 72 20 74 61 6b 69  ining after taki
df10: 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c  ng the OFFSET cl
df20: 61 75 73 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e  ause.into accoun
df30: 74 2c 20 6f 72 20 69 66 20 74 68 65 20 4c 49 4d  t, or if the LIM
df40: 49 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61  IT clause evalua
df50: 74 65 64 20 74 6f 20 61 20 6e 65 67 61 74 69 76  ted to a negativ
df60: 65 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c  e value, then al
df70: 6c 0a 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73  l.remaining rows
df80: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
df90: 70 3e 5e 49 66 20 74 68 65 20 44 45 4c 45 54 45  p>^If the DELETE
dfa0: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e   statement has n
dfb0: 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
dfc0: 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
dfd0: 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 64   that.would be d
dfe0: 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
dff0: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
e000: 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73  IT clause are as
e010: 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72  sembled in an.ar
e020: 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65  bitrary order be
e030: 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68  fore applying th
e040: 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
e050: 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65  ET clauses to de
e060: 74 65 72 6d 69 6e 65 20 0a 74 68 65 20 73 75 62  termine .the sub
e070: 73 65 74 20 74 68 61 74 20 61 72 65 20 61 63 74  set that are act
e080: 75 61 6c 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a  ually deleted...
e090: 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42  <p>^(The ORDER B
e0a0: 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 44 45  Y clause on a DE
e0b0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
e0c0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64  s used only to d
e0d0: 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72  etermine which.r
e0e0: 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20  ows fall within 
e0f0: 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f  the LIMIT. The o
e100: 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
e110: 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 20 69  ws are deleted i
e120: 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20  s arbitrary.and 
e130: 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65  is not influence
e140: 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42  d by the ORDER B
e150: 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63  Y clause.)^..<tc
e160: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72  l>hd_fragment tr
e170: 75 6e 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63  uncateopt {trunc
e180: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
e190: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
e1a0: 54 72 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a  Truncate Optimiz
e1b0: 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ation</h3>..<p>^
e1c0: 57 68 65 6e 20 74 68 65 20 57 48 45 52 45 20 69  When the WHERE i
e1d0: 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61  s omitted from a
e1e0: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
e1f0: 74 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a  t and the table.
e200: 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61  being deleted ha
e210: 73 20 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53  s no triggers,.S
e220: 51 4c 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70  QLite uses an op
e230: 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72  timization to er
e240: 61 73 65 20 74 68 65 20 65 6e 74 69 72 65 20 74  ase the entire t
e250: 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74  able content.wit
e260: 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76  hout having to v
e270: 69 73 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66  isit each row of
e280: 20 74 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76   the table indiv
e290: 69 64 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74  idually..This "t
e2a0: 72 75 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a  runcate" optimiz
e2b0: 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20  ation makes the 
e2c0: 64 65 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20  delete run much 
e2d0: 66 61 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f  faster..Prior to
e2e0: 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e   SQLite [version
e2f0: 20 33 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75   3.6.5], the tru
e300: 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
e310: 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68  on.also meant th
e320: 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  at the [sqlite3_
e330: 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b  changes()] and.[
e340: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
e350: 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61  anges()] interfa
e360: 63 65 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75  ces.and the [cou
e370: 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d  nt_changes pragm
e380: 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75  a].will not actu
e390: 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  ally return the 
e3a0: 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65  number of delete
e3b0: 64 20 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70  d rows.  .That p
e3c0: 72 6f 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20  roblem has been 
e3d0: 66 69 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72  fixed as of [ver
e3e0: 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70  sion 3.6.5]...<p
e3f0: 3e 5e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f  >^The truncate o
e400: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20  ptimization can 
e410: 62 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  be permanently d
e420: 69 73 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20  isabled for all 
e430: 71 75 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d  queries.by recom
e440: 70 69 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69  piling.SQLite wi
e450: 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f  th the [SQLITE_O
e460: 4d 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54  MIT_TRUNCATE_OPT
e470: 49 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69  IMIZATION] compi
e480: 6c 65 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c  le-time switch.<
e490: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e  /p>..<p>The trun
e4a0: 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
e4b0: 6e 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69  n can also be di
e4c0: 73 61 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d  sabled at runtim
e4d0: 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c  e using.the [sql
e4e0: 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69  ite3_set_authori
e4f0: 7a 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65  zer()] interface
e500: 2e 20 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72  .  ^If an author
e510: 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65  izer callback.re
e520: 74 75 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47  turns [SQLITE_IG
e530: 4e 4f 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51  NORE] for an [SQ
e540: 4c 49 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74  LITE_DELETE] act
e550: 69 6f 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74  ion code, then.t
e560: 68 65 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74  he DELETE operat
e570: 69 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64  ion will proceed
e580: 20 62 75 74 20 74 68 65 20 74 72 75 6e 63 61 74   but the truncat
e590: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77  e optimization w
e5a0: 69 6c 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20  ill.be bypassed 
e5b0: 61 6e 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65  and rows will be
e5c0: 20 64 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20   deleted one by 
e5d0: 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  one.</p>..<tcl>.
e5e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e5f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
e630: 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
e640: 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
e650: 20 2a 44 45 54 41 43 48 0a 0a 42 75 62 62 6c 65   *DETACH..Bubble
e660: 44 69 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73  Diagram detach-s
e670: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
e680: 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74  >^This statement
e690: 20 64 65 74 61 63 68 65 73 20 61 6e 20 61 64 64   detaches an add
e6a0: 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  itional database
e6b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76   connection prev
e6c0: 69 6f 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64  iously .attached
e6d0: 20 75 73 69 6e 67 20 74 68 65 20 5b 41 54 54 41   using the [ATTA
e6e0: 43 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  CH] statement.  
e6f0: 0a 5e 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65  .^It is possible
e700: 20 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d   to have the sam
e710: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
e720: 61 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c  attached multipl
e730: 65 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64  e times using .d
e740: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20  ifferent names, 
e750: 61 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e  and detaching on
e760: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
e770: 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76  a file will leav
e780: 65 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e  e the .others in
e790: 74 61 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  tact.</p>..<p>^T
e7a0: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69  his statement wi
e7b0: 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74  ll fail if SQLit
e7c0: 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64  e is in the midd
e7d0: 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74  le of a transact
e7e0: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  ion.</p>...<tcl>
e7f0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
e800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
e840: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e  Section {DROP IN
e850: 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b  DEX} dropindex {
e860: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 42  {DROP INDEX}}..B
e870: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
e880: 70 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c  p-index-stmt 1.<
e890: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
e8a0: 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ROP INDEX statem
e8b0: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69  ent removes an i
e8c0: 6e 64 65 78 20 61 64 64 65 64 0a 77 69 74 68 20  ndex added.with 
e8d0: 74 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45  the [CREATE INDE
e8e0: 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  X] statement.  T
e8f0: 68 65 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70  he index is comp
e900: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
e910: 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54  rom.the disk.  T
e920: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72  he only way to r
e930: 65 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78  ecover the index
e940: 20 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74   is to reenter t
e950: 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b  he.appropriate [
e960: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f  CREATE INDEX] co
e970: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  mmand.</p>..<tcl
e980: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
e990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9d0: 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54  .Section {DROP T
e9e0: 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20  ABLE} droptable 
e9f0: 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a  {{DROP TABLE}}..
ea00: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
ea10: 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a  op-table-stmt 1.
ea20: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
ea30: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
ea40: 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
ea50: 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20  able added with 
ea60: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
ea70: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
ea80: 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
ea90: 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
eaa0: 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70  ame.  ^The dropp
eab0: 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70  ed table is comp
eac0: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
ead0: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
eae0: 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65   .schema and the
eaf0: 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65   disk file.  The
eb00: 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
eb10: 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e  e recovered.  .^
eb20: 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
eb30: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
eb40: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
eb50: 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
eb60: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ted.</p>..<p>^Th
eb70: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58  e optional IF EX
eb80: 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70  ISTS clause supp
eb90: 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72  resses the error
eba0: 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
ebb0: 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74  ally.result if t
ebc0: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
ebd0: 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  t exist.</p>..<p
ebe0: 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
ebf0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
ec00: 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52  re enabled, a DR
ec10: 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
ec20: 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70   performs an.imp
ec30: 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20  licit [DELETE | 
ec40: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
ec50: 74 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64  tbl&gt;] command
ec60: 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67   before removing
ec70: 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20   the.table from 
ec80: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
ec90: 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65  ema. ^Any trigge
eca0: 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  rs attached to t
ecb0: 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f  he table are.dro
ecc0: 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  pped from the da
ecd0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65  tabase schema be
ece0: 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69  fore the implici
ecf0: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
ed00: 74 3b 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78  t;tbl&gt; .is ex
ed10: 65 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20  ecuted, so this 
ed20: 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79  cannot cause any
ed30: 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72   triggers to fir
ed40: 65 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20  e. By contrast, 
ed50: 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c  ^an.implicit DEL
ed60: 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c  ETE FROM &lt;tbl
ed70: 26 67 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20  &gt; does cause 
ed80: 61 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b  any configured.[
ed90: 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
eda0: 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61  ons] to take pla
edb0: 63 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70  ce. .^If the imp
edc0: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
edd0: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78  M &lt;tbl&gt; ex
ede0: 65 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f  ecuted.as part o
edf0: 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  f a DROP TABLE c
ee00: 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20  ommand violates 
ee10: 61 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  any immediate fo
ee20: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
ee30: 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20  aints,.an error 
ee40: 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  is returned and 
ee50: 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  the table is not
ee60: 20 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74   dropped. ^If .t
ee70: 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
ee80: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
ee90: 67 74 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a  gt; causes any .
eea0: 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
eeb0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
eec0: 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c   to be violated,
eed0: 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69   and the violati
eee0: 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20  ons still.exist 
eef0: 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  when the transac
ef00: 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65  tion is committe
ef10: 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  d, an error is r
ef20: 65 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74  eturned at the t
ef30: 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a  ime.of commit...
ef40: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
ef50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef90: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
efa0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
efb0: 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54  trigger {{DROP T
efc0: 52 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65  RIGGER}}..Bubble
efd0: 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69  Diagram drop-tri
efe0: 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  gger-stmt 1.</tc
eff0: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
f000: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
f010: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69  nt removes a tri
f020: 67 67 65 72 20 63 72 65 61 74 65 64 20 62 79 20  gger created by 
f030: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49  the .[CREATE TRI
f040: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
f050: 20 5e 4f 6e 63 65 20 72 65 6d 6f 76 65 64 2c 20   ^Once removed, 
f060: 74 68 65 20 74 72 69 67 67 65 72 20 64 65 66 69  the trigger defi
f070: 6e 69 74 69 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e  nition is no.lon
f080: 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
f090: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
f0a0: 20 28 6f 72 20 73 71 6c 69 74 65 5f 74 65 6d 70   (or sqlite_temp
f0b0: 5f 6d 61 73 74 65 72 29 20 74 61 62 6c 65 20 61  _master) table a
f0c0: 6e 64 20 69 73 0a 6e 6f 74 20 66 69 72 65 64 20  nd is.not fired 
f0d0: 62 79 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e  by any subsequen
f0e0: 74 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  t INSERT, UPDATE
f0f0: 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65   or DELETE state
f100: 6d 65 6e 74 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65  ments...<p>^Note
f110: 20 74 68 61 74 20 74 72 69 67 67 65 72 73 20 61   that triggers a
f120: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
f130: 20 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68   dropped when th
f140: 65 20 61 73 73 6f 63 69 61 74 65 64 20 74 61 62  e associated tab
f150: 6c 65 20 69 73 0a 64 72 6f 70 70 65 64 2e 0a 0a  le is.dropped...
f160: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
f170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1b0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
f1c0: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
f1d0: 77 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a  w {{DROP VIEW}}.
f1e0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  .BubbleDiagram d
f1f0: 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a  rop-view-stmt 1.
f200: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
f210: 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
f220: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69  ent removes a vi
f230: 65 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68  ew created by th
f240: 65 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20  e [CREATE VIEW] 
f250: 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54  .  statement. ^T
f260: 68 65 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  he view definiti
f270: 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72  on is removed fr
f280: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
f290: 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e  schema, but .  n
f2a0: 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e  o actual data in
f2b0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
f2c0: 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d  base tables is m
f2d0: 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54  odified...<p>^(T
f2e0: 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20  he view to drop 
f2f0: 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
f300: 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61   the view-name a
f310: 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 64  nd optional .  d
f320: 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 73 70 65  atabase-name spe
f330: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
f340: 66 20 74 68 65 20 44 52 4f 50 20 56 49 45 57 20  f the DROP VIEW 
f350: 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20  statement. This 
f360: 0a 20 20 72 65 66 65 72 65 6e 63 65 20 69 73 20  .  reference is 
f370: 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74  resolved using t
f380: 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63  he standard proc
f390: 65 64 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63  edure for [objec
f3a0: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e  t resolution].)^
f3b0: 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20  ..<p>.  ^If the 
f3c0: 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20 63  specified view c
f3d0: 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61  annot be found a
f3e0: 6e 64 20 74 68 65 20 49 46 20 45 58 49 53 54 53  nd the IF EXISTS
f3f0: 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a   clause is not .
f400: 20 20 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73    present, it is
f410: 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74   an error. ^If t
f420: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65  he specified vie
f430: 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e  w cannot be foun
f440: 64 20 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58  d and an IF.  EX
f450: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
f460: 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52  resent in the DR
f470: 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
f480: 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74 61 74  t, then the stat
f490: 65 6d 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d  ement.  is a no-
f4a0: 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  op....<tcl>.####
f4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4f0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
f500: 6f 6e 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a  on {Database Obj
f510: 65 63 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74  ect Name Resolut
f520: 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b  ion} {naming} {{
f530: 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f  object resolutio
f540: 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  n}}.</tcl>..<p>.
f550: 20 20 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64    In SQLite, a d
f560: 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28  atabase object (
f570: 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  a table, index, 
f580: 74 72 69 67 67 65 72 20 6f 72 20 76 69 65 77 29  trigger or view)
f590: 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20   is identified. 
f5a0: 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   by the name of 
f5b0: 74 68 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  the object and t
f5c0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
f5d0: 61 74 61 62 61 73 65 20 74 68 61 74 20 69 74 20  atabase that it 
f5e0: 72 65 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44  resides in. .  D
f5f0: 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20  atabase objects 
f600: 6d 61 79 20 72 65 73 69 64 65 20 69 6e 20 74 68  may reside in th
f610: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
f620: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
f630: 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b  se, or in.  an [
f640: 41 54 54 41 43 48 7c 61 74 74 61 63 68 65 64 20  ATTACH|attached 
f650: 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a  database]...<p>.
f660: 20 20 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20    The syntax of 
f670: 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  the [DROP TABLE]
f680: 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20  , [DROP INDEX], 
f690: 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52  [DROP VIEW], [DR
f6a0: 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b  OP TRIGGER],.  [
f6b0: 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52  REINDEX], [ALTER
f6c0: 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79   TABLE] and many
f6d0: 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20   other commands 
f6e0: 61 6c 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75  all permit the u
f6f0: 73 65 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79  ser to.  specify
f700: 20 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65   a database obje
f710: 63 74 20 65 69 74 68 65 72 20 62 79 20 69 74 73  ct either by its
f720: 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20   name alone, or 
f730: 62 79 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  by a combination
f740: 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61   of.  its name a
f750: 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69  nd the name of i
f760: 74 73 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49  ts database. ^(I
f770: 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73  f no database is
f780: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
f790: 72 74 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65  rt.  of the obje
f7a0: 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68  ct reference, th
f7b0: 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63 68  en SQLite search
f7c0: 65 73 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d  es the main, tem
f7d0: 70 20 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68  p and all attach
f7e0: 65 64 0a 20 20 64 61 74 61 62 61 73 65 73 20 66  ed.  databases f
f7f0: 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74  or an object wit
f800: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  h a matching nam
f810: 65 2e 20 54 68 65 20 74 65 6d 70 20 64 61 74 61  e. The temp data
f820: 62 61 73 65 20 69 73 20 73 65 61 72 63 68 65 64  base is searched
f830: 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77  .  first, follow
f840: 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64  ed by the main d
f850: 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65  atabase, followe
f860: 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  d all attached d
f870: 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a  atabases in the.
f880: 20 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65    order that the
f890: 79 20 77 65 72 65 20 61 74 74 61 63 68 65 64 2e  y were attached.
f8a0: 20 54 68 65 20 72 65 66 65 72 65 6e 63 65 20 72   The reference r
f8b0: 65 73 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66  esolves to the f
f8c0: 69 72 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75  irst match.  fou
f8d0: 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c  nd.)^ For exampl
f8e0: 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20  e:..<pre>^(.    
f8f0: 20 20 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65    /* Add a table
f900: 20 6e 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74   named 't1' to t
f910: 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e  he temp, main an
f920: 64 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  d an attached da
f930: 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  tabase */.      
f940: 41 54 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27  ATTACH 'file.db'
f950: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43   AS aux;.      C
f960: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
f970: 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , y);.      CREA
f980: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
f990: 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52  (x, y);.      CR
f9a0: 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74  EATE TABLE aux.t
f9b0: 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20  1(x, y);..      
f9c0: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20  DROP TABLE t1;  
f9d0: 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74         /* Drop t
f9e0: 61 62 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74  able in temp dat
f9f0: 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44  abase */.      D
fa00: 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20  ROP TABLE t1;   
fa10: 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61        /* Drop ta
fa20: 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61  ble in main data
fa30: 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52  base */.      DR
fa40: 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
fa50: 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
fa60: 6c 65 20 69 6e 20 61 75 78 20 64 61 74 61 62 61  le in aux databa
fa70: 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a  se */.)^</pre>..
fa80: 3c 70 3e 0a 20 20 5e 49 66 20 61 20 64 61 74 61  <p>.  ^If a data
fa90: 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73 70 65  base name is spe
faa0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
fab0: 66 20 61 6e 20 6f 62 6a 65 63 74 20 72 65 66 65  f an object refe
fac0: 72 65 6e 63 65 2c 20 69 74 20 6d 75 73 74 20 62  rence, it must b
fad0: 65 0a 20 20 65 69 74 68 65 72 20 22 6d 61 69 6e  e.  either "main
fae0: 22 2c 20 6f 72 20 22 74 65 6d 70 22 20 6f 72 20  ", or "temp" or 
faf0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 61  the name of an a
fb00: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
fb10: 2e 20 5e 4c 69 6b 65 20 6f 74 68 65 72 0a 20 20  . ^Like other.  
fb20: 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72 73 2c  SQL identifiers,
fb30: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 73 20   database names 
fb40: 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69  are case-insensi
fb50: 74 69 76 65 2e 20 5e 49 66 20 61 20 64 61 74 61  tive. ^If a data
fb60: 62 61 73 65 20 6e 61 6d 65 0a 20 20 69 73 20 73  base name.  is s
fb70: 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f  pecified, then o
fb80: 6e 6c 79 20 74 68 65 20 6e 61 6d 65 64 20 64 61  nly the named da
fb90: 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63 68  tabase is search
fba0: 65 64 20 66 6f 72 20 74 68 65 20 6e 61 6d 65 64  ed for the named
fbb0: 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20   object...<p>.  
fbc0: 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65  Most object refe
fbd0: 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20  rences may only 
fbe0: 72 65 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65  resolve to a spe
fbf0: 63 69 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62  cific type of ob
fc00: 6a 65 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d  ject (for.  exam
fc10: 70 6c 65 20 61 20 72 65 66 65 72 65 6e 63 65 20  ple a reference 
fc20: 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
fc30: 61 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61  a DROP TABLE sta
fc40: 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20  tement may only 
fc50: 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74  resolve.  to a t
fc60: 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74  able object, not
fc70: 20 61 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67   an index, trigg
fc80: 65 72 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77  er or view). How
fc90: 65 76 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e  ever in some con
fca0: 74 65 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b  texts .  (e.g. [
fcb0: 52 45 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a  REINDEX]) an obj
fcc0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61  ect reference ma
fcd0: 79 20 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20  y be resolve to 
fce0: 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79  more than one ty
fcf0: 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20  pe.  of object. 
fd00: 5e 57 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20  ^When searching 
fd10: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 73  database schemas
fd20: 20 66 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a   for a named obj
fd30: 65 63 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a  ect, objects of.
fd40: 20 20 74 79 70 65 73 20 74 68 61 74 20 63 61 6e    types that can
fd50: 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e 20 74  not be used in t
fd60: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68  he context of th
fd70: 65 20 72 65 66 65 72 65 6e 63 65 20 61 72 65 20  e reference are 
fd80: 61 6c 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65  always .  ignore
fd90: 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  d...<tcl>.######
fda0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fdb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fdc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fdd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fde0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
fdf0: 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e   EXPLAIN explain
fe00: 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65   EXPLAIN..Bubble
fe10: 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74  Diagram sql-stmt
fe20: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20  .</tcl>..<p>^An 
fe30: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61  SQL statement ca
fe40: 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  n be preceded by
fe50: 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58   the keyword "EX
fe60: 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65  PLAIN" or.by the
fe70: 20 70 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e   phrase "EXPLAIN
fe80: 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e   QUERY PLAN".  ^
fe90: 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74  Either modificat
fea0: 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53  ion causes the.S
feb0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  QL statement to 
fec0: 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72  behave as a quer
fed0: 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20  y and to return 
fee0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
fef0: 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74  t.how the SQL st
ff00: 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61  atement would ha
ff10: 76 65 20 6f 70 65 72 61 74 65 64 20 69 66 20 74  ve operated if t
ff20: 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
ff30: 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64  rd or.phrase had
ff40: 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f   been omitted.</
ff50: 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75  p>..<p>The outpu
ff60: 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61  t from EXPLAIN a
ff70: 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  nd EXPLAIN QUERY
ff80: 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65   PLAN is intende
ff90: 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76  d for.interactiv
ffa0: 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74  e analysis and t
ffb0: 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f  roubleshooting o
ffc0: 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c  nly.  The detail
ffd0: 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74  s of the .output
ffe0: 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a   format are subj
fff0: 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72  ect to change fr
10000 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f  om one release o
10010 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20  f SQLite to the 
10020 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f  next..Applicatio
10030 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73  ns should not us
10040 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50  e EXPLAIN or EXP
10050 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
10060 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63  since.their exac
10070 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 76 61  t behavior is va
10080 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20  riable and only 
10090 70 61 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65  partially docume
100a0 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57  nted.</p>..<p>^W
100b0 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
100c0 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20  keyword appears 
100d0 62 79 20 69 74 73 65 6c 66 20 69 74 20 63 61 75  by itself it cau
100e0 73 65 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ses the statemen
100f0 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  t.to behave as a
10100 20 71 75 65 72 79 20 74 68 61 74 20 72 65 74 75   query that retu
10110 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e 63 65  rns the sequence
10120 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61   of .[virtual ma
10130 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f  chine instructio
10140 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76  ns] it would hav
10150 65 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  e used to execut
10160 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61  e the command ha
10170 64 0a 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  d.the EXPLAIN ke
10180 79 77 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70  yword not been p
10190 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68  resent. ^When th
101a0 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  e EXPLAIN QUERY 
101b0 50 4c 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65  PLAN phrase.appe
101c0 61 72 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65  ars, the stateme
101d0 6e 74 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d  nt returns high-
101e0 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  level informatio
101f0 6e 20 72 65 67 61 72 64 69 6e 67 20 74 68 65 20  n regarding the 
10200 71 75 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20  query.plan that 
10210 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
10220 75 73 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41  used...The EXPLA
10230 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f  IN QUERY PLAN co
10240 6d 6d 61 6e 64 20 69 73 20 64 65 73 63 72 69 62  mmand is describ
10250 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20  ed in .[explain 
10260 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20  query plan|more 
10270 64 65 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c  detail here]...<
10280 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
10290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102d0 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72  ###.Section expr
102e0 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78  ession expr {*ex
102f0 70 72 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73  pression {expres
10300 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 42  sion syntax}}..B
10310 75 62 62 6c 65 44 69 61 67 72 61 6d 20 65 78 70  ubbleDiagram exp
10320 72 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  r 1.BubbleDiagra
10330 6d 20 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 0a  m literal-value.
10340 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
10350 67 6e 65 64 2d 6e 75 6d 62 65 72 0a 42 75 62 62  gned-number.Bubb
10360 6c 65 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d  leDiagram raise-
10370 66 75 6e 63 74 69 6f 6e 0a 3c 2f 74 63 6c 3e 0a  function.</tcl>.
10380 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e  .<p>This section
10390 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
103a0 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20  om the others.  
103b0 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74 69  Most other secti
103c0 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75  ons of.this docu
103d0 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74  ment talks about
103e0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 53 51   a particular SQ
103f0 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73  L command.  This
10400 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f   section does.no
10410 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73  t talk about a s
10420 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e  tandalone comman
10430 64 20 62 75 74 20 61 62 6f 75 74 20 22 65 78 70  d but about "exp
10440 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20  ressions" which 
10450 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e  are .subcomponen
10460 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72  ts of most other
10470 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a   commands.</p>..
10480 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
10490 20 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61   binaryops {bina
104a0 72 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74  ry operators}</t
104b0 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72  cl>.<h3>Operator
104c0 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69  s</h3>.<p>^(SQLi
104d0 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74  te understands t
104e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e  he following bin
104f0 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69  ary operators, i
10500 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67  n order from.hig
10510 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70  hest to lowest p
10520 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a  recedence:</p>..
10530 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10540 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
10550 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a  2c2cf0"><big>||.
10560 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20  *    /    %.+   
10570 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67   -.&lt;&lt;   &g
10580 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20  t;&gt;   &amp;  
10590 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b    |.&lt;    &lt;
105a0 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b  =   &gt;    &gt;
105b0 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20  =.=    ==   !=  
105c0 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69   &lt;&gt;   </bi
105d0 67 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20  g>IS   IS NOT   
105e0 49 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42  IN   LIKE   GLOB
105f0 20 20 20 4d 41 54 43 48 20 20 20 52 45 47 45 58     MATCH   REGEX
10600 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e  P.AND   .OR</fon
10610 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
10620 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53  quote>)^..<p>^(S
10630 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70  upported unary p
10640 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  refix operators 
10650 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a  are these:</p>..
10660 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10670 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
10680 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20  2c2cf0"><big>-  
10690 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c    +    ~    NOT<
106a0 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70  /big></font>.</p
106b0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
106c0 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
106d0 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b  ment collateop {
106e0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
106f0 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  }</tcl>.<p>^The 
10700 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
10710 20 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74   is a unary post
10720 66 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61  fix.operator tha
10730 74 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c  t assigns a [col
10740 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d  lating sequence]
10750 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f   to an expressio
10760 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  n..^The COLLATE 
10770 6f 70 65 72 61 74 6f 72 20 68 61 73 20 61 20 68  operator has a h
10780 69 67 68 65 72 20 70 72 65 63 65 64 65 6e 63 65  igher precedence
10790 20 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67   (binds more tig
107a0 68 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 70  htly) than any.p
107b0 72 65 66 69 78 20 75 6e 61 72 79 20 6f 70 65 72  refix unary oper
107c0 61 74 6f 72 20 6f 72 20 61 6e 79 20 62 69 6e 61  ator or any bina
107d0 72 79 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 54 68  ry operator..^Th
107e0 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
107f0 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 65 20  ence set by the 
10800 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
10810 20 6f 76 65 72 72 69 64 65 73 20 74 68 65 0a 63   overrides the.c
10820 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10830 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  e determined by 
10840 74 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  the COLLATE clau
10850 73 65 20 69 6e 20 61 20 74 61 62 6c 65 0a 5b 63  se in a table.[c
10860 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
10870 5d 2e 0a 53 65 65 20 74 68 65 20 5b 63 6f 6c 6c  ]..See the [coll
10880 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 7c 20  ating sequence| 
10890 64 65 74 61 69 6c 65 64 20 64 69 73 63 75 73 73  detailed discuss
108a0 69 6f 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e 67  ion on collating
108b0 20 73 65 71 75 65 6e 63 65 73 5d 0a 69 6e 20 74   sequences].in t
108c0 68 65 20 5b 64 61 74 61 74 79 70 65 20 7c 20 44  he [datatype | D
108d0 61 74 61 74 79 70 65 20 49 6e 20 53 51 4c 69 74  atatype In SQLit
108e0 65 33 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72  e3] document for
108f0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
10900 72 6d 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c  rmation..</p>..<
10910 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70  tcl>hd_puts ".<p
10920 3e 5e 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72  >^The unary oper
10930 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b  ator [Operator +
10940 5d 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e  ] is a no-op.  ^
10950 49 74 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65  It can be applie
10960 64 0a 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75  d.to strings, nu
10970 6d 62 65 72 73 2c 20 62 6c 6f 62 73 20 6f 72 20  mbers, blobs or 
10980 4e 55 4c 4c 20 61 6e 64 20 69 74 20 61 6c 77 61  NULL and it alwa
10990 79 73 20 72 65 74 75 72 6e 73 20 61 20 72 65 73  ys returns a res
109a0 75 6c 74 0a 77 69 74 68 20 74 68 65 20 73 61 6d  ult.with the sam
109b0 65 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 6f  e value as the o
109c0 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63  perand.</p>"</tc
109d0 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74  l>..<p>Note that
109e0 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 76   there are two v
109f0 61 72 69 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  ariations of the
10a00 20 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20   equals and not 
10a10 65 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73  equals.operators
10a20 2e 20 20 5e 45 71 75 61 6c 73 20 63 61 6e 20 62  .  ^Equals can b
10a30 65 20 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a  e either..<tcl>.
10a40 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74  hd_puts "[Operat
10a50 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74  or =] or [Operat
10a60 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f 6e  or ==]..^The non
10a70 2d 65 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72  -equals operator
10a80 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b   can be either.[
10a90 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20  Operator !=] or 
10aa0 5b 4f 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26  [Operator {&lt;&
10ab0 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70 65  gt;}]..^The [Ope
10ac0 72 61 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74  rator ||] operat
10ad0 6f 72 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e  or is \"concaten
10ae0 61 74 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73  ate\" - it joins
10af0 20 74 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77   together.the tw
10b00 6f 20 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73  o strings of its
10b10 20 6f 70 65 72 61 6e 64 73 2e 0a 5e 54 68 65 20   operands..^The 
10b20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74  operator [Operat
10b30 6f 72 20 25 5d 20 6f 75 74 70 75 74 73 20 74 68  or %] outputs th
10b40 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c  e value of its l
10b50 65 66 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64  eft .operand mod
10b60 75 6c 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70  ulo its right op
10b70 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  erand.</p>..<p>^
10b80 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e  The result of an
10b90 79 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  y binary operato
10ba0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 6e 75  r is either a nu
10bb0 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 72 20 0a  meric value or .
10bc0 4e 55 4c 4c 2c 20 65 78 63 65 70 74 20 66 6f 72  NULL, except for
10bd0 20 74 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c   the [Operator |
10be0 7c 5d 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e  |] concatenation
10bf0 20 6f 70 65 72 61 74 6f 72 20 77 68 69 63 68 20   operator which 
10c00 61 6c 77 61 79 73 20 0a 65 76 61 6c 75 61 74 65  always .evaluate
10c10 73 20 74 6f 20 65 69 74 68 65 72 20 4e 55 4c 4c  s to either NULL
10c20 20 6f 72 20 61 20 74 65 78 74 20 76 61 6c 75 65   or a text value
10c30 2e 3c 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67 6d  .</p>"..hd_fragm
10c40 65 6e 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b 49  ent {isisnot} {I
10c50 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53 20  S operator} {IS 
10c60 4e 4f 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a 68  NOT operator}..h
10c70 64 5f 70 75 74 73 20 22 3c 70 3e 5e 54 68 65 20  d_puts "<p>^The 
10c80 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e  [Operator IS] an
10c90 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20  d [Operator {IS 
10ca0 4e 4f 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73 20  NOT}] operators 
10cb0 77 6f 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72 61  work.like [Opera
10cc0 74 6f 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65 72  tor =] and [Oper
10cd0 61 74 6f 72 20 21 3d 5d 20 65 78 63 65 70 74 20  ator !=] except 
10ce0 77 68 65 6e 20 6f 6e 65 20 6f 72 20 62 6f 74 68  when one or both
10cf0 20 6f 66 20 74 68 65 0a 6f 70 65 72 61 6e 64 73   of the.operands
10d00 20 61 72 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20 74   are NULL. ^In t
10d10 68 69 73 20 63 61 73 65 2c 20 69 66 20 62 6f 74  his case, if bot
10d20 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
10d30 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 49 53  ULL, then the.IS
10d40 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
10d50 74 65 73 20 74 6f 20 31 20 28 74 72 75 65 29 20  tes to 1 (true) 
10d60 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f  and the IS NOT o
10d70 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
10d80 73 0a 74 6f 20 30 20 28 66 61 6c 73 65 29 2e 20  s.to 0 (false). 
10d90 5e 49 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ^If one operand 
10da0 69 73 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65 20  is NULL and the 
10db0 6f 74 68 65 72 20 69 73 20 6e 6f 74 2c 20 74 68  other is not, th
10dc0 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74  en the.IS operat
10dd0 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  or evaluates to 
10de0 30 20 28 66 61 6c 73 65 29 20 61 6e 64 20 74 68  0 (false) and th
10df0 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f  e IS NOT operato
10e00 72 20 69 73 20 31 20 28 74 72 75 65 29 2e 0a 5e  r is 1 (true)..^
10e10 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
10e20 6c 65 20 66 6f 72 20 61 6e 20 49 53 20 6f 72 20  le for an IS or 
10e30 49 53 20 4e 4f 54 20 65 78 70 72 65 73 73 69 6f  IS NOT expressio
10e40 6e 20 74 6f 20 65 76 61 6c 75 61 74 65 20 74 6f  n to evaluate to
10e50 20 4e 55 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f 72   NULL..^Operator
10e60 73 20 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20  s [Operator IS] 
10e70 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49  and [Operator {I
10e80 53 20 4e 4f 54 7d 5d 20 68 61 76 65 20 74 68 65  S NOT}] have the
10e90 20 73 61 6d 65 20 0a 70 72 65 63 65 64 65 6e 63   same .precedenc
10ea0 65 20 61 73 20 5b 4f 70 65 72 61 74 6f 72 20 3d  e as [Operator =
10eb0 5d 2e 22 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ]."..<tcl>hd_fra
10ec0 67 6d 65 6e 74 20 6c 69 74 76 61 6c 75 65 20 7b  gment litvalue {
10ed0 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 7d 3c 2f  literal value}</
10ee0 74 63 6c 3e 0a 3c 68 33 3e 4c 69 74 65 72 61 6c  tcl>.<h3>Literal
10ef0 20 56 61 6c 75 65 73 3c 2f 68 33 3e 0a 3c 70 3e   Values</h3>.<p>
10f00 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75  .^A literal valu
10f10 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  e is a constant 
10f20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 5e 4c  of some kind..^L
10f30 69 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61  iteral values ma
10f40 79 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66  y be integers, f
10f50 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
10f60 6d 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a  mbers, strings,.
10f70 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e  BLOBs, or NULLs.
10f80 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e  </p>..<p>The syn
10f90 74 61 78 20 66 6f 72 20 69 6e 74 65 67 65 72 20  tax for integer 
10fa0 61 6e 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  and floating poi
10fb0 6e 74 20 6c 69 74 65 72 61 6c 73 20 28 63 6f 6c  nt literals (col
10fc0 6c 65 63 74 69 76 65 6c 79 0a 22 6e 75 6d 65 72  lectively."numer
10fd0 69 63 20 6c 69 74 65 72 61 6c 73 22 29 20 69 73  ic literals") is
10fe0 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f   shown by the fo
10ff0 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a  llowing diagram:
11000 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
11010 65 44 69 61 67 72 61 6d 20 6e 75 6d 65 72 69 63  eDiagram numeric
11020 2d 6c 69 74 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a  -literal</tcl>..
11030 3c 70 3e 0a 5e 28 49 66 20 61 20 6e 75 6d 65 72  <p>.^(If a numer
11040 69 63 20 6c 69 74 65 72 61 6c 20 68 61 73 20 61  ic literal has a
11050 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 6f   decimal point o
11060 72 20 61 6e 20 65 78 70 6f 6e 65 6e 74 69 61 74  r an exponentiat
11070 69 6f 6e 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e  ion.clause, then
11080 20 69 74 20 69 73 20 61 20 66 6c 6f 61 74 69 6e   it is a floatin
11090 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 2e  g point literal.
110a0 20 20 4f 74 68 65 72 77 69 73 65 20 69 73 20 69    Otherwise is i
110b0 74 20 69 73 20 61 6e 20 0a 69 6e 74 65 67 65 72  t is an .integer
110c0 20 6c 69 74 65 72 61 6c 2e 29 5e 20 20 5e 54 68   literal.)^  ^Th
110d0 65 20 22 45 22 20 63 68 61 72 61 63 74 65 72 20  e "E" character 
110e0 74 68 61 74 20 62 65 67 69 6e 73 20 74 68 65 20  that begins the 
110f0 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63  exponentiation.c
11100 6c 61 75 73 65 20 6f 66 20 61 20 66 6c 6f 61 74  lause of a float
11110 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
11120 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  l can be either 
11130 75 70 70 65 72 20 6f 72 20 6c 6f 77 65 72 20 63  upper or lower c
11140 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63  ase..^(The "." c
11150 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77 61  haracter is alwa
11160 79 73 20 75 73 65 64 20 0a 61 73 20 74 68 65 20  ys used .as the 
11170 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76  decimal point ev
11180 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65  en if the locale
11190 20 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69   setting specifi
111a0 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20  es "," for.this 
111b0 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f  role - the use o
111c0 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65  f "," for the de
111d0 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c  cimal point woul
111e0 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74  d result in.synt
111f0 61 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e  actic ambiguity.
11200 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 41 20 73  )^</p>..<p> ^A s
11210 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69  tring constant i
11220 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c  s formed by encl
11230 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67  osing the.string
11240 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
11250 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c  s (').  ^A singl
11260 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74  e quote within t
11270 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65  he string can.be
11280 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74   encoded by putt
11290 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71  ing two single q
112a0 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d  uotes in a row -
112b0 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43   as in Pascal..C
112c0 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73 20 75  -style escapes u
112d0 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61  sing the backsla
112e0 73 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65  sh character are
112f0 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62   not supported b
11300 65 63 61 75 73 65 0a 74 68 65 79 20 61 72 65 20  ecause.they are 
11310 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
11320 2e 0a 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73  ..^BLOB literals
11330 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69 74 65   are string lite
11340 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20  rals containing 
11350 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61 74 61  hexadecimal data
11360 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20 62 79   and.preceded by
11370 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20 6f 72   a single "x" or
11380 20 22 58 22 20 63 68 61 72 61 63 74 65 72 2e 20   "X" character. 
11390 20 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65 3a 3c   ^(For example:<
113a0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
113b0 3e 3c 70 72 65 3e 0a 58 27 35 33 35 31 34 43 36  ><pre>.X'53514C6
113c0 39 37 34 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f 62  97465'.</pre></b
113d0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
113e0 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c  >.^A literal val
113f0 75 65 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74  ue can also be t
11400 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e  he token "NULL".
11410 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
11420 72 61 67 6d 65 6e 74 20 76 61 72 70 61 72 61 6d  ragment varparam
11430 20 70 61 72 61 6d 65 74 65 72 20 70 61 72 61 6d   parameter param
11440 65 74 65 72 73 20 7b 62 6f 75 6e 64 20 70 61 72  eters {bound par
11450 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20 70  ameter} {bound p
11460 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c 3e  arameters}</tcl>
11470 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65 72 73 3c  .<h3>Parameters<
11480 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69  /h3>.<p>.A "vari
11490 61 62 6c 65 22 20 6f 72 20 22 70 61 72 61 6d 65  able" or "parame
114a0 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69  ter" token.speci
114b0 66 69 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64  fies a placehold
114c0 65 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  er in the expres
114d0 73 69 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c 75  sion for a .valu
114e0 65 20 74 68 61 74 20 69 73 20 66 69 6c 6c 65 64  e that is filled
114f0 20 69 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75   in at runtime u
11500 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65  sing the.[sqlite
11510 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20  3_bind_blob() | 
11520 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20  sqlite3_bind()] 
11530 66 61 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20  family of C/C++ 
11540 69 6e 74 65 72 66 61 63 65 73 2e 0a 50 61 72 61  interfaces..Para
11550 6d 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20  meters can take 
11560 73 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c  several forms:.<
11570 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
11580 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c  >.<table>.<tr>.<
11590 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
115a0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
115b0 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e  >?</b><i>NNN</i>
115c0 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
115d0 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28  20"></td>.<td>^(
115e0 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  A question mark 
115f0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75  followed by a nu
11600 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20  mber <i>NNN</i> 
11610 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72  holds a spot for
11620 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61   the.NNN-th para
11630 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74  meter.  NNN must
11640 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
11650 64 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  d [SQLITE_MAX_VA
11660 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29  RIABLE_NUMBER].)
11670 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  ^.</td>.</tr>.<t
11680 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
11690 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
116a0 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c  "><b>?</b></td><
116b0 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
116c0 74 64 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73 74  td>.<td>^A quest
116d0 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74 20 69 73  ion mark that is
116e0 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79   not followed by
116f0 20 61 20 6e 75 6d 62 65 72 20 63 72 65 61 74 65   a number create
11700 73 20 61 20 70 61 72 61 6d 65 74 65 72 0a 77 69  s a parameter.wi
11710 74 68 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65 20  th a number one 
11720 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
11730 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65 74   largest paramet
11740 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64  er number alread
11750 79 20 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66 20  y assigned..^If 
11760 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70  this means the p
11770 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
11780 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a  is greater than.
11790 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49  [SQLITE_MAX_VARI
117a0 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74  ABLE_NUMBER], it
117b0 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 2f   is an error..</
117c0 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
117d0 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
117e0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
117f0 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >:</b><i>AAAA</i
11800 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
11810 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
11820 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64  A colon followed
11830 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65   by an identifie
11840 72 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73  r name holds a s
11850 70 6f 74 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69  pot for a .[sqli
11860 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
11870 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61  er_name|named pa
11880 72 61 6d 65 74 65 72 5d 20 77 69 74 68 20 74 68  rameter] with th
11890 65 20 6e 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a  e name :AAAA.  .
118a0 5e 28 4e 61 6d 65 64 20 70 61 72 61 6d 65 74 65  ^(Named paramete
118b0 72 73 20 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62  rs are also numb
118c0 65 72 65 64 2e 20 54 68 65 20 6e 75 6d 62 65 72  ered. The number
118d0 20 61 73 73 69 67 6e 65 64 20 69 73 20 6f 6e 65   assigned is one
118e0 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 74 68   greater than.th
118f0 65 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65  e largest parame
11900 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61  ter number alrea
11910 64 79 20 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e  dy assigned.)^ ^
11920 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68  If this means th
11930 65 20 70 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c  e parameter.woul
11940 64 20 62 65 20 61 73 73 69 67 6e 65 64 20 61 20  d be assigned a 
11950 6e 75 6d 62 65 72 20 67 72 65 61 74 65 72 20 74  number greater t
11960 68 61 6e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  han [SQLITE_MAX_
11970 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
11980 2c 20 69 74 20 69 73 0a 61 6e 20 65 72 72 6f 72  , it is.an error
11990 2e 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  . To avoid confu
119a0 73 69 6f 6e 2c 20 69 74 20 69 73 20 62 65 73 74  sion, it is best
119b0 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67   to avoid mixing
119c0 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65   named and numbe
119d0 72 65 64 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c  red.parameters.<
119e0 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
119f0 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
11a00 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
11a10 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>@</b><i>AAAA</
11a20 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
11a30 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
11a40 5e 41 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f  ^An "at" sign wo
11a50 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
11a60 20 61 20 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74   a colon, except
11a70 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 20 6f   that the name o
11a80 66 0a 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f.the parameter 
11a90 63 72 65 61 74 65 64 20 69 73 20 40 41 41 41 41  created is @AAAA
11aa0 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  .</td>.</tr>.<tr
11ab0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
11ac0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
11ad0 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41  ><b>$</b><i>AAAA
11ae0 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </i></td><td wid
11af0 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
11b00 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e  d>^A dollar-sign
11b10 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
11b20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20  identifier name 
11b30 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f  also holds a spo
11b40 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61  t for a named.pa
11b50 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68 65  rameter with the
11b60 20 6e 61 6d 65 20 24 41 41 41 41 2e 20 20 5e 28   name $AAAA.  ^(
11b70 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e  The identifier n
11b80 61 6d 65 20 69 6e 20 74 68 69 73 20 63 61 73 65  ame in this case
11b90 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65   can include.one
11ba0 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72 72 65   or more occurre
11bb0 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64  nces of "::" and
11bc0 20 61 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73   a suffix enclos
11bd0 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f  ed in "(...)" co
11be0 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78  ntaining.any tex
11bf0 74 20 61 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69  t at all.)^  Thi
11c00 73 20 73 79 6e 74 61 78 20 69 73 20 74 68 65 20  s syntax is the 
11c10 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62  form of a variab
11c20 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b  le name in the.[
11c30 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74  http://www.tcl.t
11c40 6b 2f 20 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d  k/ | Tcl program
11c50 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20  ming language]. 
11c60 20 54 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66   The presence.of
11c70 20 74 68 69 73 20 73 79 6e 74 61 78 20 72 65 73   this syntax res
11c80 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61  ults from the fa
11c90 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 69  ct that SQLite i
11ca0 73 20 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c  s really a .[Tcl
11cb0 20 65 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74   extension] that
11cc0 20 68 61 73 20 65 73 63 61 70 65 64 20 69 6e 74   has escaped int
11cd0 6f 20 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e  o the wild.</td>
11ce0 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
11cf0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
11d00 70 3e 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68  p>^Parameters th
11d10 61 74 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67  at are not assig
11d20 6e 65 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67  ned values using
11d30 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  .[sqlite3_bind_b
11d40 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f  lob() | sqlite3_
11d50 62 69 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61  bind()] are trea
11d60 74 65 64 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e  ted.as NULL.</p>
11d70 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
11d80 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  m parameter numb
11d90 65 72 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d  er is set at com
11da0 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65  pile-time by.the
11db0 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
11dc0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61  IABLE_NUMBER] ma
11dd0 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76  cro.  ^(An indiv
11de0 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20  idual [database 
11df0 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 0a 44 20 63  connections].D c
11e00 61 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d 61  an reduce its ma
11e10 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20  ximum parameter 
11e20 6e 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68 65  number below the
11e30 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61   compile-time ma
11e40 78 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65 20  ximum.using the 
11e50 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28  [sqlite3_limit](
11e60 44 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  D, [SQLITE_LIMIT
11e70 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
11e80 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  ],...) interface
11e90 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  .)^.</p>..<tcl>h
11ea0 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20  d_fragment like 
11eb0 4c 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c  LIKE ESCAPE</tcl
11ec0 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 20 61  >.<h3>The LIKE a
11ed0 6e 64 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72  nd GLOB operator
11ee0 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c  s</h3>.<p>^The L
11ef0 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65  IKE operator doe
11f00 73 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63  s a pattern matc
11f10 68 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  hing comparison.
11f20 20 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f   ^The operand.to
11f30 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68   the right of th
11f40 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
11f50 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74  contains the pat
11f60 74 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66  tern and the lef
11f70 74 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63  t hand.operand c
11f80 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72 69  ontains the stri
11f90 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69  ng to match agai
11fa0 6e 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e  nst the pattern.
11fb0 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22  ..<tcl>hd_puts "
11fc0 5e 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f  ^A percent symbo
11fd0 6c 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65  l (\"%\") in the
11fe0 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61   LIKE pattern ma
11ff0 74 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e  tches any.sequen
12000 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f  ce of zero or mo
12010 72 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  re characters in
12020 20 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41   the string.  ^A
12030 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22  n underscore.(\"
12040 5f 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45  _\") in the LIKE
12050 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73   pattern matches
12060 20 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72   any single char
12070 61 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72  acter in the.str
12080 69 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65  ing.  ^(Any othe
12090 72 20 63 68 61 72 61 63 74 65 72 20 6d 61 74 63  r character matc
120a0 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74  hes itself or it
120b0 73 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61  s lower/upper ca
120c0 73 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69  se.equivalent (i
120d0 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69  .e. case-insensi
120e0 74 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29  tive matching).)
120f0 5e 20 20 28 41 20 62 75 67 3a 20 5e 53 51 4c 69  ^  (A bug: ^SQLi
12100 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61  te only.understa
12110 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20  nds upper/lower 
12120 63 61 73 65 20 66 6f 72 20 41 53 43 49 49 20 63  case for ASCII c
12130 68 61 72 61 63 74 65 72 73 20 62 79 20 64 65 66  haracters by def
12140 61 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45  ault.  ^The.LIKE
12150 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73   operator is cas
12160 65 20 73 65 6e 73 69 74 69 76 65 20 62 79 20 64  e sensitive by d
12170 65 66 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f  efault for unico
12180 64 65 20 63 68 61 72 61 63 74 65 72 73 20 74 68  de characters th
12190 61 74 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68  at are.beyond th
121a0 65 20 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20  e ASCII range.  
121b0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68  For example,.^th
121c0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e  e expression <b>
121d0 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  'a'&nbsp;LIKE&nb
121e0 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52  sp;'A'</b>.is TR
121f0 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69  UE but <b>'&aeli
12200 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  g;'&nbsp;LIKE&nb
12210 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e  sp;'&AElig;'</b>
12220 20 69 73 20 46 41 4c 53 45 2e 29 3c 70 3e 22 3c   is FALSE.)<p>"<
12230 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  /tcl>..<p>^If th
12240 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50  e optional ESCAP
12250 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  E clause is pres
12260 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78  ent, then the ex
12270 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69  pression.followi
12280 6e 67 20 74 68 65 20 45 53 43 41 50 45 20 6b 65  ng the ESCAPE ke
12290 79 77 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75  yword must evalu
122a0 61 74 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20  ate to a string 
122b0 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20  consisting of.a 
122c0 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
122d0 2e 20 5e 54 68 69 73 20 63 68 61 72 61 63 74 65  . ^This characte
122e0 72 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e  r may be used in
122f0 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72   the LIKE patter
12300 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74  n.to include lit
12310 65 72 61 6c 20 70 65 72 63 65 6e 74 20 6f 72 20  eral percent or 
12320 75 6e 64 65 72 73 63 6f 72 65 20 63 68 61 72 61  underscore chara
12330 63 74 65 72 73 2e 20 5e 54 68 65 20 65 73 63 61  cters. ^The esca
12340 70 65 0a 63 68 61 72 61 63 74 65 72 20 66 6f 6c  pe.character fol
12350 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72 63 65  lowed by a perce
12360 6e 74 20 73 79 6d 62 6f 6c 20 28 25 29 2c 20 75  nt symbol (%), u
12370 6e 64 65 72 73 63 6f 72 65 20 28 5f 29 2c 20 6f  nderscore (_), o
12380 72 20 61 20 73 65 63 6f 6e 64 0a 69 6e 73 74 61  r a second.insta
12390 6e 63 65 20 6f 66 20 74 68 65 20 65 73 63 61 70  nce of the escap
123a0 65 20 63 68 61 72 61 63 74 65 72 20 69 74 73 65  e character itse
123b0 6c 66 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74  lf matches a.lit
123c0 65 72 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d  eral percent sym
123d0 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 2c  bol, underscore,
123e0 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 65 73 63   or a single esc
123f0 61 70 65 20 63 68 61 72 61 63 74 65 72 2c 0a 72  ape character,.r
12400 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70  espectively...<p
12410 3e 5e 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45  >^The infix LIKE
12420 20 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70   operator is imp
12430 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c  lemented by call
12440 69 6e 67 20 74 68 65 0a 61 70 70 6c 69 63 61 74  ing the.applicat
12450 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20  ion-defined SQL 
12460 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28  functions [like(
12470 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69  <i>Y</i>,<i>X</i
12480 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e  >)] or.[like(<i>
12490 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c  Y</i>,<i>X</i>,<
124a0 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f  i>Z</i>)]</a>.</
124b0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45  p>..<p>^The LIKE
124c0 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65   operator can be
124d0 20 6d 61 64 65 20 63 61 73 65 20 73 65 6e 73 69   made case sensi
124e0 74 69 76 65 20 75 73 69 6e 67 20 74 68 65 0a 5b  tive using the.[
124f0 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c  case_sensitive_l
12500 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e  ike pragma].</p>
12510 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
12520 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63  nt glob GLOB</tc
12530 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20  l>.<p>^The GLOB 
12540 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69  operator is simi
12550 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20  lar to LIKE but 
12560 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69  uses the Unix.fi
12570 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74  le globbing synt
12580 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63  ax for its wildc
12590 61 72 64 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c  ards.  ^Also, GL
125a0 4f 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69  OB is case.sensi
125b0 74 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b  tive, unlike LIK
125c0 45 2e 20 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61  E.  ^Both GLOB a
125d0 6e 64 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70  nd LIKE may be p
125e0 72 65 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e  receded by.the N
125f0 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e  OT keyword to in
12600 76 65 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f  vert the sense o
12610 66 20 74 68 65 20 74 65 73 74 2e 20 20 5e 54 68  f the test.  ^Th
12620 65 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70  e infix GLOB .op
12630 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d  erator is implem
12640 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
12650 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67   the function.[g
12660 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  lob(<i>Y</i>,<i>
12670 58 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20  X</i>)] and can 
12680 62 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 6f  be modified by o
12690 76 65 72 72 69 64 69 6e 67 0a 74 68 61 74 20 66  verriding.that f
126a0 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  unction.</p>..<t
126b0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
126c0 65 67 65 78 70 20 52 45 47 45 58 50 3c 2f 74 63  egexp REGEXP</tc
126d0 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52 45 47 45 58  l>.<p>^The REGEX
126e0 50 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  P operator is a 
126f0 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66  special syntax f
12700 6f 72 20 74 68 65 20 72 65 67 65 78 70 28 29 0a  or the regexp().
12710 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20  user function.  
12720 5e 4e 6f 20 72 65 67 65 78 70 28 29 20 75 73 65  ^No regexp() use
12730 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  r function is de
12740 66 69 6e 65 64 20 62 79 20 64 65 66 61 75 6c 74  fined by default
12750 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66 20 74  .and so use of t
12760 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74  he REGEXP operat
12770 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79  or will normally
12780 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72   result in an.er
12790 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20 5e 49  ror message.  ^I
127a0 66 20 61 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e  f a [application
127b0 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e  -defined SQL fun
127c0 63 74 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65  ction] named "re
127d0 67 65 78 70 22 0a 69 73 20 61 64 64 65 64 20 61  gexp".is added a
127e0 74 20 72 75 6e 2d 74 69 6d 65 2c 20 74 68 61 74  t run-time, that
127f0 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62   function will b
12800 65 20 63 61 6c 6c 65 64 20 69 6e 20 6f 72 64 65  e called in orde
12810 72 0a 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  r.to implement t
12820 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74  he REGEXP operat
12830 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  or.</p>..<tcl>hd
12840 5f 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20  _fragment match 
12850 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  MATCH</tcl>.<p>^
12860 54 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74  The MATCH operat
12870 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  or is a special 
12880 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d  syntax for the m
12890 61 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69  atch().applicati
128a0 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  on-defined funct
128b0 69 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ion.  ^The defau
128c0 6c 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74  lt match() funct
128d0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
128e0 6f 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63  on.raises an exc
128f0 65 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f  eption and is no
12900 74 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20  t really useful 
12910 66 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42  for anything..^B
12920 75 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61  ut extensions ca
12930 6e 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d  n override the m
12940 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  atch() function 
12950 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75  with more.helpfu
12960 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74  l logic.</p>..<t
12970 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
12980 65 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f  etween BETWEEN</
12990 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54  tcl>.<h3>The BET
129a0 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68  WEEN operator</h
129b0 33 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57  3>.<p>^(The BETW
129c0 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20  EEN operator is 
129d0 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61  logically equiva
129e0 6c 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f  lent to a pair o
129f0 66 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22  f comparisons.."
12a00 3c 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57  <i>x</i> <b>BETW
12a10 45 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e  EEN</b> <i>y</i>
12a20 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a   <b>AND</b> <i>z
12a30 3c 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61  </i>" is .equiva
12a40 6c 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f  lent to ."<i>x</
12a50 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69  i><b>&gt;=</b><i
12a60 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62  >y</i> <b>AND</b
12a70 3e 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74  > <i>x</i><b>&lt
12a80 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20  ;=</b><i>z</i>" 
12a90 65 78 63 65 70 74 0a 74 68 61 74 20 77 69 74 68  except.that with
12aa0 20 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69   BETWEEN, the <i
12ab0 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f  >x</i> expressio
12ac0 6e 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61  n is only evalua
12ad0 74 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65  ted once.)^.^The
12ae0 20 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74   precedence of t
12af0 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
12b00 74 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20  tor is the same 
12b10 61 73 20 74 68 65 20 70 72 65 63 65 64 65 6e 63  as the precedenc
12b20 65 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c  e.as operators <
12b30 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e  b>==</b> and <b>
12b40 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49  !=</b> and <b>LI
12b50 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70  KE</b> and group
12b60 73 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  s left to right.
12b70 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
12b80 6e 74 20 63 61 73 65 20 7b 43 41 53 45 20 65 78  nt case {CASE ex
12b90 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  pression}</tcl>.
12ba0 3c 68 33 3e 54 68 65 20 43 41 53 45 20 65 78 70  <h3>The CASE exp
12bb0 72 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e  ression</h3>.<p>
12bc0 41 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  A CASE expressio
12bd0 6e 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20  n serves a role 
12be0 73 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48  similar to IF-TH
12bf0 45 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72  EN-ELSE in other
12c00 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e  .programming lan
12c10 67 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68  guages.  ..<p>Th
12c20 65 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65  e optional expre
12c30 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72  ssion that occur
12c40 73 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  s in between the
12c50 20 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e   CASE keyword an
12c60 64 20 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e  d the.first WHEN
12c70 20 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c   keyword is call
12c80 65 64 20 74 68 65 20 22 62 61 73 65 22 20 65 78  ed the "base" ex
12c90 70 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65  pression. ^There
12ca0 20 61 72 65 20 74 77 6f 20 62 61 73 69 63 20 66   are two basic f
12cb0 6f 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45  orms.of the CASE
12cc0 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f   expression: tho
12cd0 73 65 20 77 69 74 68 20 61 20 62 61 73 65 20 65  se with a base e
12ce0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
12cf0 6f 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70  ose without...<p
12d00 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68  >^In a CASE with
12d10 6f 75 74 20 61 20 62 61 73 65 20 65 78 70 72 65  out a base expre
12d20 73 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e  ssion, each WHEN
12d30 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
12d40 76 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65  valuated.and the
12d50 20 72 65 73 75 6c 74 20 74 72 65 61 74 65 64 20   result treated 
12d60 61 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74  as a boolean, st
12d70 61 72 74 69 6e 67 20 77 69 74 68 20 74 68 65 20  arting with the 
12d80 6c 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e  leftmost and con
12d90 74 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72  tinuing.to the r
12da0 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c  ight. ^The resul
12db0 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  t of the CASE ex
12dc0 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
12dd0 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68  evaluation of th
12de0 65 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  e THEN.expressio
12df0 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  n that correspon
12e00 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ds to the first 
12e10 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
12e20 74 68 61 74 20 65 76 61 6c 75 61 74 65 73 20 74  that evaluates t
12e30 6f 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20  o.true. ^Or, if 
12e40 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
12e50 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61   expressions eva
12e60 6c 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74  luate to true, t
12e70 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61  he result of.eva
12e80 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45  luating the ELSE
12e90 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20   expression, if 
12ea0 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69  any. ^If there i
12eb0 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73  s no ELSE expres
12ec0 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66  sion and.none of
12ed0 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73   the WHEN expres
12ee0 73 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20  sions are true, 
12ef0 74 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c  then the overall
12f00 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
12f10 0a 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73  ..<p>^A NULL res
12f20 75 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ult is considere
12f30 64 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76  d untrue when ev
12f40 61 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65  aluating WHEN te
12f50 72 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43  rms...<p>^In a C
12f60 41 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20  ASE with a base 
12f70 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
12f80 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
12f90 69 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73  is evaluated jus
12fa0 74 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72  t.once and the r
12fb0 65 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65  esult is compare
12fc0 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 65 76  d against the ev
12fd0 61 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68  aluation of each
12fe0 20 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f   WHEN .expressio
12ff0 6e 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  n from left to r
13000 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c  ight. ^The resul
13010 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  t of the CASE ex
13020 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
13030 0a 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74  .evaluation of t
13040 68 65 20 54 48 45 4e 20 65 78 70 72 65 73 73 69  he THEN expressi
13050 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  on that correspo
13060 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nds to the first
13070 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   WHEN.expression
13080 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 63   for which the c
13090 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
130a0 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20  e. ^Or, if none 
130b0 6f 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72  of the WHEN.expr
130c0 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
130d0 20 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61   to a value equa
130e0 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78  l to the base ex
130f0 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65  pression, the re
13100 73 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69  sult.of evaluati
13110 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72  ng the ELSE expr
13120 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20  ession, if any. 
13130 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
13140 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
13150 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and.none of the 
13160 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
13170 20 70 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c   produce a resul
13180 74 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62  t equal to the b
13190 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a  ase expression,.
131a0 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75  the overall resu
131b0 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  lt is NULL...<p>
131c0 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20  ^When comparing 
131d0 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  a base expressio
131e0 6e 20 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e  n against a WHEN
131f0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65   expression, the
13200 20 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20   same.collating 
13210 73 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69  sequence, affini
13220 74 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e  ty, and NULL-han
13230 64 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c  dling rules appl
13240 79 20 61 73 20 69 66 20 74 68 65 0a 62 61 73 65  y as if the.base
13250 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
13260 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
13270 61 72 65 20 72 65 73 70 65 63 74 69 76 65 6c 79  are respectively
13280 20 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72   the left- and.r
13290 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e  ight-hand operan
132a0 64 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62  ds of an <big><b
132b0 3e 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65  >=</b></big> ope
132c0 72 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74  rator.</p> ^If t
132d0 68 65 20 62 61 73 65 20 0a 65 78 70 72 65 73 73  he base .express
132e0 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  ion is NULL then
132f0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
13300 68 65 20 43 41 53 45 20 69 73 20 61 6c 77 61 79  he CASE is alway
13310 73 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66  s the result .of
13320 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
13330 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
13340 69 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72  if it exists, or
13350 20 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73   NULL if it does
13360 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20   not...<p>^Both 
13370 66 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53  forms of the CAS
13380 45 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65  E expression use
13390 20 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d   lazy, or short-
133a0 63 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61  circuit, .evalua
133b0 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  tion...<p>^(The 
133c0 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20  only difference 
133d0 62 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c  between the foll
133e0 6f 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65  owing two CASE e
133f0 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68  xpressions is th
13400 61 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e  at .the <i>x</i>
13410 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
13420 76 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79  valuated exactly
13430 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72   once in the fir
13440 73 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a  st example but .
13450 6d 69 67 68 74 20 62 65 20 65 76 61 6c 75 61 74  might be evaluat
13460 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65  ed multiple time
13470 73 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a  s in the second:
13480 0a 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e  ..<ul><pre>.<li>
13490 43 41 53 45 20 78 20 57 48 45 4e 20 77 31 20 54  CASE x WHEN w1 T
134a0 48 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54  HEN r1 WHEN w2 T
134b0 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45  HEN r2 ELSE r3 E
134c0 4e 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e  ND.<li>CASE WHEN
134d0 20 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48   x=w1 THEN r1 WH
134e0 45 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20  EN x=w2 THEN r2 
134f0 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72  ELSE r3 END.</pr
13500 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c  e></ul>)^...<tcl
13510 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f  >hd_fragment in_
13520 6f 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d  op {IN operator}
13530 20 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f   {NOT IN operato
13540 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  r}</tcl>.<h3>The
13550 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f   IN and NOT IN o
13560 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70  perators</h3>.<p
13570 3e 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54  >^The IN and NOT
13580 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61   IN operators ta
13590 6b 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c  ke a single scal
135a0 61 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68  ar operand on th
135b0 65 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63  e.left and a vec
135c0 74 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74  tor operand on t
135d0 68 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20  he right.formed 
135e0 62 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c  by an explicit l
135f0 69 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d  ist of zero or m
13600 6f 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62  ore scalars or b
13610 79 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71  y a .single subq
13620 75 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20  uery..^When the 
13630 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66  right operand of
13640 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
13650 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
13660 75 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62  ubquery, the.sub
13670 71 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20  query must have 
13680 61 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20  a single result 
13690 63 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68  column..^When th
136a0 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  e right operand 
136b0 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c  is an empty set,
136c0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49   the result of I
136d0 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74  N is false and t
136e0 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54  he.result of NOT
136f0 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67   IN is true, reg
13700 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c  ardless of the l
13710 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20  eft operand and 
13720 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74  even if the.left
13730 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
13740 2e 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f  ..^(The result o
13750 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
13760 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65  N operator is de
13770 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
13780 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78  following.matrix
13790 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62  :..<center>.<tab
137a0 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  le border=1>.<tr
137b0 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61  >.<th>Left opera
137c0 6e 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c  nd <br>is NULL.<
137d0 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64  th>Right operand
137e0 20 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55   <br>contains NU
137f0 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65  LL.<th>Right ope
13800 72 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65  rand <br>is an e
13810 6d 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66  mpty set.<th>Lef
13820 74 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20  t operand found 
13830 3c 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74  <br>within right
13840 20 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73   operand.<th>Res
13850 75 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70  ult of <br>IN op
13860 65 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c  erator.<th>Resul
13870 74 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20  t of <br>NOT IN 
13880 6f 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74  operator.<tr>.<t
13890 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
138a0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
138b0 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
138c0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
138d0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
138e0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
138f0 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
13900 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13910 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20  ">true.<tr>.<td 
13920 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64  align="center">d
13930 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c  oes not matter.<
13940 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13950 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13960 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
13970 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13980 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13990 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61  ter">false.<td a
139a0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72  lign="center">tr
139b0 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  ue.<tr>.<td alig
139c0 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
139d0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
139e0 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
139f0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13a00 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
13a10 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
13a20 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13a30 3e 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d  >true.<td align=
13a40 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
13a50 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
13a60 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
13a70 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
13a80 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13a90 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
13aa0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
13ab0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13ac0 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  NULL.<td align="
13ad0 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72  center">NULL.<tr
13ae0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
13af0 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69  ter">yes.<td ali
13b00 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73  gn="center">does
13b10 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20   not matter.<td 
13b20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13b30 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13b40 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
13b50 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
13b60 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64  center">NULL.<td
13b70 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13b80 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  NULL.</table>.</
13b90 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e  center>)^..<p>^N
13ba0 6f 74 65 20 74 68 61 74 20 53 51 4c 69 74 65 20  ote that SQLite 
13bb0 61 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e  allows the paren
13bc0 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
13bd0 20 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f   scalar values o
13be0 6e 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  n.the right-hand
13bf0 20 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f   side of an IN o
13c00 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r NOT IN operato
13c10 72 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79  r to be an empty
13c20 20 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f   list but.most o
13c30 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
13c40 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  e database engin
13c50 65 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32  es and the SQL92
13c60 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72   standard requir
13c70 65 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f  e.the list to co
13c80 6e 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f  ntain at least o
13c90 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a  ne element.</p>.
13ca0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
13cb0 74 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20  t in_op {EXISTS 
13cc0 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45  operator} {NOT E
13cd0 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c  XISTS operator}<
13ce0 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58  /tcl>.<h3>The EX
13cf0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68  ISTS operator</h
13d00 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53  3>..<p>^The EXIS
13d10 54 53 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61  TS operator alwa
13d20 79 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  ys evaluates to 
13d30 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  one of the integ
13d40 65 72 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64  er values 0 .and
13d50 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e   1. ^If executin
13d60 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  g the SELECT sta
13d70 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64  tement specified
13d80 20 61 73 20 74 68 65 20 72 69 67 68 74 2d 68 61   as the right-ha
13d90 6e 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74  nd .operand of t
13da0 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
13db0 6f 72 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20  or would return 
13dc0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  one or more rows
13dd0 2c 20 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54  , then the.EXIST
13de0 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  S operator evalu
13df0 61 74 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65  ates to 1. ^If e
13e00 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c  xecuting the SEL
13e10 45 43 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e  ECT would return
13e20 0a 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c  .no rows at all,
13e30 20 74 68 65 6e 20 74 68 65 20 45 58 49 53 54 53   then the EXISTS
13e40 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
13e50 74 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e  tes to 0. ..<p>^
13e60 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
13e70 6c 75 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f  lumns in each ro
13e80 77 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  w returned by th
13e90 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
13ea0 6e 74 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20  nt.(if any) and 
13eb0 74 68 65 20 73 70 65 63 69 66 69 63 20 76 61 6c  the specific val
13ec0 75 65 73 20 72 65 74 75 72 6e 65 64 20 68 61 76  ues returned hav
13ed0 65 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74  e no effect on t
13ee0 68 65 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68  he results.of th
13ef0 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
13f00 72 2e 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61  r. ^In particula
13f10 72 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69  r, rows containi
13f20 6e 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  ng NULL values a
13f30 72 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61  re.not handled a
13f40 6e 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66  ny differently f
13f50 72 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74  rom rows without
13f60 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c   NULL values...<
13f70 68 33 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65  h3>Scalar Subque
13f80 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41  ries</h3>..<p>^A
13f90 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
13fa0 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ent enclosed in 
13fb0 70 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20  parentheses may 
13fc0 61 70 70 65 61 72 20 61 73 20 61 20 73 63 61 6c  appear as a scal
13fd0 61 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20  ar.quantity. ^A 
13fe0 5b 53 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73  [SELECT] used as
13ff0 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69   a scalar quanti
14000 74 79 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61  ty must return a
14010 20 72 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68   result set.with
14020 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
14030 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  . ^The result of
14040 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
14050 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  is the value of 
14060 74 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20  the.only column 
14070 69 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f 77  in the first row
14080 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
14090 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
140a0 74 2e 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43  t. ^If the SELEC
140b0 54 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74  T .yields more t
140c0 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72  han one result r
140d0 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74  ow, all rows aft
140e0 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72 65  er the first are
140f0 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68   ignored. ^If.th
14100 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20  e SELECT yields 
14110 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68  no rows, then th
14120 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65  e value of the e
14130 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c  xpression is NUL
14140 4c 2e 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f  L..^(The LIMIT o
14150 66 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75  f a scalar subqu
14160 65 72 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e  ery is always 1.
14170 0a 41 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54  .Any other LIMIT
14180 20 76 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20   value given in 
14190 74 68 65 20 53 51 4c 20 74 65 78 74 20 69 73 20  the SQL text is 
141a0 69 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e  ignored.)^..<p>^
141b0 41 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45  All types of [SE
141c0 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
141d0 20 69 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65   including aggre
141e0 67 61 74 65 20 61 6e 64 20 63 6f 6d 70 6f 75 6e  gate and compoun
141f0 64 20 53 45 4c 45 43 54 0a 71 75 65 72 69 65 73  d SELECT.queries
14200 20 28 71 75 65 72 69 65 73 20 77 69 74 68 20 6b   (queries with k
14210 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49  eywords like UNI
14220 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20 61 72  ON or EXCEPT) ar
14230 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63 61  e allowed as sca
14240 6c 61 72 0a 73 75 62 71 75 65 72 69 65 73 2e 0a  lar.subqueries..
14250 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d  .<h3>Table Colum
14260 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70  n Names</h3>..<p
14270 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  >^A column name 
14280 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68  can be any of th
14290 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20  e names defined 
142a0 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  in the [CREATE T
142b0 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
142c0 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  or one of the fo
142d0 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20  llowing special 
142e0 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62  identifiers: "<b
142f0 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62  >ROWID</b>",."<b
14300 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c  >OID</b>", or "<
14310 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a  b>_ROWID_</b>"..
14320 5e 54 68 65 73 65 20 73 70 65 63 69 61 6c 20 69  ^These special i
14330 64 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20 64  dentifiers all d
14340 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71  escribe the.uniq
14350 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28  ue integer key (
14360 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73  the [rowid]) ass
14370 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 76 65  ociated with eve
14380 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79  ry .row of every
14390 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65   table..^The spe
143a0 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
143b0 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74   only refer to t
143c0 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68  he row key if th
143d0 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
143e0 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20  .statement does 
143f0 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65 61  not define a rea
14400 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68  l column with th
14410 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68  e same name..^Th
14420 65 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75  e rowid can be u
14430 73 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72  sed anywhere a r
14440 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61  egular.column ca
14450 6e 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  n be used.</p>..
14460 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73  <p>^A [SELECT] s
14470 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73  tatement used as
14480 20 65 69 74 68 65 72 20 61 20 73 63 61 6c 61 72   either a scalar
14490 20 73 75 62 71 75 65 72 79 20 6f 72 20 61 73 20   subquery or as 
144a0 74 68 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20  the .right-hand 
144b0 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
144c0 2c 20 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53  , NOT IN or EXIS
144d0 54 53 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  TS expression ma
144e0 79 20 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72  y contain .refer
144f0 65 6e 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73  ences to columns
14500 20 69 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75   in the outer qu
14510 65 72 79 2e 20 53 75 63 68 20 61 20 73 75 62 71  ery. Such a subq
14520 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73  uery is known as
14530 0a 61 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75  .a correlated su
14540 62 71 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65  bquery. ^A corre
14550 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69  lated subquery i
14560 73 20 72 65 65 76 61 6c 75 61 74 65 64 20 65 61  s reevaluated ea
14570 63 68 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75  ch time.its resu
14580 6c 74 20 69 73 20 72 65 71 75 69 72 65 64 2e 20  lt is required. 
14590 5e 41 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64  ^An uncorrelated
145a0 20 73 75 62 71 75 65 72 79 20 69 73 20 65 76 61   subquery is eva
145b0 6c 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65  luated only once
145c0 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20  .and the result 
145d0 72 65 75 73 65 64 20 61 73 20 6e 65 63 65 73 73  reused as necess
145e0 61 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ary...<tcl>hd_fr
145f0 61 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20  agment castexpr 
14600 7b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  {CAST expression
14610 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54  }</tcl>.<h3>CAST
14620 20 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   expressions</h3
14630 3e 0a 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70  >..<p>A CAST exp
14640 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
14650 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76  to convert the v
14660 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72  alue of &lt;expr
14670 26 67 74 3b 20 74 6f 20 0a 61 20 64 69 66 66 65  &gt; to .a diffe
14680 72 65 6e 74 20 5b 73 74 6f 72 61 67 65 20 63 6c  rent [storage cl
14690 61 73 73 5d 20 69 6e 20 61 20 73 69 6d 69 6c 61  ass] in a simila
146a0 72 20 77 61 79 20 74 6f 20 74 68 65 20 63 6f 6e  r way to the con
146b0 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61 6b  version that tak
146c0 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61 20  es.place when a 
146d0 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79  [column affinity
146e0 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20  ] is applied to 
146f0 61 20 76 61 6c 75 65 2e 20 5e 41 70 70 6c 69 63  a value. ^Applic
14700 61 74 69 6f 6e 20 6f 66 20 61 20 43 41 53 54 0a  ation of a CAST.
14710 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 64 69  expression is di
14720 66 66 65 72 65 6e 74 20 74 6f 20 61 70 70 6c 69  fferent to appli
14730 63 61 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75  cation of a colu
14740 6d 6e 20 61 66 66 69 6e 69 74 79 2c 20 61 73 0a  mn affinity, as.
14750 77 69 74 68 20 61 20 43 41 53 54 20 65 78 70 72  with a CAST expr
14760 65 73 73 69 6f 6e 20 74 68 65 20 73 74 6f 72 61  ession the stora
14770 67 65 20 63 6c 61 73 73 20 63 6f 6e 76 65 72 73  ge class convers
14780 69 6f 6e 20 69 73 20 66 6f 72 63 65 64 20 65 76  ion is forced ev
14790 65 6e 20 0a 69 66 20 69 74 20 69 73 20 6c 6f 73  en .if it is los
147a0 73 79 20 61 6e 64 20 69 72 72 72 65 76 65 72 73  sy and irrrevers
147b0 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ible...<p>^If th
147c0 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65  e value of &lt;e
147d0 78 70 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c  xpr&gt; is NULL,
147e0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
147f0 20 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70   of the CAST.exp
14800 72 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20  ression is also 
14810 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65  NULL. ^Otherwise
14820 2c 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  , the storage cl
14830 61 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ass of the resul
14840 74 20 76 61 6c 75 65 0a 69 73 20 64 65 74 65 72  t value.is deter
14850 6d 69 6e 65 64 20 62 79 20 61 70 70 6c 79 69 6e  mined by applyin
14860 67 20 74 68 65 20 5b 72 75 6c 65 73 20 66 6f 72  g the [rules for
14870 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 63 6f 6c   determining col
14880 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 74 6f  umn affinity] to
14890 0a 74 68 65 20 26 6c 74 3b 74 79 70 65 2d 6e 61  .the &lt;type-na
148a0 6d 65 26 67 74 3b 20 73 70 65 63 69 66 69 65 64  me&gt; specified
148b0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
148c0 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  CAST expression.
148d0 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
148e0 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20 41  1>.<tr>.  <th> A
148f0 66 66 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b 74  ffinity of &lt;t
14900 79 70 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c  ype-name&gt;.  <
14910 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50  th> Conversion P
14920 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20  rocessing.<tr>. 
14930 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74   <td> NONE .  <t
14940 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61  d> ^Casting a va
14950 6c 75 65 20 74 6f 20 61 20 26 6c 74 3b 74 79 70  lue to a &lt;typ
14960 65 2d 6e 61 6d 65 26 67 74 3b 20 77 69 74 68 20  e-name&gt; with 
14970 6e 6f 20 61 66 66 69 6e 69 74 79 20 63 61 75 73  no affinity caus
14980 65 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a  es the value to.
14990 20 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69    be converted i
149a0 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61  nto a BLOB.  ^Ca
149b0 73 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20  sting to a BLOB 
149c0 63 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73  consists of firs
149d0 74 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20  t casting.  the 
149e0 76 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e  value to TEXT in
149f0 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20   the [encoding] 
14a00 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
14a10 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e  connection, then
14a20 0a 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  .  interpreting 
14a30 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79  the resulting by
14a40 74 65 20 73 65 71 75 65 6e 63 65 20 61 73 20 61  te sequence as a
14a50 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66   BLOB instead of
14a60 20 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a   as TEXT...<tr>.
14a70 20 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74    <td> TEXT.  <t
14a80 64 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c  d> ^To cast a BL
14a90 4f 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54  OB value to TEXT
14aa0 2c 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  , the sequence o
14ab0 66 20 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b  f bytes that mak
14ac0 65 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20  e up the.  BLOB 
14ad0 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
14ae0 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75  s text encoded u
14af0 73 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  sing the databas
14b00 65 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70  e encoding..  <p
14b10 3e 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e  >.   ^Casting an
14b20 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
14b30 20 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54   value into TEXT
14b40 20 72 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c   renders the val
14b50 75 65 20 61 73 20 69 66 20 76 69 61 20 0a 20 20  ue as if via .  
14b60 20 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69    [sqlite3_snpri
14b70 6e 74 66 28 29 5d 20 65 78 63 65 70 74 20 74 68  ntf()] except th
14b80 61 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67  at the resulting
14b90 20 54 45 58 54 20 75 73 65 73 20 74 68 65 20 5b   TEXT uses the [
14ba0 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20  encoding] of.   
14bb0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
14bc0 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a  nnection...<tr>.
14bd0 20 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74    <td> REAL.  <t
14be0 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  d> ^When casting
14bf0 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
14c00 20 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c   a REAL, the val
14c10 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76  ue is first conv
14c20 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20  erted to.       
14c30 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70   TEXT..       <p
14c40 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61  >^When casting a
14c50 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52   TEXT value to R
14c60 45 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74  EAL, the longest
14c70 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78   possible prefix
14c80 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20   of.        the 
14c90 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
14ca0 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
14cb0 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69   a real number i
14cc0 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  s extracted from
14cd0 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58  .        the TEX
14ce0 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  T value and the 
14cf0 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65  remainder ignore
14d00 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20  d. ^Any leading 
14d10 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20  spaces in the.  
14d20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65        TEXT value
14d30 20 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65   are ignored whe
14d40 6e 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f  n converging fro
14d50 6d 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20  m TEXT to REAL. 
14d60 5e 28 49 66 20 74 68 65 72 65 20 69 73 0a 20 20  ^(If there is.  
14d70 20 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20        no prefix 
14d80 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65  that can be inte
14d90 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61  rpreted as a rea
14da0 6c 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  l number, the re
14db0 73 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20  sult of the.    
14dc0 20 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69      conversion i
14dd0 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20  s 0.0.)^..<tr>. 
14de0 20 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20   <td> INTEGER.  
14df0 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69  <td> ^When casti
14e00 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20  ng a BLOB value 
14e10 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20  to INTEGER, the 
14e20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74 20 63  value is first c
14e30 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20  onverted to.    
14e40 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20      TEXT..      
14e50 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e   <p>^When castin
14e60 67 20 61 20 54 45 58 54 20 76 61 6c 75 65 20 74  g a TEXT value t
14e70 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c  o INTEGER, the l
14e80 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  ongest possible 
14e90 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20  prefix of.      
14ea0 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74    the value that
14eb0 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
14ec0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
14ed0 72 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72  r number is extr
14ee0 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20  acted from.     
14ef0 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75     the TEXT valu
14f00 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  e and the remain
14f10 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e  der ignored. ^An
14f20 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73  y leading spaces
14f30 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20   in the.        
14f40 54 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20  TEXT value when 
14f50 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20  converting from 
14f60 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20  TEXT to INTEGER 
14f70 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66  are ignored. ^If
14f80 20 74 68 65 72 65 0a 20 20 20 20 20 20 20 20 69   there.        i
14f90 73 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74  s no prefix that
14fa0 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
14fb0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
14fc0 72 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  r number, the re
14fd0 73 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20  sult.        of 
14fe0 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
14ff0 73 20 30 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e  s 0...      <p>^
15000 41 20 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c  A cast of a REAL
15010 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49   value into an I
15020 4e 54 45 47 45 52 20 77 69 6c 6c 20 74 72 75 6e  NTEGER will trun
15030 63 61 74 65 20 74 68 65 20 66 72 61 63 74 69 6f  cate the fractio
15040 6e 61 6c 0a 20 20 20 20 20 20 70 61 72 74 20 6f  nal.      part o
15050 66 20 74 68 65 20 52 45 41 4c 2e 20 20 5e 49 66  f the REAL.  ^If
15060 20 61 20 52 45 41 4c 20 69 73 20 74 6f 6f 20 6c   a REAL is too l
15070 61 72 67 65 20 74 6f 20 62 65 20 72 65 70 72 65  arge to be repre
15080 73 65 6e 74 65 64 20 61 73 20 61 6e 20 0a 20 20  sented as an .  
15090 20 20 20 20 49 4e 54 45 47 45 52 20 74 68 65 6e      INTEGER then
150a0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
150b0 68 65 20 63 61 73 74 20 69 73 20 74 68 65 20 6c  he cast is the l
150c0 61 72 67 65 73 74 20 6e 65 67 61 74 69 76 65 20  argest negative 
150d0 69 6e 74 65 67 65 72 3a 20 0a 20 20 20 20 20 20  integer: .      
150e0 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
150f0 35 38 30 38 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  5808...<tr>.  <t
15100 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64  d> NUMERIC.  <td
15110 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58  > ^Casting a TEX
15120 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20  T or BLOB value 
15130 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72  into NUMERIC fir
15140 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64  st does a forced
15150 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  .   conversion i
15160 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65  nto REAL but the
15170 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72  n further conver
15180 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  ts the result in
15190 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20  to INTEGER if.  
151a0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
151b0 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d   conversion from
151c0 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52   REAL to INTEGER
151d0 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64   is lossless and
151e0 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20   reversible..   
151f0 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
15200 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69   context in SQLi
15210 74 65 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d  te where the NUM
15220 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52  ERIC and INTEGER
15230 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20   [affinities].  
15240 20 62 65 68 61 76 65 20 64 69 66 66 65 72 65 6e   behave differen
15250 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73  tly..   <p> ^Cas
15260 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49  ting a REAL or I
15270 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20  NTEGER value to 
15280 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d  NUMERIC is a no-
15290 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65  op, even if a re
152a0 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c  al.   value coul
152b0 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  d be losslessly 
152c0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
152d0 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a  integer...</tr>.
152e0 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e  .</table>..<p>^N
152f0 6f 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73  ote that the res
15300 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67  ult from casting
15310 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61   any non-BLOB va
15320 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42  lue into a .BLOB
15330 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
15340 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79  from casting any
15350 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f   BLOB value into
15360 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75   a non-BLOB valu
15370 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  e.may be differe
15380 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  nt depending on 
15390 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61  whether the data
153a0 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20  base [encoding] 
153b0 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36  is UTF-8,.UTF-16
153c0 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e  be, or UTF-16le.
153d0 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
153e0 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20  ent booleanexpr 
153f0 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  {boolean express
15400 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42  ion}</tcl>.<h3>B
15410 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f  oolean Expressio
15420 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ns</h3>..<p>The 
15430 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61  SQL language fea
15440 74 75 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f  tures several co
15450 6e 74 65 78 74 73 20 77 68 65 72 65 20 61 6e 20  ntexts where an 
15460 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65  expression is .e
15470 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
15480 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65   result converte
15490 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28  d to a boolean (
154a0 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76  true or false) v
154b0 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74  alue. These.cont
154c0 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c  exts are:..  <ul
154d0 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57  >.    <li> the W
154e0 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61  HERE clause of a
154f0 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20   SELECT, UPDATE 
15500 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  or DELETE statem
15510 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68  ent,.    <li> th
15520 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  e ON or USING cl
15530 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69  ause of a join i
15540 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
15550 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
15560 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
15570 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
15580 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e  tement,.    <li>
15590 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
155a0 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67   of an SQL trigg
155b0 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e  er, and.    <li>
155c0 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
155d0 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73   or clauses of s
155e0 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65 73 73  ome CASE express
155f0 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c  ions..  </ul>..<
15600 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74  p>^(To convert t
15610 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e  he results of an
15620 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20   SQL expression 
15630 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  to a boolean val
15640 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74  ue, SQLite.first
15650 20 63 61 73 74 73 20 74 68 65 20 72 65 73 75 6c   casts the resul
15660 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76  t to a NUMERIC v
15670 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65  alue in the same
15680 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54   way as a .[CAST
15690 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20   expression]. A 
156a0 4e 55 4c 4c 20 6f 72 20 7a 65 72 6f 20 76 61 6c  NULL or zero val
156b0 75 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75  ue (integer valu
156c0 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75  e 0 or real valu
156d0 65 20 30 2e 30 29 20 69 73 0a 63 6f 6e 73 69 64  e 0.0) is.consid
156e0 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65  ered to be false
156f0 2e 20 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  . All other valu
15700 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
15710 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28  d true.)^..<p>^(
15720 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
15730 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e   values NULL, 0.
15740 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20  0, 0, 'english' 
15750 61 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20  and '0' are all 
15760 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65  considered.to be
15770 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75   false.)^ ^(Valu
15780 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20  es 1, 1.0, 0.1, 
15790 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69  -0.1 and '1engli
157a0 73 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72  sh' are consider
157b0 65 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29  ed to .be true.)
157c0 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73  ^..<h3>Functions
157d0 3c 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b  </h3>.<p>^Both [
157e0 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d  corefunc|simple]
157f0 20 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67   and [aggfunc|ag
15800 67 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f  gregate] functio
15810 6e 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ns are supported
15820 2e 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74  ..(For presentat
15830 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69  ion purposes, si
15840 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  mple functions a
15850 72 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69  re further subdi
15860 76 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65  vided into.[core
15870 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63  func | core func
15880 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65  tions] and [date
15890 66 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65  func | date-time
158a0 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41   functions].).^A
158b0 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
158c0 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
158d0 61 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  any expression. 
158e0 20 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f   ^Simple functio
158f0 6e 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75  ns return.a resu
15900 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62  lt immediately b
15910 61 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e  ased on their in
15920 70 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74  puts.  ^Aggregat
15930 65 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20  e functions.may 
15940 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20  only be used in 
15950 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
15960 6e 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  nt.  ^Aggregate 
15970 66 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74  functions comput
15980 65 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61  e.their result a
15990 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f  cross all rows o
159a0 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
159b0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
159c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15a00 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
15a10 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69  ion {Core Functi
15a20 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a  ons} corefunc {*
15a30 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66  corefunc}.proc f
15a40 75 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b  uncdef {syntax k
15a50 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a  eywords desc} {.
15a60 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d    hd_puts {<tr>}
15a70 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
15a80 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69  \s+} [string tri
15a90 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 3e  m $syntax] {<br>
15aa0 3c 2f 62 72 3e 7d 20 73 79 6e 74 61 78 0a 20 20  </br>} syntax.  
15ab0 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28  regsub -all {\((
15ac0 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74  [^*)]+)\)} $synt
15ad0 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d  ax {(<i>\1</i>)}
15ae0 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
15af0 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61   -all {,} $synta
15b00 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e  x {</i>,<i>} syn
15b10 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  tax.  regsub -al
15b20 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e  l {<i>\.\.\.</i>
15b30 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20  } $syntax {...} 
15b40 73 79 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73  syntax.  hd_puts
15b50 20 22 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74   "<td valign=\"t
15b60 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67  op\" align=\"rig
15b70 68 74 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30  ht\" width=\"120
15b80 5c 22 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e  \">".  if {[llen
15b90 67 74 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d  gth $keywords]==
15ba0 30 7d 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20  0} {.    regexp 
15bb0 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61  {[a-z_]+} $synta
15bc0 78 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72  x name.    hd_fr
15bd0 61 67 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e  agment $name *$n
15be0 61 6d 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53  ame "${name}() S
15bf0 51 4c 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d  QL function".  }
15c00 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20   else {.    set 
15c10 66 72 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78  fragname [lindex
15c20 20 24 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20   $keywords 0].  
15c30 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b    regsub -all {[
15c40 5e 61 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65  ^a-z]} $fragname
15c50 20 7b 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20   {} fragname.   
15c60 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72   hd_fragment $fr
15c70 61 67 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20  agname.    eval 
15c80 68 64 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72  hd_keywords [str
15c90 69 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d  ing map {\n { }}
15ca0 20 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a   $keywords].  }.
15cb0 20 20 68 64 5f 70 75 74 73 20 22 24 73 79 6e 74    hd_puts "$synt
15cc0 61 78 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75  ax</td>".  hd_pu
15cd0 74 73 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22  ts {<td valign="
15ce0 74 6f 70 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f  top">}.  hd_reso
15cf0 6c 76 65 20 24 64 65 73 63 0a 20 20 68 64 5f 70  lve $desc.  hd_p
15d00 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d  uts {</td></tr>}
15d10 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  .}.</tcl>..<p>Th
15d20 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73  e core functions
15d30 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65   shown below are
15d40 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65   available by de
15d50 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e  fault. .[datefun
15d60 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54  c | Date &amp; T
15d70 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61  ime functions] a
15d80 6e 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67  nd.[aggfunc | ag
15d90 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
15da0 73 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e 74 65  s] are documente
15db0 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41  d separately.  A
15dc0 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61  n.application ma
15dd0 79 20 64 65 66 69 6e 65 20 61 64 64 69 74 69 6f  y define additio
15de0 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72  nal.functions wr
15df0 69 74 74 65 6e 20 69 6e 20 43 20 61 6e 64 20 61  itten in C and a
15e00 64 64 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  dded to the data
15e10 62 61 73 65 20 65 6e 67 69 6e 65 20 75 73 69 6e  base engine usin
15e20 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  g.the [sqlite3_c
15e30 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
15e40 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62  ] API.</p>..<tab
15e50 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
15e60 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c  padding=10>.<tcl
15e70 3e 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58  >.funcdef {abs(X
15e80 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61  )} {} {.  ^The a
15e90 62 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  bs(X) function r
15ea0 65 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c  eturns the absol
15eb0 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ute value of the
15ec0 20 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d   numeric.  argum
15ed0 65 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20  ent X.  ^Abs(X) 
15ee0 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20  returns NULL if 
15ef0 58 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28  X is NULL. .  ^(
15f00 41 62 73 28 58 29 20 72 65 74 75 72 6e 20 30 2e  Abs(X) return 0.
15f10 30 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69  0 if X is a stri
15f20 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61  ng or blob.  tha
15f30 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  t cannot be conv
15f40 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72  erted to a numer
15f50 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66  ic value.)^  ^If
15f60 20 58 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74   X is the .  int
15f70 65 67 65 72 20 2d 39 32 32 33 33 37 32 30 33 36  eger -9223372036
15f80 38 35 34 37 37 35 38 30 37 20 74 68 65 6e 20 61  854775807 then a
15f90 62 73 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20  bs(X) throws an 
15fa0 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
15fb0 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74  .  error since t
15fc0 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76  here is no equiv
15fd0 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36  alent positive 6
15fe0 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65  4-bit two comple
15ff0 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66  ment value..}..f
16000 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28  uncdef {changes(
16010 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63  )} {} {.  ^The c
16020 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
16030 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
16040 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65  mber of database
16050 20 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20   rows that were 
16060 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73  changed.  or ins
16070 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  erted or deleted
16080 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
16090 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20  ently completed 
160a0 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a  INSERT, DELETE,.
160b0 20 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74    or UPDATE stat
160c0 65 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65  ement, exclusive
160d0 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69   of statements i
160e0 6e 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72  n lower-level tr
160f0 69 67 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63  iggers..  ^The c
16100 68 61 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e  hanges() SQL fun
16110 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
16120 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
16130 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
16140 5d 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69  ].  C/C++ functi
16150 6f 6e 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c  on and hence fol
16160 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20 72 75  lows the same ru
16170 6c 65 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67  les for counting
16180 20 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e   changes..}..fun
16190 63 64 65 66 20 7b 63 68 61 72 28 58 31 2c 58 32  cdef {char(X1,X2
161a0 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20  ,...,XN)} {} {. 
161b0 20 5e 54 68 65 20 63 68 61 72 28 58 31 2c 58 32   ^The char(X1,X2
161c0 2c 2e 2e 2e 2c 58 4e 29 20 66 75 6e 63 74 69 6f  ,...,XN) functio
161d0 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
161e0 6e 67 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 63  ng composed of c
161f0 68 61 72 61 63 74 65 72 73 20 68 61 76 69 6e 67  haracters having
16200 20 74 68 65 0a 20 20 20 75 6e 69 63 6f 64 65 20   the.   unicode 
16210 63 6f 64 65 20 70 6f 69 6e 74 20 76 61 6c 75 65  code point value
16220 73 20 6f 66 20 69 6e 74 65 67 65 72 73 20 58 31  s of integers X1
16230 20 74 68 72 6f 75 67 68 20 58 4e 2c 20 72 65 73   through XN, res
16240 70 65 63 74 69 76 65 6c 79 2e 0a 7d 0a 0a 66 75  pectively..}..fu
16250 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28  ncdef {coalesce(
16260 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20  X,Y,...)} {} {. 
16270 20 5e 54 68 65 20 63 6f 61 6c 65 73 63 65 28 29   ^The coalesce()
16280 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
16290 73 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20  s a copy of its 
162a0 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61  first non-NULL a
162b0 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55  rgument, or.  NU
162c0 4c 4c 20 69 66 20 61 6c 6c 20 61 72 67 75 6d 65  LL if all argume
162d0 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e  nts are NULL.  ^
162e0 43 6f 61 6c 65 73 63 65 28 29 20 6d 75 73 74 20  Coalesce() must 
162f0 62 65 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32  be at least .  2
16300 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66   arguments..}..f
16310 75 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59  uncdef {glob(X,Y
16320 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67  )} {} {.  ^The g
16330 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lob(X,Y) functio
16340 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20  n is equivalent 
16350 74 6f 20 74 68 65 0a 20 20 65 78 70 72 65 73 73  to the.  express
16360 69 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58  ion "<b>Y GLOB X
16370 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68  </b>"..  Note th
16380 61 74 20 74 68 65 20 58 20 61 6e 64 20 59 20 61  at the X and Y a
16390 72 67 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76  rguments are rev
163a0 65 72 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f  ersed in the glo
163b0 62 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  b() function.  r
163c0 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69  elative to the i
163d0 6e 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72  nfix [GLOB] oper
163e0 61 74 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65 20  ator..  ^If the 
163f0 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
16400 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65  function()] inte
16410 72 66 61 63 65 20 69 73 20 75 73 65 64 20 74 6f  rface is used to
16420 0a 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20  .  override the 
16430 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69  glob(X,Y) functi
16440 6f 6e 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72  on with an alter
16450 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74  native implement
16460 61 74 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65  ation then.  the
16470 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72   [GLOB] operator
16480 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65   will invoke the
16490 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70   alternative imp
164a0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a  lementation..}..
164b0 66 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28  funcdef {ifnull(
164c0 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
164d0 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  e ifnull() funct
164e0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f  ion returns a co
164f0 70 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20  py of its first 
16500 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e  non-NULL argumen
16510 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20  t, or.  NULL if 
16520 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61  both arguments a
16530 72 65 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c  re NULL.  ^Ifnul
16540 6c 28 29 20 6d 75 73 74 20 68 61 76 65 20 65 78  l() must have ex
16550 61 63 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74  actly 2 argument
16560 73 2e 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c  s..  ^The ifnull
16570 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65  () function is e
16580 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f  quivalent to [co
16590 61 6c 65 73 63 65 28 29 5d 20 77 69 74 68 20 74  alesce()] with t
165a0 77 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a  wo arguments..}.
165b0 0a 66 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28  .funcdef {instr(
165c0 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
165d0 65 20 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e  e instr(X,Y) fun
165e0 63 74 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20  ction finds the 
165f0 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65  first occurrence
16600 20 6f 66 20 73 74 72 69 6e 67 20 59 20 77 69 74   of string Y wit
16610 68 69 6e 20 0a 20 20 73 74 72 69 6e 67 20 58 20  hin .  string X 
16620 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
16630 6e 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20  number of prior 
16640 63 68 61 72 61 63 74 65 72 73 20 70 6c 75 73 20  characters plus 
16650 31 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20 69  1, or 0 if.  Y i
16660 73 20 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20  s nowhere found 
16670 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c  within X..  ^Or,
16680 20 69 66 20 58 20 61 6e 64 20 59 20 61 72 65 20   if X and Y are 
16690 62 6f 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e  both BLOBs, then
166a0 20 69 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75   instr(X,Y) retu
166b0 72 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74  rns one.  more t
166c0 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62  han the number b
166d0 79 74 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68  ytes prior to th
166e0 65 20 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e  e first occurren
166f0 63 65 20 6f 66 20 59 2c 20 6f 72 20 30 20 69 66  ce of Y, or 0 if
16700 0a 20 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63  .  Y does not oc
16710 63 75 72 20 61 6e 79 77 68 65 72 65 20 77 69 74  cur anywhere wit
16720 68 69 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74  hin X..  ^If bot
16730 68 20 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e  h arguments X an
16740 64 20 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59  d Y to instr(X,Y
16750 29 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61  ) are non-NULL a
16760 6e 64 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73  nd are not BLOBs
16770 0a 20 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65  .  then both are
16780 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
16790 73 74 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65  strings..  ^If e
167a0 69 74 68 65 72 20 58 20 6f 72 20 59 20 61 72 65  ither X or Y are
167b0 20 4e 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58   NULL in instr(X
167c0 2c 59 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  ,Y) then the res
167d0 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a  ult is NULL..}..
167e0 66 75 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d  funcdef {hex(X)}
167f0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78   {} {.  ^The hex
16800 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65  () function inte
16810 72 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d  rprets its argum
16820 65 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e  ent as a BLOB an
16830 64 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74  d returns.  a st
16840 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
16850 65 20 75 70 70 65 72 2d 63 61 73 65 20 68 65 78  e upper-case hex
16860 61 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69  adecimal renderi
16870 6e 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ng of the conten
16880 74 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62  t of.  that blob
16890 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61  ..}..funcdef {la
168a0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
168b0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
168c0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
168d0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
168e0 72 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a  rns the [ROWID].
168f0 20 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f    of the last ro
16900 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68  w insert from th
16910 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
16920 63 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f  ction which invo
16930 6b 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69  ked the.  functi
16940 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f  on..  ^The last_
16950 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53  insert_rowid() S
16960 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  QL function is a
16970 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
16980 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c  the.  [sqlite3_l
16990 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
169a0 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ()] C/C++ interf
169b0 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a  ace function..}.
169c0 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68  .funcdef {length
169d0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72  (X)} {} {.  ^For
169e0 20 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20   a string value 
169f0 58 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  X, the length(X)
16a00 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
16a10 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
16a20 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 28 6e  .  characters (n
16a30 6f 74 20 62 79 74 65 73 29 20 69 6e 20 58 20 70  ot bytes) in X p
16a40 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73  rior to the firs
16a50 74 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e  t NUL character.
16a60 0a 20 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20  .  Since SQLite 
16a70 73 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e  strings do not n
16a80 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20  ormally contain 
16a90 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20  NUL characters, 
16aa0 74 68 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20  the length(X).  
16ab0 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73  function will us
16ac0 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65  ually return the
16ad0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
16ae0 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
16af0 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e  he string X..  ^
16b00 46 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65  For a blob value
16b10 20 58 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65   X, length(X) re
16b20 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
16b30 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
16b40 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69   blob..  ^If X i
16b50 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67  s NULL then leng
16b60 74 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20  th(X) is NULL.. 
16b70 20 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69   ^If X is numeri
16b80 63 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29  c then length(X)
16b90 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e   returns the len
16ba0 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a  gth of a string.
16bb0 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e    representation
16bc0 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
16bd0 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b  f {like(X,Y) lik
16be0 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20  e(X,Y,Z)} {} {. 
16bf0 20 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e   ^The like() fun
16c00 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
16c10 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20   implement the. 
16c20 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23   "<b>Y LIKE X &#
16c30 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b  91;ESCAPE Z&#93;
16c40 3c 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e  </b>" expression
16c50 2e 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74  . .  ^If the opt
16c60 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
16c70 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
16c80 74 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28  then the.  like(
16c90 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  ) function is in
16ca0 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65  voked with three
16cb0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74   arguments.  ^Ot
16cc0 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20  herwise, it is. 
16cd0 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77   invoked with tw
16ce0 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79  o arguments only
16cf0 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
16d00 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65  X and Y paramete
16d10 72 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65  rs are.  reverse
16d20 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20  d in the like() 
16d30 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76  function relativ
16d40 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b  e to the infix [
16d50 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a  LIKE] operator..
16d60 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f    ^The [sqlite3_
16d70 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
16d80 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e  )] interface can
16d90 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72   be used to over
16da0 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28  ride the.  like(
16db0 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  ) function and t
16dc0 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68  hereby change th
16dd0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  e operation of t
16de0 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72  he.  [LIKE] oper
16df0 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72  ator.  When over
16e00 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28  riding the like(
16e10 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d  ) function, it m
16e20 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a  ay be important.
16e30 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f    to override bo
16e40 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74  th the two and t
16e50 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65  hree argument ve
16e60 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69  rsions of the li
16e70 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e  ke() .  function
16e80 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66  . Otherwise, dif
16e90 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20  ferent code may 
16ea0 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70  be called to imp
16eb0 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49  lement the.  [LI
16ec0 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70  KE] operator dep
16ed0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
16ee0 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41  r or not an ESCA
16ef0 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20  PE clause was . 
16f00 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 66   specified..}..f
16f10 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74  uncdef {load_ext
16f20 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65  ension(X) load_e
16f30 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b  xtension(X,Y)} {
16f40 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f  } {.  ^The load_
16f50 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66  extension(X,Y) f
16f60 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20 53 51  unction loads SQ
16f70 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 20  Lite extensions 
16f80 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65  out of the share
16f90 64 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65  d.  library file
16fa0 20 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74   named X using t
16fb0 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59  he entry point Y
16fc0 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
16fd0 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  f load_extension
16fe0 28 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61  ().  is always a
16ff0 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73   NULL.  ^If Y is
17000 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68   omitted then th
17010 65 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20  e default entry 
17020 70 6f 69 6e 74 0a 20 20 6f 66 20 3c 62 3e 73 71  point.  of <b>sq
17030 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f  lite3_extension_
17040 69 6e 69 74 3c 2f 62 3e 20 69 73 20 75 73 65 64  init</b> is used
17050 2e 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74  .  ^The load_ext
17060 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f  ension() functio
17070 6e 0a 20 20 72 61 69 73 65 73 20 61 6e 20 65 78  n.  raises an ex
17080 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65  ception if the e
17090 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74  xtension fails t
170a0 6f 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61  o load or initia
170b0 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a  lize correctly..
170c0 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f  .  <p>^The load_
170d0 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63  extension() func
170e0 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69  tion will fail i
170f0 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20  f the extension 
17100 61 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d  attempts to .  m
17110 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20  odify or delete 
17120 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
17130 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
17140 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65  uence.  ^The.  e
17150 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64  xtension can add
17160 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f   new functions o
17170 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
17180 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f  ences, but canno
17190 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65  t.  modify or de
171a0 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 66 75  lete existing fu
171b0 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61  nctions or colla
171c0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62  ting sequences b
171d0 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66  ecause.  those f
171e0 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20  unctions and/or 
171f0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
17200 63 65 73 20 6d 69 67 68 74 20 62 65 20 75 73 65  ces might be use
17210 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e  d elsewhere.  in
17220 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72   the currently r
17230 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65  unning SQL state
17240 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61  ment.  To load a
17250 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74  n extension that
17260 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65  .  changes or de
17270 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20  letes functions 
17280 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
17290 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a  uences, use the.
172a0 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f    [sqlite3_load_
172b0 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c  extension()] C-l
172c0 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e  anguage API.</p>
172d0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77  .}..funcdef {low
172e0 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  er(X)} {} {.  ^T
172f0 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63  he lower(X) func
17300 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63  tion returns a c
17310 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20  opy of string X 
17320 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63  with all ASCII c
17330 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76  haracters.  conv
17340 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63  erted to lower c
17350 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ase.  ^The defau
17360 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65  lt built-in lowe
17370 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72  r() function wor
17380 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63  ks.  for ASCII c
17390 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20  haracters only. 
173a0 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76   To do case conv
173b0 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41  ersions on non-A
173c0 53 43 49 49 0a 20 20 63 68 61 72 61 63 74 65 72  SCII.  character
173d0 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20  s, load the ICU 
173e0 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75  extension..}..fu
173f0 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20  ncdef {ltrim(X) 
17400 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  ltrim(X,Y)} {} {
17410 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c  .  ^The ltrim(X,
17420 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
17430 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
17440 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
17450 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
17460 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
17470 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
17480 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20  he left side of 
17490 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  X..  ^If the Y a
174a0 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
174b0 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d  ed, ltrim(X) rem
174c0 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d  oves spaces from
174d0 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20   the left side. 
174e0 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
174f0 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d  f {max(X,Y,...)}
17500 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a   {*maxCoreFunc *
17510 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66  max {max() SQL f
17520 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
17530 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
17540 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e  t max() function
17550 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
17560 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a  ument with the .
17570 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c    maximum value,
17580 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20   or return NULL 
17590 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20  if any argument 
175a0 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65  is NULL. .  ^The
175b0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
175c0 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73  max() function s
175d0 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
175e0 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
175f0 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61  to right.  for a
17600 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
17610 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
17620 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
17630 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
17640 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20  ting.  function 
17650 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63  for all string c
17660 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
17670 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67   none of the arg
17680 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a  uments to max().
17690 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61    define a colla
176a0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74  ting function, t
176b0 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63  hen the BINARY c
176c0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
176d0 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74  n is used..  Not
176e0 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c  e that <b>max()<
176f0 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20  /b> is a simple 
17700 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20  function when.  
17710 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65  it has 2 or more
17720 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f   arguments but o
17730 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a 20 20  perates as an.  
17740 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20 61 67  [minAggFunc | ag
17750 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17760 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20  ] if given only 
17770 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
17780 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  t..}..funcdef {m
17790 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d  in(X,Y,...)} {*m
177a0 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20  inCoreFunc *min 
177b0 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e 63 74  {min() SQL funct
177c0 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d  ion}} {.  ^The m
177d0 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69  ulti-argument mi
177e0 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  n() function ret
177f0 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e  urns the argumen
17800 74 20 77 69 74 68 20 74 68 65 0a 20 20 6d 69 6e  t with the.  min
17810 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54  imum value..  ^T
17820 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
17830 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e  t min() function
17840 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72   searches its ar
17850 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66  guments from lef
17860 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72  t to right.  for
17870 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61   an argument tha
17880 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  t defines a coll
17890 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61  ating function a
178a0 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c  nd uses that col
178b0 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f  lating.  functio
178c0 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
178d0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
178e0 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61  If none of the a
178f0 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28  rguments to min(
17900 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c  ).  define a col
17910 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c  lating function,
17920 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59   then the BINARY
17930 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
17940 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e  ion is used..  N
17950 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28  ote that <b>min(
17960 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
17970 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
17980 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
17990 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
179a0 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 20   operates as an 
179b0 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c  .  [maxAggFunc |
179c0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
179d0 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20  ion] if given.  
179e0 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72  only a single ar
179f0 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64  gument..}..funcd
17a00 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d  ef {nullif(X,Y)}
17a10 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c   {} {.  ^The nul
17a20 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lif(X,Y) functio
17a30 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20 66 69  n returns its fi
17a40 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20  rst argument if 
17a50 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72  the arguments ar
17a60 65 0a 20 20 64 69 66 66 65 72 65 6e 74 20 61 6e  e.  different an
17a70 64 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 61 72  d NULL if the ar
17a80 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20  guments are the 
17a90 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c  same.  ^The null
17aa0 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  if(X,Y) function
17ab0 0a 20 20 73 65 61 72 63 68 65 73 20 69 74 73 20  .  searches its 
17ac0 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c  arguments from l
17ad0 65 66 74 20 74 6f 20 72 69 67 68 74 20 66 6f 72  eft to right for
17ae0 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61   an argument tha
17af0 74 20 64 65 66 69 6e 65 73 20 61 0a 20 20 63 6f  t defines a.  co
17b00 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
17b10 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63   and uses that c
17b20 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
17b30 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
17b40 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  .  comparisons. 
17b50 20 5e 49 66 20 6e 65 69 74 68 65 72 20 61 72 67   ^If neither arg
17b60 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28  ument to nullif(
17b70 29 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  ) defines a coll
17b80 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20  ating function. 
17b90 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59   then the BINARY
17ba0 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e   is used..}..fun
17bb0 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20  cdef {quote(X)} 
17bc0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74  {} {.  ^The quot
17bd0 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  e(X) function re
17be0 74 75 72 6e 73 20 74 68 65 20 74 65 78 74 20 6f  turns the text o
17bf0 66 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  f an SQL literal
17c00 20 77 68 69 63 68 0a 20 20 69 73 20 74 68 65 20   which.  is the 
17c10 76 61 6c 75 65 20 6f 66 20 69 74 73 20 61 72 67  value of its arg
17c20 75 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66  ument suitable f
17c30 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74  or inclusion int
17c40 6f 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  o an SQL stateme
17c50 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 61  nt..  ^Strings a
17c60 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79  re surrounded by
17c70 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77   single-quotes w
17c80 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69  ith escapes on i
17c90 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 20  nterior quotes. 
17ca0 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c   as needed.  ^BL
17cb0 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64 20  OBs are encoded 
17cc0 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6c  as hexadecimal l
17cd0 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74 72 69  iterals..  ^Stri
17ce0 6e 67 73 20 77 69 74 68 20 65 6d 62 65 64 64 65  ngs with embedde
17cf0 64 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73  d NUL characters
17d00 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 70 72 65   cannot be repre
17d10 73 65 6e 74 65 64 20 61 73 20 73 74 72 69 6e 67  sented as string
17d20 0a 20 20 6c 69 74 65 72 61 6c 73 20 69 6e 20 53  .  literals in S
17d30 51 4c 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65  QL and hence the
17d40 20 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e 67   returned string
17d50 20 6c 69 74 65 72 61 6c 20 69 73 20 74 72 75 6e   literal is trun
17d60 63 61 74 65 64 20 70 72 69 6f 72 0a 20 20 74 6f  cated prior.  to
17d70 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c 2e 0a   the first NUL..
17d80 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64  }..funcdef {rand
17d90 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  om()} {} {.  ^Th
17da0 65 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74  e random() funct
17db0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 70 73  ion returns a ps
17dc0 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65  eudo-random inte
17dd0 67 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d 39  ger.  between -9
17de0 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
17df0 30 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30  08 and +92233720
17e00 33 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a  36854775807..}..
17e10 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62  funcdef {randomb
17e20 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e  lob(N)} {} {.  ^
17e30 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e  The randomblob(N
17e40 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
17e50 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62  n an N-byte blob
17e60 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65 75   containing pseu
17e70 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65  do-random.  byte
17e80 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65 73 73  s. ^If N is less
17e90 20 74 68 61 6e 20 31 20 74 68 65 6e 20 61 20 31   than 1 then a 1
17ea0 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f  -byte random blo
17eb0 62 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a  b is returned...
17ec0 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c    <p>Hint:  appl
17ed0 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e  ications can gen
17ee0 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75  erate globally u
17ef0 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72  nique identifier
17f00 73 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20 66  s.  using this f
17f10 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65 72  unction together
17f20 20 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61 6e   with [hex()] an
17f30 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d  d/or.  [lower()]
17f40 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a   like this:</p>.
17f50 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  .  <blockquote>.
17f60 20 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62    hex(randomblob
17f70 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20  (16))<br></br>. 
17f80 20 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f   lower(hex(rando
17f90 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f  mblob(16))).  </
17fa0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66  blockquote>.}..f
17fb0 75 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65 28  uncdef {replace(
17fc0 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e  X,Y,Z)} {} {.  ^
17fd0 54 68 65 20 72 65 70 6c 61 63 65 28 58 2c 59 2c  The replace(X,Y,
17fe0 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Z) function retu
17ff0 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
18000 6d 65 64 20 62 79 20 73 75 62 73 74 69 74 75 74  med by substitut
18010 69 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a 20 66  ing.  string Z f
18020 6f 72 20 65 76 65 72 79 20 6f 63 63 75 72 72 65  or every occurre
18030 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20  nce of string Y 
18040 69 6e 20 73 74 72 69 6e 67 20 58 2e 20 20 5e 54  in string X.  ^T
18050 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f  he [BINARY].  co
18060 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
18070 20 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f 6d   is used for com
18080 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59  parisons.  ^If Y
18090 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20 73   is an empty.  s
180a0 74 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75 72  tring then retur
180b0 6e 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 20 20  n X unchanged.  
180c0 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69  ^If Z is not ini
180d0 74 69 61 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e  tially.  a strin
180e0 67 2c 20 69 74 20 69 73 20 63 61 73 74 20 74 6f  g, it is cast to
180f0 20 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20   a UTF-8 string 
18100 70 72 69 6f 72 20 74 6f 20 70 72 6f 63 65 73 73  prior to process
18110 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ing..}..funcdef 
18120 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64 28  {round(X) round(
18130 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
18140 65 20 72 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e  e round(X,Y) fun
18150 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
18160 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20  floating-point. 
18170 20 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65 64   value X rounded
18180 20 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f 20   to Y digits to 
18190 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65  the right of the
181a0 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a   decimal point..
181b0 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
181c0 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
181d0 20 69 74 20 69 73 20 61 73 73 75 6d 65 64 20 74   it is assumed t
181e0 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63 64  o be 0..}..funcd
181f0 65 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74 72  ef {rtrim(X) rtr
18200 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  im(X,Y)} {} {.  
18210 5e 54 68 65 20 72 74 72 69 6d 28 58 2c 59 29 20  ^The rtrim(X,Y) 
18220 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
18230 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
18240 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
18250 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61   and all.  chara
18260 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61  cters that appea
18270 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65 20  r in Y from the 
18280 72 69 67 68 74 20 73 69 64 65 20 6f 66 20 58 2e  right side of X.
18290 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
182a0 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
182b0 2c 20 72 74 72 69 6d 28 58 29 20 72 65 6d 6f 76  , rtrim(X) remov
182c0 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74  es spaces from t
182d0 68 65 20 72 69 67 68 74 0a 20 20 73 69 64 65 20  he right.  side 
182e0 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
182f0 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b 7d   {soundex(X)} {}
18300 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e 64 65   {.  ^The sounde
18310 78 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  x(X) function re
18320 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
18330 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 6e 64  hat is the sound
18340 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20 20 6f  ex encoding .  o
18350 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a  f the string X..
18360 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20 22 3f    ^The string "?
18370 30 30 30 22 20 69 73 20 72 65 74 75 72 6e 65 64  000" is returned
18380 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
18390 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74   is NULL or cont
183a0 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49 49 20  ains.  no ASCII 
183b0 61 6c 70 68 61 62 65 74 69 63 20 63 68 61 72 61  alphabetic chara
183c0 63 74 65 72 73 2e 0a 20 20 5e 28 54 68 69 73 20  cters..  ^(This 
183d0 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74  function is omit
183e0 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20  ted from SQLite 
183f0 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49 74  by default..  It
18400 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62   is only availab
18410 6c 65 20 69 66 20 74 68 65 20 5b 53 51 4c 49 54  le if the [SQLIT
18420 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d 70 69  E_SOUNDEX] compi
18430 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20  le-time option. 
18440 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51   is used when SQ
18450 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e 29 5e  Lite is built.)^
18460 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c  .}..funcdef {sql
18470 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
18480 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20  n_get(N)} {} {. 
18490 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d   ^The sqlite_com
184a0 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29  pileoption_get()
184b0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
184c0 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
184d0 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33  d the.  [sqlite3
184e0 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67  _compileoption_g
184f0 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63  et()] C/C++ func
18500 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20 72 6f  tion..  ^This ro
18510 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68  utine returns th
18520 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d 74  e N-th compile-t
18530 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20  ime option used 
18540 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 0a  to build SQLite.
18550 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e 20 69    or NULL if N i
18560 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 20  s out of range. 
18570 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b 63   See also the [c
18580 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70  ompile_options p
18590 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64  ragma]..}..funcd
185a0 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69  ef {sqlite_compi
185b0 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29  leoption_used(X)
185c0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
185d0 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
185e0 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c 20 66 75  on_used() SQL fu
185f0 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
18600 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20  per around the. 
18610 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c   [sqlite3_compil
18620 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d 20  eoption_used()] 
18630 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a  C/C++ function..
18640 20 20 5e 57 68 65 6e 20 74 68 65 20 61 72 67 75    ^When the argu
18650 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c 69 74 65  ment X to sqlite
18660 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
18670 73 65 64 28 58 29 20 69 73 20 61 20 73 74 72 69  sed(X) is a stri
18680 6e 67 20 77 68 69 63 68 0a 20 20 69 73 20 74 68  ng which.  is th
18690 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6d 70  e name of a comp
186a0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c  ile-time option,
186b0 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65   this routine re
186c0 74 75 72 6e 73 20 74 72 75 65 20 28 31 29 20 6f  turns true (1) o
186d0 72 0a 20 20 66 61 6c 73 65 20 28 30 29 20 64 65  r.  false (0) de
186e0 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
186f0 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 6f  er or not that o
18700 70 74 69 6f 6e 20 77 61 73 20 75 73 65 64 20 64  ption was used d
18710 75 72 69 6e 67 20 74 68 65 0a 20 20 62 75 69 6c  uring the.  buil
18720 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  d..}..funcdef {s
18730 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
18740 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
18750 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
18760 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
18770 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  ns a string that
18780 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 0a   identifies the.
18790 20 20 73 70 65 63 69 66 69 63 20 76 65 72 73 69    specific versi
187a0 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  on of the source
187b0 20 63 6f 64 65 20 74 68 61 74 20 77 61 73 20 75   code that was u
187c0 73 65 64 20 74 6f 20 62 75 69 6c 64 20 74 68 65  sed to build the
187d0 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61 72   SQLite.  librar
187e0 79 2e 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20  y.  ^The string 
187f0 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
18800 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 62  te_source_id() b
18810 65 67 69 6e 73 20 77 69 74 68 0a 20 20 74 68 65  egins with.  the
18820 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 74   date and time t
18830 68 61 74 20 74 68 65 20 73 6f 75 72 63 65 20 63  hat the source c
18840 6f 64 65 20 77 61 73 20 63 68 65 63 6b 65 64 20  ode was checked 
18850 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c 6c 6f 77  in and is follow
18860 73 20 62 79 0a 20 20 61 6e 20 53 48 41 31 20 68  s by.  an SHA1 h
18870 61 73 68 20 74 68 61 74 20 75 6e 69 71 75 65 6c  ash that uniquel
18880 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  y identifies the
18890 20 73 6f 75 72 63 65 20 74 72 65 65 2e 20 20 5e   source tree.  ^
188a0 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
188b0 0a 20 20 61 6e 20 53 51 4c 20 77 72 61 70 70 65  .  an SQL wrappe
188c0 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
188d0 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29  lite3_sourceid()
188e0 5d 20 43 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d  ] C interface..}
188f0 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74  ..funcdef {sqlit
18900 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b 7d 20  e_version()} {} 
18910 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
18920 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74 69  version() functi
18930 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 76  on returns the v
18940 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66 6f  ersion string fo
18950 72 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c  r the SQLite.  l
18960 69 62 72 61 72 79 20 74 68 61 74 20 69 73 20 72  ibrary that is r
18970 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73 20 66  unning.  ^This f
18980 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20 53 51  unction is an SQ
18990 4c 0a 20 20 77 72 61 70 70 65 72 20 61 72 6f 75  L.  wrapper arou
189a0 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  nd the [sqlite3_
189b0 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d 20 43 2d  libversion()] C-
189c0 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
189d0 6e 63 64 65 66 20 7b 73 75 62 73 74 72 28 58 2c  ncdef {substr(X,
189e0 59 2c 5a 29 20 73 75 62 73 74 72 28 58 2c 59 29  Y,Z) substr(X,Y)
189f0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75  } {} {.  ^The su
18a00 62 73 74 72 28 58 2c 59 2c 5a 29 20 66 75 6e 63  bstr(X,Y,Z) func
18a10 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
18a20 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75  ubstring of inpu
18a30 74 20 73 74 72 69 6e 67 20 58 20 74 68 61 74 20  t string X that 
18a40 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20 74 68  begins.  with th
18a50 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72  e Y-th character
18a60 20 61 6e 64 20 77 68 69 63 68 20 69 73 20 5a 20   and which is Z 
18a70 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
18a80 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d 69 74  .  ^If Z is omit
18a90 74 65 64 20 74 68 65 6e 20 73 75 62 73 74 72 28  ted then substr(
18aa0 58 2c 59 29 20 72 65 74 75 72 6e 73 20 61 6c 6c  X,Y) returns all
18ab0 20 63 68 61 72 61 63 74 65 72 73 20 74 68 72 6f   characters thro
18ac0 75 67 68 20 74 68 65 20 65 6e 64 0a 20 20 6f 66  ugh the end.  of
18ad0 20 74 68 65 20 73 74 72 69 6e 67 20 58 20 62 65   the string X be
18ae0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 74 68 65  ginning with the
18af0 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20 6c 65   Y-th..  ^The le
18b00 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63 74 65  ft-most characte
18b10 72 20 6f 66 20 58 20 69 73 20 6e 75 6d 62 65 72  r of X is number
18b20 20 31 2e 20 20 5e 49 66 20 59 20 69 73 20 6e 65   1.  ^If Y is ne
18b30 67 61 74 69 76 65 0a 20 20 74 68 65 6e 20 74 68  gative.  then th
18b40 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65  e first characte
18b50 72 20 6f 66 20 74 68 65 20 73 75 62 73 74 72 69  r of the substri
18b60 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63  ng is found by c
18b70 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65  ounting from the
18b80 0a 20 20 72 69 67 68 74 20 72 61 74 68 65 72 20  .  right rather 
18b90 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20 20  than the left.  
18ba0 5e 49 66 20 5a 20 69 73 20 6e 65 67 61 74 69 76  ^If Z is negativ
18bb0 65 20 74 68 65 6e 0a 20 20 74 68 65 20 61 62 73  e then.  the abs
18bc0 28 5a 29 20 63 68 61 72 61 63 74 65 72 73 20 70  (Z) characters p
18bd0 72 65 63 65 64 69 6e 67 20 74 68 65 20 59 2d 74  receding the Y-t
18be0 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20  h character are 
18bf0 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49 66 20  returned..  ^If 
18c00 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68  X is a string th
18c10 65 6e 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  en characters in
18c20 64 69 63 65 73 20 72 65 66 65 72 20 74 6f 20 61  dices refer to a
18c30 63 74 75 61 6c 20 55 54 46 2d 38 20 0a 20 20 63  ctual UTF-8 .  c
18c40 68 61 72 61 63 74 65 72 73 2e 20 20 5e 49 66 20  haracters.  ^If 
18c50 58 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65 6e  X is a BLOB then
18c60 20 74 68 65 20 69 6e 64 69 63 65 73 20 72 65 66   the indices ref
18c70 65 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a  er to bytes..}..
18c80 66 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f 63  funcdef {total_c
18c90 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20  hanges()} {} {. 
18ca0 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68 61 6e   ^The total_chan
18cb0 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ges() function r
18cc0 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
18cd0 72 20 6f 66 20 72 6f 77 20 63 68 61 6e 67 65 73  r of row changes
18ce0 0a 20 20 63 61 75 73 65 64 20 62 79 20 49 4e 53  .  caused by INS
18cf0 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
18d00 45 4c 45 54 45 0a 20 20 73 74 61 74 65 6d 65 6e  ELETE.  statemen
18d10 74 73 20 73 69 6e 63 65 20 74 68 65 20 63 75 72  ts since the cur
18d20 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f  rent database co
18d30 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f 70 65  nnection was ope
18d40 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20 66 75 6e  ned..  ^This fun
18d50 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
18d60 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
18d70 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
18d80 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20  nges()].  C/C++ 
18d90 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
18da0 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20 74  ncdef {trim(X) t
18db0 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
18dc0 20 5e 54 68 65 20 74 72 69 6d 28 58 2c 59 29 20   ^The trim(X,Y) 
18dd0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
18de0 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
18df0 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
18e00 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61   and all.  chara
18e10 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61  cters that appea
18e20 72 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f 74 68  r in Y from both
18e30 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20 5e 49   ends of X..  ^I
18e40 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74  f the Y argument
18e50 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 72 69   is omitted, tri
18e60 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61  m(X) removes spa
18e70 63 65 73 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e  ces from both en
18e80 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  ds of X..}..func
18e90 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29 7d 20  def {typeof(X)} 
18ea0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79 70 65  {} {.  ^The type
18eb0 6f 66 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  of(X) function r
18ec0 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
18ed0 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
18ee0 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f 66  he [datatype] of
18ef0 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  .  the expressio
18f00 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22 69 6e  n X: "null", "in
18f10 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c 20  teger", "real", 
18f20 22 74 65 78 74 22 2c 20 6f 72 20 22 62 6c 6f 62  "text", or "blob
18f30 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75  "..}..funcdef {u
18f40 6e 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a  nicode(X)} {} {.
18f50 20 20 5e 54 68 65 20 75 6e 69 63 6f 64 65 28 58    ^The unicode(X
18f60 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
18f70 6e 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 75  ns the numeric u
18f80 6e 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e  nicode code poin
18f90 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  t corresponding 
18fa0 74 6f 0a 20 20 74 68 65 20 66 69 72 73 74 20 63  to.  the first c
18fb0 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 20  haracter of the 
18fc0 73 74 72 69 6e 67 20 58 2e 20 20 5e 49 66 20 74  string X.  ^If t
18fd0 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75  he argument to u
18fe0 6e 69 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74  nicode(X) is not
18ff0 20 61 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e   a string.  then
19000 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 75   the result is u
19010 6e 64 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e  ndefined..}..fun
19020 63 64 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20  cdef {upper(X)} 
19030 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65  {} {.  ^The uppe
19040 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  r(X) function re
19050 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
19060 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 69  input string X i
19070 6e 20 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c  n which all .  l
19080 6f 77 65 72 2d 63 61 73 65 20 41 53 43 49 49 20  ower-case ASCII 
19090 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20 63  characters are c
190a0 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68 65 69  onverted to thei
190b0 72 20 75 70 70 65 72 2d 63 61 73 65 20 65 71 75  r upper-case equ
190c0 69 76 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63  ivalent..}..func
190d0 64 65 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29  def {zeroblob(N)
190e0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65  } {} {.  ^The ze
190f0 72 6f 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69  roblob(N) functi
19100 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f  on returns a BLO
19110 42 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  B consisting of 
19120 4e 20 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e  N bytes of 0x00.
19130 0a 20 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65  .  SQLite manage
19140 73 20 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62  s these zeroblob
19150 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74  s very efficient
19160 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63  ly.  Zeroblobs c
19170 61 6e 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20  an be used to.  
19180 72 65 73 65 72 76 65 20 73 70 61 63 65 20 66 6f  reserve space fo
19190 72 20 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73  r a BLOB that is
191a0 20 6c 61 74 65 72 20 77 72 69 74 74 65 6e 20 75   later written u
191b0 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33  sing .  [sqlite3
191c0 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69  _blob_open() | i
191d0 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20  ncremental BLOB 
191e0 49 2f 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51  I/O]..  ^This SQ
191f0 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d  L function is im
19200 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20  plemented using 
19210 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73  the [sqlite3_res
19220 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a  ult_zeroblob()].
19230 20 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74    routine from t
19240 68 65 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  he C/C++ interfa
19250 63 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  ce..}.</tcl>.</t
19260 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  able>..<tcl>.###
19270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
192a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
192b0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
192c0 69 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69  ion {Date And Ti
192d0 6d 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61  me Functions} da
192e0 74 65 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e  tefunc {*datefun
192f0 63 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  c}.hd_keywords {
19300 64 61 74 65 28 29 20 53 51 4c 20 66 75 6e 63 74  date() SQL funct
19310 69 6f 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c  ion} {time() SQL
19320 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65   function}.hd_ke
19330 79 77 6f 72 64 73 20 7b 64 61 74 65 74 69 6d 65  ywords {datetime
19340 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
19350 20 7b 6a 75 6c 69 61 6e 64 61 79 28 29 20 53 51   {julianday() SQ
19360 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b  L function}.hd_k
19370 65 79 77 6f 72 64 73 20 7b 73 74 72 66 74 69 6d  eywords {strftim
19380 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
19390 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51  }.</tcl>..<p>.SQ
193a0 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 66 69  Lite supports fi
193b0 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  ve date and time
193c0 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f   functions as fo
193d0 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e  llows:.</p>..<p>
193e0 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e  .<ol>.<li> ^(<b>
193f0 64 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  date(</b><i>time
19400 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
19410 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
19420 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
19430 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69  li>.<li> ^(<b>ti
19440 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  me(</b><i>timest
19450 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
19460 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
19470 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
19480 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65  >.<li> ^(<b>date
19490 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  time(</b><i>time
194a0 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
194b0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
194c0 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
194d0 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75  li>.<li> ^(<b>ju
194e0 6c 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74  lianday(</b><i>t
194f0 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
19500 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
19510 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e  ..</i><b>)</b>)^
19520 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62   </li>.<li> ^(<b
19530 3e 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69  >strftime(</b><i
19540 3e 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74 72  >format, timestr
19550 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
19560 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
19570 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
19580 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c  .</ol>..<p>.^All
19590 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20 74   five date and t
195a0 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 61  ime functions ta
195b0 6b 65 20 61 20 74 69 6d 65 20 73 74 72 69 6e 67  ke a time string
195c0 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e   as an argument.
195d0 20 0a 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69   .^The time stri
195e0 6e 67 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  ng is followed b
195f0 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d  y zero or more m
19600 6f 64 69 66 69 65 72 73 2e 20 0a 5e 54 68 65 20  odifiers. .^The 
19610 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74  strftime() funct
19620 69 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61  ion also takes a
19630 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61   format string a
19640 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75  s its first argu
19650 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  ment..</p>..<p>.
19660 54 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  The date and tim
19670 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20  e functions use 
19680 61 20 73 75 62 73 65 74 20 6f 66 0a 5b 68 74 74  a subset of.[htt
19690 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
196a0 2e 6f 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36  .org/wiki/ISO_86
196b0 30 31 20 7c 20 49 53 30 2d 38 36 30 31 5d 20 64  01 | IS0-8601] d
196c0 61 74 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72  ate and time.for
196d0 6d 61 74 73 2e 0a 5e 54 68 65 20 64 61 74 65 28  mats..^The date(
196e0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
196f0 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e 20 74  ns the date in t
19700 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59 59  his format: YYYY
19710 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69  -MM-DD. .^The ti
19720 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  me() function re
19730 74 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61  turns the time a
19740 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68  s HH:MM:SS. .^Th
19750 65 20 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e  e datetime() fun
19760 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59  ction returns "Y
19770 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
19780 53 53 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69  SS". .^(The juli
19790 61 6e 64 61 79 28 29 20 66 75 6e 63 74 69 6f 6e  anday() function
197a0 20 72 65 74 75 72 6e 73 20 74 68 65 20 0a 5b 68   returns the .[h
197b0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
197c0 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69  ia.org/wiki/Juli
197d0 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20  an_day | Julian 
197e0 64 61 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65  day] - the.numbe
197f0 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20  r of days since 
19800 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69 63  noon in Greenwic
19810 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34  h on November 24
19820 2c 20 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68  , 4714 B.C. .([h
19830 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
19840 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c  ia.org/wiki/Prol
19850 65 70 74 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f  eptic_Gregorian_
19860 63 61 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65  calendar | Prole
19870 70 74 69 63 20 47 72 65 67 6f 72 69 61 6e 20 63  ptic Gregorian c
19880 61 6c 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68  alendar]).)^.^Th
19890 65 20 73 74 72 66 74 69 6d 65 28 29 20 72 6f 75  e strftime() rou
198a0 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65  tine returns the
198b0 20 64 61 74 65 20 66 6f 72 6d 61 74 74 65 64 20   date formatted 
198c0 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68  according to .th
198d0 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
198e0 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
198f0 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
19900 0a 5e 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72  .^The format str
19910 69 6e 67 20 73 75 70 70 6f 72 74 73 20 74 68 65  ing supports the
19920 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62   most common sub
19930 73 74 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64  stitutions found
19940 20 69 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f   in the .[http:/
19950 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f  /opengroup.org/o
19960 6e 6c 69 6e 65 70 75 62 73 2f 30 30 37 39 30 38  nlinepubs/007908
19970 37 39 39 2f 78 73 68 2f 73 74 72 66 74 69 6d 65  799/xsh/strftime
19980 2e 68 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65  .html | strftime
19990 28 29 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f  () function].fro
199a0 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  m the standard C
199b0 20 6c 69 62 72 61 72 79 20 70 6c 75 73 20 74 77   library plus tw
199c0 6f 20 6e 65 77 20 73 75 62 73 74 69 74 75 74 69  o new substituti
199d0 6f 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a  ons, %f and %J..
199e0 5e 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  ^(The following 
199f0 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69  is a complete li
19a00 73 74 20 6f 66 20 76 61 6c 69 64 20 73 74 72 66  st of valid strf
19a10 74 69 6d 65 28 29 20 73 75 62 73 74 69 74 75 74  time() substitut
19a20 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ions:.</p>..<blo
19a30 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
19a40 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70  border="0" cellp
19a50 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73  adding="0" cells
19a60 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e  pacing="0">.<tr>
19a70 3c 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 31  <td><td width="1
19a80 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  0"><td></tr>..<t
19a90 72 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74  r><td> %d <td><t
19aa0 64 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a  d> day of month:
19ab0 20 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20   00.<tr><td> %f 
19ac0 3c 74 64 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f  <td><td> fractio
19ad0 6e 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e  nal seconds: SS.
19ae0 53 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20  SSS.<tr><td> %H 
19af0 3c 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30  <td><td> hour: 0
19b00 30 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25  0-24 .<tr><td> %
19b10 6a 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  j <td><td> day o
19b20 66 20 79 65 61 72 3a 20 30 30 31 2d 33 36 36 0a  f year: 001-366.
19b30 3c 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e  <tr><td> %J <td>
19b40 3c 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20  <td> Julian day 
19b50 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20  number.<tr><td> 
19b60 25 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74  %m <td><td> mont
19b70 68 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64  h: 01-12.<tr><td
19b80 3e 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69  > %M <td><td> mi
19b90 6e 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e  nute: 00-59.<tr>
19ba0 3c 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e  <td> %s <td><td>
19bb0 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
19bc0 39 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74  970-01-01.<tr><t
19bd0 64 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73  d> %S <td><td> s
19be0 65 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74  econds: 00-59.<t
19bf0 72 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74  r><td> %w <td><t
19c00 64 3e 20 64 61 79 20 6f 66 20 77 65 65 6b 20 30  d> day of week 0
19c10 2d 36 20 77 69 74 68 20 53 75 6e 64 61 79 3d 3d  -6 with Sunday==
19c20 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74  0.<tr><td> %W <t
19c30 64 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20 79  d><td> week of y
19c40 65 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c  ear: 00-53.<tr><
19c50 74 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20  td> %Y <td><td> 
19c60 79 65 61 72 3a 20 30 30 30 30 2d 39 39 39 39 0a  year: 0000-9999.
19c70 3c 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e  <tr><td> %% <td>
19c80 3c 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a  <td> %.</table>.
19c90 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
19ca0 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68  .<p>.^(Notice th
19cb0 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61 74  at all other dat
19cc0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
19cd0 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70 72  ions can be expr
19ce0 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f  essed.in terms o
19cf0 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f  f strftime():.</
19d00 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
19d10 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
19d20 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  0" cellpadding="
19d30 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  0" cellspacing="
19d40 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46  0">.<tr><td><b>F
19d50 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77  unction</b><td w
19d60 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62  idth="30"><td><b
19d70 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72 66  >Equivalent strf
19d80 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c  time()</b>.<tr><
19d90 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29 20  td>   date(...) 
19da0 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73       <td><td>  s
19db0 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25  trftime('%Y-%m-%
19dc0 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64  d', ...).<tr><td
19dd0 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20  >   time(...)   
19de0 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72     <td><td>  str
19df0 66 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27  ftime('%H:%M:%S'
19e00 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
19e10 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20    datetime(...) 
19e20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
19e30 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48  ime('%Y-%m-%d %H
19e40 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74  :%M:%S', ...).<t
19e50 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64  r><td>   juliand
19e60 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e  ay(...) <td><td>
19e70 20 20 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c    strftime('%J',
19e80 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c   ...).</table>.<
19e90 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
19ea0 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61  <p>.The only rea
19eb0 73 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69  sons for providi
19ec0 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68  ng functions oth
19ed0 65 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65  er than strftime
19ee0 28 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e  () is.for conven
19ef0 69 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66  ience and for ef
19f00 66 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a  ficiency..</p>..
19f10 3c 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73  <h3>Time Strings
19f20 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69  </h3>..<p>^(A ti
19f30 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65  me string can be
19f40 20 69 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66   in any of the f
19f50 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73  ollowing formats
19f60 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
19f70 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
19f80 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  i>.<li> <i>YYYY-
19f90 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a  MM-DD HH:MM</i>.
19fa0 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
19fb0 44 44 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a  DD HH:MM:SS</i>.
19fc0 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
19fd0 44 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  DD HH:MM:SS.SSS<
19fe0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
19ff0 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
1a000 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  b><i>HH:MM</i>.<
1a010 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1a020 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e  D</i><b>T</b><i>
1a030 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69  HH:MM:SS</i>.<li
1a040 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1a050 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
1a060 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c  :MM:SS.SSS</i>.<
1a070 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e  li> <i>HH:MM</i>
1a080 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53  .<li> <i>HH:MM:S
1a090 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  S</i>.<li> <i>HH
1a0a0 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c  :MM:SS.SSS</i>.<
1a0b0 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c  li> <b>now</b>.<
1a0c0 6c 69 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44  li> <i>DDDDDDDDD
1a0d0 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c  D</i>.</ol>)^..<
1a0e0 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35  p>.^In formats 5
1a0f0 20 74 68 72 6f 75 67 68 20 37 2c 20 74 68 65 20   through 7, the 
1a100 22 54 22 20 69 73 20 61 20 6c 69 74 65 72 61 6c  "T" is a literal
1a110 20 63 68 61 72 61 63 74 65 72 20 73 65 70 61 72   character separ
1a120 61 74 69 6e 67 20 0a 74 68 65 20 64 61 74 65 20  ating .the date 
1a130 61 6e 64 20 74 68 65 20 74 69 6d 65 2c 20 61 73  and the time, as
1a140 20 72 65 71 75 69 72 65 64 20 62 79 20 0a 5b 68   required by .[h
1a150 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72  ttp://www.w3c.or
1a160 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69  g/TR/NOTE-dateti
1a170 6d 65 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20  me | ISO-8601]. 
1a180 0a 5e 46 6f 72 6d 61 74 73 20 38 20 74 68 72 6f  .^Formats 8 thro
1a190 75 67 68 20 31 30 20 74 68 61 74 20 73 70 65 63  ugh 10 that spec
1a1a0 69 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20  ify only a time 
1a1b0 61 73 73 75 6d 65 20 61 20 64 61 74 65 20 6f 66  assume a date of
1a1c0 20 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f   .2000-01-01. Fo
1a1d0 72 6d 61 74 20 31 31 2c 20 74 68 65 20 73 74 72  rmat 11, the str
1a1e0 69 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f  ing 'now', is co
1a1f0 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nverted into the
1a200 20 0a 63 75 72 72 65 6e 74 20 64 61 74 65 20 61   .current date a
1a210 6e 64 20 74 69 6d 65 20 61 73 20 6f 62 74 61 69  nd time as obtai
1a220 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 78 43 75  ned from the xCu
1a230 72 72 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64  rrentTime method
1a240 0a 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33  .of the [sqlite3
1a250 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20  _vfs] object in 
1a260 75 73 65 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e  use..^[http://en
1a270 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1a280 69 6b 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f  iki/Coordinated_
1a290 55 6e 69 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c  Universal_Time |
1a2a0 20 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64   Universal Coord
1a2b0 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54 43  inated Time (UTC
1a2c0 29 5d 20 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f  )] is used. .^Fo
1a2d0 72 6d 61 74 20 31 32 20 69 73 20 74 68 65 20 0a  rmat 12 is the .
1a2e0 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1a2f0 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75  edia.org/wiki/Ju
1a300 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61  lian_day | Julia
1a310 6e 20 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78  n day number].ex
1a320 70 72 65 73 73 65 64 20 61 73 20 61 20 66 6c 6f  pressed as a flo
1a330 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
1a340 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 49  e..</p>..<p>.^(I
1a350 6e 20 66 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20  n formats 4, 7, 
1a360 61 6e 64 20 31 30 2c 20 74 68 65 20 66 72 61 63  and 10, the frac
1a370 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76  tional seconds v
1a380 61 6c 75 65 20 53 53 2e 53 53 53 20 63 61 6e 20  alue SS.SSS can 
1a390 68 61 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65  have.one or more
1a3a0 20 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e   digits followin
1a3b0 67 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  g the decimal po
1a3c0 69 6e 74 2e 20 20 45 78 61 63 74 6c 79 20 74 68  int.  Exactly th
1a3d0 72 65 65 20 64 69 67 69 74 73 20 61 72 65 0a 73  ree digits are.s
1a3e0 68 6f 77 6e 20 69 6e 20 74 68 65 20 65 78 61 6d  hown in the exam
1a3f0 70 6c 65 73 20 62 65 63 61 75 73 65 20 6f 6e 6c  ples because onl
1a400 79 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65  y the first thre
1a410 65 20 64 69 67 69 74 73 20 61 72 65 20 73 69 67  e digits are sig
1a420 6e 69 66 69 63 61 6e 74 0a 74 6f 20 74 68 65 20  nificant.to the 
1a430 72 65 73 75 6c 74 2c 20 62 75 74 20 74 68 65 20  result, but the 
1a440 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63 61 6e  input string can
1a450 20 68 61 76 65 20 66 65 77 65 72 20 6f 72 20 6d   have fewer or m
1a460 6f 72 65 20 74 68 61 6e 20 74 68 72 65 65 20 64  ore than three d
1a470 69 67 69 74 73 0a 61 6e 64 20 74 68 65 20 64 61  igits.and the da
1a480 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  te/time function
1a490 73 20 77 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65  s will still ope
1a4a0 72 61 74 65 20 63 6f 72 72 65 63 74 6c 79 2e 29  rate correctly.)
1a4b0 5e 0a 53 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72  ^.Similarly, for
1a4c0 6d 61 74 20 31 32 20 69 73 20 73 68 6f 77 6e 20  mat 12 is shown 
1a4d0 77 69 74 68 20 31 30 20 73 69 67 6e 69 66 69 63  with 10 signific
1a4e0 61 6e 74 20 64 69 67 69 74 73 2c 20 62 75 74 20  ant digits, but 
1a4f0 74 68 65 20 64 61 74 65 2f 74 69 6d 65 0a 66 75  the date/time.fu
1a500 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61  nctions will rea
1a510 6c 6c 79 20 61 63 63 65 70 74 20 61 73 20 6d 61  lly accept as ma
1a520 6e 79 20 6f 72 20 61 73 20 66 65 77 20 64 69 67  ny or as few dig
1a530 69 74 73 20 61 73 20 61 72 65 20 6e 65 63 65 73  its as are neces
1a540 73 61 72 79 20 74 6f 0a 72 65 70 72 65 73 65 6e  sary to.represen
1a550 74 20 74 68 65 20 4a 75 6c 69 61 6e 20 64 61 79  t the Julian day
1a560 20 6e 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c   number..</p>..<
1a570 68 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33  h3>Modifiers</h3
1a580 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20  >..<p>^The time 
1a590 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f  string can be fo
1a5a0 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
1a5b0 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73  r more modifiers
1a5c0 20 74 68 61 74 20 0a 61 6c 74 65 72 20 64 61 74   that .alter dat
1a5d0 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e  e and/or time. ^
1a5e0 45 61 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73  Each modifier.is
1a5f0 20 61 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f   a transformatio
1a600 6e 20 74 68 61 74 20 69 73 20 61 70 70 6c 69 65  n that is applie
1a610 64 20 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61  d to the time va
1a620 6c 75 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e  lue to its left.
1a630 0a 5e 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20  .^Modifiers are 
1a640 61 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66  applied from lef
1a650 74 20 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65  t to right; orde
1a660 72 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a  r is important..
1a670 5e 28 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20  ^(The available 
1a680 6d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 73  modifiers are as
1a690 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c   follows.</p>..<
1a6a0 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79  ol>.<li> NNN day
1a6b0 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73  s.<li> NNN hours
1a6c0 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65  .<li> NNN minute
1a6d0 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20  s.<li> NNN.NNNN 
1a6e0 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e  seconds.<li> NNN
1a6f0 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e   months.<li> NNN
1a700 20 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72   years.<li> star
1a710 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20  t of month.<li> 
1a720 73 74 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c  start of year.<l
1a730 69 3e 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a  i> start of day.
1a740 3c 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c  <li> weekday N.<
1a750 6c 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c  li> unixepoch.<l
1a760 69 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69  i> localtime.<li
1a770 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a  > utc .</ol>)^..
1a780 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69  <p>^The first si
1a790 78 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74  x modifiers (1 t
1a7a0 68 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c  hrough 6) .simpl
1a7b0 79 20 61 64 64 20 74 68 65 20 73 70 65 63 69 66  y add the specif
1a7c0 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69  ied amount of ti
1a7d0 6d 65 20 74 6f 20 74 68 65 20 64 61 74 65 20 61  me to the date a
1a7e0 6e 64 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69  nd time .specifi
1a7f0 65 64 20 62 79 20 74 68 65 20 70 72 65 63 65 64  ed by the preced
1a800 69 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61  ing timestring a
1a810 6e 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 4e  nd modifiers..^N
1a820 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d  ote that "&plusm
1a830 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f  n;NNN months" wo
1a840 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67  rks by rendering
1a850 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61   the original da
1a860 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59  te into.the YYYY
1a870 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61  -MM-DD format, a
1a880 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d  dding the &plusm
1a890 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20  n;NNN to the MM 
1a8a0 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65  month value, the
1a8b0 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68  n.normalizing th
1a8c0 65 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73  e result.  ^Thus
1a8d0 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  , for example, t
1a8e0 68 65 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d  he data 2001-03-
1a8f0 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27  31 modified.by '
1a900 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61  +1 month' initia
1a910 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d  lly yields 2001-
1a920 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c  04-31, but April
1a930 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79   only has 30 day
1a940 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69 73  s.so the date is
1a950 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32   normalized to 2
1a960 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73  001-05-01.  ^A s
1a970 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63  imilar effect oc
1a980 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72  curs when.the or
1a990 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46  iginal date is F
1a9a0 65 62 72 75 61 72 79 20 32 39 20 6f 66 20 61 20  ebruary 29 of a 
1a9b0 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74 68 65  leapyear and the
1a9c0 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c   modifier is.&pl
1a9d0 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65  usmn;N years whe
1a9e0 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75  re N is not a mu
1a9f0 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c  ltiple of four.<
1aa00 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74  /p>..<p>^The "st
1aa10 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72  art of" modifier
1aa20 73 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20  s (7 through 9) 
1aa30 73 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62  shift the date b
1aa40 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65  ackwards .to the
1aa50 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
1aa60 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c  e current month,
1aa70 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70   year or day.</p
1aa80 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b  >..<p>^The "week
1aa90 64 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64  day" modifier ad
1aaa0 76 61 6e 63 65 73 20 74 68 65 20 64 61 74 65 20  vances the date 
1aab0 66 6f 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e  forward to the n
1aac0 65 78 74 20 64 61 74 65 20 0a 77 68 65 72 65 20  ext date .where 
1aad0 74 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62  the weekday numb
1aae0 65 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20  er is N. Sunday 
1aaf0 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20  is 0, Monday is 
1ab00 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  1, and so forth.
1ab10 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75  </p>..<p>^The "u
1ab20 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1ab30 65 72 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72  er (11) only wor
1ab40 6b 73 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61  ks if it immedia
1ab50 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20  tely follows .a 
1ab60 74 69 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68  timestring in th
1ab70 65 20 44 44 44 44 44 44 44 44 44 44 20 66 6f 72  e DDDDDDDDDD for
1ab80 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69  mat. .^This modi
1ab90 66 69 65 72 20 63 61 75 73 65 73 20 74 68 65 20  fier causes the 
1aba0 44 44 44 44 44 44 44 44 44 44 20 74 6f 20 62 65  DDDDDDDDDD to be
1abb0 20 69 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74   interpreted not
1abc0 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61   .as a Julian da
1abd0 79 20 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e  y number as it n
1abe0 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65  ormally would be
1abf0 2c 20 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f  , but as.[http:/
1ac00 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1ac10 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65  g/wiki/Unix_time
1ac20 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20   | Unix Time] - 
1ac30 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73  the .number of s
1ac40 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37  econds since 197
1ac50 30 2e 20 20 49 66 20 74 68 65 20 22 75 6e 69 78  0.  If the "unix
1ac60 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
1ac70 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20  does not.follow 
1ac80 61 20 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20  a timestring of 
1ac90 74 68 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44  the form DDDDDDD
1aca0 44 44 44 20 77 68 69 63 68 20 65 78 70 72 65 73  DDD which expres
1acb0 73 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  ses the number.o
1acc0 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  f seconds since 
1acd0 31 39 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72  1970 or if other
1ace0 20 6d 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72   modifiers.separ
1acf0 61 74 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f  ate the "unixepo
1ad00 63 68 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f  ch" modifier fro
1ad10 6d 20 70 72 69 6f 72 20 44 44 44 44 44 44 44 44  m prior DDDDDDDD
1ad20 44 44 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61  DD then the.beha
1ad30 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65  vior is undefine
1ad40 64 2e 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73  d..Due to precis
1ad50 69 6f 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20  ion limitations 
1ad60 69 6d 70 6f 73 65 64 20 62 79 20 74 68 65 20 69  imposed by the i
1ad70 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75  mplementations u
1ad80 73 65 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74  se.of 64-bit int
1ad90 65 67 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78  egers, the "unix
1ada0 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
1adb0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64  only works for.d
1adc0 61 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30  ates between 000
1add0 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30  0-01-01 00:00:00
1ade0 20 61 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20   and 5352-11-01 
1adf0 31 30 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74  10:52:47 (unix t
1ae00 69 6d 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31  imes.of -6216721
1ae10 39 32 30 30 20 74 68 72 6f 75 67 68 20 31 30 36  9200 through 106
1ae20 37 35 31 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a  75199167).</p>..
1ae30 3c 70 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69  <p>^The "localti
1ae40 6d 65 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32  me" modifier (12
1ae50 29 20 61 73 73 75 6d 65 73 20 74 68 65 20 74 69  ) assumes the ti
1ae60 6d 65 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73  me string to its
1ae70 20 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e 69 76   left is in.Univ
1ae80 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65  ersal Coordinate
1ae90 64 20 54 69 6d 65 20 28 55 54 43 29 20 61 6e 64  d Time (UTC) and
1aea0 20 61 64 6a 75 73 74 73 20 74 68 65 20 74 69 6d   adjusts the tim
1aeb0 65 0a 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74  e.string so that
1aec0 20 69 74 20 64 69 73 70 6c 61 79 73 20 6c 6f 63   it displays loc
1aed0 61 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63  altime.  If "loc
1aee0 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20  altime".follows 
1aef0 61 20 74 69 6d 65 20 74 68 61 74 20 69 73 20 6e  a time that is n
1af00 6f 74 20 55 54 43 2c 20 74 68 65 6e 20 74 68 65  ot UTC, then the
1af10 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
1af20 65 66 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75  efined..^(The "u
1af30 74 63 22 20 69 73 20 74 68 65 20 6f 70 70 6f 73  tc" is the oppos
1af40 69 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d  ite of "localtim
1af50 65 22 2e 20 20 22 75 74 63 22 20 61 73 73 75 6d  e".  "utc" assum
1af60 65 73 20 74 68 61 74 20 74 68 65 20 73 74 72 69  es that the stri
1af70 6e 67 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69  ng.to its left i
1af80 73 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74  s in the local t
1af90 69 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75  imezone and adju
1afa0 73 74 73 20 74 68 61 74 20 73 74 72 69 6e 67 20  sts that string 
1afb0 74 6f 20 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a  to be in UTC.)^.
1afc0 49 66 20 74 68 65 20 70 72 69 6f 72 20 73 74 72  If the prior str
1afd0 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f  ing is not in lo
1afe0 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74 68  caltime, then th
1aff0 65 20 72 65 73 75 6c 74 20 6f 66 20 22 75 74 63  e result of "utc
1b000 22 20 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c  " is.undefined.<
1b010 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65  /p>..<h3>Example
1b020 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d  s</h3>..^(<p>Com
1b030 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  pute the current
1b040 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63   date.<p>..<bloc
1b050 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61  kquote>SELECT da
1b060 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63  te('now');</bloc
1b070 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1b080 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74  Compute the last
1b090 20 64 61 79 20 6f 66 20 74 68 65 20 63 75 72 72   day of the curr
1b0a0 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a  ent month.</p>..
1b0b0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45  <blockquote>SELE
1b0c0 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73  CT date('now','s
1b0d0 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27  tart of month','
1b0e0 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61  +1 month','-1 da
1b0f0 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  y');.</blockquot
1b100 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
1b110 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  te the date and 
1b120 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69  time given a uni
1b130 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32  x timestamp 1092
1b140 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c  941466.</p>..<bl
1b150 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45  ockquote>.    SE
1b160 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30  LECT datetime(10
1b170 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65  92941466, 'unixe
1b180 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  poch');.</blockq
1b190 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
1b1a0 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61  mpute the date a
1b1b0 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20  nd time given a 
1b1c0 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31  unix timestamp 1
1b1d0 30 39 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a  092941466, and .
1b1e0 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79  compensate for y
1b1f0 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f  our local timezo
1b200 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ne.</p>..<blockq
1b210 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64  uote>.  SELECT d
1b220 61 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34  atetime(10929414
1b230 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c  66, 'unixepoch',
1b240 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c   'localtime');.<
1b250 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1b260 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1b270 20 63 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69   current unix ti
1b280 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62  mestamp.</p>..<b
1b290 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
1b2a0 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73  ECT strftime('%s
1b2b0 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63  ','now');.</bloc
1b2c0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1b2d0 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  Compute the numb
1b2e0 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65  er of days since
1b2f0 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20   the signing of 
1b300 74 68 65 20 55 53 20 44 65 63 6c 61 72 61 74 69  the US Declarati
1b310 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e  on.of Independen
1b320 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ce.</p>..<blockq
1b330 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a  uote>.  SELECT j
1b340 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20  ulianday('now') 
1b350 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 37 37  - julianday('177
1b360 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f  6-07-04');.</blo
1b370 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1b380 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d  >Compute the num
1b390 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber of seconds s
1b3a0 69 6e 63 65 20 61 20 70 61 72 74 69 63 75 6c 61  ince a particula
1b3b0 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34  r moment in 2004
1b3c0 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
1b3d0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72  te>.  SELECT str
1b3e0 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
1b3f0 29 20 2d 20 73 74 72 66 74 69 6d 65 28 27 25 73  ) - strftime('%s
1b400 27 2c 27 32 30 30 34 2d 30 31 2d 30 31 20 30 32  ','2004-01-01 02
1b410 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63  :34:56');.</bloc
1b420 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1b430 0a 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74  .Compute the dat
1b440 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 54  e of the first T
1b450 75 65 73 64 61 79 20 69 6e 20 4f 63 74 6f 62 65  uesday in Octobe
1b460 72 0a 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  r.for the curren
1b470 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62  t year..</p>..<b
1b480 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
1b490 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27  ECT date('now','
1b4a0 73 74 61 72 74 20 6f 66 20 79 65 61 72 27 2c 27  start of year','
1b4b0 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b  +9 months','week
1b4c0 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  day 2');.</block
1b4d0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1b4e0 6f 6d 70 75 74 65 20 74 68 65 20 74 69 6d 65 20  ompute the time 
1b4f0 73 69 6e 63 65 20 74 68 65 20 75 6e 69 78 20 65  since the unix e
1b500 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64 73 20  poch in seconds 
1b510 0a 28 6c 69 6b 65 20 73 74 72 66 74 69 6d 65 28  .(like strftime(
1b520 27 25 73 27 2c 27 6e 6f 77 27 29 20 65 78 63 65  '%s','now') exce
1b530 70 74 20 69 6e 63 6c 75 64 65 73 20 66 72 61 63  pt includes frac
1b540 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70  tional part):</p
1b550 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1b560 20 20 53 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e    SELECT (julian
1b570 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 32 34 34  day('now') - 244
1b580 30 35 38 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b  0587.5)*86400.0;
1b590 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1b5a0 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73 20 41 6e  ..<h3>Caveats An
1b5b0 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  d Bugs</h3>..<p>
1b5c0 54 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20  The computation 
1b5d0 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65  of local time de
1b5e0 70 65 6e 64 73 20 68 65 61 76 69 6c 79 20 6f 6e  pends heavily on
1b5f0 20 74 68 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f   the whim .of po
1b600 6c 69 74 69 63 69 61 6e 73 20 61 6e 64 20 69 73  liticians and is
1b610 20 74 68 75 73 20 64 69 66 66 69 63 75 6c 74 20   thus difficult 
1b620 74 6f 20 67 65 74 20 63 6f 72 72 65 63 74 20 66  to get correct f
1b630 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e  or .all locales.
1b640 20 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d   ^In this implem
1b650 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 73 74  entation, the st
1b660 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
1b670 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c   .function local
1b680 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73 65 64  time_r() is used
1b690 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20 74 68   to assist in th
1b6a0 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66  e calculation of
1b6b0 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e   .local time.  ^
1b6c0 28 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f  (The .localtime_
1b6d0 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e  r() C function n
1b6e0 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72  ormally only wor
1b6f0 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74  ks for years.bet
1b700 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30  ween 1970 and 20
1b710 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75  37. For dates ou
1b720 74 73 69 64 65 20 74 68 69 73 20 72 61 6e 67 65  tside this range
1b730 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70  , SQLite .attemp
1b740 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65  ts to map the ye
1b750 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76  ar into an equiv
1b760 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74 68 69  alent year withi
1b770 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64  n .this range, d
1b780 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f  o the calculatio
1b790 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20  n, then map the 
1b7a0 79 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e  year back.)^</p>
1b7b0 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20 66 75  ...<p>^(These fu
1b7c0 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72  nctions only wor
1b7d0 6b 20 66 6f 72 20 64 61 74 65 73 20 62 65 74 77  k for dates betw
1b7e0 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30  een 0000-01-01 0
1b7f0 30 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39 39 39  0:00:00.and 9999
1b800 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 20  -12-31 23:59:59 
1b810 28 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d  (julidan day num
1b820 62 65 72 73 20 31 37 32 31 30 35 39 2e 35 20 74  bers 1721059.5 t
1b830 68 72 6f 75 67 68 20 35 33 37 33 34 38 34 2e 35  hrough 5373484.5
1b840 29 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f  ).)^.For dates o
1b850 75 74 73 69 64 65 20 74 68 61 74 20 72 61 6e 67  utside that rang
1b860 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  e, the results o
1b870 66 20 74 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e  f these.function
1b880 73 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e  s are undefined.
1b890 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73  </p>..<p>Non-Vis
1b8a0 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66  ta Windows platf
1b8b0 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72  orms only suppor
1b8c0 74 20 6f 6e 65 20 73 65 74 20 6f 66 20 44 53 54  t one set of DST
1b8d0 20 72 75 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f   rules. .Vista o
1b8e0 6e 6c 79 20 73 75 70 70 6f 72 74 73 20 74 77 6f  nly supports two
1b8f0 2e 20 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20  . Therefore, on 
1b900 74 68 65 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c  these platforms,
1b910 20 0a 68 69 73 74 6f 72 69 63 61 6c 20 44 53 54   .historical DST
1b920 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69   calculations wi
1b930 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e  ll be incorrect.
1b940 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69   .For example, i
1b950 6e 20 74 68 65 20 55 53 2c 20 69 6e 20 32 30 30  n the US, in 200
1b960 37 20 74 68 65 20 44 53 54 20 72 75 6c 65 73 20  7 the DST rules 
1b970 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69  changed. .Non-Vi
1b980 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74  sta Windows plat
1b990 66 6f 72 6d 73 20 61 70 70 6c 79 20 74 68 65 20  forms apply the 
1b9a0 6e 65 77 20 32 30 30 37 20 44 53 54 20 72 75 6c  new 2007 DST rul
1b9b0 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69  es .to all previ
1b9c0 6f 75 73 20 79 65 61 72 73 20 61 73 20 77 65 6c  ous years as wel
1b9d0 6c 2e 20 56 69 73 74 61 20 64 6f 65 73 20 73 6f  l. Vista does so
1b9e0 6d 65 77 68 61 74 20 62 65 74 74 65 72 0a 67 65  mewhat better.ge
1b9f0 74 74 69 6e 67 20 72 65 73 75 6c 74 73 20 63 6f  tting results co
1ba00 72 72 65 63 74 20 62 61 63 6b 20 74 6f 20 31 39  rrect back to 19
1ba10 38 36 2c 20 77 68 65 6e 20 74 68 65 20 72 75 6c  86, when the rul
1ba20 65 73 20 77 65 72 65 20 61 6c 73 6f 20 63 68 61  es were also cha
1ba30 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c  nged.</p>..<p>Al
1ba40 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75  l internal compu
1ba50 74 61 74 69 6f 6e 73 20 61 73 73 75 6d 65 20 74  tations assume t
1ba60 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  he .[http://en.w
1ba70 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
1ba80 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65  i/Gregorian_cale
1ba90 6e 64 61 72 20 7c 20 47 72 65 67 6f 72 69 61 6e  ndar | Gregorian
1baa0 20 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65   calendar].syste
1bab0 6d 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20 61  m.  It is also a
1bac0 73 73 75 6d 65 64 20 74 68 61 74 20 65 76 65 72  ssumed that ever
1bad0 79 0a 64 61 79 20 69 73 20 65 78 61 63 74 6c 79  y.day is exactly
1bae0 20 38 36 34 30 30 20 73 65 63 6f 6e 64 73 20 69   86400 seconds i
1baf0 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a  n duration.</p>.
1bb00 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
1bb10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bb20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bb30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bb40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bb50 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41  #####.Section {A
1bb60 67 67 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f  ggregate Functio
1bb70 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a 61 67  ns} aggfunc {*ag
1bb80 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  gfunc}.</tcl>..<
1bb90 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74 65  p>.The aggregate
1bba0 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e   functions shown
1bbb0 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c   below are avail
1bbc0 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e  able by default.
1bbd0 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67    Additional.agg
1bbe0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1bbf0 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61   written in C ma
1bc00 79 20 62 65 20 61 64 64 65 64 20 75 73 69 6e 67  y be added using
1bc10 20 74 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63   the .[sqlite3_c
1bc20 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
1bc30 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a  ]</a>.API.</p>..
1bc40 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72  <p>.^In any aggr
1bc50 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 74  egate function t
1bc60 68 61 74 20 74 61 6b 65 73 20 61 20 73 69 6e 67  hat takes a sing
1bc70 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 61  le argument, tha
1bc80 74 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62  t argument.can b
1bc90 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68  e preceded by th
1bca0 65 20 6b 65 79 77 6f 72 64 20 44 49 53 54 49 4e  e keyword DISTIN
1bcb0 43 54 2e 20 20 5e 49 6e 20 73 75 63 68 20 63 61  CT.  ^In such ca
1bcc0 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65 0a 65  ses, duplicate.e
1bcd0 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69 6c 74  lements are filt
1bce0 65 72 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e  ered before bein
1bcf0 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68  g passed into th
1bd00 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
1bd10 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70  tion..^For examp
1bd20 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  le, the function
1bd30 20 22 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74   "count(distinct
1bd40 20 58 29 22 20 77 69 6c 6c 20 72 65 74 75 72 6e   X)" will return
1bd50 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64   the number.of d
1bd60 69 73 74 69 6e 63 74 20 76 61 6c 75 65 73 20 6f  istinct values o
1bd70 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65  f column X inste
1bd80 61 64 20 6f 66 20 74 68 65 20 74 6f 74 61 6c 20  ad of the total 
1bd90 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75  number of non-nu
1bda0 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c  ll.values in col
1bdb0 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61  umn X..</p>..<ta
1bdc0 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
1bdd0 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63  lpadding=10>.<tc
1bde0 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 76 67 28  l>.funcdef {avg(
1bdf0 58 29 7d 20 7b 2a 61 76 67 20 7b 61 76 67 28 29  X)} {*avg {avg()
1be00 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1be10 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61  ion}} {.  ^The a
1be20 76 67 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  vg() function.  
1be30 72 65 74 75 72 6e 73 20 74 68 65 20 61 76 65 72  returns the aver
1be40 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  age value of all
1be50 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f   non-NULL <i>X</
1be60 69 3e 20 77 69 74 68 69 6e 20 61 0a 20 20 67 72  i> within a.  gr
1be70 6f 75 70 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e  oup.  ^String an
1be80 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 20 74 68  d BLOB values th
1be90 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c  at do not look l
1bea0 69 6b 65 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ike numbers are.
1beb0 20 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73    interpreted as
1bec0 20 30 2e 0a 20 20 5e 54 68 65 20 72 65 73 75 6c   0..  ^The resul
1bed0 74 20 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c  t of avg() is al
1bee0 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  ways a floating 
1bef0 70 6f 69 6e 74 20 76 61 6c 75 65 20 61 73 20 6c  point value as l
1bf00 6f 6e 67 20 61 73 0a 20 20 61 74 20 74 68 65 72  ong as.  at ther
1bf10 65 20 69 73 20 61 74 20 6c 65 61 73 74 20 6f 6e  e is at least on
1bf20 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  e non-NULL input
1bf30 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69   even if all.  i
1bf40 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67 65  nputs are intege
1bf50 72 73 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74  rs.  ^The result
1bf60 20 6f 66 20 61 76 67 28 29 20 69 73 20 4e 55 4c   of avg() is NUL
1bf70 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  L if and only if
1bf80 0a 20 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  .  there are no 
1bf90 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e  non-NULL inputs.
1bfa0 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63    .}..funcdef {c
1bfb0 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74 28 2a 29  ount(X) count(*)
1bfc0 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74  } {*count {count
1bfd0 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1bfe0 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
1bff0 20 63 6f 75 6e 74 28 58 29 20 66 75 6e 63 74 69   count(X) functi
1c000 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20 63  on returns.  a c
1c010 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62  ount of the numb
1c020 65 72 20 6f 66 20 74 69 6d 65 73 0a 20 20 74 68  er of times.  th
1c030 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e  at <i>X</i> is n
1c040 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f  ot NULL in a gro
1c050 75 70 2e 20 20 5e 54 68 65 20 63 6f 75 6e 74 28  up.  ^The count(
1c060 2a 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77  *) function.  (w
1c070 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73  ith no arguments
1c080 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 6f  ) returns the to
1c090 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  tal number of ro
1c0a0 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ws in the group.
1c0b0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f  .}..funcdef {gro
1c0c0 75 70 5f 63 6f 6e 63 61 74 28 58 29 20 67 72 6f  up_concat(X) gro
1c0d0 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20  up_concat(X,Y)} 
1c0e0 7b 0a 20 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61  {.  *group_conca
1c0f0 74 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  t {group_concat(
1c100 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1c110 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65  tion}.} {.  ^The
1c120 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20   group_concat() 
1c130 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1c140 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68 69 63  .  a string whic
1c150 68 20 69 73 20 74 68 65 20 63 6f 6e 63 61 74 65  h is the concate
1c160 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20  nation of.  all 
1c170 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20  non-NULL values 
1c180 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49  of <i>X</i>.  ^I
1c190 66 20 70 61 72 61 6d 65 74 65 72 20 3c 69 3e 59  f parameter <i>Y
1c1a0 3c 2f 69 3e 20 69 73 20 70 72 65 73 65 6e 74 20  </i> is present 
1c1b0 74 68 65 6e 0a 20 20 69 74 20 69 73 20 75 73 65  then.  it is use
1c1c0 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74  d as the separat
1c1d0 6f 72 0a 20 20 62 65 74 77 65 65 6e 20 69 6e 73  or.  between ins
1c1e0 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f  tances of <i>X</
1c1f0 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22  i>.  ^A comma ("
1c200 2c 22 29 20 69 73 20 75 73 65 64 20 61 73 20 74  ,") is used as t
1c210 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 69  he separator.  i
1c220 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d  f <i>Y</i> is om
1c230 69 74 74 65 64 2e 20 20 54 68 65 20 6f 72 64 65  itted.  The orde
1c240 72 20 6f 66 20 74 68 65 20 63 6f 6e 63 61 74 65  r of the concate
1c250 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73 20 69  nated elements i
1c260 73 0a 20 20 61 72 62 69 74 72 61 72 79 2e 0a 7d  s.  arbitrary..}
1c270 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58  ..funcdef {max(X
1c280 29 7d 20 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20  )} {*maxAggFunc 
1c290 2a 61 67 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20  *agg_max {max() 
1c2a0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1c2b0 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61  on}} {.  ^The ma
1c2c0 78 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  x() aggregate fu
1c2d0 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73  nction.  returns
1c2e0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c   the maximum val
1c2f0 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73  ue of all values
1c300 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
1c310 20 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61   ^The maximum va
1c320 6c 75 65 20 69 73 20 74 68 65 20 76 61 6c 75 65  lue is the value
1c330 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72   that would be r
1c340 65 74 75 72 6e 65 64 20 6c 61 73 74 20 69 6e 20  eturned last in 
1c350 61 6e 0a 20 20 4f 52 44 45 52 20 42 59 20 6f 6e  an.  ORDER BY on
1c360 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e   the same column
1c370 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 61  .  ^Aggregate ma
1c380 78 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  x() returns NULL
1c390 20 0a 20 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20   .  if and only 
1c3a0 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
1c3b0 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20  non-NULL values 
1c3c0 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
1c3d0 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29  .funcdef {min(X)
1c3e0 7d 20 7b 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a  } {*minAggFunc *
1c3f0 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61  agg_min {min() a
1c400 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1c410 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e  n}} {.  ^The min
1c420 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1c430 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20  ction.  returns 
1c440 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d  the minimum non-
1c450 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c  NULL value of al
1c460 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  l values in the 
1c470 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69  group..  ^The mi
1c480 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74  nimum value is t
1c490 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  he first non-NUL
1c4a0 4c 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75  L value that wou
1c4b0 6c 64 20 61 70 70 65 61 72 0a 20 20 69 6e 20 61  ld appear.  in a
1c4c0 6e 20 4f 52 44 45 52 20 42 59 20 6f 66 20 74 68  n ORDER BY of th
1c4d0 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67  e column..  ^Agg
1c4e0 72 65 67 61 74 65 20 6d 69 6e 28 29 20 72 65 74  regate min() ret
1c4f0 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64  urns NULL if and
1c500 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61   only if there a
1c510 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20  re no non-NULL. 
1c520 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
1c530 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  roup..}..funcdef
1c540 20 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c 28 58   {sum(X) total(X
1c550 29 7d 20 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20  )} {.  *sumFunc 
1c560 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73  *sum *total.  {s
1c570 75 6d 28 29 20 61 67 67 72 65 67 61 74 65 20 66  um() aggregate f
1c580 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61  unction}.  {tota
1c590 6c 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  l() aggregate fu
1c5a0 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54  nction}.} {.  ^T
1c5b0 68 65 20 73 75 6d 28 29 20 61 6e 64 20 74 6f 74  he sum() and tot
1c5c0 61 6c 28 29 20 61 67 67 72 65 67 61 74 65 20 66  al() aggregate f
1c5d0 75 6e 63 74 69 6f 6e 73 0a 20 20 72 65 74 75 72  unctions.  retur
1c5e0 6e 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e  n sum of all non
1c5f0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20  -NULL values in 
1c600 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66  the group..  ^If
1c610 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
1c620 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77  n-NULL input row
1c630 73 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74  s then sum() ret
1c640 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20  urns.  NULL but 
1c650 74 6f 74 61 6c 28 29 20 72 65 74 75 72 6e 73 20  total() returns 
1c660 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e  0.0..  NULL is n
1c670 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65  ot normally a he
1c680 6c 70 66 75 6c 20 72 65 73 75 6c 74 20 66 6f 72  lpful result for
1c690 20 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72   the sum of no r
1c6a0 6f 77 73 0a 20 20 62 75 74 20 74 68 65 20 53 51  ows.  but the SQ
1c6b0 4c 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69  L standard requi
1c6c0 72 65 73 20 69 74 20 61 6e 64 20 6d 6f 73 74 20  res it and most 
1c6d0 6f 74 68 65 72 0a 20 20 53 51 4c 20 64 61 74 61  other.  SQL data
1c6e0 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69 6d 70  base engines imp
1c6f0 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20 74 68 61  lement sum() tha
1c700 74 20 77 61 79 20 73 6f 20 53 51 4c 69 74 65 20  t way so SQLite 
1c710 64 6f 65 73 20 69 74 20 69 6e 20 74 68 65 0a 20  does it in the. 
1c720 20 73 61 6d 65 20 77 61 79 20 69 6e 20 6f 72 64   same way in ord
1c730 65 72 20 74 6f 20 62 65 20 63 6f 6d 70 61 74 69  er to be compati
1c740 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73  ble.   The non-s
1c750 74 61 6e 64 61 72 64 20 74 6f 74 61 6c 28 29 20  tandard total() 
1c760 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20 70 72  function.  is pr
1c770 6f 76 69 64 65 64 20 61 73 20 61 20 63 6f 6e 76  ovided as a conv
1c780 65 6e 69 65 6e 74 20 77 61 79 20 74 6f 20 77 6f  enient way to wo
1c790 72 6b 20 61 72 6f 75 6e 64 20 74 68 69 73 20 64  rk around this d
1c7a0 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20  esign problem.  
1c7b0 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75  in the SQL langu
1c7c0 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e  age.</p>..  <p>^
1c7d0 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 6f  The result of to
1c7e0 74 61 6c 28 29 20 69 73 20 61 6c 77 61 79 73 20  tal() is always 
1c7f0 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
1c800 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72   value..  ^The r
1c810 65 73 75 6c 74 20 6f 66 20 73 75 6d 28 29 20 69  esult of sum() i
1c820 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  s an integer val
1c830 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  ue if all non-NU
1c840 4c 4c 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e  LL inputs are in
1c850 74 65 67 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e  tegers..  ^If an
1c860 79 20 69 6e 70 75 74 20 74 6f 20 73 75 6d 28 29  y input to sum()
1c870 20 69 73 20 6e 65 69 74 68 65 72 20 61 6e 20 69   is neither an i
1c880 6e 74 65 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c  nteger or a NULL
1c890 0a 20 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65  .  then sum() re
1c8a0 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67  turns a floating
1c8b0 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20 77   point value.  w
1c8c0 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 61 6e  hich might be an
1c8d0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74   approximation t
1c8e0 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d 2e 3c  o the true sum.<
1c8f0 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29  /p>..  <p>^Sum()
1c900 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22   will throw an "
1c910 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
1c920 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61  " exception if a
1c930 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61 72 65 20  ll inputs.  are 
1c940 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c  integers or NULL
1c950 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65  .  and an intege
1c960 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72  r overflow occur
1c970 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74 20 64  s at any point d
1c980 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70 75 74  uring the comput
1c990 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28  ation..  ^Total(
1c9a0 29 20 6e 65 76 65 72 20 74 68 72 6f 77 73 20 61  ) never throws a
1c9b0 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
1c9c0 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  ow..}.</tcl>.</t
1c9d0 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  able>..<tcl>.###
1c9e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c9f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca20 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
1ca30 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72  ion INSERT inser
1ca40 74 20 7b 49 4e 53 45 52 54 20 2a 49 4e 53 45 52  t {INSERT *INSER
1ca50 54 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  Ts}..BubbleDiagr
1ca60 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 20 31  am insert-stmt 1
1ca70 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
1ca80 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
1ca90 20 63 6f 6d 65 73 20 69 6e 20 74 68 72 65 65 20   comes in three 
1caa0 62 61 73 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c  basic forms.  .<
1cab0 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20  ul>.<li><p>^The 
1cac0 66 69 72 73 74 20 66 6f 72 6d 20 28 77 69 74 68  first form (with
1cad0 20 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65   the "VALUES" ke
1cae0 79 77 6f 72 64 29 20 63 72 65 61 74 65 73 20 6f  yword) creates o
1caf0 6e 65 20 6f 72 20 6d 6f 72 65 0a 6e 65 77 20 72  ne or more.new r
1cb00 6f 77 73 20 69 6e 0a 61 6e 20 65 78 69 73 74 69  ows in.an existi
1cb10 6e 67 20 74 61 62 6c 65 2e 20 5e 49 66 20 6e 6f  ng table. ^If no
1cb20 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20   column-list is 
1cb30 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 20 74  specified then t
1cb40 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 76 61 6c  he number.of val
1cb50 75 65 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74  ues inserted int
1cb60 6f 20 65 61 63 68 20 72 6f 77 0a 6d 75 73 74 20  o each row.must 
1cb70 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  be the same as t
1cb80 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1cb90 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
1cba0 65 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  e. ^In this case
1cbb0 0a 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65  .the result of e
1cbc0 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 6c 65  valuating the le
1cbd0 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69  ft-most expressi
1cbe0 6f 6e 20 69 6e 20 65 61 63 68 20 74 65 72 6d 20  on in each term 
1cbf0 6f 66 0a 74 68 65 20 56 41 4c 55 45 53 20 6c 69  of.the VALUES li
1cc00 73 74 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  st is inserted i
1cc10 6e 74 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  nto the left-mos
1cc20 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
1cc30 65 61 63 68 20 6e 65 77 20 72 6f 77 2c 0a 61 6e  each new row,.an
1cc40 64 20 66 6f 72 74 68 20 66 6f 72 20 65 61 63 68  d forth for each
1cc50 20 73 75 62 73 65 71 75 65 6e 74 20 65 78 70 72   subsequent expr
1cc60 65 73 73 69 6f 6e 2e 20 5e 49 66 20 61 0a 63 6f  ession. ^If a.co
1cc70 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65  lumn-list is spe
1cc80 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65  cified, then the
1cc90 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   number of value
1cca0 73 20 69 6e 20 65 61 63 68 20 74 65 72 6d 20 6f  s in each term o
1ccb0 66 20 74 68 65 0a 56 41 4c 55 53 20 6c 69 73 74  f the.VALUS list
1ccc0 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65 20   must match the 
1ccd0 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65 63 69 66  number of.specif
1cce0 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61  ied columns. ^Ea
1ccf0 63 68 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20  ch of the named 
1cd00 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6e  columns of the n
1cd10 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61  ew row is popula
1cd20 74 65 64 0a 77 69 74 68 20 74 68 65 20 72 65 73  ted.with the res
1cd30 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69  ults of evaluati
1cd40 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
1cd50 64 69 6e 67 20 56 41 4c 55 45 53 20 65 78 70 72  ding VALUES expr
1cd60 65 73 73 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63  ession. ^Table.c
1cd70 6f 6c 75 6d 6e 73 20 74 68 61 74 20 64 6f 20 6e  olumns that do n
1cd80 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ot appear in the
1cd90 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65   column list are
1cda0 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20   populated with 
1cdb0 74 68 65 20 64 65 66 61 75 6c 74 0a 63 6f 6c 75  the default.colu
1cdc0 6d 6e 20 76 61 6c 75 65 20 28 73 70 65 63 69 66  mn value (specif
1cdd0 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
1cde0 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
1cdf0 73 74 61 74 65 6d 65 6e 74 29 2c 20 6f 72 20 77  statement), or w
1ce00 69 74 68 20 4e 55 4c 4c 20 69 66 0a 6e 6f 20 64  ith NULL if.no d
1ce10 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20  efault value is 
1ce20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 6c 69 3e  specified...<li>
1ce30 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  <p>The second fo
1ce40 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54  rm of the INSERT
1ce50 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 74 61   statement conta
1ce60 69 6e 73 20 61 20 53 45 4c 45 43 54 20 73 74 61  ins a SELECT sta
1ce70 74 65 6d 65 6e 74 0a 69 6e 73 74 65 61 64 20 6f  tement.instead o
1ce80 66 20 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73  f a VALUES claus
1ce90 65 2e 20 5e 41 20 6e 65 77 20 65 6e 74 72 79 20  e. ^A new entry 
1cea0 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
1ceb0 20 74 68 65 20 74 61 62 6c 65 20 66 6f 72 20 65   the table for e
1cec0 61 63 68 0a 72 6f 77 20 6f 66 20 64 61 74 61 20  ach.row of data 
1ced0 72 65 74 75 72 6e 65 64 20 62 79 20 65 78 65 63  returned by exec
1cee0 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54  uting the SELECT
1cef0 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20   statement. ^If 
1cf00 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73  a column-list is
1cf10 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20  .specified, the 
1cf20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1cf30 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  s in the result 
1cf40 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 6d 75  of the SELECT mu
1cf50 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 0a 61  st be the same.a
1cf60 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1cf70 69 74 65 6d 73 20 69 6e 20 74 68 65 20 63 6f 6c  items in the col
1cf80 75 6d 6e 2d 6c 69 73 74 2e 20 5e 4f 74 68 65 72  umn-list. ^Other
1cf90 77 69 73 65 2c 20 69 66 20 6e 6f 20 63 6f 6c 75  wise, if no colu
1cfa0 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69  mn-list is.speci
1cfb0 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72  fied, the number
1cfc0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1cfd0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
1cfe0 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20   SELECT must be 
1cff0 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20  the same.as the 
1d000 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1d010 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
1d020 5e 41 6e 79 20 53 45 4c 45 43 54 20 73 74 61 74  ^Any SELECT stat
1d030 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67  ement, including
1d040 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  .compound SELECT
1d050 73 20 61 6e 64 20 53 45 4c 45 43 54 20 73 74 61  s and SELECT sta
1d060 74 65 6d 65 6e 74 73 20 77 69 74 68 20 4f 52 44  tements with ORD
1d070 45 52 20 42 59 20 61 6e 64 2f 6f 72 20 4c 49 4d  ER BY and/or LIM
1d080 49 54 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79  IT clauses, .may
1d090 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20 49   be used in an I
1d0a0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
1d0b0 6f 66 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c  of this form...<
1d0c0 6c 69 3e 3c 70 3e 54 68 65 20 74 68 69 72 64 20  li><p>The third 
1d0d0 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52  form of an INSER
1d0e0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77  T statement is w
1d0f0 69 74 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55  ith DEFAULT VALU
1d100 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54  ES..^(The INSERT
1d110 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c   ... DEFAULT VAL
1d120 55 45 53 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  UES statement in
1d130 73 65 72 74 73 20 61 20 73 69 6e 67 6c 65 20 6e  serts a single n
1d140 65 77 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a  ew row into the.
1d150 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e  named table.)^ ^
1d160 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  Each column of t
1d170 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f  he new row is po
1d180 70 75 6c 61 74 65 64 20 77 69 74 68 20 69 74 73  pulated with its
1d190 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 0a   default value,.
1d1a0 6f 72 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 69  or with a NULL i
1d1b0 66 20 6e 6f 20 64 65 66 61 75 6c 74 20 76 61 6c  f no default val
1d1c0 75 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ue is specified 
1d1d0 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
1d1e0 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69 74 69 6f 6e  olumn.definition
1d1f0 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54   in the CREATE T
1d200 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ABLE statement..
1d210 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  .</ul>..<p>^The 
1d220 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63  optional conflic
1d230 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20  t-clause allows 
1d240 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69 6f  the specificatio
1d250 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74  n of an alternat
1d260 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  ive.constraint c
1d270 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
1d280 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  on algorithm to 
1d290 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20  use during this 
1d2a0 6f 6e 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61  one INSERT comma
1d2b0 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74  nd..See the sect
1d2c0 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43  ion titled.[ON C
1d2d0 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
1d2e0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
1d2f0 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69  ion..For compati
1d300 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51  bility with MySQ
1d310 4c 2c 20 5e 74 68 65 20 70 61 72 73 65 72 20 61  L, ^the parser a
1d320 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66  llows the use of
1d330 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77   the.single keyw
1d340 6f 72 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e  ord <a href="lan
1d350 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e  g_replace.html">
1d360 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61  REPLACE</a> as a
1d370 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e  n .alias for "IN
1d380 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22  SERT OR REPLACE"
1d390 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69  ...<p>^(The opti
1d3a0 6f 6e 61 6c 20 22 3c 69 3e 64 61 74 61 62 61 73  onal "<i>databas
1d3b0 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  e-name</i><b>.</
1d3c0 62 3e 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68  b>" prefix on th
1d3d0 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
1d3e0 2f 69 3e 0a 69 73 20 73 75 70 70 6f 72 74 20 66  /i>.is support f
1d3f0 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53  or top-level INS
1d400 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ERT statements o
1d410 6e 6c 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62  nly.)^  ^The tab
1d420 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a  le name must be.
1d430 75 6e 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20  unqualified for 
1d440 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
1d450 73 20 74 68 61 74 20 6f 63 63 75 72 20 77 69 74  s that occur wit
1d460 68 69 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47  hin [CREATE TRIG
1d470 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  GER] statements.
1d480 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  .^Similarly, the
1d490 20 22 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53   "DEFAULT VALUES
1d4a0 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e  " form of the IN
1d4b0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69  SERT statement i
1d4c0 73 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a  s supported for.
1d4d0 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54  top-level INSERT
1d4e0 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79   statements only
1d4f0 20 61 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53   and not for INS
1d500 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ERT statements w
1d510 69 74 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a  ithin.triggers..
1d520 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  <p>..<tcl>.#####
1d530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d570 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1d580 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  n {ON CONFLICT c
1d590 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20  lause} conflict 
1d5a0 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73  {{conflict claus
1d5b0 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d  e} {ON CONFLICT}
1d5c0 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
1d5d0 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65   conflict-clause
1d5e0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
1d5f0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1d600 73 65 20 69 73 20 6e 6f 74 20 61 20 73 65 70 61  se is not a sepa
1d610 72 61 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  rate SQL command
1d620 2e 20 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d 73  .  It is a.non-s
1d630 74 61 6e 64 61 72 64 20 63 6c 61 75 73 65 20 74  tandard clause t
1d640 68 61 74 20 63 61 6e 20 61 70 70 65 61 72 20 69  hat can appear i
1d650 6e 20 6d 61 6e 79 20 6f 74 68 65 72 20 53 51 4c  n many other SQL
1d660 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73   commands..It is
1d670 20 67 69 76 65 6e 20 69 74 73 20 6f 77 6e 20 73   given its own s
1d680 65 63 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 64  ection in this d
1d690 6f 63 75 6d 65 6e 74 20 62 65 63 61 75 73 65 20  ocument because 
1d6a0 69 74 20 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f  it is not.part o
1d6b0 66 20 73 74 61 6e 64 61 72 64 20 53 51 4c 20 61  f standard SQL a
1d6c0 6e 64 20 74 68 65 72 65 66 6f 72 65 20 6d 69 67  nd therefore mig
1d6d0 68 74 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69  ht not be famili
1d6e0 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ar.</p>..<p>^The
1d6f0 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20   syntax for the 
1d700 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1d710 73 65 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61  se is as shown a
1d720 62 6f 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45  bove for.the CRE
1d730 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e  ATE TABLE comman
1d740 64 2e 20 20 5e 46 6f 72 20 74 68 65 20 49 4e 53  d.  ^For the INS
1d750 45 52 54 20 61 6e 64 0a 55 50 44 41 54 45 20 63  ERT and.UPDATE c
1d760 6f 6d 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65 79  ommands, the key
1d770 77 6f 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49  words "ON CONFLI
1d780 43 54 22 20 61 72 65 20 72 65 70 6c 61 63 65 64  CT" are replaced
1d790 20 62 79 20 22 4f 52 22 20 73 6f 20 74 68 61 74   by "OR" so that
1d7a0 0a 74 68 65 20 73 79 6e 74 61 78 20 72 65 61 64  .the syntax read
1d7b0 73 20 6d 6f 72 65 20 6e 61 74 75 72 61 6c 6c 79  s more naturally
1d7c0 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
1d7d0 69 6e 73 74 65 61 64 20 6f 66 0a 22 49 4e 53 45  instead of."INSE
1d7e0 52 54 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49  RT ON CONFLICT I
1d7f0 47 4e 4f 52 45 22 20 77 65 20 68 61 76 65 20 22  GNORE" we have "
1d800 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45  INSERT OR IGNORE
1d810 22 2e 0a 54 68 65 20 6b 65 79 77 6f 72 64 73 20  "..The keywords 
1d820 63 68 61 6e 67 65 20 62 75 74 20 74 68 65 20 6d  change but the m
1d830 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 6c  eaning of the cl
1d840 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65  ause is the same
1d850 0a 65 69 74 68 65 72 20 77 61 79 2e 3c 2f 70 3e  .either way.</p>
1d860 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46  ..<p>The ON CONF
1d870 4c 49 43 54 20 63 6c 61 75 73 65 20 61 70 70 6c  LICT clause appl
1d880 69 65 73 20 74 6f 20 55 4e 49 51 55 45 20 61 6e  ies to UNIQUE an
1d890 64 20 4e 4f 54 20 4e 55 4c 4c 0a 63 6f 6e 73 74  d NOT NULL.const
1d8a0 72 61 69 6e 74 73 20 28 61 6e 64 20 74 6f 20 50  raints (and to P
1d8b0 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
1d8c0 72 61 69 6e 74 73 20 77 68 69 63 68 20 66 6f 72  raints which for
1d8d0 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 0a 6f   the purposes .o
1d8e0 66 20 74 68 69 73 20 73 65 63 74 69 6f 6e 20 61  f this section a
1d8f0 72 65 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  re the same thin
1d900 67 20 61 73 20 55 4e 49 51 55 45 20 63 6f 6e 73  g as UNIQUE cons
1d910 74 72 61 69 6e 74 73 29 2e 0a 54 68 65 20 4f 4e  traints)..The ON
1d920 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
1d930 74 68 6d 20 64 6f 65 73 20 6e 6f 74 0a 61 70 70  thm does not.app
1d940 6c 79 20 74 6f 20 5b 46 4f 52 45 49 47 4e 20 4b  ly to [FOREIGN K
1d950 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e  EY constraints].
1d960 0a 54 68 65 72 65 20 61 72 65 20 66 69 76 65 20  .There are five 
1d970 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
1d980 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 63 68  ion algorithm ch
1d990 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c  oices:.ROLLBACK,
1d9a0 20 41 42 4f 52 54 2c 20 46 41 49 4c 2c 20 49 47   ABORT, FAIL, IG
1d9b0 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43  NORE, and REPLAC
1d9c0 45 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20  E..^The default 
1d9d0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
1d9e0 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ion algorithm is
1d9f0 20 41 42 4f 52 54 2e 20 20 54 68 69 73 0a 69 73   ABORT.  This.is
1da00 20 77 68 61 74 20 74 68 65 79 20 6d 65 61 6e 3a   what they mean:
1da10 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c  </p>..<dl>.<dt><
1da20 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f  b>ROLLBACK</b></
1da30 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65  dt>.<dd><p> ^Whe
1da40 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20  n an applicable 
1da50 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1da60 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
1da70 20 52 4f 4c 4c 42 41 43 4b 0a 72 65 73 6f 6c 75   ROLLBACK.resolu
1da80 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61  tion algorithm a
1da90 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  borts the curren
1daa0 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  t SQL statement 
1dab0 77 69 74 68 0a 61 6e 20 53 51 4c 49 54 45 5f 43  with.an SQLITE_C
1dac0 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20  ONSTRAINT error 
1dad0 61 6e 64 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74  and rolls back t
1dae0 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
1daf0 61 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74  action..^If no t
1db00 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61 63  ransaction is.ac
1db10 74 69 76 65 20 28 6f 74 68 65 72 20 74 68 61 6e  tive (other than
1db20 20 74 68 65 20 69 6d 70 6c 69 65 64 20 74 72 61   the implied tra
1db30 6e 73 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73  nsaction that is
1db40 20 63 72 65 61 74 65 64 20 6f 6e 20 65 76 65 72   created on ever
1db50 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20  y.command) then 
1db60 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73  the ROLLBACK res
1db70 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1db80 6d 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65  m works the same
1db90 20 61 73 20 74 68 65 0a 41 42 4f 52 54 20 61 6c   as the.ABORT al
1dba0 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64  gorithm.</p></dd
1dbb0 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c  >..<dt><b>ABORT<
1dbc0 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
1dbd0 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63   ^When an applic
1dbe0 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  able constraint 
1dbf0 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
1dc00 2c 20 74 68 65 20 41 42 4f 52 54 0a 72 65 73 6f  , the ABORT.reso
1dc10 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
1dc20 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72 72   aborts the curr
1dc30 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ent SQL statemen
1dc40 74 0a 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  t.with an SQLITE
1dc50 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f  _CONSTRAINT erro
1dc60 72 20 61 6e 64 20 62 61 63 6b 73 20 6f 75 74 20  r and backs out 
1dc70 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d 61 64 65  any changes.made
1dc80 20 62 79 20 74 68 65 20 63 75 72 72 65 6e 74 20   by the current 
1dc90 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 3b 20 62  SQL statement; b
1dca0 75 74 20 63 68 61 6e 67 65 73 20 63 61 75 73 65  ut changes cause
1dcb0 64 0a 62 79 20 70 72 69 6f 72 20 53 51 4c 20 73  d.by prior SQL s
1dcc0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
1dcd0 20 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61   the same transa
1dce0 63 74 69 6f 6e 20 61 72 65 20 70 72 65 73 65 72  ction are preser
1dcf0 76 65 64 20 61 6e 64 20 74 68 65 0a 74 72 61 6e  ved and the.tran
1dd00 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20  saction remains 
1dd10 61 63 74 69 76 65 2e 0a 54 68 69 73 20 69 73 20  active..This is 
1dd20 74 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61  the default beha
1dd30 76 69 6f 72 20 61 6e 64 20 74 68 65 20 62 65 68  vior and the beh
1dd40 61 76 69 6f 72 20 73 70 65 63 69 66 69 65 64 20  avior specified 
1dd50 62 79 20 74 68 65 20 53 51 4c 0a 73 74 61 6e 64  by the SQL.stand
1dd60 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  ard.</p></dd>..<
1dd70 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f  dt><b>FAIL</b></
1dd80 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65  dt>.<dd><p> ^Whe
1dd90 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20  n an applicable 
1dda0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1ddb0 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
1ddc0 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e   FAIL.resolution
1ddd0 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74   algorithm abort
1dde0 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  s the current SQ
1ddf0 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  L statement with
1de00 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54   an.SQLITE_CONST
1de10 52 41 49 4e 54 20 65 72 72 6f 72 2e 20 20 5e 42  RAINT error.  ^B
1de20 75 74 20 74 68 65 20 46 41 49 4c 20 72 65 73 6f  ut the FAIL reso
1de30 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a  lution does not.
1de40 62 61 63 6b 20 6f 75 74 20 70 72 69 6f 72 20 63  back out prior c
1de50 68 61 6e 67 65 73 20 6f 66 20 74 68 65 20 53 51  hanges of the SQ
1de60 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  L statement that
1de70 20 66 61 69 6c 65 64 20 6e 6f 72 20 64 6f 65 73   failed nor does
1de80 0a 69 74 20 65 6e 64 20 74 68 65 20 74 72 61 6e  .it end the tran
1de90 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78  saction..^For ex
1dea0 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44  ample, if an UPD
1deb0 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e  ATE.statement en
1dec0 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73  countered a cons
1ded0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1dee0 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f   on the 100th ro
1def0 77 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70  w that.it attemp
1df00 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68  ts to update, th
1df10 65 6e 20 74 68 65 20 66 69 72 73 74 20 39 39 20  en the first 99 
1df20 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65 20  row changes are 
1df30 70 72 65 73 65 72 76 65 64 0a 62 75 74 20 63 68  preserved.but ch
1df40 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30  anges to rows 10
1df50 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76  0 and beyond nev
1df60 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64  er occur.</p></d
1df70 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52  d>..<dt><b>IGNOR
1df80 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  E</b></dt>.<dd><
1df90 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
1dfa0 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
1dfb0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
1dfc0 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f 52 45 20  rs, .the IGNORE 
1dfd0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
1dfe0 69 74 68 6d 20 73 6b 69 70 73 20 74 68 65 20 6f  ithm skips the o
1dff0 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 74  ne row that cont
1e000 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72 61  ains.the constra
1e010 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 6e  int violation an
1e020 64 20 63 6f 6e 74 69 6e 75 65 73 20 70 72 6f 63  d continues proc
1e030 65 73 73 69 6e 67 20 73 75 62 73 65 71 75 65 6e  essing subsequen
1e040 74 20 72 6f 77 73 0a 6f 66 20 74 68 65 20 53 51  t rows.of the SQ
1e050 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 73 20 69  L statement as i
1e060 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e 74 20 77  f nothing went w
1e070 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72 6f 77 73  rong..Other rows
1e080 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
1e090 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a 63  r the row that.c
1e0a0 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f 6e  ontained the con
1e0b0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
1e0c0 6e 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 6f  n are inserted o
1e0d0 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c  r updated.normal
1e0e0 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72 20 69 73  ly. ^No error is
1e0f0 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 74   returned when t
1e100 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66 6c 69  he IGNORE confli
1e110 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c  ct resolution.al
1e120 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e  gorithm is used.
1e130 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
1e140 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64  b>REPLACE</b></d
1e150 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
1e160 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
1e170 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
1e180 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41  ccurs, the REPLA
1e190 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a 64 65 6c  CE algorithm.del
1e1a0 65 74 65 73 20 70 72 65 2d 65 78 69 73 74 69 6e  etes pre-existin
1e1b0 67 20 72 6f 77 73 20 74 68 61 74 20 61 72 65 20  g rows that are 
1e1c0 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 73  causing the cons
1e1d0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1e1e0 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73 65 72 74  .prior to insert
1e1f0 69 6e 67 20 6f 72 20 75 70 64 61 74 69 6e 67 20  ing or updating 
1e200 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
1e210 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  and the command 
1e220 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78 65 63 75  continues .execu
1e230 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e  ting normally..^
1e240 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  If a NOT NULL co
1e250 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1e260 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52  on occurs, the R
1e270 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 0a  EPLACE conflict.
1e280 72 65 73 6f 6c 75 74 69 6f 6e 20 72 65 70 6c 61  resolution repla
1e290 63 65 73 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c  ces the NULL val
1e2a0 75 65 20 77 69 74 68 0a 68 65 20 64 65 66 61 75  ue with.he defau
1e2b0 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 61  lt value for tha
1e2c0 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20  t column, or if 
1e2d0 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e  the column has n
1e2e0 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c  o default.value,
1e2f0 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20   then the ABORT 
1e300 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
1e310 64 2e 0a 5e 49 66 20 61 20 43 48 45 43 4b 20 63  d..^If a CHECK c
1e320 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
1e330 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
1e340 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
1e350 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f   resolution.algo
1e360 72 69 74 68 6d 20 61 6c 77 61 79 73 20 77 6f 72  rithm always wor
1e370 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f  ks like ABORT.</
1e380 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  p>..<p>^When the
1e390 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
1e3a0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72  t resolution str
1e3b0 61 74 65 67 79 20 64 65 6c 65 74 65 73 20 72 6f  ategy deletes ro
1e3c0 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73  ws in order to.s
1e3d0 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72 61  atisfy a constra
1e3e0 69 6e 74 2c 20 5b 43 52 45 41 54 45 20 54 52 49  int, [CREATE TRI
1e3f0 47 47 45 52 20 7c 20 64 65 6c 65 74 65 20 74 72  GGER | delete tr
1e400 69 67 67 65 72 73 5d 20 66 69 72 65 20 69 66 20  iggers] fire if 
1e410 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63  and only if.[rec
1e420 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 20  ursive_triggers 
1e430 70 72 61 67 6d 61 20 7c 20 72 65 63 75 72 73 69  pragma | recursi
1e440 76 65 20 74 72 69 67 67 65 72 73 5d 20 61 72 65  ve triggers] are
1e450 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c   enabled.</p>..<
1e460 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  p>^The [sqlite3_
1e470 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70  update_hook | up
1e480 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f  date hook] is no
1e490 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f  t invoked for ro
1e4a0 77 73 20 74 68 61 74 0a 61 72 65 20 64 65 6c 65  ws that.are dele
1e4b0 74 65 64 20 62 79 20 74 68 65 20 52 45 50 4c 41  ted by the REPLA
1e4c0 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CE conflict reso
1e4d0 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 2e  lution strategy.
1e4e0 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c    ^Nor does.REPL
1e4f0 41 43 45 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  ACE increment th
1e500 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  e [sqlite3_chang
1e510 65 73 20 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e  es | change coun
1e520 74 65 72 5d 2e 0a 54 68 65 20 65 78 63 65 70 74  ter]..The except
1e530 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72 73 20  ional behaviors 
1e540 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20  defined in this 
1e550 70 61 72 61 67 72 61 70 68 20 6d 69 67 68 74 20  paragraph might 
1e560 63 68 61 6e 67 65 20 0a 69 6e 20 61 20 66 75 74  change .in a fut
1e570 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e  ure release.</p>
1e580 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  .</dl>..<p>^The 
1e590 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66  algorithm specif
1e5a0 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63 6c  ied in the OR cl
1e5b0 61 75 73 65 20 6f 66 20 61 6e 20 49 4e 53 45 52  ause of an INSER
1e5c0 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72  T or UPDATE.over
1e5d0 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69  rides any algori
1e5e0 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
1e5f0 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e   a CREATE TABLE.
1e600 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68  .^If no algorith
1e610 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  m is specified a
1e620 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f  nywhere, the ABO
1e630 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  RT algorithm is 
1e640 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  used.</p>..<tcl>
1e650 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1e660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
1e6a0 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20  Section REINDEX 
1e6b0 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a  reindex REINDEX.
1e6c0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
1e6d0 65 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c 2f  eindex-stmt 1.</
1e6e0 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45  tcl>..<p>^The RE
1e6f0 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73  INDEX command is
1e700 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20   used to delete 
1e710 61 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64  and recreate ind
1e720 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63  ices from scratc
1e730 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66 75  h..This is usefu
1e740 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e  l when the defin
1e750 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61  ition of a colla
1e760 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61  tion sequence ha
1e770 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a  s changed..</p>.
1e780 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e  .<p>^If the REIN
1e790 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 6e  DEX keyword is n
1e7a0 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ot followed by a
1e7b0 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65   collation-seque
1e7c0 6e 63 65 20 6f 72 20 64 61 74 61 62 61 73 65 20  nce or database 
1e7d0 0a 6f 62 6a 65 63 74 20 69 64 65 6e 74 69 66 69  .object identifi
1e7e0 65 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  er, then all ind
1e7f0 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61  ices in all atta
1e800 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
1e810 72 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e  re rebuilt...<p>
1e820 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20  ^If the REINDEX 
1e830 6b 65 79 77 6f 72 64 20 69 73 20 66 6f 6c 6c 6f  keyword is follo
1e840 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69  wed by a collati
1e850 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on-sequence name
1e860 2c 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64 69 63  , then.all indic
1e870 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68  es in all attach
1e880 65 64 20 64 61 74 61 62 61 73 65 73 20 74 68 61  ed databases tha
1e890 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20  t use the named 
1e8a0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1e8b0 63 65 73 0a 61 72 65 20 72 65 63 72 65 61 74 65  ces.are recreate
1e8c0 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20  d. ..<p>^Or, if 
1e8d0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 61 74 74  the argument att
1e8e0 61 63 68 65 64 20 74 6f 20 74 68 65 20 52 45 49  ached to the REI
1e8f0 4e 44 45 58 20 69 64 65 6e 74 69 66 69 65 73 20  NDEX identifies 
1e900 61 20 73 70 65 63 69 66 69 63 20 0a 64 61 74 61  a specific .data
1e910 62 61 73 65 20 74 61 62 6c 65 2c 20 74 68 65 6e  base table, then
1e920 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 61 74 74   all indices att
1e930 61 63 68 65 64 20 74 6f 20 74 68 65 20 64 61 74  ached to the dat
1e940 61 62 61 73 65 20 74 61 62 6c 65 20 61 72 65 20  abase table are 
1e950 72 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20 69 74  rebuilt. .^If it
1e960 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70   identifies a sp
1e970 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20  ecific database 
1e980 69 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75 73 74  index, then just
1e990 20 74 68 61 74 20 69 6e 64 65 78 20 69 73 20 72   that index is r
1e9a0 65 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e 5e 49  ecreated...<p>^I
1e9b0 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61 73 65  f no <i>database
1e9c0 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73 70 65  -name</i> is spe
1e9d0 63 69 66 69 65 64 20 61 6e 64 20 74 68 65 72 65  cified and there
1e9e0 20 65 78 69 73 74 73 20 62 6f 74 68 20 61 20 74   exists both a t
1e9f0 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 61 6e  able or.index an
1ea00 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  d a collation se
1ea10 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 73 70  quence of the sp
1ea20 65 63 69 66 69 65 64 20 6e 61 6d 65 2c 20 53 51  ecified name, SQ
1ea30 4c 69 74 65 20 69 6e 74 65 72 70 72 65 74 73 0a  Lite interprets.
1ea40 74 68 69 73 20 61 73 20 61 20 72 65 71 75 65 73  this as a reques
1ea50 74 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65  t to rebuild the
1ea60 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 75 73   indices that us
1ea70 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c  e the named coll
1ea80 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e 0a  ation sequence..
1ea90 54 68 69 73 20 61 6d 62 69 67 75 69 74 79 20 69  This ambiguity i
1eaa0 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6d 61 79  n the syntax may
1eab0 20 62 65 20 61 76 6f 69 64 65 64 20 62 79 20 61   be avoided by a
1eac0 6c 77 61 79 73 20 73 70 65 63 69 66 79 69 6e 67  lways specifying
1ead0 20 61 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e   a.<i>database-n
1eae0 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65 69  ame</i> when rei
1eaf0 6e 64 65 78 69 6e 67 20 61 20 73 70 65 63 69 66  ndexing a specif
1eb00 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ic table or inde
1eb10 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  x...<tcl>.######
1eb20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb60 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1eb70 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63  n REPLACE replac
1eb80 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c  e REPLACE..</tcl
1eb90 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41  >..<p>^The REPLA
1eba0 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e  CE command is an
1ebb0 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 22   alias for the "
1ebc0 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49  [ON CONFLICT | I
1ebd0 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45  NSERT OR REPLACE
1ebe0 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74 68  ]".variant of th
1ebf0 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61  e [INSERT] comma
1ec00 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61 73  nd.  .This alias
1ec10 20 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f 72   is provided for
1ec20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 6f   compatibility o
1ec30 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
1ec40 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65 20  e engines.  See 
1ec50 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f  the .[INSERT] co
1ec60 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74  mmand documentat
1ec70 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ion for addition
1ec80 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  al information.<
1ec90 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23  /p>  ..<tcl>.###
1eca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ecb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ecc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ecd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ece0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1ecf0 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c 65  tion SELECT sele
1ed00 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72 79  ct {SELECT query
1ed10 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
1ed20 20 73 65 6c 65 63 74 2d 73 74 6d 74 20 31 0a 42   select-stmt 1.B
1ed30 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c  ubbleDiagram sel
1ed40 65 63 74 2d 63 6f 72 65 0a 42 75 62 62 6c 65 44  ect-core.BubbleD
1ed50 69 61 67 72 61 6d 20 72 65 73 75 6c 74 2d 63 6f  iagram result-co
1ed60 6c 75 6d 6e 0a 42 75 62 62 6c 65 44 69 61 67 72  lumn.BubbleDiagr
1ed70 61 6d 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a 42  am join-source.B
1ed80 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6e  ubbleDiagram sin
1ed90 67 6c 65 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c  gle-source.Bubbl
1eda0 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 6f 70  eDiagram join-op
1edb0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6a  .BubbleDiagram j
1edc0 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 42  oin-constraint.B
1edd0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6f 72 64  ubbleDiagram ord
1ede0 65 72 69 6e 67 2d 74 65 72 6d 0a 42 75 62 62 6c  ering-term.Bubbl
1edf0 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75 6e  eDiagram compoun
1ee00 64 2d 6f 70 65 72 61 74 6f 72 0a 3c 2f 74 63 6c  d-operator.</tcl
1ee10 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43  >...<p>The SELEC
1ee20 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  T statement is u
1ee30 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  sed to query the
1ee40 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a   database.  The.
1ee50 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45  result of a SELE
1ee60 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f  CT is zero or mo
1ee70 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20  re rows of data 
1ee80 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68  where each row.h
1ee90 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65  as a fixed numbe
1eea0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 0a  r of columns.  .
1eeb0 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73  .<p>The SELECT s
1eec0 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
1eed0 6d 6f 73 74 20 63 6f 6d 70 6c 69 63 61 74 65 64  most complicated
1eee0 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20   command in the 
1eef0 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 54 6f  SQL language..To
1ef00 20 6d 61 6b 65 20 74 68 65 20 64 65 73 63 72 69   make the descri
1ef10 70 74 69 6f 6e 20 65 61 73 69 65 72 20 74 6f 20  ption easier to 
1ef20 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f 66 20  follow, some of 
1ef30 74 68 65 20 70 61 73 73 61 67 65 73 20 62 65 6c  the passages bel
1ef40 6f 77 20 64 65 73 63 72 69 62 65 0a 74 68 65 20  ow describe.the 
1ef50 77 61 79 20 74 68 65 20 64 61 74 61 20 72 65 74  way the data ret
1ef60 75 72 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43  urned by a SELEC
1ef70 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64  T statement is d
1ef80 65 74 65 72 6d 69 6e 65 64 20 61 73 20 61 20 73  etermined as a s
1ef90 65 72 69 65 73 20 6f 66 0a 73 74 65 70 73 2e 20  eries of.steps. 
1efa0 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
1efb0 74 6f 20 6b 65 65 70 20 69 6e 20 6d 69 6e 64 20  to keep in mind 
1efc0 74 68 61 74 20 74 68 69 73 20 69 73 20 70 75 72  that this is pur
1efd0 65 6c 79 20 69 6c 6c 75 73 74 72 61 74 69 76 65  ely illustrative
1efe0 20 2d 0a 69 6e 20 70 72 61 63 74 69 63 65 20 6e   -.in practice n
1eff0 65 69 74 68 65 72 20 53 51 4c 69 74 65 20 6e 6f  either SQLite no
1f000 72 20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20  r any other SQL 
1f010 65 6e 67 69 6e 65 20 69 73 20 72 65 71 75 69 72  engine is requir
1f020 65 64 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a 74 68  ed to follow .th
1f030 69 73 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  is or any other 
1f040 73 70 65 63 69 66 69 63 20 70 72 6f 63 65 73 73  specific process
1f050 2e 0a 0a 3c 68 33 3e 53 69 6d 70 6c 65 20 53 65  ...<h3>Simple Se
1f060 6c 65 63 74 20 50 72 6f 63 65 73 73 69 6e 67 3c  lect Processing<
1f070 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e  /h3>..<p>The syn
1f080 74 61 78 20 66 6f 72 20 61 20 73 69 6d 70 6c 65  tax for a simple
1f090 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1f0a0 74 20 69 73 20 64 65 70 69 63 74 65 64 20 69 6e  t is depicted in
1f0b0 20 74 68 65 20 0a 5b 73 65 6c 65 63 74 2d 63 6f   the .[select-co
1f0c0 72 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  re syntax diagra
1f0d0 6d 5d 2e 20 47 65 6e 65 72 61 74 69 6e 67 20 74  m]. Generating t
1f0e0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  he results of a 
1f0f0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73 74  simple SELECT.st
1f100 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 73 65  atement is prese
1f110 6e 74 65 64 20 61 73 20 61 20 66 6f 75 72 20 73  nted as a four s
1f120 74 65 70 20 70 72 6f 63 65 73 73 20 69 6e 20 74  tep process in t
1f130 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 62  he description b
1f140 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c  elow:..<ol>.  <l
1f150 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75  i> <p>[FROM clau
1f160 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20  se] processing: 
1f170 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66  The input data f
1f180 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45  or the simple SE
1f190 4c 45 43 54 20 69 73 0a 20 20 20 20 20 20 20 64  LECT is.       d
1f1a0 65 74 65 72 6d 69 6e 65 64 2e 20 54 68 65 20 69  etermined. The i
1f1b0 6e 70 75 74 20 64 61 74 61 20 69 73 20 65 69 74  nput data is eit
1f1c0 68 65 72 20 69 6d 70 6c 69 63 69 74 6c 79 20 61  her implicitly a
1f1d0 20 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68   single row with
1f1e0 20 30 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e   0.       column
1f1f0 73 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6e  s (if there is n
1f200 6f 20 46 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f  o FROM clause) o
1f210 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  r is determined 
1f220 62 79 20 61 6e 61 6c 79 7a 69 6e 67 20 74 68 65  by analyzing the
1f230 0a 20 20 20 20 20 20 20 5b 6a 6f 69 6e 2d 73 6f  .       [join-so
1f240 75 72 63 65 20 73 79 6e 74 61 78 20 64 69 61 67  urce syntax diag
1f250 72 61 6d 7c 6a 6f 69 6e 2d 73 6f 75 72 63 65 5d  ram|join-source]
1f260 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 74   specification t
1f270 68 61 74 20 66 6f 6c 6c 6f 77 73 20 0a 20 20 20  hat follows .   
1f280 20 20 20 20 61 6e 20 65 78 70 6c 69 63 69 74 20      an explicit 
1f290 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 20 20 3c  FROM clause..  <
1f2a0 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20 63 6c  li> <p>[WHERE cl
1f2b0 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67  ause] processing
1f2c0 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61  : The input data
1f2d0 20 69 73 20 66 69 6c 74 65 72 65 64 20 75 73 69   is filtered usi
1f2e0 6e 67 20 74 68 65 20 57 48 45 52 45 0a 20 20 20  ng the WHERE.   
1f2f0 20 20 20 20 63 6c 61 75 73 65 20 65 78 70 72 65      clause expre
1f300 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20  ssion.  .  <li> 
1f310 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47 52 4f  <p>[GROUP BY|GRO
1f320 55 50 20 42 59 2c 20 48 41 56 49 4e 47 20 61 6e  UP BY, HAVING an
1f330 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20  d result-column 
1f340 65 78 70 72 65 73 73 69 6f 6e 5d 20 70 72 6f 63  expression] proc
1f350 65 73 73 69 6e 67 3a 20 0a 20 20 20 20 20 20 20  essing: .       
1f360 54 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  The set of resul
1f370 74 20 72 6f 77 73 20 69 73 20 63 6f 6d 70 75 74  t rows is comput
1f380 65 64 20 62 79 20 61 67 67 72 65 67 61 74 69 6e  ed by aggregatin
1f390 67 20 74 68 65 20 64 61 74 61 20 61 63 63 6f 72  g the data accor
1f3a0 64 69 6e 67 20 74 6f 0a 20 20 20 20 20 20 20 61  ding to.       a
1f3b0 6e 79 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  ny GROUP BY clau
1f3c0 73 65 20 61 6e 64 20 63 61 6c 63 75 6c 61 74 69  se and calculati
1f3d0 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  ng the result-se
1f3e0 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 66 6f  t expressions fo
1f3f0 72 20 74 68 65 0a 20 20 20 20 20 20 20 72 6f 77  r the.       row
1f400 73 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72 65  s of the filtere
1f410 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 2e  d input dataset.
1f420 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49    .  <li> <p>[DI
1f430 53 54 49 4e 43 54 7c 44 49 53 54 49 4e 43 54 2f  STINCT|DISTINCT/
1f440 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70 72 6f  ALL keyword] pro
1f450 63 65 73 73 69 6e 67 3a 20 49 66 20 74 68 65 20  cessing: If the 
1f460 71 75 65 72 79 20 69 73 20 61 20 22 53 45 4c 45  query is a "SELE
1f470 43 54 0a 20 20 20 20 20 20 20 44 49 53 54 49 4e  CT.       DISTIN
1f480 43 54 22 20 71 75 65 72 79 2c 20 64 75 70 6c 69  CT" query, dupli
1f490 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
1f4a0 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 73  moved from the s
1f4b0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
1f4c0 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65  s..</ol>..<p>The
1f4d0 72 65 20 61 72 65 20 74 77 6f 20 74 79 70 65 73  re are two types
1f4e0 20 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c 45 43   of simple SELEC
1f4f0 54 20 73 74 61 74 65 6d 65 6e 74 20 2d 20 61 67  T statement - ag
1f500 67 72 65 67 61 74 65 20 61 6e 64 20 0a 6e 6f 6e  gregate and .non
1f510 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69  -aggregate queri
1f520 65 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20 53 45  es. ^A simple SE
1f530 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
1f540 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  s an aggregate q
1f550 75 65 72 79 20 69 66 0a 69 74 20 63 6f 6e 74 61  uery if.it conta
1f560 69 6e 73 20 65 69 74 68 65 72 20 61 20 47 52 4f  ins either a GRO
1f570 55 50 20 42 59 20 63 6c 61 75 73 65 20 6f 72 20  UP BY clause or 
1f580 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
1f590 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a  egate functions.
1f5a0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
1f5b0 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  t. ^Otherwise, i
1f5c0 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  f a simple SELEC
1f5d0 54 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 61 67  T contains no ag
1f5e0 67 72 65 67 61 74 65 0a 66 75 6e 63 74 69 6f 6e  gregate.function
1f5f0 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20  s or a GROUP BY 
1f600 63 6c 61 75 73 65 2c 20 69 74 20 69 73 20 61 20  clause, it is a 
1f610 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75  non-aggregate qu
1f620 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44  ery...<p><b>1. D
1f630 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20  etermination of 
1f640 69 6e 70 75 74 20 64 61 74 61 20 28 46 52 4f 4d  input data (FROM
1f650 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69   clause processi
1f660 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ng).</b>.<tcl>hd
1f670 5f 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d 63 6c  _fragment fromcl
1f680 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  ause</tcl>.<tcl>
1f690 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46 52 4f  hd_keywords {FRO
1f6a0 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a  M clause}</tcl>.
1f6b0 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 20 64 61  .<p>The input da
1f6c0 74 61 20 75 73 65 64 20 62 79 20 61 20 73 69 6d  ta used by a sim
1f6d0 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72 79  ple SELECT query
1f6e0 20 69 73 20 61 20 73 65 74 20 6f 66 20 3c 69 3e   is a set of <i>
1f6f0 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61 63 68  N</i> rows .each
1f700 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e   <i>M</i> column
1f710 73 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66  s wide...<p>^(If
1f720 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1f730 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
1f740 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
1f750 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1f760 20 74 68 65 20 0a 69 6e 70 75 74 20 64 61 74 61   the .input data
1f770 20 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 61   is implicitly a
1f780 20 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65 72 6f   single row zero
1f790 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29 5e 20   columns wide)^ 
1f7a0 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31  (i.e. <i>N</i>=1
1f7b0 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29   and.<i>M</i>=0)
1f7c0 2e 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f 4d 20  ...<p>If a FROM 
1f7d0 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
1f7e0 69 65 64 2c 20 74 68 65 20 64 61 74 61 20 6f 6e  ied, the data on
1f7f0 20 77 68 69 63 68 20 61 20 73 69 6d 70 6c 65 20   which a simple 
1f800 53 45 4c 45 43 54 20 71 75 65 72 79 0a 6f 70 65  SELECT query.ope
1f810 72 61 74 65 73 20 63 6f 6d 65 73 20 66 72 6f 6d  rates comes from
1f820 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   the one or more
1f830 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
1f840 65 72 69 65 73 20 28 53 45 4c 45 43 54 20 73 74  eries (SELECT st
1f850 61 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61 72 65  atements.in pare
1f860 6e 74 68 65 73 69 73 29 20 73 70 65 63 69 66 69  nthesis) specifi
1f870 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ed following the
1f880 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 5e   FROM keyword. ^
1f890 41 20 73 75 62 2d 73 65 6c 65 63 74 20 73 70 65  A sub-select spe
1f8a0 63 69 66 69 65 64 0a 69 6e 20 74 68 65 20 6a 6f  cified.in the jo
1f8b0 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f 77  in-source follow
1f8c0 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  ing the FROM cla
1f8d0 75 73 65 20 69 6e 20 61 20 73 69 6d 70 6c 65 20  use in a simple 
1f8e0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1f8f0 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73 20 69   is.handled as i
1f900 66 20 69 74 20 77 61 73 20 61 20 74 61 62 6c 65  f it was a table
1f910 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1f920 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
1f930 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 0a 73   executing the.s
1f940 75 62 2d 73 65 6c 65 63 74 20 73 74 61 74 65 6d  ub-select statem
1f950 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d  ent. ^Each colum
1f960 6e 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  n of the sub-sel
1f970 65 63 74 20 64 61 74 61 73 65 74 20 69 6e 68 65  ect dataset inhe
1f980 72 69 74 73 20 74 68 65 0a 5b 63 6f 6c 6c 61 74  rits the.[collat
1f990 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ion|collation se
1f9a0 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66 66  quence] and [aff
1f9b0 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f  inity] of the co
1f9c0 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70 72  rresponding expr
1f9d0 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73 75  ession.in the su
1f9e0 62 2d 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  b-select stateme
1f9f0 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72  nt...<p>^If ther
1fa00 65 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67  e is only a sing
1fa10 6c 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  le table in the 
1fa20 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c  join-source foll
1fa30 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 0a 63  owing the FROM.c
1fa40 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20  lause, then the 
1fa50 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64 20  input data used 
1fa60 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  by the SELECT st
1fa70 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 63  atement is the c
1fa80 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a 6e  ontents of the.n
1fa90 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66 20  amed table. ^If 
1faa0 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74 68  there is more th
1fab0 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20 73 70 65  an one table spe
1fac0 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
1fad0 66 20 74 68 65 0a 6a 6f 69 6e 2d 73 6f 75 72 63  f the.join-sourc
1fae0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  e following the 
1faf0 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2c 20 74 68  FROM keyword, th
1fb00 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  en the contents 
1fb10 6f 66 20 65 61 63 68 20 6e 61 6d 65 64 20 74 61  of each named ta
1fb20 62 6c 65 0a 61 72 65 20 6a 6f 69 6e 65 64 20 69  ble.are joined i
1fb30 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74  nto a single dat
1fb40 61 73 65 74 20 66 6f 72 20 74 68 65 20 73 69 6d  aset for the sim
1fb50 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
1fb60 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61 74 65 20  ment to operate 
1fb70 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68 6f 77 20  on..Exactly how 
1fb80 74 68 65 20 64 61 74 61 20 69 73 20 63 6f 6d 62  the data is comb
1fb90 69 6e 65 64 20 64 65 70 65 6e 64 73 20 6f 6e 20  ined depends on 
1fba0 74 68 65 20 73 70 65 63 69 66 69 63 20 5b 6a 6f  the specific [jo
1fbb0 69 6e 2d 6f 70 5d 20 61 6e 64 0a 5b 6a 6f 69 6e  in-op] and.[join
1fbc0 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20 75 73 65  -constraint] use
1fbd0 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65  d to connect the
1fbe0 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
1fbf0 65 72 69 65 73 20 74 6f 67 65 74 68 65 72 2e 0a  eries together..
1fc00 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e  .<p>All joins in
1fc10 20 53 51 4c 69 74 65 20 61 72 65 20 62 61 73 65   SQLite are base
1fc20 64 20 6f 6e 20 74 68 65 20 63 61 72 74 65 73 69  d on the cartesi
1fc30 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68  an product of th
1fc40 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74  e left and.right
1fc50 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20  -hand datasets. 
1fc60 5e 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ^The columns of 
1fc70 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
1fc80 6f 64 75 63 74 20 64 61 74 61 73 65 74 20 61 72  oduct dataset ar
1fc90 65 2c 20 69 6e 20 0a 6f 72 64 65 72 2c 20 61 6c  e, in .order, al
1fca0 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  l the columns of
1fcb0 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64   the left-hand d
1fcc0 61 74 61 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20  ataset followed 
1fcd0 62 79 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d  by all the colum
1fce0 6e 73 0a 6f 66 20 74 68 65 20 72 69 67 68 74 2d  ns.of the right-
1fcf0 68 61 6e 64 20 64 61 74 61 73 65 74 2e 20 5e 54  hand dataset. ^T
1fd00 68 65 72 65 20 69 73 20 61 20 72 6f 77 20 69 6e  here is a row in
1fd10 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
1fd20 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 0a 66  roduct dataset.f
1fd30 6f 72 6d 65 64 20 62 79 20 63 6f 6d 62 69 6e 69  ormed by combini
1fd40 6e 67 20 65 61 63 68 20 75 6e 69 71 75 65 20 63  ng each unique c
1fd50 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20  ombination of a 
1fd60 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6c 65 66  row from the lef
1fd70 74 2d 68 61 6e 64 20 0a 61 6e 64 20 72 69 67 68  t-hand .and righ
1fd80 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e  t-hand datasets.
1fd90 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64   ^(In other word
1fda0 73 2c 20 69 66 20 74 68 65 20 6c 65 66 74 2d 68  s, if the left-h
1fdb0 61 6e 64 20 64 61 74 61 73 65 74 20 63 6f 6e 73  and dataset cons
1fdc0 69 73 74 73 20 6f 66 0a 3c 69 3e 4e 6c 68 73 3c  ists of.<i>Nlhs<
1fdd0 2f 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e 4d  /i> rows of <i>M
1fde0 6c 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c  lhs</i> columns,
1fdf0 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 68   and the right-h
1fe00 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a 3c  and dataset of.<
1fe10 69 3e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77 73 20  i>Nrhs</i> rows 
1fe20 6f 66 20 3c 69 3e 4d 72 68 73 3c 2f 69 3e 20 63  of <i>Mrhs</i> c
1fe30 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65  olumns, then the
1fe40 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
1fe50 63 74 20 69 73 20 61 0a 64 61 74 61 73 65 74 20  ct is a.dataset 
1fe60 6f 66 20 3c 69 3e 4e 6c 68 73 2e 4e 72 68 73 3c  of <i>Nlhs.Nrhs<
1fe70 2f 69 3e 20 72 6f 77 73 2c 20 65 61 63 68 20 63  /i> rows, each c
1fe80 6f 6e 74 61 69 6e 69 6e 67 20 3c 69 3e 4d 6c 68  ontaining <i>Mlh
1fe90 73 2b 4d 72 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d  s+Mrhs</i> colum
1fea0 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ns.)^..<p>^If th
1feb0 65 20 6a 6f 69 6e 2d 6f 70 20 69 73 20 22 43 52  e join-op is "CR
1fec0 4f 53 53 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45  OSS JOIN", "INNE
1fed0 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20  R JOIN", "JOIN" 
1fee0 6f 72 20 61 20 63 6f 6d 6d 61 0a 28 22 2c 22 29  or a comma.(",")
1fef0 20 61 6e 64 20 74 68 65 72 65 20 69 73 20 6e 6f   and there is no
1ff00 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
1ff10 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65  use, then the re
1ff20 73 75 6c 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e  sult of the join
1ff30 20 69 73 0a 73 69 6d 70 6c 79 20 74 68 65 20 63   is.simply the c
1ff40 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
1ff50 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
1ff60 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
1ff70 73 65 74 73 2e 20 0a 5e 54 68 65 72 65 20 69 73  sets. .^There is
1ff80 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62   no difference b
1ff90 65 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e 45  etween the "INNE
1ffa0 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20  R JOIN", "JOIN" 
1ffb0 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65  and "," join.ope
1ffc0 72 61 74 6f 72 73 2e 20 5e 28 54 68 65 20 22 43  rators. ^(The "C
1ffd0 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20  ROSS JOIN" join 
1ffe0 6f 70 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65  operator produce
1fff0 73 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 20  s the same data 
20000 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20 4a  as the ."INNER J
20010 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64  OIN", "JOIN" and
20020 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29 5e   "," operators)^
20030 2c 20 62 75 74 20 69 73 20 0a 3c 61 20 68 72 65  , but is .<a hre
20040 66 3d 6f 70 74 6f 76 65 72 76 69 65 77 2e 68 74  f=optoverview.ht
20050 6d 6c 23 6d 61 6e 63 74 72 6c 3e 68 61 6e 64 6c  ml#manctrl>handl
20060 65 64 20 73 6c 69 67 68 74 6c 79 20 64 69 66 66  ed slightly diff
20070 65 72 65 6e 74 6c 79 20 62 79 20 74 68 65 20 71  erently by the q
20080 75 65 72 79 0a 6f 70 74 69 6d 69 7a 65 72 3c 2f  uery.optimizer</
20090 61 3e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  a>. Otherwise, i
200a0 74 20 69 73 20 74 68 65 20 63 61 72 74 65 73 69  t is the cartesi
200b0 61 6e 20 70 72 6f 64 75 63 74 20 6d 6f 64 69 66  an product modif
200c0 69 65 64 20 0a 61 63 63 6f 72 64 69 6e 67 20 74  ied .according t
200d0 6f 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66  o one or more of
200e0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62   the following b
200f0 75 6c 6c 65 74 20 70 6f 69 6e 74 73 3a 20 0a 0a  ullet points: ..
20100 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  <ul>.  <li> <p>^
20110 28 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 20  (If there is an 
20120 4f 4e 20 63 6c 61 75 73 65 20 73 70 65 63 69 66  ON clause specif
20130 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 4f 4e  ied, then the ON
20140 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 0a 20   expression is. 
20150 20 20 20 20 20 20 65 76 61 6c 75 61 74 65 64 20        evaluated 
20160 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
20170 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
20180 6f 64 75 63 74 20 61 73 20 61 20 0a 20 20 20 20  oduct as a .    
20190 20 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72     [boolean expr
201a0 65 73 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77  ession]. All row
201b0 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
201c0 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
201d0 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20 20 20  ates to .       
201e0 66 61 6c 73 65 20 61 72 65 20 65 78 63 6c 75 64  false are exclud
201f0 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
20200 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c  set.)^..  <li> <
20210 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 61  p>^If there is a
20220 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 73 70   USING clause sp
20230 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
20240 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73  of the join-cons
20250 74 72 61 69 6e 74 2c 0a 20 20 20 20 20 20 20 74  traint,.       t
20260 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20  hen each of the 
20270 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 73 70 65  column names spe
20280 63 69 66 69 65 64 20 6d 75 73 74 20 65 78 69 73  cified must exis
20290 74 20 69 6e 20 74 68 65 20 64 61 74 61 73 65 74  t in the dataset
202a0 73 20 74 6f 20 0a 20 20 20 20 20 20 20 62 6f 74  s to .       bot
202b0 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  h the left and r
202c0 69 67 68 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e  ight of the join
202d0 2d 6f 70 2e 20 5e 28 46 6f 72 20 65 61 63 68 20  -op. ^(For each 
202e0 70 61 69 72 20 6f 66 20 6e 61 6d 65 73 61 6b 65  pair of namesake
202f0 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 2c  .       columns,
20300 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
20310 22 6c 68 73 2e 58 20 3d 20 72 68 73 2e 58 22 20  "lhs.X = rhs.X" 
20320 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  is evaluated for
20330 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 20 20 20   each row of.   
20340 20 20 20 20 74 68 65 20 63 61 72 74 65 73 69 61      the cartesia
20350 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61 20 5b  n product as a [
20360 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
20370 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20 66 6f  on]. All rows fo
20380 72 20 77 68 69 63 68 20 6f 6e 65 0a 20 20 20 20  r which one.    
20390 20 20 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68     or more of th
203a0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  e expressions ev
203b0 61 6c 75 61 74 65 73 20 74 6f 20 66 61 6c 73 65  aluates to false
203c0 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 66 72   are excluded fr
203d0 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 20 72 65  om the.       re
203e0 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68 65  sult set.)^ ^Whe
203f0 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75  n comparing valu
20400 65 73 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  es as a result o
20410 66 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65  f a USING clause
20420 2c 20 74 68 65 0a 20 20 20 20 20 20 20 6e 6f 72  , the.       nor
20430 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 68 61  mal rules for ha
20440 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69 74 69 65  ndling affinitie
20450 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  s, collation seq
20460 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a  uences and NULL.
20470 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69 6e         values in
20480 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70 70   comparisons app
20490 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20  ly. ^The column 
204a0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
204b0 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 6c   on the.       l
204c0 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
204d0 20 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74   the join operat
204e0 6f 72 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  or is considered
204f0 20 74 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c 65   to be on the le
20500 66 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 73  ft-hand.       s
20510 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ide of the compa
20520 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28  rison operator (
20530 3d 29 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  =) for the purpo
20540 73 65 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ses of collation
20550 20 0a 20 20 20 20 20 20 20 73 65 71 75 65 6e 63   .       sequenc
20560 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79 20 70  e and affinity p
20570 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20  recedence...    
20580 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20     <p>^For each 
20590 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  pair of columns 
205a0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
205b0 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
205c0 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  e column.       
205d0 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68  from the right-h
205e0 61 6e 64 20 64 61 74 61 73 65 74 20 69 73 20 6f  and dataset is o
205f0 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
20600 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74 2e 20  joined dataset. 
20610 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20 69 73  ^This .       is
20620 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72   the only differ
20630 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 55  ence between a U
20640 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e 64 20  SING clause and 
20650 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20 4f  its equivalent O
20660 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61  N.       constra
20670 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  int...  <li> <p>
20680 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52 41 4c  ^(If the NATURAL
20690 20 6b 65 79 77 6f 72 64 20 69 73 20 61 64 64 65   keyword is adde
206a0 64 20 74 6f 20 61 6e 79 20 6f 66 20 74 68 65 20  d to any of the 
206b0 6a 6f 69 6e 2d 6f 70 73 2c 20 74 68 65 6e 20 61  join-ops, then a
206c0 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c 69 63 69  n.       implici
206d0 74 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 69  t USING clause i
206e0 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6a  s added to the j
206f0 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 73 2e  oin-constraints.
20700 20 54 68 65 20 69 6d 70 6c 69 63 69 74 0a 20 20   The implicit.  
20710 20 20 20 20 20 55 53 49 4e 47 20 63 6c 61 75 73       USING claus
20720 65 20 63 6f 6e 74 61 69 6e 73 20 65 61 63 68 20  e contains each 
20730 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  of the column na
20740 6d 65 73 20 74 68 61 74 20 61 70 70 65 61 72 20  mes that appear 
20750 69 6e 20 62 6f 74 68 0a 20 20 20 20 20 20 20 74  in both.       t
20760 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
20770 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 64 61 74  t-hand input dat
20780 61 73 65 74 73 2e 29 5e 20 5e 49 66 20 74 68 65  asets.)^ ^If the
20790 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
207a0 68 61 6e 64 0a 20 20 20 20 20 20 20 69 6e 70 75  hand.       inpu
207b0 74 20 64 61 74 61 73 65 74 73 20 66 65 61 74 75  t datasets featu
207c0 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63 6f 6c  re no common col
207d0 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68 65 6e 20  umn names, then 
207e0 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77  the NATURAL keyw
207f0 6f 72 64 0a 20 20 20 20 20 20 20 68 61 73 20 6e  ord.       has n
20800 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20  o effect on the 
20810 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6a  results of the j
20820 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47 20 6f 72  oin. ^A USING or
20830 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61 79 0a 20   ON clause may. 
20840 20 20 20 20 20 20 6e 6f 74 20 62 65 20 61 64 64        not be add
20850 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20 74 68 61  ed to a join tha
20860 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
20870 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 2e  NATURAL keyword.
20880 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66  ..  <li> <p>^(If
20890 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 20 69 73 20   the join-op is 
208a0 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22 20 6f 72  a "LEFT JOIN" or
208b0 20 22 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49   "LEFT OUTER JOI
208c0 4e 22 2c 20 74 68 65 6e 20 61 66 74 65 72 0a 20  N", then after. 
208d0 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f 72 20        the ON or 
208e0 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e 67 20  USING filtering 
208f0 63 6c 61 75 73 65 73 20 68 61 76 65 20 62 65 65  clauses have bee
20900 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20 65 78  n applied, an ex
20910 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20 20 20  tra row is .    
20920 20 20 20 61 64 64 65 64 20 74 6f 20 74 68 65 20     added to the 
20930 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63 68 20  output for each 
20940 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69 67 69  row in the origi
20950 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e  nal left-hand in
20960 70 75 74 20 0a 20 20 20 20 20 20 20 64 61 74 61  put .       data
20970 73 65 74 20 74 68 61 74 20 63 6f 72 72 65 73 70  set that corresp
20980 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20  onds to no rows 
20990 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f  at all in the co
209a0 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20 20 64  mposite.       d
209b0 61 74 61 73 65 74 20 28 69 66 20 61 6e 79 29 2e  ataset (if any).
209c0 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20 72 6f  )^ ^The added ro
209d0 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20  ws contain NULL 
209e0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f  values in the co
209f0 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74 68 61  lumns.       tha
20a00 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79  t would normally
20a10 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20   contain values 
20a20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20  copied from the 
20a30 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74  right-hand input
20a40 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 2e  .       dataset.
20a50 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57    .</ul>..<p>^(W
20a60 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74 77  hen more than tw
20a70 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a 6f 69  o tables are joi
20a80 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61 73 20  ned together as 
20a90 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d 20 63  part of a FROM c
20aa0 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20  lause,.the join 
20ab0 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70  operations are p
20ac0 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72 64 65  rocessed in orde
20ad0 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  r from left to r
20ae0 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a  ight. In other .
20af0 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f 4d 20  words, the FROM 
20b00 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f  clause (A join-o
20b10 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20  p-1 B join-op-2 
20b20 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61  C) is computed a
20b30 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31  s .((A join-op-1
20b40 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29   B) join-op-2 C)
20b50 2e 29 5e 0a 20 20 20 20 20 20 20 0a 0a 3c 70 3e  .)^.       ..<p>
20b60 3c 62 3e 32 2e 20 57 48 45 52 45 20 63 6c 61 75  <b>2. WHERE clau
20b70 73 65 20 66 69 6c 74 65 72 69 6e 67 2e 3c 2f 62  se filtering.</b
20b80 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
20b90 6e 74 20 77 68 65 72 65 63 6c 61 75 73 65 3c 2f  nt whereclause</
20ba0 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79  tcl>.<tcl>hd_key
20bb0 77 6f 72 64 73 20 7b 57 48 45 52 45 20 63 6c 61  words {WHERE cla
20bc0 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  use}</tcl>..<p>^
20bd0 28 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75  (If a WHERE clau
20be0 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  se is specified,
20bf0 20 74 68 65 20 57 48 45 52 45 20 65 78 70 72 65   the WHERE expre
20c00 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
20c10 65 64 20 66 6f 72 20 0a 65 61 63 68 20 72 6f 77  ed for .each row
20c20 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61   in the input da
20c30 74 61 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e  ta as a [boolean
20c40 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 6c   expression]. Al
20c50 6c 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  l rows for which
20c60 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
20c70 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
20c80 6c 75 61 74 65 73 20 74 6f 20 66 61 6c 73 65 20  luates to false 
20c90 61 72 65 20 65 78 63 6c 75 64 65 64 20 66 72 6f  are excluded fro
20ca0 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 62 65  m the dataset be
20cb0 66 6f 72 65 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e  fore.continuing.
20cc0 29 5e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47 65 6e  )^..<p><b>3. Gen
20cd0 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  eration of the s
20ce0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
20cf0 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66  s.</b>.<tcl>hd_f
20d00 72 61 67 6d 65 6e 74 20 72 65 73 75 6c 74 73 65  ragment resultse
20d10 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  t</tcl>.<tcl>hd_
20d20 6b 65 79 77 6f 72 64 73 20 7b 72 65 73 75 6c 74  keywords {result
20d30 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73  -set expressions
20d40 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f 74 63  } {GROUP BY}</tc
20d50 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68 65 20  l>..<p>Once the 
20d60 69 6e 70 75 74 20 64 61 74 61 20 66 72 6f 6d 20  input data from 
20d70 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
20d80 68 61 73 20 62 65 65 6e 20 66 69 6c 74 65 72 65  has been filtere
20d90 64 20 62 79 20 74 68 65 0a 57 48 45 52 45 20 63  d by the.WHERE c
20da0 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
20db0 20 28 69 66 20 61 6e 79 29 2c 20 74 68 65 20 73   (if any), the s
20dc0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
20dd0 73 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65  s for the simple
20de0 20 0a 53 45 4c 45 43 54 20 61 72 65 20 63 61 6c   .SELECT are cal
20df0 63 75 6c 61 74 65 64 2e 20 45 78 61 63 74 6c 79  culated. Exactly
20e00 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e   how this is don
20e10 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68 65  e depends on whe
20e20 74 68 65 72 20 74 68 65 20 73 69 6d 70 6c 65 20  ther the simple 
20e30 0a 53 45 4c 45 43 54 20 69 73 20 61 6e 20 61 67  .SELECT is an ag
20e40 67 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e 2d 61  gregate or non-a
20e50 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2c 20  ggregate query, 
20e60 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
20e70 6f 74 20 61 20 47 52 4f 55 50 0a 42 59 20 63 6c  ot a GROUP.BY cl
20e80 61 75 73 65 20 77 61 73 20 73 70 65 63 69 66 69  ause was specifi
20e90 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c 69 73  ed...<p> The lis
20ea0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
20eb0 20 62 65 74 77 65 65 6e 20 74 68 65 20 53 45 4c   between the SEL
20ec0 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65 79  ECT and FROM key
20ed0 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e 20 61  words is known a
20ee0 73 0a 74 68 65 20 72 65 73 75 6c 74 20 65 78 70  s.the result exp
20ef0 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20 20 5e  ression list.  ^
20f00 49 66 20 61 20 72 65 73 75 6c 74 20 65 78 70 72  If a result expr
20f10 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 73 70  ession is the sp
20f20 65 63 69 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ecial expression
20f30 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f  ."*" then all co
20f40 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 70  lumns in the inp
20f50 75 74 20 64 61 74 61 20 61 72 65 20 73 75 62 73  ut data are subs
20f60 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 61 74  tituted for that
20f70 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e 2e   one expression.
20f80 0a 5e 28 49 66 20 74 68 65 20 65 78 70 72 65 73  .^(If the expres
20f90 73 69 6f 6e 20 69 73 20 74 68 65 20 61 6c 69 61  sion is the alia
20fa0 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20  s of a table or 
20fb0 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
20fc0 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f 6c 6c  FROM clause.foll
20fd0 6f 77 65 64 20 62 79 20 22 2e 2a 22 20 74 68 65  owed by ".*" the
20fe0 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 66 72  n all columns fr
20ff0 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62  om the named tab
21000 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 61  le or subquery a
21010 72 65 0a 73 75 62 73 74 69 74 75 74 65 64 20 66  re.substituted f
21020 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20 65 78  or the single ex
21030 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28 49 74  pression.)^ ^(It
21040 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
21050 75 73 65 20 61 20 22 2a 22 20 6f 72 0a 22 61 6c  use a "*" or."al
21060 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f  ias.*" expressio
21070 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74  n in any context
21080 20 6f 74 68 65 72 20 74 68 61 6e 20 74 68 61 6e   other than than
21090 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65 73   a result expres
210a0 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28 49  sion list.)^.^(I
210b0 74 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72 72  t is also an err
210c0 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20  or to use a "*" 
210d0 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78 70  or "alias.*" exp
210e0 72 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69 6d  ression in a sim
210f0 70 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72 79  ple SELECT.query
21100 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 68   that does not h
21110 61 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75 73  ave a FROM claus
21120 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20  e.)^..<p> ^(The 
21130 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
21140 73 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72 65  s in the rows re
21150 74 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d 70  turned by a simp
21160 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
21170 65 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f 20  ent.is equal to 
21180 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 78  the number of ex
21190 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65  pressions in the
211a0 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
211b0 6f 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73 75  on list after.su
211c0 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a 20  bstitution of * 
211d0 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70 72  and alias.* expr
211e0 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68 20  essions.)^ Each 
211f0 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63 61  result row is ca
21200 6c 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61 6c  lculated by.eval
21210 75 61 74 69 6e 67 20 74 68 65 20 65 78 70 72 65  uating the expre
21220 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65  ssions in the re
21230 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
21240 6c 69 73 74 20 77 69 74 68 20 72 65 73 70 65 63  list with respec
21250 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72 6f  t to a.single ro
21260 77 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 20  w of input data 
21270 6f 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61 74  or, for aggregat
21280 65 20 71 75 65 72 69 65 73 2c 20 77 69 74 68 20  e queries, with 
21290 72 65 73 70 65 63 74 20 74 6f 20 61 20 67 72 6f  respect to a gro
212a0 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c  up.of rows...<ul
212b0 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  >.  <li><p>^If t
212c0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
212d0 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d  ent is <b>a non-
212e0 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 3c  aggregate query<
212f0 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20 65  /b>, then .    e
21300 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
21310 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78 70  n the result exp
21320 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73 20  ression list is 
21330 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61  evaluated for ea
21340 63 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74 68  ch row in.    th
21350 65 20 64 61 74 61 73 65 74 20 66 69 6c 74 65 72  e dataset filter
21360 65 64 20 62 79 20 74 68 65 20 57 48 45 52 45 20  ed by the WHERE 
21370 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c  clause...  <li><
21380 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54  p>^If the SELECT
21390 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62   statement is <b
213a0 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75  >an aggregate qu
213b0 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52  ery without a GR
213c0 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63  OUP.    BY</b> c
213d0 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68  lause, then each
213e0 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
213f0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73  ssion in the res
21400 75 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20 20  ult-set is .    
21410 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 61  evaluated once a
21420 63 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72 65  cross the entire
21430 20 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68 20   dataset. ^Each 
21440 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
21450 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e 20  pression.    in 
21460 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69  the result-set i
21470 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65  s evaluated once
21480 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72   for an arbitrar
21490 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77  ily selected row
214a0 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74 61   of.    the data
214b0 73 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20 61  set. ^The same a
214c0 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63  rbitrarily selec
214d0 74 65 64 20 72 6f 77 20 69 73 20 75 73 65 64 20  ted row is used 
214e0 66 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f 6e  for each.    non
214f0 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
21500 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20 74  ssion. ^Or, if t
21510 68 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74 61  he dataset conta
21520 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20 74  ins zero rows, t
21530 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e 6f  hen .    each no
21540 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
21550 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
21560 74 65 64 20 61 67 61 69 6e 73 74 20 61 20 72 6f  ted against a ro
21570 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20 20  w consisting.   
21580 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55 4c   entirely of NUL
21590 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c 70  L values...   <p
215a0 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f 77  >^The single row
215b0 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 64   of result-set d
215c0 61 74 61 20 63 72 65 61 74 65 64 20 62 79 20 65  ata created by e
215d0 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 67  valuating the ag
215e0 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64 20  gregate.    and 
215f0 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
21600 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65  pressions in the
21610 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72 6d   result-set form
21620 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  s the result of 
21630 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74 65  an.    aggregate
21640 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61   query without a
21650 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
21660 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65 20  . ^An aggregate 
21670 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 0a  query without a.
21680 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61      GROUP BY cla
21690 75 73 65 20 61 6c 77 61 79 73 20 72 65 74 75 72  use always retur
216a0 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 72  ns exactly one r
216b0 6f 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65 6e  ow of data, even
216c0 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 20 20   if there are.  
216d0 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20 69    zero rows of i
216e0 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c 6c  nput data...  <l
216f0 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53 45  i><p>^(If the SE
21700 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
21710 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61 74  s <b>an aggregat
21720 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47  e query with a G
21730 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20  ROUP.    BY</b> 
21740 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63  clause, then eac
21750 68 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  h of the express
21760 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20 61  ions specified a
21770 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20 20  s part of the.  
21780 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73    GROUP BY claus
21790 65 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66  e is evaluated f
217a0 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
217b0 68 65 20 64 61 74 61 73 65 74 2e 20 45 61 63 68  he dataset. Each
217c0 20 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65 6e   row.    is then
217d0 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 22   assigned to a "
217e0 67 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e 20  group" based on 
217f0 74 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f 77  the results; row
21800 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20 20  s for which.    
21810 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 65  the results of e
21820 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47 52  valuating the GR
21830 4f 55 50 20 42 59 20 65 78 70 72 65 73 73 69 6f  OUP BY expressio
21840 6e 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  ns are the same 
21850 61 72 65 0a 20 20 20 20 61 73 73 69 67 6e 65 64  are.    assigned
21860 20 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72 6f   to the same gro
21870 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70  up.)^ ^For the p
21880 75 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75 70  urposes of group
21890 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a  ing rows, NULL .
218a0 20 20 20 20 76 61 6c 75 65 73 20 61 72 65 20 63      values are c
218b0 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c 2e  onsidered equal.
218c0 20 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c 65   ^The usual rule
218d0 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e  s for [collation
218e0 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20 20  |selecting a.   
218f0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
21900 6e 63 65 5d 20 77 69 74 68 20 77 68 69 63 68 20  nce] with which 
21910 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
21920 76 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68 65  values apply whe
21930 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20 20  n evaluating.   
21940 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
21950 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
21960 65 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73 73  e.  ^The express
21970 69 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f 55  ions in the GROU
21980 50 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20 20  P BY clause.    
21990 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  do <em>not</em> 
219a0 68 61 76 65 20 74 6f 20 62 65 20 65 78 70 72 65  have to be expre
219b0 73 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70 65  ssions that appe
219c0 61 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ar in the result
219d0 2e 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72 65  . ^The.    expre
219e0 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55  ssions in a GROU
219f0 50 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79 20  P BY clause may 
21a00 6e 6f 74 20 62 65 20 61 67 67 72 65 67 61 74 65  not be aggregate
21a10 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a 20   expressions... 
21a20 20 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41 56     <p>^(If a HAV
21a30 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73 70  ING clause is sp
21a40 65 63 69 66 69 65 64 2c 20 69 74 20 69 73 20 65  ecified, it is e
21a50 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
21a60 72 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20 20  r each group .  
21a70 20 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20 5b    of rows as a [
21a80 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
21a90 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73 75  on]. If the resu
21aa0 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  lt of evaluating
21ab0 20 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47 20   the.    HAVING 
21ac0 63 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65 2c  clause is false,
21ad0 20 74 68 65 20 67 72 6f 75 70 20 69 73 20 64 69   the group is di
21ae0 73 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20 74  scarded.)^ ^If t
21af0 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
21b00 20 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72 65   is.    an aggre
21b10 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  gate expression,
21b20 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64   it is evaluated
21b30 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73   across all rows
21b40 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e   in the group. ^
21b50 49 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47 20  If.    a HAVING 
21b60 63 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e 2d  clause is a non-
21b70 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
21b80 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61 6c  sion, it is eval
21b90 75 61 74 65 64 20 77 69 74 68 20 72 65 73 70 65  uated with respe
21ba0 63 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72 62  ct.    to an arb
21bb0 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65  itrarily selecte
21bc0 64 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 67  d row from the g
21bd0 72 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56 49  roup.  ^The HAVI
21be0 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  NG expression ma
21bf0 79 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20 76  y.    refer to v
21c00 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67 72  alues, even aggr
21c10 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c  egate functions,
21c20 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e   that are not in
21c30 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e   the result.</p>
21c40 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 65  ..    <p>^Each e
21c50 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
21c60 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 74   result-set is t
21c70 68 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f 6e  hen evaluated on
21c80 63 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20  ce for each.    
21c90 67 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20 5e  group of rows. ^
21ca0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
21cb0 6e 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74  n is an aggregat
21cc0 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74  e expression, it
21cd0 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74   is .    evaluat
21ce0 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f  ed across all ro
21cf0 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ws in the group.
21d00 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20   ^Otherwise, it 
21d10 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67 61  is evaluated aga
21d20 69 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67 6c  inst.    a singl
21d30 65 20 61 72 62 69 74 72 61 72 69 6c 79 20 63 68  e arbitrarily ch
21d40 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77 69  osen row from wi
21d50 74 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  thin the group. 
21d60 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72  ^If there is mor
21d70 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20 6e  e.    than one n
21d80 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
21d90 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72  ression in the r
21da0 65 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e 20  esult-set, then 
21db0 61 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78 70  all such.    exp
21dc0 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61  ressions are eva
21dd0 6c 75 61 74 65 64 20 66 6f 72 20 74 68 65 20 73  luated for the s
21de0 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c 70  ame row...    <p
21df0 3e 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66 20  >^Each group of 
21e00 69 6e 70 75 74 20 64 61 74 61 73 65 74 20 72 6f  input dataset ro
21e10 77 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20 61  ws contributes a
21e20 20 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20 74   single row to t
21e30 68 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20 72  he .    set of r
21e40 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75 62  esult rows. ^Sub
21e50 6a 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69 6e  ject to filterin
21e60 67 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  g associated wit
21e70 68 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a 20  h the DISTINCT. 
21e80 20 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 20     keyword, the 
21e90 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72  number of rows r
21ea0 65 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61 67  eturned by an ag
21eb0 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69  gregate query wi
21ec0 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42  th a GROUP.    B
21ed0 59 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20  Y clause is the 
21ee0 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62  same as the numb
21ef0 65 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66 20  er of groups of 
21f00 72 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62 79  rows produced by
21f10 20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74 68   applying.    th
21f20 65 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20 48  e GROUP BY and H
21f30 41 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74 6f  AVING clauses to
21f40 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e   the filtered in
21f50 70 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f 75  put dataset..</u
21f60 6c 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d  l>..<p><b>4. Rem
21f70 6f 76 61 6c 20 6f 66 20 64 75 70 6c 69 63 61 74  oval of duplicat
21f80 65 20 72 6f 77 73 20 28 44 49 53 54 49 4e 43 54  e rows (DISTINCT
21f90 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62   processing).</b
21fa0 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
21fb0 6e 74 20 64 69 73 74 69 6e 63 74 3c 2f 74 63 6c  nt distinct</tcl
21fc0 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72  >.<tcl>hd_keywor
21fd0 64 73 20 7b 44 49 53 54 49 4e 43 54 7d 3c 2f 74  ds {DISTINCT}</t
21fe0 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20  cl>..<p>^One of 
21ff0 74 68 65 20 41 4c 4c 20 6f 72 20 44 49 53 54 49  the ALL or DISTI
22000 4e 43 54 20 6b 65 79 77 6f 72 64 73 20 6d 61 79  NCT keywords may
22010 20 66 6f 6c 6c 6f 77 20 74 68 65 20 53 45 4c 45   follow the SELE
22020 43 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 61 20  CT keyword in a 
22030 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73  .simple SELECT s
22040 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68  tatement. ^If th
22050 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
22060 69 73 20 61 20 53 45 4c 45 43 54 20 41 4c 4c 2c  is a SELECT ALL,
22070 20 74 68 65 6e 20 74 68 65 0a 65 6e 74 69 72 65   then the.entire
22080 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
22090 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
220a0 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 2e 20   by the SELECT. 
220b0 5e 49 66 20 6e 65 69 74 68 65 72 20 41 4c 4c 20  ^If neither ALL 
220c0 6f 72 0a 44 49 53 54 49 4e 43 54 20 61 72 65 20  or.DISTINCT are 
220d0 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68  present, then th
220e0 65 20 62 65 68 61 76 69 6f 75 72 20 69 73 20 61  e behaviour is a
220f0 73 20 69 66 20 41 4c 4c 20 77 65 72 65 20 73 70  s if ALL were sp
22100 65 63 69 66 69 65 64 2e 20 0a 5e 49 66 20 74 68  ecified. .^If th
22110 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
22120 69 73 20 61 20 53 45 4c 45 43 54 20 44 49 53 54  is a SELECT DIST
22130 49 4e 43 54 2c 20 74 68 65 6e 20 64 75 70 6c 69  INCT, then dupli
22140 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
22150 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 73  moved.from the s
22160 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
22170 73 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 72  s before it is r
22180 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72 20 74 68  eturned. ^For th
22190 65 20 70 75 72 70 6f 73 65 73 20 6f 66 0a 64 65  e purposes of.de
221a0 74 65 63 74 69 6e 67 20 64 75 70 6c 69 63 61 74  tecting duplicat
221b0 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e 55 4c 4c  e rows, two NULL
221c0 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
221d0 69 64 65 72 65 64 20 74 6f 20 62 65 20 65 71 75  idered to be equ
221e0 61 6c 2e 20 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20  al. ^The.normal 
221f0 72 75 6c 65 73 20 66 6f 72 20 73 65 6c 65 63 74  rules for select
22200 69 6e 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ing a collation 
22210 73 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70  sequence to comp
22220 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73 20  are text values 
22230 77 69 74 68 0a 61 70 70 6c 79 2e 0a 0a 3c 68 33  with.apply...<h3
22240 3e 43 6f 6d 70 6f 75 6e 64 20 53 65 6c 65 63 74  >Compound Select
22250 20 53 74 61 74 65 6d 65 6e 74 73 0a 3c 74 63 6c   Statements.<tcl
22260 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d  >hd_fragment com
22270 70 6f 75 6e 64 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  pound</tcl>.<tcl
22280 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 63 6f  >hd_keywords {co
22290 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 7d 20 7b  mpound select} {
222a0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 7d 3c  compound query}<
222b0 2f 74 63 6c 3e 0a 3c 2f 68 33 3e 0a 0a 3c 70 3e  /tcl>.</h3>..<p>
222c0 54 77 6f 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70  Two or more simp
222d0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
222e0 65 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e  ents may be conn
222f0 65 63 74 65 64 20 74 6f 67 65 74 68 65 72 20 74  ected together t
22300 6f 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e  o form.a compoun
22310 64 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20 74  d SELECT using t
22320 68 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20  he UNION, UNION 
22330 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20 6f  ALL, INTERSECT o
22340 72 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f  r EXCEPT operato
22350 72 2e 0a 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e  r..^In a compoun
22360 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68  d SELECT, all th
22370 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  e constituent SE
22380 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74 75 72  LECTs must retur
22390 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62  n the same .numb
223a0 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c  er of result col
223b0 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f  umns. ^As the co
223c0 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f  mponents of a co
223d0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75  mpound SELECT mu
223e0 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c  st.be simple SEL
223f0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  ECT statements, 
22400 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  they may not con
22410 74 61 69 6e 20 4f 52 44 45 52 20 42 59 20 6f 72  tain ORDER BY or
22420 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 2e 0a   LIMIT clauses..
22430 5e 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49  ^ORDER BY and LI
22440 4d 49 54 20 63 6c 61 75 73 65 73 20 6d 61 79 20  MIT clauses may 
22450 6f 6e 6c 79 20 6f 63 63 75 72 20 61 74 20 74 68  only occur at th
22460 65 20 65 6e 64 20 6f 66 20 74 68 65 20 65 6e 74  e end of the ent
22470 69 72 65 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c  ire compound.SEL
22480 45 43 54 2e 20 20 0a 0a 3c 70 3e 5e 41 20 63 6f  ECT.  ..<p>^A co
22490 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63 72  mpound SELECT cr
224a0 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49 4f  eated using UNIO
224b0 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20 72  N ALL operator r
224c0 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20 72  eturns all the r
224d0 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c  ows.from the SEL
224e0 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ECT to the left 
224f0 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c  of the UNION ALL
22500 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20 61   operator, and a
22510 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d  ll the rows.from
22520 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74   the SELECT to t
22530 68 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e 20  he right of it. 
22540 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72 61  ^The UNION opera
22550 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73 61  tor works the sa
22560 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e 20  me way as.UNION 
22570 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61 74  ALL, except that
22580 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
22590 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  are removed from
225a0 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75 6c   the final resul
225b0 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54 45  t set..^The INTE
225c0 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20 72  RSECT operator r
225d0 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65 72  eturns the inter
225e0 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  section of the r
225f0 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c 65  esults of the le
22600 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45 4c  ft and.right SEL
22610 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43 45  ECTs.  ^The EXCE
22620 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75  PT operator retu
22630 72 6e 73 20 74 68 65 20 73 75 62 73 65 74 20 6f  rns the subset o
22640 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  f rows returned 
22650 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c 45  by the.left SELE
22660 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  CT that are not 
22670 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62 79  also returned by
22680 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
22690 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63 61  SELECT. ^Duplica
226a0 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d 6f  te.rows are remo
226b0 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73  ved from the res
226c0 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45 43  ults of INTERSEC
226d0 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70 65  T and EXCEPT ope
226e0 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74 68  rators before th
226f0 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  e.result set is 
22700 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46  returned...<p>^F
22710 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
22720 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 64  of determining d
22730 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66 6f  uplicate rows fo
22740 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  r the results of
22750 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54   compound.SELECT
22760 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c 4c   operators, NULL
22770 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
22780 69 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f 20  idered equal to 
22790 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65  other NULL value
227a0 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20 66  s and.distinct f
227b0 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c  rom all non-NULL
227c0 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63 6f   values. ^The co
227d0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
227e0 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
227f0 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65   .two text value
22800 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
22810 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  as if the column
22820 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e  s of the left an
22830 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45 4c  d right-hand.SEL
22840 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ECT statements w
22850 65 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  ere the left and
22860 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72   right-hand oper
22870 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75 61  ands of the equa
22880 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72 2c  ls (=).operator,
22890 20 65 78 63 65 70 74 20 74 68 61 74 20 67 72 65   except that gre
228a0 61 74 65 72 20 70 72 65 63 65 64 65 6e 63 65 20  ater precedence 
228b0 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20  is not assigned 
228c0 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a  to a collation .
228d0 73 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69  sequence specifi
228e0 65 64 20 77 69 74 68 20 74 68 65 20 70 6f 73 74  ed with the post
228f0 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  fix COLLATE oper
22900 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e 69  ator. ^No affini
22910 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  ty.transformatio
22920 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 74  ns are applied t
22930 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68 65  o any values whe
22940 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77 73  n comparing rows
22950 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63 6f   as part of a.co
22960 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 0a  mpound SELECT. .
22970 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65 65  .<p>^(When three
22980 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20   or more simple 
22990 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e 6e  SELECTs are conn
229a0 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d  ected into a com
229b0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74 68  pound SELECT,.th
229c0 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65  ey group from le
229d0 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20  ft to right. In 
229e0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
229f0 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43 22  "A", "B" and "C"
22a00 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65 20   are all.simple 
22a10 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
22a20 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43 29  s, (A op B op C)
22a30 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73   is processed as
22a40 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43 29   ((A op B) op C)
22a50 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  .)^..</p>..<tcl>
22a60 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 65  hd_fragment orde
22a70 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 3c 2f  rby {order by}</
22a80 74 63 6c 3e 0a 3c 68 33 3e 4f 52 44 45 52 20 42  tcl>.<h3>ORDER B
22a90 59 20 61 6e 64 20 4c 49 4d 49 54 2f 4f 46 46 53  Y and LIMIT/OFFS
22aa0 45 54 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a  ET Clauses</h3>.
22ab0 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20  .<p>If a SELECT 
22ac0 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72  statement that r
22ad0 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e  eturns more than
22ae0 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f   one row does no
22af0 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20  t have an.ORDER 
22b00 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f  BY clause, the o
22b10 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68  rder in which th
22b20 65 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  e rows are retur
22b30 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
22b40 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43  ..Or, if a SELEC
22b50 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  T statement does
22b60 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42   have an ORDER B
22b70 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
22b80 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65  he list of.expre
22b90 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20  ssions attached 
22ba0 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  to the ORDER BY 
22bb0 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72  determine the or
22bc0 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
22bd0 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 74  s.are returned t
22be0 6f 20 74 68 65 20 75 73 65 72 2e 20 5e 52 6f 77  o the user. ^Row
22bf0 73 20 61 72 65 20 66 69 72 73 74 20 73 6f 72 74  s are first sort
22c00 65 64 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ed based on the 
22c10 72 65 73 75 6c 74 73 20 6f 66 0a 65 76 61 6c 75  results of.evalu
22c20 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d  ating the left-m
22c30 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ost expression i
22c40 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 6c  n the ORDER BY l
22c50 69 73 74 2c 20 74 68 65 6e 20 74 69 65 73 20 61  ist, then ties a
22c60 72 65 20 62 72 6f 6b 65 6e 0a 62 79 20 65 76 61  re broken.by eva
22c70 6c 75 61 74 69 6e 67 20 74 68 65 20 73 65 63 6f  luating the seco
22c80 6e 64 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70  nd left-most exp
22c90 72 65 73 73 69 6f 6e 20 61 6e 64 20 73 6f 20 6f  ression and so o
22ca0 6e 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20  n. The order in 
22cb0 77 68 69 63 68 0a 74 77 6f 20 72 6f 77 73 20 66  which.two rows f
22cc0 6f 72 20 77 68 69 63 68 20 61 6c 6c 20 4f 52 44  or which all ORD
22cd0 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
22ce0 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 65 71  s evaluate to eq
22cf0 75 61 6c 20 76 61 6c 75 65 73 20 61 72 65 0a 72  ual values are.r
22d00 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66  eturned is undef
22d10 69 6e 65 64 2e 20 5e 45 61 63 68 20 4f 52 44 45  ined. ^Each ORDE
22d20 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
22d30 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c  may be optionall
22d40 79 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 6f 6e  y followed.by on
22d50 65 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64  e of the keyword
22d60 73 20 41 53 43 20 28 73 6d 61 6c 6c 65 72 20 76  s ASC (smaller v
22d70 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72 6e  alues are return
22d80 65 64 20 66 69 72 73 74 29 20 6f 72 20 44 45 53  ed first) or DES
22d90 43 20 28 6c 61 72 67 65 72 0a 76 61 6c 75 65 73  C (larger.values
22da0 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66 69   are returned fi
22db0 72 73 74 29 2e 20 5e 49 66 20 6e 65 69 74 68 65  rst). ^If neithe
22dc0 72 20 41 53 43 20 6f 72 20 44 45 53 43 20 61 72  r ASC or DESC ar
22dd0 65 20 73 70 65 63 69 66 69 65 64 2c 20 72 6f 77  e specified, row
22de0 73 0a 61 72 65 20 73 6f 72 74 65 64 20 69 6e 20  s.are sorted in 
22df0 61 73 63 65 6e 64 69 6e 67 20 28 73 6d 61 6c 6c  ascending (small
22e00 65 72 20 76 61 6c 75 65 73 20 66 69 72 73 74 29  er values first)
22e10 20 6f 72 64 65 72 20 62 79 20 64 65 66 61 75 6c   order by defaul
22e20 74 2e 0a 0a 3c 70 3e 45 61 63 68 20 4f 52 44 45  t...<p>Each ORDE
22e30 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
22e40 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20  is processed as 
22e50 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f  follows:</p>..<o
22e60 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  l>.<li><p>^If th
22e70 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
22e80 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73 74  ssion is a const
22e90 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74 68  ant integer K th
22ea0 65 6e 20 74 68 65 0a 65 78 70 72 65 73 73 69 6f  en the.expressio
22eb0 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  n is considered 
22ec0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
22ed0 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   K-th column of 
22ee0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 28  the result set.(
22ef0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 75 6d 62  columns are numb
22f00 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74  ered from left t
22f10 6f 20 72 69 67 68 74 20 73 74 61 72 74 69 6e 67  o right starting
22f20 20 77 69 74 68 20 31 29 2e 0a 0a 3c 6c 69 3e 3c   with 1)...<li><
22f30 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20  p>^If the ORDER 
22f40 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
22f50 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 74   an identifier t
22f60 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
22f70 74 6f 0a 74 68 65 20 61 6c 69 61 73 20 6f 66 20  to.the alias of 
22f80 6f 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75  one of the outpu
22f90 74 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20  t columns, then 
22fa0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
22fb0 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 61 6e 20  s considered.an 
22fc0 61 6c 69 61 73 20 66 6f 72 20 74 68 61 74 20 63  alias for that c
22fd0 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e  olumn...<li><p>^
22fe0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68  Otherwise, if th
22ff0 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
23000 73 73 69 6f 6e 20 69 73 20 61 6e 79 20 6f 74 68  ssion is any oth
23010 65 72 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  er expression, i
23020 74 20 0a 69 73 20 65 76 61 6c 75 61 74 65 64 20  t .is evaluated 
23030 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 65 64  and the returned
23040 20 76 61 6c 75 65 20 75 73 65 64 20 74 6f 20 6f   value used to o
23050 72 64 65 72 20 74 68 65 20 6f 75 74 70 75 74 20  rder the output 
23060 72 6f 77 73 2e 20 5e 49 66 0a 74 68 65 20 53 45  rows. ^If.the SE
23070 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
23080 73 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  s a simple SELEC
23090 54 2c 20 74 68 65 6e 20 61 6e 20 4f 52 44 45 52  T, then an ORDER
230a0 20 42 59 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20   BY may contain 
230b0 61 6e 79 0a 61 72 62 69 74 72 61 72 79 20 65 78  any.arbitrary ex
230c0 70 72 65 73 73 69 6f 6e 73 2e 20 5e 48 6f 77 65  pressions. ^Howe
230d0 76 65 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45  ver, if the SELE
230e0 43 54 20 69 73 20 61 20 63 6f 6d 70 6f 75 6e 64  CT is a compound
230f0 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 0a 4f 52   SELECT, then.OR
23100 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
23110 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  ns that are not 
23120 61 6c 69 61 73 65 73 20 74 6f 20 6f 75 74 70 75  aliases to outpu
23130 74 20 63 6f 6c 75 6d 6e 73 20 6d 75 73 74 20 62  t columns must b
23140 65 20 65 78 61 63 74 6c 79 0a 74 68 65 20 73 61  e exactly.the sa
23150 6d 65 20 61 73 20 61 6e 20 65 78 70 72 65 73 73  me as an express
23160 69 6f 6e 20 75 73 65 64 20 61 73 20 61 6e 20 6f  ion used as an o
23170 75 74 70 75 74 20 63 6f 6c 75 6d 6e 2e 0a 3c 2f  utput column..</
23180 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65  ol>..<p>^For the
23190 20 70 75 72 70 6f 73 65 73 20 6f 66 20 73 6f 72   purposes of sor
231a0 74 69 6e 67 20 72 6f 77 73 2c 20 76 61 6c 75 65  ting rows, value
231b0 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69  s are compared i
231c0 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a 61  n the same way.a
231d0 73 20 66 6f 72 20 5b 63 6f 6d 70 61 72 69 73 6f  s for [compariso
231e0 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 5d 2e 20  n expressions]. 
231f0 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  The collation se
23200 71 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20 63  quence used to c
23210 6f 6d 70 61 72 65 0a 74 77 6f 20 74 65 78 74 20  ompare.two text 
23220 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d  values is determ
23230 69 6e 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ined as follows:
23240 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ol>.  <li><p>
23250 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59  ^If the ORDER BY
23260 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
23270 73 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74  ssigned a collat
23280 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69  ion sequence usi
23290 6e 67 0a 20 20 74 68 65 20 70 6f 73 74 66 69 78  ng.  the postfix
232a0 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74   [COLLATE operat
232b0 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 73 70  or], then the sp
232c0 65 63 69 66 69 65 64 20 63 6f 6c 6c 61 74 69 6f  ecified collatio
232d0 6e 20 73 65 71 75 65 6e 63 65 20 69 73 0a 20 20  n sequence is.  
232e0 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  used..  <li><p>^
232f0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68  Otherwise, if th
23300 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
23310 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 6c 69 61  ssion is an alia
23320 73 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69  s to an expressi
23330 6f 6e 0a 20 20 74 68 61 74 20 68 61 73 20 62 65  on.  that has be
23340 65 6e 20 61 73 73 69 67 6e 65 64 20 61 20 63 6f  en assigned a co
23350 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
23360 20 75 73 69 6e 67 20 74 68 65 20 70 6f 73 74 66   using the postf
23370 69 78 20 0a 20 20 5b 43 4f 4c 4c 41 54 45 20 6f  ix .  [COLLATE o
23380 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74  perator], then t
23390 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
233a0 75 65 6e 63 65 20 61 73 73 69 67 6e 65 64 20 74  uence assigned t
233b0 6f 20 74 68 65 20 61 6c 69 61 73 65 64 0a 20 20  o the aliased.  
233c0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73  expression is us
233d0 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74  ed..  <li><p>^Ot
233e0 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65 20  herwise, if the 
233f0 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
23400 69 6f 6e 20 69 73 20 61 20 63 6f 6c 75 6d 6e 20  ion is a column 
23410 6f 72 20 61 6e 20 61 6c 69 61 73 20 6f 66 0a 20  or an alias of. 
23420 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74   an expression t
23430 68 61 74 20 69 73 20 61 20 63 6f 6c 75 6d 6e 2c  hat is a column,
23440 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c   then the defaul
23450 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
23460 65 6e 63 65 20 66 6f 72 0a 20 20 74 68 65 20 63  ence for.  the c
23470 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 20 0a  olumn is used. .
23480 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77    <li><p>^Otherw
23490 69 73 65 2c 20 74 68 65 20 5b 42 49 4e 41 52 59  ise, the [BINARY
234a0 5d 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  ] collation sequ
234b0 65 6e 63 65 20 69 73 20 75 73 65 64 2e 0a 3c 2f  ence is used..</
234c0 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 20 63 6f 6d  ol>..<p>In a com
234d0 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 73 74 61  pound SELECT sta
234e0 74 65 6d 65 6e 74 2c 20 61 6c 6c 20 4f 52 44 45  tement, all ORDE
234f0 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73  R BY expressions
23500 20 61 72 65 20 68 61 6e 64 6c 65 64 0a 61 73 20   are handled.as 
23510 61 6c 69 61 73 65 73 20 66 6f 72 20 6f 6e 65 20  aliases for one 
23520 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
23530 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 6f 6d  lumns of the com
23540 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 0a 5e 28  pound SELECT..^(
23550 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20 65  If an ORDER BY e
23560 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e 6f 74  xpression is not
23570 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c 69 61   an integer alia
23580 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73  s, then SQLite s
23590 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65 66 74  earches.the left
235a0 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69 6e 20  -most SELECT in 
235b0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66 6f 72  the compound for
235c0 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e   a result column
235d0 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 65 69   that matches ei
235e0 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e 64 20  ther.the second 
235f0 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73 20 61  or third rules a
23600 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74 63 68  bove. If a match
23610 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 73   is found, the s
23620 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e 64 0a  earch stops and.
23630 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
23640 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61 6e 20  s handled as an 
23650 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 65  alias for the re
23660 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74  sult column that
23670 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d 61 74   it has been.mat
23680 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20 4f 74  ched against. Ot
23690 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e 65 78  herwise, the nex
236a0 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  t SELECT to the 
236b0 72 69 67 68 74 20 69 73 20 74 72 69 65 64 2c 20  right is tried, 
236c0 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e 49 66  and so on.)^.^If
236d0 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65 78 70   no matching exp
236e0 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 66  ression can be f
236f0 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65 73 75  ound in the resu
23700 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e  lt columns of an
23710 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  y.constituent SE
23720 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e 20 65  LECT, it is an e
23730 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65 72 6d  rror. ^Each term
23740 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   of the ORDER BY
23750 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f 63 65   clause is.proce
23760 73 73 65 64 20 73 65 70 61 72 61 74 65 6c 79 20  ssed separately 
23770 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74 63 68  and may be match
23780 65 64 20 61 67 61 69 6e 73 74 20 72 65 73 75 6c  ed against resul
23790 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 64  t columns from d
237a0 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43 54 20  ifferent.SELECT 
237b0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
237c0 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a  e compound.</p>.
237d0 0a 3c 70 3e 54 68 65 20 4c 49 4d 49 54 20 63 6c  .<p>The LIMIT cl
237e0 61 75 73 65 20 69 73 20 75 73 65 64 20 74 6f 20  ause is used to 
237f0 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72 20 62  place an upper b
23800 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62  ound on the numb
23810 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75 72  er of rows.retur
23820 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43 54 20  ned by a SELECT 
23830 73 74 61 74 65 6d 65 6e 74 2e 20 5e 41 6e 79 20  statement. ^Any 
23840 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
23850 6e 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e  n may be used in
23860 20 74 68 65 20 0a 4c 49 4d 49 54 20 63 6c 61 75   the .LIMIT clau
23870 73 65 2c 20 73 6f 20 6c 6f 6e 67 20 61 73 20 69  se, so long as i
23880 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  t evaluates to a
23890 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 76  n integer or a v
238a0 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
238b0 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76  .losslessly conv
238c0 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
238d0 67 65 72 2e 20 5e 49 66 20 74 68 65 20 65 78 70  ger. ^If the exp
238e0 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
238f0 73 20 74 6f 20 61 20 4e 55 4c 4c 20 0a 76 61 6c  s to a NULL .val
23900 75 65 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  ue or any other 
23910 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f  value that canno
23920 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
23930 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
23940 69 6e 74 65 67 65 72 2c 20 61 6e 0a 65 72 72 6f  integer, an.erro
23950 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e  r is returned. ^
23960 49 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70  If the LIMIT exp
23970 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
23980 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  s to a negative 
23990 76 61 6c 75 65 2c 0a 74 68 65 6e 20 74 68 65 72  value,.then ther
239a0 65 20 69 73 20 6e 6f 20 75 70 70 65 72 20 62 6f  e is no upper bo
239b0 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  und on the numbe
239c0 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e  r of rows return
239d0 65 64 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  ed. ^Otherwise, 
239e0 74 68 65 0a 53 45 4c 45 43 54 20 72 65 74 75 72  the.SELECT retur
239f0 6e 73 20 74 68 65 20 66 69 72 73 74 20 4e 20 72  ns the first N r
23a00 6f 77 73 20 6f 66 20 69 74 73 20 72 65 73 75 6c  ows of its resul
23a10 74 20 73 65 74 20 6f 6e 6c 79 2c 20 77 68 65 72  t set only, wher
23a20 65 20 4e 20 69 73 20 74 68 65 20 76 61 6c 75 65  e N is the value
23a30 0a 74 68 61 74 20 74 68 65 20 4c 49 4d 49 54 20  .that the LIMIT 
23a40 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
23a50 61 74 65 73 20 74 6f 2e 20 5e 4f 72 2c 20 69 66  ates to. ^Or, if
23a60 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
23a70 65 6d 65 6e 74 20 77 6f 75 6c 64 0a 72 65 74 75  ement would.retu
23a80 72 6e 20 6c 65 73 73 20 74 68 61 6e 20 4e 20 72  rn less than N r
23a90 6f 77 73 20 77 69 74 68 6f 75 74 20 61 20 4c 49  ows without a LI
23aa0 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  MIT clause, then
23ab0 20 74 68 65 20 65 6e 74 69 72 65 20 72 65 73 75   the entire resu
23ac0 6c 74 20 73 65 74 20 69 73 0a 72 65 74 75 72 6e  lt set is.return
23ad0 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 65 78  ed. ..<p>^The ex
23ae0 70 72 65 73 73 69 6f 6e 20 61 74 74 61 63 68 65  pression attache
23af0 64 20 74 6f 20 74 68 65 20 6f 70 74 69 6f 6e 61  d to the optiona
23b00 6c 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  l OFFSET clause 
23b10 74 68 61 74 20 6d 61 79 20 66 6f 6c 6c 6f 77 20  that may follow 
23b20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d  a.LIMIT clause m
23b30 75 73 74 20 61 6c 73 6f 20 65 76 61 6c 75 61 74  ust also evaluat
23b40 65 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c  e to an integer,
23b50 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61 74   or a value that
23b60 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73   can be.lossless
23b70 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly converted to 
23b80 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20  an integer. ^If 
23b90 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61  an expression ha
23ba0 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75  s an OFFSET clau
23bb0 73 65 2c 0a 74 68 65 6e 20 74 68 65 20 66 69 72  se,.then the fir
23bc0 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20 6f 6d  st M rows are om
23bd0 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 72  itted from the r
23be0 65 73 75 6c 74 20 73 65 74 20 72 65 74 75 72 6e  esult set return
23bf0 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54  ed by the SELECT
23c00 0a 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74  .statement and t
23c10 68 65 20 6e 65 78 74 20 4e 20 72 6f 77 73 20 61  he next N rows a
23c20 72 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68 65  re returned, whe
23c30 72 65 20 4d 20 61 6e 64 20 4e 20 61 72 65 20 74  re M and N are t
23c40 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a 74  he values that.t
23c50 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20 4c 49  he OFFSET and LI
23c60 4d 49 54 20 63 6c 61 75 73 65 73 20 65 76 61 6c  MIT clauses eval
23c70 75 61 74 65 20 74 6f 2c 20 72 65 73 70 65 63 74  uate to, respect
23c80 69 76 65 6c 79 2e 20 5e 4f 72 2c 20 69 66 20 74  ively. ^Or, if t
23c90 68 65 20 53 45 4c 45 43 54 0a 77 6f 75 6c 64 20  he SELECT.would 
23ca0 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e  return less than
23cb0 20 4d 2b 4e 20 72 6f 77 73 20 69 66 20 69 74 20   M+N rows if it 
23cc0 64 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20 4c  did not have a L
23cd0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
23ce0 6e 20 74 68 65 0a 66 69 72 73 74 20 4d 20 72 6f  n the.first M ro
23cf0 77 73 20 61 72 65 20 73 6b 69 70 70 65 64 20 61  ws are skipped a
23d00 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67  nd the remaining
23d10 20 72 6f 77 73 20 28 69 66 20 61 6e 79 29 20 61   rows (if any) a
23d20 72 65 20 72 65 74 75 72 6e 65 64 2e 20 5e 49 66  re returned. ^If
23d30 20 74 68 65 0a 4f 46 46 53 45 54 20 63 6c 61 75   the.OFFSET clau
23d40 73 65 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  se evaluates to 
23d50 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  a negative value
23d60 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 72  , the results ar
23d70 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 66  e the same as if
23d80 20 69 74 0a 68 61 64 20 65 76 61 6c 75 61 74 65   it.had evaluate
23d90 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e  d to zero...<p>^
23da0 49 6e 73 74 65 61 64 20 6f 66 20 61 20 73 65 70  Instead of a sep
23db0 61 72 61 74 65 20 4f 46 46 53 45 54 20 63 6c 61  arate OFFSET cla
23dc0 75 73 65 2c 20 74 68 65 20 4c 49 4d 49 54 20 63  use, the LIMIT c
23dd0 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63 69 66  lause may specif
23de0 79 20 74 77 6f 0a 73 63 61 6c 61 72 20 65 78 70  y two.scalar exp
23df0 72 65 73 73 69 6f 6e 73 20 73 65 70 61 72 61 74  ressions separat
23e00 65 64 20 62 79 20 61 20 63 6f 6d 6d 61 2e 20 5e  ed by a comma. ^
23e10 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68  In this case, th
23e20 65 20 66 69 72 73 74 20 65 78 70 72 65 73 73 69  e first expressi
23e30 6f 6e 0a 69 73 20 75 73 65 64 20 61 73 20 74 68  on.is used as th
23e40 65 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73  e OFFSET express
23e50 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 65 63 6f  ion and the seco
23e60 6e 64 20 61 73 20 74 68 65 20 4c 49 4d 49 54 20  nd as the LIMIT 
23e70 65 78 70 72 65 73 73 69 6f 6e 2e 0a 54 68 69 73  expression..This
23e80 20 69 73 20 63 6f 75 6e 74 65 72 2d 69 6e 74 75   is counter-intu
23e90 69 74 69 76 65 2c 20 61 73 20 77 68 65 6e 20 75  itive, as when u
23ea0 73 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20  sing the OFFSET 
23eb0 63 6c 61 75 73 65 20 74 68 65 20 73 65 63 6f 6e  clause the secon
23ec0 64 20 6f 66 0a 74 68 65 20 74 77 6f 20 65 78 70  d of.the two exp
23ed0 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 65 20  ressions is the 
23ee0 4f 46 46 53 45 54 20 61 6e 64 20 74 68 65 20 66  OFFSET and the f
23ef0 69 72 73 74 20 74 68 65 20 4c 49 4d 49 54 2e 20  irst the LIMIT. 
23f00 54 68 69 73 20 69 73 20 69 6e 74 65 6e 74 69 6f  This is intentio
23f10 6e 61 6c 0a 2d 20 69 74 20 6d 61 78 69 6d 69 7a  nal.- it maximiz
23f20 65 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  es compatibility
23f30 20 77 69 74 68 20 6f 74 68 65 72 20 53 51 4c 20   with other SQL 
23f40 64 61 74 61 62 61 73 65 20 73 79 73 74 65 6d 73  database systems
23f50 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
23f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23f70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23fa0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
23fb0 55 50 44 41 54 45 20 75 70 64 61 74 65 20 7b 55  UPDATE update {U
23fc0 50 44 41 54 45 20 2a 55 50 44 41 54 45 73 7d 0a  PDATE *UPDATEs}.
23fd0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75  .BubbleDiagram u
23fe0 70 64 61 74 65 2d 73 74 6d 74 20 31 0a 42 75 62  pdate-stmt 1.Bub
23ff0 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69  bleDiagram quali
24000 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a  fied-table-name.
24010 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55  </tcl>..<p>^An U
24020 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
24030 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64 69 66  is used to modif
24040 79 20 61 20 73 75 62 73 65 74 20 6f 66 20 74 68  y a subset of th
24050 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20  e values stored 
24060 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  in .zero or more
24070 20 72 6f 77 73 20 6f 66 20 74 68 65 20 64 61 74   rows of the dat
24080 61 62 61 73 65 20 74 61 62 6c 65 20 69 64 65 6e  abase table iden
24090 74 69 66 69 65 64 20 62 79 20 74 68 65 20 0a 3c  tified by the .<
240a0 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c  i>qualified-tabl
240b0 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69  e-name</i> speci
240c0 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
240d0 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
240e0 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ment...<p>^If th
240f0 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
24100 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  nt does not have
24110 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 2c   a WHERE clause,
24120 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65   all rows in the
24130 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f 64 69 66  .table are modif
24140 69 65 64 20 62 79 20 74 68 65 20 55 50 44 41 54  ied by the UPDAT
24150 45 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  E. ^Otherwise, t
24160 68 65 20 55 50 44 41 54 45 20 61 66 66 65 63 74  he UPDATE affect
24170 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a 72 6f 77  s only those.row
24180 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
24190 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61  result of evalua
241a0 74 69 6e 67 20 74 68 65 20 57 48 45 52 45 20 63  ting the WHERE c
241b0 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
241c0 20 61 73 20 61 20 0a 5b 62 6f 6f 6c 65 61 6e 20   as a .[boolean 
241d0 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65  expression|boole
241e0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  an expression is
241f0 20 74 72 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e   true]. ^It is n
24200 6f 74 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ot an error if t
24210 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
24220 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75 61 74  does not evaluat
24230 65 20 74 6f 20 74 72 75 65 20 66 6f 72 20 61 6e  e to true for an
24240 79 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62  y row in the tab
24250 6c 65 20 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d  le - this just.m
24260 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 55 50  eans that the UP
24270 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
24280 66 66 65 63 74 73 20 7a 65 72 6f 20 72 6f 77 73  ffects zero rows
24290 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69  ...<p>The modifi
242a0 63 61 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20  cations made to 
242b0 65 61 63 68 20 72 6f 77 20 61 66 66 65 63 74 65  each row affecte
242c0 64 20 62 79 20 61 6e 20 55 50 44 41 54 45 20 73  d by an UPDATE s
242d0 74 61 74 65 6d 65 6e 74 20 61 72 65 0a 64 65 74  tatement are.det
242e0 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6c  ermined by the l
242f0 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e  ist of assignmen
24300 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ts following the
24310 20 53 45 54 20 6b 65 79 77 6f 72 64 2e 20 45 61   SET keyword. Ea
24320 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73 70  ch.assignment sp
24330 65 63 69 66 69 65 73 20 61 20 63 6f 6c 75 6d 6e  ecifies a column
24340 20 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c 65 66   name to the lef
24350 74 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20  t of the equals 
24360 73 69 67 6e 20 61 6e 64 20 61 0a 73 63 61 6c 61  sign and a.scala
24370 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  r expression to 
24380 74 68 65 20 72 69 67 68 74 2e 20 5e 46 6f 72 20  the right. ^For 
24390 65 61 63 68 20 61 66 66 65 63 74 65 64 20 72 6f  each affected ro
243a0 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c  w, the named col
243b0 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74 6f 20  umns.are set to 
243c0 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75 6e 64  the values found
243d0 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74   by evaluating t
243e0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
243f0 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65 73 73   scalar .express
24400 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69 6e 67  ions. ^If a sing
24410 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 61  le column-name a
24420 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68 61 6e  ppears more than
24430 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c 69 73   once in the lis
24440 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e 74 20  t of.assignment 
24450 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61 6c 6c  expressions, all
24460 20 62 75 74 20 74 68 65 20 72 69 67 68 74 6d 6f   but the rightmo
24470 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 69 73  st occurrence is
24480 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75 6d   ignored. ^Colum
24490 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74 20 61  ns.that do not a
244a0 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c 69 73  ppear in the lis
244b0 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73  t of assignments
244c0 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f 64 69   are left unmodi
244d0 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61 6c 61  fied. ^The scala
244e0 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61  r.expressions ma
244f0 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d  y refer to colum
24500 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65  ns of the row be
24510 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e 49 6e  ing updated. ^In
24520 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c 0a 73   this case all.s
24530 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
24540 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20  s are evaluated 
24550 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69 67  before any assig
24560 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65 2e  nments are made.
24570 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e  ..<p>^The option
24580 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  al conflict-clau
24590 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73  se allows the us
245a0 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61  er to nominate a
245b0 20 73 70 65 63 69 66 69 63 0a 63 6f 6e 73 74 72   specific.constr
245c0 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
245d0 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
245e0 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67  hm to use during
245f0 20 74 68 69 73 20 6f 6e 65 20 55 50 44 41 54 45   this one UPDATE
24600 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20   command..Refer 
24610 74 6f 20 74 68 65 20 73 65 63 74 69 6f 6e 20 65  to the section e
24620 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46  ntitled [ON CONF
24630 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69  LICT] for additi
24640 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
24650 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69  ...<h3>Restricti
24660 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 53 74  ons on UPDATE St
24670 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20  atements Within 
24680 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f  CREATE TRIGGER</
24690 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h3>..<p>The foll
246a0 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c  owing additional
246b0 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74   syntax restrict
246c0 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 55 50  ions apply to UP
246d0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  DATE statements 
246e0 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68 69  that.occur withi
246f0 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
24700 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
24710 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c   statement.  ..<
24720 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  ul>.  <li><p>^Th
24730 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
24740 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73  /i> specified as
24750 20 70 61 72 74 20 6f 66 20 61 6e 20 55 50 44 41   part of an UPDA
24760 54 45 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74  TE statement wit
24770 68 69 6e 0a 20 20 20 20 20 20 61 20 74 72 69 67  hin.      a trig
24780 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65  ger body must be
24790 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e 28   unqualified. ^(
247a0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
247b0 74 68 65 0a 20 20 20 20 20 20 3c 69 3e 64 61 74  the.      <i>dat
247c0 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62  abase-name</i><b
247d0 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e  >.</b> prefix on
247e0 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20   the table name 
247f0 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 69 73  of the UPDATE is
24800 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77  .      not allow
24810 65 64 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ed within trigge
24820 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68  rs.)^ ^Unless th
24830 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68  e table to which
24840 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20   the trigger.   
24850 20 20 20 69 73 20 61 74 74 61 63 68 65 64 20 69     is attached i
24860 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
24870 74 61 62 61 73 65 2c 20 74 68 65 20 74 61 62 6c  tabase, the tabl
24880 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20  e being updated 
24890 62 79 20 74 68 65 0a 20 20 20 20 20 20 74 72 69  by the.      tri
248a0 67 67 65 72 20 70 72 6f 67 72 61 6d 20 6d 75 73  gger program mus
248b0 74 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20  t reside in the 
248c0 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73  same database as
248d0 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62   it. ^If the tab
248e0 6c 65 0a 20 20 20 20 20 20 74 6f 20 77 68 69 63  le.      to whic
248f0 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
24900 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20   attached is in 
24910 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
24920 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20  e, then the.    
24930 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61    unqualified na
24940 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
24950 62 65 69 6e 67 20 75 70 64 61 74 65 64 20 69 73  being updated is
24960 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65   resolved in the
24970 20 73 61 6d 65 20 77 61 79 0a 20 20 20 20 20 20   same way.      
24980 61 73 20 69 74 20 69 73 20 66 6f 72 20 61 20 74  as it is for a t
24990 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65  op-level stateme
249a0 6e 74 20 28 62 79 20 73 65 61 72 63 68 69 6e 67  nt (by searching
249b0 20 66 69 72 73 74 20 74 68 65 20 54 45 4d 50 20   first the TEMP 
249c0 64 61 74 61 62 61 73 65 2c 0a 20 20 20 20 20 20  database,.      
249d0 74 68 65 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  then the main da
249e0 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79  tabase, then any
249f0 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73   other databases
24a00 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
24a10 65 79 20 77 65 72 65 0a 20 20 20 20 20 20 61 74  ey were.      at
24a20 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e  tached)...  <li>
24a30 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
24a40 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58  BY and NOT INDEX
24a50 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e  ED clauses are n
24a60 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50  ot allowed on UP
24a70 44 41 54 45 0a 20 20 20 20 20 20 73 74 61 74 65  DATE.      state
24a80 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
24a90 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c  ggers.</p>..  <l
24aa0 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  i><p>^The LIMIT 
24ab0 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
24ac0 75 73 65 73 20 66 6f 72 20 55 50 44 41 54 45 20  uses for UPDATE 
24ad0 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20  are unsupported 
24ae0 77 69 74 68 69 6e 0a 20 20 20 20 20 20 74 72 69  within.      tri
24af0 67 67 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  ggers, regardles
24b00 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 61  s of the compila
24b10 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65  tion options use
24b20 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74  d to build SQLit
24b30 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70  e..</ul>..<h3>Op
24b40 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64  tional LIMIT and
24b50 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75 73 65   ORDER BY Clause
24b60 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20  s</h3>..<p>^(If 
24b70 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20  SQLite is built 
24b80 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45  with the [SQLITE
24b90 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
24ba0 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d  ELETE_LIMIT].com
24bb0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
24bc0 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78   then the syntax
24bd0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
24be0 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65  tatement is exte
24bf0 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e  nded.with option
24c00 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
24c10 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29 5e 20  LIMIT clauses)^ 
24c20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as follows:</p>.
24c30 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
24c40 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 2d  ram update-stmt-
24c50 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c  limited</tcl>..<
24c60 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20  p>^If an UPDATE 
24c70 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20  statement has a 
24c80 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
24c90 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
24ca0 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69   of rows that.wi
24cb0 6c 6c 20 62 65 20 75 70 64 61 74 65 64 20 69 73  ll be updated is
24cc0 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61   found by evalua
24cd0 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61  ting the accompa
24ce0 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nying expression
24cf0 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20   and casting.it 
24d00 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
24d10 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74 69 76 65  lue. ^A negative
24d20 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70   value is interp
24d30 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d  reted as "no lim
24d40 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  it"...<p>^If the
24d50 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
24d60 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6e  n evaluates to n
24d70 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
24d80 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74  e <i>N</i> and t
24d90 68 65 0a 55 50 44 41 54 45 20 73 74 61 74 65 6d  he.UPDATE statem
24da0 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52  ent has an ORDER
24db0 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
24dc0 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77   all rows that w
24dd0 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20  ould be updated 
24de0 69 6e 0a 74 68 65 20 61 62 73 65 6e 63 65 20 6f  in.the absence o
24df0 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  f the LIMIT clau
24e00 73 65 20 61 72 65 20 73 6f 72 74 65 64 20 61 63  se are sorted ac
24e10 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 4f  cording to the O
24e20 52 44 45 52 20 42 59 20 61 6e 64 20 74 68 65 0a  RDER BY and the.
24e30 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75  first <i>N</i> u
24e40 70 64 61 74 65 64 2e 20 5e 28 49 66 20 74 68 65  pdated. ^(If the
24e50 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
24e60 74 20 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46  t also has an OF
24e70 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65  FSET clause,.the
24e80 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c  n it is similarl
24e90 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20  y evaluated and 
24ea0 63 61 73 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  cast to an integ
24eb0 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  er value. If the
24ec0 20 4f 46 46 53 45 54 0a 65 78 70 72 65 73 73 69   OFFSET.expressi
24ed0 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
24ee0 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  a non-negative v
24ef0 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74  alue <i>M</i>, t
24f00 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 3c 69  hen the first <i
24f10 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20  >M</i>.rows are 
24f20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20  skipped and the 
24f30 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f  following <i>N</
24f40 69 3e 20 72 6f 77 73 20 75 70 64 61 74 65 64 20  i> rows updated 
24f50 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e  instead.)^..<p>^
24f60 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  If the UPDATE st
24f70 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f  atement has no O
24f80 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
24f90 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68  then all rows th
24fa0 61 74 0a 77 6f 75 6c 64 20 62 65 20 75 70 64 61  at.would be upda
24fb0 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e  ted in the absen
24fc0 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
24fd0 63 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d  clause are assem
24fe0 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74  bled in an.arbit
24ff0 72 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72  rary order befor
25000 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c  e applying the L
25010 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20  IMIT and OFFSET 
25020 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72  clauses to deter
25030 6d 69 6e 65 20 0a 77 68 69 63 68 20 61 72 65 20  mine .which are 
25040 61 63 74 75 61 6c 6c 79 20 75 70 64 61 74 65 64  actually updated
25050 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45  ...<p>^(The ORDE
25060 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61  R BY clause on a
25070 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
25080 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  nt is used only 
25090 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
250a0 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74  ch.rows fall wit
250b0 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54  hin the LIMIT. T
250c0 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
250d0 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64 69 66  h rows are modif
250e0 69 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ied is arbitrary
250f0 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c  .and is not infl
25100 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52  uenced by the OR
25110 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e  DER BY clause.)^
25120 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
25130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25170 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 56  ######.Section V
25180 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56 41 43  ACUUM vacuum VAC
25190 55 55 4d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  UUM..BubbleDiagr
251a0 61 6d 20 76 61 63 75 75 6d 2d 73 74 6d 74 20 31  am vacuum-stmt 1
251b0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 54  .</tcl>..<p>.  T
251c0 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
251d0 64 20 72 65 62 75 69 6c 64 73 20 74 68 65 20 65  d rebuilds the e
251e0 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20  ntire database. 
251f0 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61  There are severa
25200 6c 20 0a 20 20 72 65 61 73 6f 6e 73 20 61 6e 20  l .  reasons an 
25210 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 69 67 68  application migh
25220 74 20 64 6f 20 74 68 69 73 3a 0a 0a 3c 75 6c 3e  t do this:..<ul>
25230 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 55 6e 6c  .  <li> <p> ^Unl
25240 65 73 73 20 53 51 4c 69 74 65 20 69 73 20 72 75  ess SQLite is ru
25250 6e 6e 69 6e 67 20 69 6e 20 22 61 75 74 6f 5f 76  nning in "auto_v
25260 61 63 75 75 6d 3d 46 55 4c 4c 22 20 6d 6f 64 65  acuum=FULL" mode
25270 2c 20 77 68 65 6e 20 61 20 6c 61 72 67 65 0a 20  , when a large. 
25280 20 20 20 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61      amount of da
25290 74 61 20 69 73 20 64 65 6c 65 74 65 64 20 66 72  ta is deleted fr
252a0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
252b0 66 69 6c 65 20 69 74 20 6c 65 61 76 65 73 20 62  file it leaves b
252c0 65 68 69 6e 64 20 65 6d 70 74 79 0a 20 20 20 20  ehind empty.    
252d0 20 73 70 61 63 65 2c 20 6f 72 20 22 66 72 65 65   space, or "free
252e0 22 20 64 61 74 61 62 61 73 65 20 70 61 67 65 73  " database pages
252f0 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68 65  . This means the
25300 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
25310 69 67 68 74 0a 20 20 20 20 20 62 65 20 6c 61 72  ight.     be lar
25320 67 65 72 20 74 68 61 6e 20 73 74 72 69 63 74 6c  ger than strictl
25330 79 20 6e 65 63 65 73 73 61 72 79 2e 20 5e 52 75  y necessary. ^Ru
25340 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 74 6f 20  nning VACUUM to 
25350 72 65 62 75 69 6c 64 20 74 68 65 20 0a 20 20 20  rebuild the .   
25360 20 20 64 61 74 61 62 61 73 65 20 72 65 63 6c 61    database recla
25370 69 6d 73 20 74 68 69 73 20 73 70 61 63 65 20 61  ims this space a
25380 6e 64 20 72 65 64 75 63 65 73 20 74 68 65 20 73  nd reduces the s
25390 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
253a0 61 73 65 20 66 69 6c 65 2e 0a 0a 20 20 3c 6c 69  ase file...  <li
253b0 3e 20 3c 70 3e 20 5e 46 72 65 71 75 65 6e 74 20  > <p> ^Frequent 
253c0 69 6e 73 65 72 74 73 2c 20 75 70 64 61 74 65 73  inserts, updates
253d0 2c 20 61 6e 64 20 64 65 6c 65 74 65 73 20 63 61  , and deletes ca
253e0 6e 20 63 61 75 73 65 20 74 68 65 20 64 61 74 61  n cause the data
253f0 62 61 73 65 20 66 69 6c 65 0a 20 20 20 20 20 74  base file.     t
25400 6f 20 62 65 63 6f 6d 65 20 66 72 61 67 6d 65 6e  o become fragmen
25410 74 65 64 20 2d 20 77 68 65 72 65 20 64 61 74 61  ted - where data
25420 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 74 61   for a single ta
25430 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
25440 73 63 61 74 74 65 72 65 64 20 0a 20 20 20 20 20  scattered .     
25450 61 72 6f 75 6e 64 20 74 68 65 20 64 61 74 61 62  around the datab
25460 61 73 65 20 66 69 6c 65 2e 20 5e 52 75 6e 6e 69  ase file. ^Runni
25470 6e 67 20 56 41 43 55 55 4d 20 65 6e 73 75 72 65  ng VACUUM ensure
25480 73 20 74 68 61 74 20 65 61 63 68 20 74 61 62 6c  s that each tabl
25490 65 20 61 6e 64 0a 20 20 20 20 20 69 6e 64 65 78  e and.     index
254a0 20 69 73 20 6c 61 72 67 65 6c 79 20 73 74 6f 72   is largely stor
254b0 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 20  ed contiguously 
254c0 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
254d0 61 73 65 20 66 69 6c 65 2e 20 5e 49 6e 20 73 6f  ase file. ^In so
254e0 6d 65 0a 20 20 20 20 20 63 61 73 65 73 2c 20 56  me.     cases, V
254f0 41 43 55 55 4d 20 6d 61 79 20 61 6c 73 6f 20 72  ACUUM may also r
25500 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
25510 20 6f 66 20 70 61 72 74 69 61 6c 6c 79 20 66 69   of partially fi
25520 6c 6c 65 64 20 70 61 67 65 73 20 69 6e 0a 20 20  lled pages in.  
25530 20 20 20 74 68 65 20 64 61 74 61 62 61 73 65 2c     the database,
25540 20 72 65 64 75 63 69 6e 67 20 74 68 65 20 73 69   reducing the si
25550 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
25560 73 65 20 66 69 6c 65 20 66 75 72 74 68 65 72 2e  se file further.
25570 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 4e 6f  ..  <li> <p> ^No
25580 72 6d 61 6c 6c 79 2c 20 74 68 65 20 64 61 74 61  rmally, the data
25590 62 61 73 65 20 5b 70 61 67 65 5f 73 69 7a 65 5d  base [page_size]
255a0 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20   and whether or 
255b0 6e 6f 74 20 74 68 65 20 64 61 74 61 62 61 73 65  not the database
255c0 0a 20 20 20 20 20 73 75 70 70 6f 72 74 73 20 5b  .     supports [
255d0 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 6d 75 73  auto_vacuum] mus
255e0 74 20 62 65 20 63 6f 6e 66 69 67 75 72 65 64 20  t be configured 
255f0 62 65 66 6f 72 65 20 74 68 65 20 64 61 74 61 62  before the datab
25600 61 73 65 20 66 69 6c 65 20 69 73 0a 20 20 20 20  ase file is.    
25610 20 61 63 74 75 61 6c 6c 79 20 63 72 65 61 74 65   actually create
25620 64 2e 20 5e 48 6f 77 65 76 65 72 2c 20 77 68 65  d. ^However, whe
25630 6e 20 6e 6f 74 20 69 6e 20 5b 77 72 69 74 65 2d  n not in [write-
25640 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c  ahead log] mode,
25650 20 74 68 65 20 0a 20 20 20 20 20 5b 70 61 67 65   the .     [page
25660 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f 72 20 5b 61  _size] and/or [a
25670 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 6f 70  uto_vacuum] prop
25680 65 72 74 69 65 73 20 6f 66 20 61 6e 20 65 78 69  erties of an exi
25690 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 6d  sting database m
256a0 61 79 20 62 65 0a 20 20 20 20 20 63 68 61 6e 67  ay be.     chang
256b0 65 64 20 62 79 20 75 73 69 6e 67 20 74 68 65 20  ed by using the 
256c0 5b 70 61 67 65 5f 73 69 7a 65 20 70 72 61 67 6d  [page_size pragm
256d0 61 7c 70 61 67 65 5f 73 69 7a 65 5d 20 20 61 6e  a|page_size]  an
256e0 64 2f 6f 72 20 0a 20 20 20 20 20 5b 61 75 74 6f  d/or .     [auto
256f0 5f 76 61 63 75 75 6d 7c 70 72 61 67 6d 61 20 61  _vacuum|pragma a
25700 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67  uto_vacuum] prag
25710 6d 61 73 20 61 6e 64 20 74 68 65 6e 20 69 6d 6d  mas and then imm
25720 65 64 69 61 74 65 6c 79 20 56 41 43 55 55 4d 69  ediately VACUUMi
25730 6e 67 0a 20 20 20 20 20 74 68 65 20 64 61 74 61  ng.     the data
25740 62 61 73 65 2e 20 5e 57 68 65 6e 20 69 6e 20 5b  base. ^When in [
25750 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
25760 20 6d 6f 64 65 2c 20 6f 6e 6c 79 20 74 68 65 20   mode, only the 
25770 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 20 20  [auto_vacuum].  
25780 20 20 20 73 75 70 70 6f 72 74 20 70 72 6f 70 65     support prope
25790 72 74 79 20 63 61 6e 20 62 65 20 63 68 61 6e 67  rty can be chang
257a0 65 64 20 75 73 69 6e 67 20 56 41 43 55 55 4d 2e  ed using VACUUM.
257b0 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 56 41 43  .</ul>..<p>^(VAC
257c0 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  UUM only works o
257d0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
257e0 61 73 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70  ase. It is not p
257f0 6f 73 73 69 62 6c 65 20 74 6f 20 56 41 43 55 55  ossible to VACUU
25800 4d 20 61 6e 0a 61 74 74 61 63 68 65 64 20 64 61  M an.attached da
25810 74 61 62 61 73 65 20 66 69 6c 65 2e 29 5e 0a 0a  tabase file.)^..
25820 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
25830 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79 20  ommand works by 
25840 63 6f 70 79 69 6e 67 20 74 68 65 20 63 6f 6e 74  copying the cont
25850 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
25860 62 61 73 65 20 69 6e 74 6f 0a 61 20 74 65 6d 70  base into.a temp
25870 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 66  orary database f
25880 69 6c 65 20 61 6e 64 20 74 68 65 6e 20 6f 76 65  ile and then ove
25890 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69  rwriting the ori
258a0 67 69 6e 61 6c 20 77 69 74 68 20 74 68 65 20 0a  ginal with the .
258b0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
258c0 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e 20  temporary file. 
258d0 5e 57 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e  ^When overwritin
258e0 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 2c 20  g the original, 
258f0 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e  a rollback.journ
25900 61 6c 20 6f 72 20 5b 77 72 69 74 65 2d 61 68 65  al or [write-ahe
25910 61 64 20 6c 6f 67 5d 20 57 41 4c 20 66 69 6c 65  ad log] WAL file
25920 20 69 73 20 75 73 65 64 20 6a 75 73 74 20 61 73   is used just as
25930 20 69 74 20 77 6f 75 6c 64 20 62 65 20 66 6f 72   it would be for
25940 20 61 6e 79 0a 6f 74 68 65 72 20 64 61 74 61 62   any.other datab
25950 61 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ase transaction.
25960 20 5e 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61   ^This means tha
25970 74 20 77 68 65 6e 20 56 41 43 55 55 4d 69 6e 67  t when VACUUMing
25980 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a 61 73   a database, .as
25990 20 6d 75 63 68 20 61 73 20 74 77 69 63 65 20 74   much as twice t
259a0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6f  he size of the o
259b0 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65  riginal database
259c0 20 66 69 6c 65 20 69 73 20 72 65 71 75 69 72 65   file is require
259d0 64 20 69 6e 20 66 72 65 65 0a 64 69 73 6b 20 73  d in free.disk s
259e0 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56  pace...<p>^The V
259f0 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61  ACUUM command ma
25a00 79 20 63 68 61 6e 67 65 20 74 68 65 20 5b 52 4f  y change the [RO
25a10 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66  WID | ROWIDs] of
25a20 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e 79 0a   entries in any.
25a30 74 61 62 6c 65 73 20 74 68 61 74 20 64 6f 20 6e  tables that do n
25a40 6f 74 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69  ot have an expli
25a50 63 69 74 20 5b 49 4e 54 45 47 45 52 20 50 52 49  cit [INTEGER PRI
25a60 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a  MARY KEY]..</p>.
25a70 0a 3c 70 3e 5e 41 20 56 41 43 55 55 4d 20 77 69  .<p>^A VACUUM wi
25a80 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72 65  ll fail if there
25a90 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 72 61 6e   is an open tran
25aa0 73 61 63 74 69 6f 6e 2c 20 6f 72 20 69 66 20 74  saction, or if t
25ab0 68 65 72 65 20 61 72 65 20 6f 6e 65 20 6f 72 0a  here are one or.
25ac0 6d 6f 72 65 20 61 63 74 69 76 65 20 53 51 4c 20  more active SQL 
25ad0 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 20  statements when 
25ae0 69 74 20 69 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e  it is run...<p>^
25af0 28 41 73 20 6f 66 20 53 51 4c 69 74 65 20 76 65  (As of SQLite ve
25b00 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e 20 61 6c  rsion 3.1, an al
25b10 74 65 72 6e 61 74 69 76 65 20 74 6f 20 75 73 69  ternative to usi
25b20 6e 67 20 74 68 65 20 56 41 43 55 55 4d 20 63 6f  ng the VACUUM co
25b30 6d 6d 61 6e 64 20 74 6f 0a 72 65 63 6c 61 69 6d  mmand to.reclaim
25b40 20 73 70 61 63 65 20 61 66 74 65 72 20 64 61 74   space after dat
25b50 61 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74  a has been delet
25b60 65 64 20 69 73 20 61 75 74 6f 2d 76 61 63 75 75  ed is auto-vacuu
25b70 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20  m mode, enabled 
25b80 75 73 69 6e 67 0a 74 68 65 20 5b 61 75 74 6f 5f  using.the [auto_
25b90 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e 29  vacuum] pragma.)
25ba0 5e 20 5e 57 68 65 6e 20 5b 61 75 74 6f 5f 76 61  ^ ^When [auto_va
25bb0 63 75 75 6d 5d 20 69 73 20 65 6e 61 62 6c 65 64  cuum] is enabled
25bc0 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a   for a database.
25bd0 66 72 65 65 20 70 61 67 65 73 20 6d 61 79 20 62  free pages may b
25be0 65 20 72 65 63 6c 61 69 6d 65 64 20 61 66 74 65  e reclaimed afte
25bf0 72 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 2c  r deleting data,
25c00 20 63 61 75 73 69 6e 67 20 74 68 65 20 66 69 6c   causing the fil
25c10 65 20 74 6f 20 73 68 72 69 6e 6b 2c 0a 77 69 74  e to shrink,.wit
25c20 68 6f 75 74 20 72 65 62 75 69 6c 64 69 6e 67 20  hout rebuilding 
25c30 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
25c40 61 73 65 20 75 73 69 6e 67 20 56 41 43 55 55 4d  ase using VACUUM
25c50 2e 20 20 48 6f 77 65 76 65 72 2c 20 75 73 69 6e  .  However, usin
25c60 67 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  g.[auto_vacuum] 
25c70 63 61 6e 20 6c 65 61 64 20 74 6f 20 65 78 74 72  can lead to extr
25c80 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  a database file 
25c90 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e 2e 20 20  fragmentation.  
25ca0 41 6e 64 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  And [auto_vacuum
25cb0 5d 0a 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70 61  ].does not compa
25cc0 63 74 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c  ct partially fil
25cd0 6c 65 64 20 70 61 67 65 73 20 6f 66 20 74 68 65  led pages of the
25ce0 20 64 61 74 61 62 61 73 65 20 61 73 20 56 41 43   database as VAC
25cf0 55 55 4d 20 64 6f 65 73 2e 0a 0a 3c 2f 70 3e 0a  UUM does...</p>.
25d00 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
25d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25d50 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
25d60 49 4e 44 45 58 45 44 20 42 59 7d 20 69 6e 64 65  INDEXED BY} inde
25d70 78 65 64 62 79 20 7b 7b 49 4e 44 45 58 45 44 20  xedby {{INDEXED 
25d80 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45 58 45 44  BY} {NOT INDEXED
25d90 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  }}..</tcl>.<p>^T
25da0 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
25db0 72 61 73 65 20 69 73 20 61 6e 20 53 51 4c 20 65  rase is an SQL e
25dc0 78 74 65 6e 73 69 6f 6e 20 66 6f 75 6e 64 20 6f  xtension found o
25dd0 6e 6c 79 20 69 6e 20 53 51 4c 69 74 65 20 77 68  nly in SQLite wh
25de0 69 63 68 20 63 61 6e 0a 62 65 20 75 73 65 64 20  ich can.be used 
25df0 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
25e00 68 65 20 63 6f 72 72 65 63 74 20 69 6e 64 69 63  he correct indic
25e10 65 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 65  es are being use
25e20 64 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c  d on a [DELETE],
25e30 0a 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55  .[SELECT], or [U
25e40 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  PDATE] statement
25e50 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42  ..^The INDEXED B
25e60 59 20 70 68 72 61 73 65 20 61 6c 77 61 79 73 20  Y phrase always 
25e70 66 6f 6c 6c 6f 77 73 20 74 68 65 20 6e 61 6d 65  follows the name
25e80 20 6f 66 20 61 20 74 61 62 6c 65 20 74 68 61 74   of a table that
25e90 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a 62 65 20   SQLite will.be 
25ea0 72 65 61 64 69 6e 67 2e 20 20 54 68 65 20 49 4e  reading.  The IN
25eb0 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
25ec0 63 61 6e 20 62 65 20 73 65 65 6e 20 69 6e 20 74  can be seen in t
25ed0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e  he following syn
25ee0 74 61 78 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70  tax.diagrams:</p
25ef0 3e 0a 0a 3c 74 63 6c 3e 0a 42 75 62 62 6c 65 44  >..<tcl>.BubbleD
25f00 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64  iagram qualified
25f10 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 42 75 62 62  -table-name.Bubb
25f20 6c 65 44 69 61 67 72 61 6d 20 73 69 6e 67 6c 65  leDiagram single
25f30 2d 73 6f 75 72 63 65 0a 3c 2f 74 63 6c 3e 0a 0a  -source.</tcl>..
25f40 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45 58 45 44  <p>^The "INDEXED
25f50 20 42 59 20 69 6e 64 65 78 2d 6e 61 6d 65 22 20   BY index-name" 
25f60 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
25f70 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20   that the named 
25f80 69 6e 64 65 78 0a 6d 75 73 74 20 62 65 20 75 73  index.must be us
25f90 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c  ed in order to l
25fa0 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73 20 6f 6e  ook up values on
25fb0 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74   the preceding t
25fc0 61 62 6c 65 2e 0a 5e 49 66 20 69 6e 64 65 78 2d  able..^If index-
25fd0 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 65 78  name does not ex
25fe0 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65  ist or cannot be
25ff0 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 71 75   used for the qu
26000 65 72 79 2c 20 74 68 65 6e 0a 74 68 65 20 70 72  ery, then.the pr
26010 65 70 61 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eparation of the
26020 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66   SQL statement f
26030 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e 4f 54  ails..^(The "NOT
26040 20 49 4e 44 45 58 45 44 22 20 63 6c 61 75 73 65   INDEXED" clause
26050 20 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20   specifies that 
26060 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c 20 62  no index shall b
26070 65 20 75 73 65 64 20 77 68 65 6e 0a 61 63 63 65  e used when.acce
26080 73 73 69 6e 67 20 74 68 65 20 70 72 65 63 65 64  ssing the preced
26090 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75  ing table, inclu
260a0 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64  ding implied ind
260b0 69 63 65 73 20 63 72 65 61 74 65 20 62 79 0a 55  ices create by.U
260c0 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52  NIQUE and PRIMAR
260d0 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
260e0 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65  s.  However, the
260f0 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
26100 20 4b 45 59 0a 63 61 6e 20 73 74 69 6c 6c 20 62   KEY.can still b
26110 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f 6b 20 75  e used to look u
26120 70 20 65 6e 74 72 69 65 73 20 65 76 65 6e 20 77  p entries even w
26130 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45 58 45 44  hen "NOT INDEXED
26140 22 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 29  " is specified.)
26150 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20 53  ^</p>..<p>Some S
26160 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
26170 6e 65 73 20 70 72 6f 76 69 64 65 20 6e 6f 6e 2d  nes provide non-
26180 73 74 61 6e 64 61 72 64 20 22 68 69 6e 74 22 20  standard "hint" 
26190 6d 65 63 68 61 6e 69 73 6d 73 20 77 68 69 63 68  mechanisms which
261a0 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
261b0 67 69 76 65 20 74 68 65 20 71 75 65 72 79 20 6f  give the query o
261c0 70 74 69 6d 69 7a 65 72 20 63 6c 75 65 73 20 61  ptimizer clues a
261d0 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69 63 65  bout what indice
261e0 73 20 69 74 20 73 68 6f 75 6c 64 0a 75 73 65 20  s it should.use 
261f0 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72  for a particular
26200 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
26210 20 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65   INDEX BY clause
26220 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 0a 3c   of SQLite is .<
26230 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68 69  em>not</em> a hi
26240 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20  nting mechanism 
26250 61 6e 64 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f  and it should no
26260 74 20 62 65 20 75 73 65 64 20 61 73 20 73 75 63  t be used as suc
26270 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44 20  h..^The INDEXED 
26280 42 59 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e  BY clause does n
26290 6f 74 20 67 69 76 65 20 74 68 65 20 6f 70 74 69  ot give the opti
262a0 6d 69 7a 65 72 20 68 69 6e 74 73 20 61 62 6f 75  mizer hints abou
262b0 74 20 77 68 69 63 68 20 69 6e 64 65 78 0a 74 6f  t which index.to
262c0 20 75 73 65 3b 20 69 74 20 67 69 76 65 73 20 74   use; it gives t
262d0 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 61 20 72  he optimizer a r
262e0 65 71 75 69 72 65 6d 65 6e 74 20 6f 66 20 77 68  equirement of wh
262f0 69 63 68 20 69 6e 64 65 78 20 74 6f 20 75 73 65  ich index to use
26300 2e 0a 5e 49 66 20 74 68 65 20 71 75 65 72 79 20  ..^If the query 
26310 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 75 6e 61  optimizer is una
26320 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65 20 69  ble to use the i
26330 6e 64 65 78 20 73 70 65 63 69 66 69 65 64 20 62  ndex specified b
26340 79 20 74 68 65 0a 49 4e 44 45 58 20 42 59 20 63  y the.INDEX BY c
26350 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20  lause, then the 
26360 71 75 65 72 79 20 77 69 6c 6c 20 66 61 69 6c 20  query will fail 
26370 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f  with an error.</
26380 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58  p>..<p>The INDEX
26390 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ED BY clause is 
263a0 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e 74  <em>not</em> int
263b0 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
263c0 20 74 75 6e 69 6e 67 0a 74 68 65 20 70 65 72 66   tuning.the perf
263d0 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20 71 75 65  ormance of a que
263e0 72 79 2e 20 20 54 68 65 20 69 6e 74 65 6e 74 20  ry.  The intent 
263f0 6f 66 20 74 68 65 20 49 4e 44 45 58 45 44 20 42  of the INDEXED B
26400 59 20 63 6c 61 75 73 65 20 69 73 0a 74 6f 20 72  Y clause is.to r
26410 61 69 73 65 20 61 20 72 75 6e 2d 74 69 6d 65 20  aise a run-time 
26420 65 72 72 6f 72 20 69 66 20 61 20 73 63 68 65 6d  error if a schem
26430 61 20 63 68 61 6e 67 65 2c 20 73 75 63 68 20 61  a change, such a
26440 73 20 64 72 6f 70 70 69 6e 67 20 6f 72 0a 63 72  s dropping or.cr
26450 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 2c  eating an index,
26460 20 63 61 75 73 65 73 20 74 68 65 20 71 75 65 72   causes the quer
26470 79 20 70 6c 61 6e 20 66 6f 72 20 61 20 74 69 6d  y plan for a tim
26480 65 2d 73 65 6e 73 69 74 69 76 65 20 71 75 65 72  e-sensitive quer
26490 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20 20 54 68  y.to change.  Th
264a0 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  e INDEXED BY cla
264b0 75 73 65 20 69 73 20 64 65 73 69 67 6e 65 64 20  use is designed 
264c0 74 6f 20 68 65 6c 70 20 64 65 74 65 63 74 0a 75  to help detect.u
264d0 6e 64 65 73 69 72 61 62 6c 65 20 71 75 65 72 79  ndesirable query
264e0 20 70 6c 61 6e 20 63 68 61 6e 67 65 73 20 64 75   plan changes du
264f0 72 69 6e 67 20 72 65 67 72 65 73 73 69 6f 6e 20  ring regression 
26500 74 65 73 74 69 6e 67 2e 0a 44 65 76 65 6c 6f 70  testing..Develop
26510 65 72 73 20 61 72 65 20 61 64 6d 6f 6e 69 73 68  ers are admonish
26520 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75  ed to omit all u
26530 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59  se of INDEXED BY
26540 20 64 75 72 69 6e 67 0a 61 70 70 6c 69 63 61 74   during.applicat
26550 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c  ion design, impl
26560 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74  ementation, test
26570 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e  ing, and tuning.
26580 20 20 49 66 0a 49 4e 44 45 58 45 44 20 42 59 20    If.INDEXED BY 
26590 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 61 74  is to be used at
265a0 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20   all, it should 
265b0 62 65 20 69 6e 73 65 72 74 65 64 20 61 74 20 74  be inserted at t
265c0 68 65 20 76 65 72 79 0a 65 6e 64 20 6f 66 20 74  he very.end of t
265d0 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70  he development p
265e0 72 6f 63 65 73 73 20 77 68 65 6e 20 22 6c 6f 63  rocess when "loc
265f0 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20 64 65 73  king down" a des
26600 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65  ign.</p>..<h3>Se
26610 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 70  e Also:</h3>..<p
26620 3e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74  >The [sqlite3_st
26630 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 43 2f 43  mt_status()] C/C
26640 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 74 6f 67  ++ interface tog
26650 65 74 68 65 72 20 77 69 74 68 20 74 68 65 0a 5b  ether with the.[
26660 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
26670 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d  S_FULLSCAN_STEP]
26680 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d   and [SQLITE_STM
26690 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 20 76 65  TSTATUS_SORT] ve
266a0 72 62 73 0a 63 61 6e 20 62 65 20 75 73 65 64 20  rbs.can be used 
266b0 74 6f 20 64 65 74 65 63 74 20 61 74 20 72 75 6e  to detect at run
266c0 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e 20 53 51  -time when an SQ
266d0 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6e  L statement is n
266e0 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66 65 63 74  ot.making effect
266f0 69 76 65 20 75 73 65 20 6f 66 20 69 6e 64 69 63  ive use of indic
26700 65 73 2e 20 20 4d 61 6e 79 20 61 70 70 6c 69 63  es.  Many applic
26710 61 74 69 6f 6e 73 20 6d 61 79 20 70 72 65 66 65  ations may prefe
26720 72 20 74 6f 0a 75 73 65 20 74 68 65 20 5b 73 71  r to.use the [sq
26730 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75  lite3_stmt_statu
26740 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74  s()] interface t
26750 6f 20 64 65 74 65 63 74 20 69 6e 64 65 78 20 6d  o detect index m
26760 69 73 75 73 65 0a 72 61 74 68 65 72 20 74 68 61  isuse.rather tha
26770 6e 20 74 68 65 20 49 4e 44 45 58 45 44 20 42 59  n the INDEXED BY
26780 20 70 68 72 61 73 65 20 64 65 73 63 72 69 62 65   phrase describe
26790 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  d here.</p>..<tc
267a0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
267b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
267c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
267d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
267e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
267f0 0a 23 20 41 20 6c 69 73 74 20 6f 66 20 6b 65 79  .# A list of key
26800 77 6f 72 64 73 2e 20 20 41 20 61 73 74 65 72 69  words.  A asteri
26810 73 6b 20 6f 63 63 75 72 73 20 61 66 74 65 72 20  sk occurs after 
26820 74 68 65 20 6b 65 79 77 6f 72 64 20 69 66 20 69  the keyword if i
26830 74 20 69 73 20 6f 6e 0a 23 20 74 68 65 20 66 61  t is on.# the fa
26840 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73  llback list..#.s
26850 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20  et keyword_list 
26860 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52  [lsort {.   ABOR
26870 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20 20 20 41  T.   ACTION.   A
26880 44 44 0a 20 20 20 41 46 54 45 52 0a 20 20 20 41  DD.   AFTER.   A
26890 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20 20 20 41  LL.   ALTER.   A
268a0 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44 0a 20 20  NALYZE.   AND.  
268b0 20 41 53 0a 20 20 20 41 53 43 0a 20 20 20 41 54   AS.   ASC.   AT
268c0 54 41 43 48 0a 20 20 20 41 55 54 4f 49 4e 43 52  TACH.   AUTOINCR
268d0 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 0a  EMENT.   BEFORE.
268e0 20 20 20 42 45 47 49 4e 0a 20 20 20 42 45 54 57     BEGIN.   BETW
268f0 45 45 4e 0a 20 20 20 42 59 0a 20 20 20 43 41 53  EEN.   BY.   CAS
26900 43 41 44 45 0a 20 20 20 43 41 53 45 0a 20 20 20  CADE.   CASE.   
26910 43 41 53 54 0a 20 20 20 43 48 45 43 4b 0a 20 20  CAST.   CHECK.  
26920 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55   COLLATE.   COLU
26930 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20  MN.   COMMIT.   
26940 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43 4f 4e 53  CONFLICT.   CONS
26950 54 52 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45  TRAINT.   CREATE
26960 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52  .   CROSS.   CUR
26970 52 45 4e 54 5f 44 41 54 45 0a 20 20 20 43 55 52  RENT_DATE.   CUR
26980 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55 52  RENT_TIME.   CUR
26990 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20  RENT_TIMESTAMP. 
269a0 20 20 44 41 54 41 42 41 53 45 0a 20 20 20 44 45    DATABASE.   DE
269b0 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52 52 45  FAULT.   DEFERRE
269c0 44 0a 20 20 20 44 45 46 45 52 52 41 42 4c 45 0a  D.   DEFERRABLE.
269d0 20 20 20 44 45 4c 45 54 45 0a 20 20 20 44 45 53     DELETE.   DES
269e0 43 0a 20 20 20 44 45 54 41 43 48 0a 20 20 20 44  C.   DETACH.   D
269f0 49 53 54 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a  ISTINCT.   DROP.
26a00 20 20 20 45 4e 44 0a 20 20 20 45 41 43 48 0a 20     END.   EACH. 
26a10 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45    ELSE.   ESCAPE
26a20 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20 45 58  .   EXCEPT.   EX
26a30 43 4c 55 53 49 56 45 0a 20 20 20 45 58 49 53 54  CLUSIVE.   EXIST
26a40 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a 20 20 20  S.   EXPLAIN.   
26a50 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20 20 20 46  FAIL.   FOR.   F
26a60 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20  OREIGN.   FROM. 
26a70 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20    FULL.   GLOB. 
26a80 20 20 47 52 4f 55 50 0a 20 20 20 48 41 56 49 4e    GROUP.   HAVIN
26a90 47 0a 20 20 20 49 46 0a 20 20 20 49 47 4e 4f 52  G.   IF.   IGNOR
26aa0 45 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 0a 20  E.   IMMEDIATE. 
26ab0 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20    IN.   INDEX.  
26ac0 20 49 4e 44 45 58 45 44 0a 20 20 20 49 4e 49 54   INDEXED.   INIT
26ad0 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a 20  IALLY.   INNER. 
26ae0 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e 53 54    INSERT.   INST
26af0 45 41 44 0a 20 20 20 49 4e 54 45 52 53 45 43 54  EAD.   INTERSECT
26b00 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a 20  .   INTO.   IS. 
26b10 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e    ISNULL.   JOIN
26b20 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45 46 54 0a  .   KEY.   LEFT.
26b30 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49 54     LIKE.   LIMIT
26b40 0a 20 20 20 4d 41 54 43 48 0a 20 20 20 4e 41 54  .   MATCH.   NAT
26b50 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f  URAL.   NO.   NO
26b60 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20  T.   NOTNULL.   
26b70 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20 20 4f 46  NULL.   OF.   OF
26b80 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20 20 4f 52  FSET.   ON.   OR
26b90 0a 20 20 20 4f 52 44 45 52 0a 20 20 20 4f 55 54  .   ORDER.   OUT
26ba0 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20 20 50 52  ER.   PLAN.   PR
26bb0 41 47 4d 41 0a 20 20 20 50 52 49 4d 41 52 59 0a  AGMA.   PRIMARY.
26bc0 20 20 20 51 55 45 52 59 0a 20 20 20 52 41 49 53     QUERY.   RAIS
26bd0 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a  E.   REFERENCES.
26be0 20 20 20 52 45 47 45 58 50 0a 20 20 20 52 45 49     REGEXP.   REI
26bf0 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53 45 0a  NDEX.   RELEASE.
26c00 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52 45 50     RENAME.   REP
26c10 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49 43 54  LACE.   RESTRICT
26c20 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52 4f 4c  .   RIGHT.   ROL
26c30 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20 20  LBACK.   ROW.   
26c40 53 41 56 45 50 4f 49 4e 54 0a 20 20 20 53 45 4c  SAVEPOINT.   SEL
26c50 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20 54 41  ECT.   SET.   TA
26c60 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20 20 20 54  BLE.   TEMP.   T
26c70 45 4d 50 4f 52 41 52 59 0a 20 20 20 54 48 45 4e  EMPORARY.   THEN
26c80 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e 53 41  .   TO.   TRANSA
26c90 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47 45 52  CTION.   TRIGGER
26ca0 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49  .   UNION.   UNI
26cb0 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20  QUE.   UPDATE.  
26cc0 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d   USING.   VACUUM
26cd0 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49  .   VALUES.   VI
26ce0 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a 20 20  EW.   VIRTUAL.  
26cf0 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d   WHEN.   WHERE.}
26d00 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49 56  ]..hd_puts {<DIV
26d10 20 63 6c 61 73 73 3d 22 70 64 66 5f 73 65 63 74   class="pdf_sect
26d20 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b  ion">}.Section {
26d30 53 51 4c 69 74 65 20 4b 65 79 77 6f 72 64 73 7d  SQLite Keywords}
26d40 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a 53 51 4c   keywords {{*SQL
26d50 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b   keyword} {SQL k
26d60 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74  eywords}}.hd_put
26d70 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c  s {</DIV>}.</tcl
26d80 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73 74  >..<p>The SQL st
26d90 61 6e 64 61 72 64 20 73 70 65 63 69 66 69 65 73  andard specifies
26da0 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72 20 6f   a huge number o
26db0 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69 63 68  f keywords which
26dc0 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73 65 64   may not.be used
26dd0 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66   as the names of
26de0 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63 65 73   tables, indices
26df0 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62  , columns, datab
26e00 61 73 65 73 2c 20 75 73 65 72 2d 64 65 66 69 6e  ases, user-defin
26e10 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f  ed.functions, co
26e20 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72 74 75 61  llations, virtua
26e30 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c  l table modules,
26e40 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6e 61   or any other na
26e50 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20  med object..The 
26e60 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73  list of keywords
26e70 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74   is so long that
26e80 20 66 65 77 20 70 65 6f 70 6c 65 20 63 61 6e 20   few people can 
26e90 72 65 6d 65 6d 62 65 72 20 74 68 65 6d 20 61 6c  remember them al
26ea0 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20  l..For most SQL 
26eb0 63 6f 64 65 2c 20 79 6f 75 72 20 73 61 66 65 73  code, your safes
26ec0 74 20 62 65 74 20 69 73 20 74 6f 20 6e 65 76 65  t bet is to neve
26ed0 72 20 75 73 65 20 61 6e 79 20 45 6e 67 6c 69 73  r use any Englis
26ee0 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64 20  h language.word 
26ef0 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  as the name of a
26f00 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 6f 62   user-defined ob
26f10 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  ject.</p>..<p>If
26f20 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 75 73 65   you want to use
26f30 20 61 20 6b 65 79 77 6f 72 64 20 61 73 20 61 20   a keyword as a 
26f40 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20 74  name, you need t
26f50 6f 20 71 75 6f 74 65 20 69 74 2e 20 20 54 68 65  o quote it.  The
26f60 72 65 0a 61 72 65 20 66 6f 75 72 20 77 61 79 73  re.are four ways
26f70 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65 79 77   of quoting keyw
26f80 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65 3a 3c  ords in SQLite:<
26f90 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71  /p>..<p>.<blockq
26fa0 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74  uote>.<table>.<t
26fb0 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
26fc0 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27  op"><b>'keyword'
26fd0 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </b></td><td wid
26fe0 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c  th="20"></td>..<
26ff0 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e  td>^A keyword in
27000 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69   single quotes i
27010 73 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  s a string liter
27020 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c  al.</td></tr>..<
27030 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
27040 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64  top"><b>"keyword
27050 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f  "</b></td><td></
27060 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77  td>..<td>^A keyw
27070 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75  ord in double-qu
27080 6f 74 65 73 20 69 73 20 61 6e 20 69 64 65 6e 74  otes is an ident
27090 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  ifier.</td></tr>
270a0 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
270b0 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b  n="top"><b>&#91;
270c0 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e  keyword&#93;</b>
270d0 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09  </td><td></td>..
270e0 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65  <td>^A keyword e
270f0 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71 75 61 72  nclosed in squar
27100 65 20 62 72 61 63 6b 65 74 73 20 69 73 20 0a 20  e brackets is . 
27110 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69         an identi
27120 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e  fier.  This is n
27130 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  ot standard SQL.
27140 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d    This quoting m
27150 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20  echanism.       
27160 20 69 73 20 75 73 65 64 20 62 79 20 4d 53 20 41   is used by MS A
27170 63 63 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65  ccess and SQL Se
27180 72 76 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c  rver and is incl
27190 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66  uded in SQLite f
271a0 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61  or.        compa
271b0 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f  tibility.</td></
271c0 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61  tr>..<tr>.<td va
271d0 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23  lign="top"><b>&#
271e0 39 36 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b 3c  96;keyword&#96;<
271f0 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
27200 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
27210 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72  d enclosed in gr
27220 61 76 65 20 61 63 63 65 6e 74 73 20 28 41 53 43  ave accents (ASC
27230 49 49 20 63 6f 64 65 20 39 36 29 20 69 73 20 0a  II code 96) is .
27240 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74          an ident
27250 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20  ifier.  This is 
27260 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
27270 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20  .  This quoting 
27280 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20  mechanism.      
27290 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 79 53    is used by MyS
272a0 51 4c 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64  QL and is includ
272b0 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72  ed in SQLite for
272c0 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69  .        compati
272d0 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72  bility.</td></tr
272e0 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  >.</table>.</blo
272f0 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c  ckquote>.</p>..<
27300 70 3e 46 6f 72 20 72 65 73 69 6c 69 65 6e 63 65  p>For resilience
27310 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64   when confronted
27320 20 77 69 74 68 20 68 69 73 74 6f 72 69 63 61 6c   with historical
27330 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c   SQL statements,
27340 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d   SQLite.will som
27350 65 74 69 6d 65 73 20 62 65 6e 64 20 74 68 65 20  etimes bend the 
27360 71 75 6f 74 69 6e 67 20 72 75 6c 65 73 20 61 62  quoting rules ab
27370 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c  ove:</p>..<ul>.<
27380 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77  li><p>^If a keyw
27390 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 0a 71 75  ord in single.qu
273a0 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 27 6b 65  otes (ex: <b>'ke
273b0 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27 67 6c  y'</b> or <b>'gl
273c0 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75 73 65 64  ob'</b>) is used
273d0 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68   in a context wh
273e0 65 72 65 0a 61 6e 20 69 64 65 6e 74 69 66 69 65  ere.an identifie
273f0 72 20 69 73 20 61 6c 6c 6f 77 65 64 20 62 75 74  r is allowed but
27400 20 77 68 65 72 65 20 61 20 73 74 72 69 6e 67 20   where a string 
27410 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f 74 20 61  literal is not a
27420 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a 74 68 65  llowed, then.the
27430 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73   token is unders
27440 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e 20 69 64  tood to be an id
27450 65 6e 74 69 66 69 65 72 20 69 6e 73 74 65 61 64  entifier instead
27460 20 6f 66 20 61 20 73 74 72 69 6e 67 20 6c 69 74   of a string lit
27470 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a  eral..</p></li>.
27480 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65  .<li><p>^If a ke
27490 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 0a  yword in double.
274a0 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 22  quotes (ex: <b>"
274b0 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22  key"</b> or <b>"
274c0 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73 20 75 73  glob"</b>) is us
274d0 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20  ed in a context 
274e0 77 68 65 72 65 0a 69 74 20 63 61 6e 6e 6f 74 20  where.it cannot 
274f0 62 65 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 61  be resolved to a
27500 6e 20 69 64 65 6e 74 69 66 69 65 72 20 62 75 74  n identifier but
27510 20 77 68 65 72 65 20 61 20 73 74 72 69 6e 67 20   where a string 
27520 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c 6c 6f 77  literal.is allow
27530 65 64 2c 20 74 68 65 6e 20 74 68 65 20 74 6f 6b  ed, then the tok
27540 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64  en is understood
27550 20 74 6f 20 62 65 20 61 20 73 74 72 69 6e 67 20   to be a string 
27560 6c 69 74 65 72 61 6c 20 69 6e 73 74 65 61 64 0a  literal instead.
27570 6f 66 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  of an identifier
27580 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e  .</p></li>.</ul>
27590 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d 65 72 73  ..<p>Programmers
275a0 20 61 72 65 20 63 61 75 74 69 6f 6e 65 64 20 6e   are cautioned n
275b0 6f 74 20 74 6f 20 75 73 65 20 74 68 65 20 74 77  ot to use the tw
275c0 6f 20 65 78 63 65 70 74 69 6f 6e 73 20 64 65 73  o exceptions des
275d0 63 72 69 62 65 64 20 69 6e 0a 74 68 65 20 70 72  cribed in.the pr
275e0 65 76 69 6f 75 73 20 62 75 6c 6c 65 74 73 2e 20  evious bullets. 
275f0 20 57 65 20 65 6d 70 68 61 73 69 7a 65 20 74 68   We emphasize th
27600 61 74 20 74 68 65 79 20 65 78 69 73 74 20 6f 6e  at they exist on
27610 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c 64 0a 61  ly so that old.a
27620 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64 20 53 51  nd ill-formed SQ
27630 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 6c  L statements wil
27640 6c 20 72 75 6e 20 63 6f 72 72 65 63 74 6c 79 2e  l run correctly.
27650 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
27660 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68  s of.SQLite migh
27670 74 20 63 68 61 6e 67 65 20 74 6f 20 72 61 69 73  t change to rais
27680 65 20 65 72 72 6f 72 73 20 69 6e 73 74 65 61 64  e errors instead
27690 20 6f 66 20 61 63 63 65 70 74 69 6e 67 20 74 68   of accepting th
276a0 65 20 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74  e malformed.stat
276b0 65 6d 65 6e 74 73 20 63 6f 76 65 72 65 64 20 62  ements covered b
276c0 79 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73  y the exceptions
276d0 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e   above.</p>..<p>
276e0 0a 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77  .SQLite adds new
276f0 20 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74   keywords from t
27700 69 6d 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e  ime to time when
27710 20 69 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77   it takes on new
27720 20 66 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f   features..So to
27730 20 70 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f   prevent your co
27740 64 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72  de from being br
27750 6f 6b 65 6e 20 62 79 20 66 75 74 75 72 65 20 65  oken by future e
27760 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75  nhancements, you
27770 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79   should.normally
27780 20 71 75 6f 74 65 20 61 6e 79 20 69 64 65 6e 74   quote any ident
27790 69 66 69 65 72 20 74 68 61 74 20 69 73 20 61 6e  ifier that is an
277a0 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   English languag
277b0 65 20 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a  e word, even if.
277c0 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  you do not have 
277d0 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68  to..</p>..<p>.Th
277e0 65 20 6c 69 73 74 20 62 65 6c 6f 77 20 73 68 6f  e list below sho
277f0 77 73 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20  ws all possible 
27800 6b 65 79 77 6f 72 64 73 20 75 73 65 64 20 62 79  keywords used by
27810 20 61 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53 51   any build of.SQ
27820 4c 69 74 65 20 72 65 67 61 72 64 6c 65 73 73 20  Lite regardless 
27830 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  of [compile-time
27840 20 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73   options].  .Mos
27850 74 20 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e  t reasonable con
27860 66 69 67 75 72 61 74 69 6f 6e 73 20 75 73 65 20  figurations use 
27870 6d 6f 73 74 20 6f 72 20 61 6c 6c 20 6f 66 20 74  most or all of t
27880 68 65 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62  hese keywords,.b
27890 75 74 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73  ut some keywords
278a0 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20   may be omitted 
278b0 77 68 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67  when SQL languag
278c0 65 20 66 65 61 74 75 72 65 73 20 61 72 65 0a 64  e features are.d
278d0 69 73 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72  isabled..^(Regar
278e0 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d  dless of the com
278f0 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67  pile-time config
27900 75 72 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65  uration, any ide
27910 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73 20  ntifier that is 
27920 6e 6f 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f  not on.the follo
27930 77 69 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74  wing <tcl>hd_put
27940 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77  s [llength $keyw
27950 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20  ord_list]</tcl> 
27960 65 6c 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20  element.list is 
27970 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f  not a keyword to
27980 20 74 68 65 20 53 51 4c 20 70 61 72 73 65 72 20   the SQL parser 
27990 69 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a  in SQLite:.</p>.
279a0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
279b0 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
279c0 22 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  "><tr>.<td align
279d0 3d 22 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22  ="left" valign="
279e0 74 6f 70 22 20 77 69 64 74 68 3d 22 32 30 25 22  top" width="20%"
279f0 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c  >.<tcl>.set n [l
27a00 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f  length $keyword_
27a10 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35  list].set nCol 5
27a20 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20  .set nRow [expr 
27a30 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e  {($n+$nCol-1)/$n
27a40 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f  Col}].set i 0.fo
27a50 72 65 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77  reach word $keyw
27a60 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20  ord_list {.  if 
27a70 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20  {$i==$nRow} {.  
27a80 20 20 68 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e    hd_puts "</td>
27a90 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
27aa0 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c  \" align=\"left\
27ab0 22 20 77 69 64 74 68 3d 5c 22 32 30 25 5c 22 3e  " width=\"20%\">
27ac0 22 0a 20 20 20 20 73 65 74 20 69 20 31 0a 20 20  ".    set i 1.  
27ad0 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e 63  } else {.    inc
27ae0 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74  r i.  }.  hd_put
27af0 73 20 22 24 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a  s "$word<br>\n".
27b00 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f  }.</tcl>.</td></
27b10 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f  tr></table></blo
27b20 63 6b 71 75 6f 74 65 3e 29 5e 0a                 ckquote>)^.